设计表的依据。按照这个三范式设计的表不会出现数据冗余。
数据库设计三范式是理论上的。
实践和理论有的时候有偏差。
最终的目的都是为了满足客户的需求,有的时候会拿冗余换执行速度。
因为在sql当中,表和表之间连接次数越多,效率越低。 (笛卡尔积)
有的时候可能会存在冗余,但是为了减少表的连接次数,这样做也是合理的,
并且对于开发人员来说,sq1语句的编写难度也会降低。
面试的时候把这句话说上: 他就不会认为你是初级程序员了!
- 第一范式:(最核心,最重要)
任何一张表都应该有主键,并且每一个字段原子性不可再分。
- 第二范式:
建立在第一范式的基础之上,
所有非主键字段完全依赖主键,不能产生部分依赖。
背口诀:
多对多怎么设计?
多对多,三张表,关系表--->两个外键!!!!
- 第三范式:
建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
背口诀:
一对多,两张表,多的表--->加外键!!!
- 总结表的设计?
一对多:
一对多,两张表,多的表加外键!!!!
多对多:
多对多,三张表,关系表两个外键!!!!
一对一:
一对一,外键唯一!!!!
问题:
一对一放到一张表中不就行了吗? 为啥还要拆分表?
在实际的开发中,可能存在一张表字段太多,太庞大。
这个时候要拆分表!
一对一设计有两种方案:
主键共享(不常用了):
外键唯一: