加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数据库原理:了解范式(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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有