总而言之
2NF
是要让非主属性对码那个属性组完全依赖
3NF
是不存在主属性X->Y,Y->非主属性Z
BCNF
是指不存在码的各个主属性间的部分依赖或传递依赖
1NF
所有的关系数据库都满足1范式
2NF
Y
函数依赖
于R的码X指的是,当R的码确定时,这个属性就确定。也就是说,不存在X相同而Y不同。
完全函数依赖:
若属性组X的任何一个真子集属性都无法唯一确定Y,则称Y完全依赖于X.
部分函数依赖:
若Y函数依赖于X,且不完全依赖于X,则称部分依赖。
传递函数依赖:
若Z函数依赖于Y,且Y函数依赖于X(严格来说还有一个X不包含于X,且Y不函数依赖于Z的前提条件),那么就称Z传递依赖于X
码:
设K为某表中的一个属性或属性组,若除K以外的所有属性都完全函数依赖于K,那么称K为候选码
,简称码
主属性:
包含在任意一个码中的属性称为主属性
非主属性:
不包含在任何一个码中的属性称为非主属性
1.表3的码只有一个,就是(学号、课名)。
2.主属性有两个:学号 与 课名。
3.非主属性有四个:姓名、系名、系主任、分数
4.(学号,课表)->姓名,是部分函数依赖
(学号,课表)->系名,是部分函数依赖
(学号,课表)->系主任,是部分函数依赖
所以:不符合2NF
为了让其符合2NF,可以变成
选课(学号,课名,分数)
学生(学号,姓名,系名,系主任)
3NF
BCNF范式