数据库原理:了解范式(1NF、2NF、3NF、BCNF)
(2023-05-27 10:12:46)
标签:
关系数据库 |
一、定义
1、第一范式(1NF)
定义:有关系模式满足以下条件:“每一个分量必须是不可分的数据项”的即为第一范式(1NF)。
ps:基本上所有的关系模式都属于第一范式(1NF),因为第一范式的级别比较低。
2、第二范式(2NF)
定义:若 R∈1NFR∈1NF,且每一个 非主属性 完全函数依赖 于 任何 一个候选码,则R∈2NFR∈2NF。
PS:如果题目中我们得到某个关系模式不含有非主属性,那么这个关系模式必定属于2NF。
3、第三范式(3NF)
定义:设关系模式 R∈1NFR∈1NF
,若R中不存在这样的码X,属性组Y及非主属性Z(ZYZY)使得 X→YX→Y , Y→ZY→Z 成立,且Y-/->X,则称
R∈3NFR∈3NF
定义看不懂,那就看下面的就明白了:
(1)由定义可以证明:若 R∈3NFR∈3NF ,则每一个非主属性既不传递依赖于码,也不部分依赖于码。
(2)如果R属于3NF,则必有R属于2NF。反之则不一定成立。
(3)PS:如果题目中我们得到某个关系模式不含有非主属性,那么这个关系模式必定属于3NF。
4、BC范式(BCNF)
一般认为BCNF是修正的第三范式,有时也称为扩展的第三范式。
定义:
关系模式 R∈1NFR∈1NF ,若X→YX→Y 且
YXYX时X必含有码,则R∈BCNFR∈BCNF
由定义还可以得到:
结论:
所有非主属性对每一个码都是完全函数依赖。
所有主属性对每一个不包含它的码也是完全函数依赖。
没有任何属性完全函数依赖于非码的任何一组属性。
看不懂可以这样理解:
要属于BCNF,则每一个函数依赖关系的决定性因素(也就是箭头-->左边的集合)必须含有码。
还不理解通过一个例题来明白:
例:关系模式SJP(S,J,P),其中S代表学生,J代表课程,P代表名次,此关系模式是不是属于BC范式?
解:
候选码:(S,J),(J,P)
函数依赖:(S,J)→P(S,J)→P,(J,P)→S(J,P)→S
因为每一个学生选的每一门课程决定他在这门课的名次;每一门课的每一个名次都对应着一个学生(假设没有并列)。
结果:这两个码的属性是相交的,这个关系模式中没有非主属性,在这个题目中(S,J)、(J,P)都是候选码,所以不存在非主属性,所以属于3NF;并且所有的“X→YX→Y
且
YXYX时,X中都含有码”,也就是因为所有函数依赖箭头左边的集合X中都含有码。在这个题目中(S,J)、(J,P)都是候选码,都在箭头左边,所以属于BCNF。
5、范式之间的关系
包含关系:5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
如图:
结论:属于高一级范式一定属于低一级的范式,反之则不一定。
二、例题
1、判断下列关系模式的范式级别
第一题:
学生(Sno、Sname、Date、Sdept、Class,Area)
其中:Sno代表学号,Sname代表姓名,Date代表出生日期,Sdept代表所在系,Class代表班号,Area代表宿舍区
第二题:
教学(Sno、Cno、Grade、Teacher、Tsdept)
其中:Grade代表成绩,Teacher代表老师,Tsdept代表老师所在系
第三题:
员工(PID、Ename、Salary)
PID Ename Salary
100A 胡一民 2400
100A 张小华 2100
100B 张小华 2100
200A 胡一民 2400
200B 胡一民 2400
200C 李红卫 1500
200C 张小华 2100
200D 李红卫 1500
2、解析:
第一题:
候选码:Sno
函数依赖:Sno→Sname,Date,Sdept,ClassSno→Sname,Date,Sdept,Class
Sdept→AreaSdept→Area
Class→AreaClass→Area
SnoSno--传递-->AreaArea
结果:属于2NF
,因为非主属性Area传递依赖于Sno,所以不满足3NF。而所有非主属性都完全函数依赖于候选码Sno,所以属于2NF。
第二题:
候选码:(Sno,Cno)
函数依赖:Sno,Cno→Grade,TeacherSno,Cno→Grade,Teacher
Teacher→TsdeptTeacher→Tsdept
Cno→TsdeptCno→Tsdept
学号和课程号共同决定某一个学生在某一门课上的成绩,以及他的任课老师是谁。
某一个任课老师只属于某一个系。
某一门课程属于某一个系开设的。
结果:属于1NF,因为非主属性Tsdept可以由候选码(Sno,Cno)决定,也可以由Cno单独决定,也就是说Tsdept对Cno是部分函数依赖,而属于第二范式的要求是所有非主属性要完全函数依赖于候选码。所以不属于2NF。
第三题:
候选码:(PID,Ename)、(PID,Salary)
函数依赖:PID,Ename→SalaryPID,Ename→Salary
PID,Salary→EnamePID,Salary→Ename
Ename→SalaryEname→Salary
结果:属于3NF。因为没有非主属性,就不存在第三范式定义要求的非主属性既不传递依赖于码,又不部分依赖于码,所以属于3NF。而因为
Ename→SalaryEname→Salary,并且Ename并不是码也不包含码,不满足BC范式要求的任何X→YX→Y且YXYX时X必含有码,所以不属于BCNF。
————————————————
版权声明:本文为CSDN博主「小许要加油啊~」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_56937141/article/details/127605892

加载中…