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的基础上所有的属性都满足无传递即可,函数传递上面已经介绍)

经验分享 程序员 微信小程序 职场和发展