1NF,2NF,3NF,BCNF范式(学习笔记)
前言:2NF必须在1NF的前提下,3NF必须在2NF的前提下,如果前提都不满足当然不是此阶级范式
1NF
只需要满足:在数据库表中每一个属性(列)都不可以再进行拆分(记住它就行)
例如 学生姓名就不可以再进行拆分(即是不能表中有表)
2NF
在满足1NF的前提下,每一个非主属性都完全依赖于任何一个候选码
完全依赖
Sno:学号
Sname:学生姓名
Cno:课程号
Grade:学生成绩
Sdept:系
Mname:系主任名
例如(Sno,Cno)->Grade
此时,必须由Sno和Cno共同出现,才能决定Grade
部分依赖:
例如(Sno,Cno)->Sdept
此时,Sno和Cno,任何一个都可以找到Sdept
候选码:
例如A->B,B->C则说明A是候选码,因为没有人可以决定A,所以他是候选码
例如(A,B)-C,C-A,则(A,B)和(C,B)都可以做为候选码,(C,B)是因为C可以决定A所以可以替换
总结:(无人能决定它的,他就是候选码,多的,则应该加在一起写)
3NF
在满足2NF的基础上,非主属性无传递函数依赖即可
函数传递:
例如Sno->Sdept,Sdept->Mname
则推出Sno->Mname
BCNF(在3NF的基础上所有的属性都满足无传递即可,函数传递上面已经介绍)