MySQL笔记九:数据库三范式

第一范式:要求任何 一张表必须有主键,每一个字段原子性不可再分
第二范式:在第一范式的基础上,要求所有非主键字段完全依赖主键,不要产生部分依赖
第三范式:在第二范式的基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
 
9.1第一范式
最核心最重要,所有的表的设计都要满足
原子性不可再分:比如联系方式(包括邮箱+电话)就是原子性可分的,把它拆成两个字段才是原子性不可分
 
9.2第二范式
学生编号+老师编号(pk)   学生姓名    老师姓名
1001            001                    张三            王老师
1002            002                    李四            赵老师
1003           001                      王五            王老师
1003            002                      王五            赵老师
满足第一范式,但是不满足第二范式,因为多对多关系中字段之间有部分依赖,数据冗余了,那么怎么修改才能满足第二范式?
技巧:多对多,三张表、关系表两外键
将一张表拆分成三张表:学生表、老师表、学生老师关系表
学生老师关系表
id(pk)        学生编号        老师编号
1                1001                001
2                1002                002
3                1003                001
4                1003                002
 
9.3第三范式
一对多关系满足第一范式和第二范式,但不满足第三范式
技巧:一对多,两张表,关系表加外键
 
9.4数据库设计总结
一对多:两张表,关系表加外键
多对多:三张表,关系表两外键
一对一:实际开发中,一张表的字段太多,这个时候需要拆分表
技巧:一对一,外键唯一
设计表格的最终目的都是为了满足客户需求,有时会拿冗余换速度,这是因为表之间的连接越多,效率越低(笛卡尔积现象),因此有时候表格数据存在冗余,但是为了提升效率,一定的冗余也是合理的
posted @ 2022-04-10 15:39  盛夏小叮当  阅读(69)  评论(0)    收藏  举报