4、数据库设计三范式
4.1、数据库设计范式
4.2、数据库设计范式
3个
第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分
第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
第三范式:建立在第二范式的基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
声明:三范式是面试官常问
设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,空间的浪费
4.3、第一范式
最核心,最重要的范式,所有表的设计都需要满足
必须有主键,每一个字段原子性不可再分
不满足第一范式,第一:没有主键。第二:联系方式可以分为邮箱地址和电话
4.4、第二范式
建立在第一范式的基础之上
要求所有非主键字段完全依赖主键,不要产生部分依赖。
不满足第一范式
学生编号 教师编号,两个字段联合做主键,复合主键(PK:学生编号+教师编号)
经过修改后满足第一范式,不满足第二范式,张三依赖1001,王老师依赖001,是部分依赖
产生部分依赖的缺点:数据冗余,空间浪费
为了让以上表满足第二范式,需要这样设计:
使用三张表表示多对多关系!!
学生表
学生编号(pk) 学生名字
-----------------------------------------------------------------------
1001 张三
1002 李四
1003 王五
教师表
教师编号(pk) 教师姓名
---------------------------------------------------------------------
001 王老师
002 赵老师
学生教师关系表
id(pk) 学生编号(fk) 教师编号(fk)
------------------------------------------------------------------------------------------------------
1 1001 001
2 1002 002
3 1003 001
4 1001 002
背口诀:多对多,三张表,关系表两个外键(重要)
4.5、第三范式
建立在第二范式的基础上
要求所有非主键字段直接依赖主键,不要产生传递依赖
一对多关系一个教室多个学生
满足第一范式:有主键
满足第二范式:因为主键不是复合主键,没有产生部分依赖。主键是单一主键
一年一班依赖01 01依赖1001 产生了传递依赖
不符合第三范式要求:产生数据冗余
背口诀:一对多,两张表,多的表加外键!!!