最近在机房合作,由于要重新设计数据库需要再一次接触范式的知识,原来不是特别懂,现在有必要及时总结一下。
范式作用:
衡量关系模式的好坏,说白了就是评价关系模式的一个标准,尺子是用来衡量长度的,范式是用来衡量关系模式好坏的。
1NF
定义:关系模式R的每个关系r的属性值都是不可分的原子值(不能有多值属性或重复的列)。
实例简析:
上表不符合第一范式,因为出现了多值属性(学生、先修课都有多个值)
改写为1NF
2NF
定义:关系模式是1NF且每个非主属性完全函数依赖于候选键。
实例简析:
R(学号,教工号,成绩,工资)
其中学号、教工号为联合主键。
其中
学号,教工号—>成绩
学号,工资—>工资
但是
学号—>成绩
教工号—>工资
所以,定义中完全函数依赖于候选键不成立(只是局部依赖)即不符合第二范式。
改写为2NF
R1(学号,教工号,成绩)
R2(教工号,工资)
R1、R2均符合2NF
3NF
定义:关系模式是1NF且每个非主属性都不依赖于R的候选键。
实例简析:
R(学号, 姓名, 年龄, 学院, 学院地点,学院电话)
因为存在依赖传递:
学号 —> 学院 —> (学院地点, 学院电话)
所以不符合3NF
修改为3NF
R1:(学号, 姓名, 年龄, 学院);
R2:(学院, 地点, 电话)
学习是一个反复的过程,在反复中加深理解。