如果你基本定义都理解了,建议直接跳到例题部分。
本篇讲的是范式及例题,如果函数依赖还不知道,请移步至另外一篇讲函数依赖的博客:
数据库原理:通过例题弄懂函数依赖,并附带题目_Allow-er的博客-CSDN博客
一、定义
1、第一范式(1NF)
定义:有关系模式满足以下条件:“每一个分量必须是不可分的数据项”的即为第一范式(1NF)。
ps:基本上所有的关系模式都属于第一范式(1NF),因为第一范式的级别比较低。
2、第二范式(2NF)
定义:若 ,且每一个 非主属性 完全函数依赖 于 任何 一个候选码,则。
PS:如果题目中我们得到某个关系模式不含有非主属性,那么这个关系模式必定属于2NF。
3、第三范式(3NF)
定义:设关系模式 \in 1NF”> ,若R中不存在这样的码X,属性组Y及非主属性Z()使得 , 成立,且Y-/->X,则称 \in 3NF”>
定义看不懂,那就看下面的就明白了:
(1)由定义可以证明:若 ,则每一个非主属性既不传递依赖于码,也不部分依赖于码。
(2)如果R属于3NF,则必有R属于2NF。反之则不一定成立。
(3)PS:如果题目中我们得到某个关系模式不含有非主属性,那么这个关系模式必定属于3NF。
4、BC范式(BCNF)
一般认为BCNF是修正的第三范式,有时也称为扩展的第三范式。
定义:
关系模式 \in 1NF”> ,若 且 时X必含有码,则\in BCNF”>
由定义还可以得到:
结论:
- 所有非主属性对每一个码都是完全函数依赖。
- 所有主属性对每一个不包含它的码也是完全函数依赖。
- 没有任何属性完全函数依赖于非码的任何一组属性。
看不懂可以这样理解:
要属于BCNF,则每一个函数依赖关系的决定性因素(也就是箭头–>左边的集合)必须含有码。
还不理解通过一个例题来明白:
例:关系模式SJP(S,J,P),其中S代表学生,J代表课程,P代表名次,此关系模式是不是属于BC范式?
解:
候选码:(S,J),(J,P)
函数依赖:,
因为每一个学生选的每一门课程决定他在这门课的名次;每一门课的每一个名次都对应着一个学生(假设没有并列)。
结果:这两个码的属性是相交的,这个关系模式中没有非主属性,在这个题目中(S,J)、(J,P)都是候选码,所以不存在非主属性,所以属于3NF;并且所有的“ 且 时,X中都含有码”,也就是因为所有函数依赖箭头左边的集合X中都含有码。在这个题目中(S,J)、(J,P)都是候选码,都在箭头左边,所以属于BCNF。
5、范式之间的关系
包含关系:
如图:
规范化:一个低一级范式的关系模式通过分解可以转换为若干个高一级范式的关系模式的集合的过程
结论:属于高一级范式一定属于低一级的范式,反之则不一定。
二、例题
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
函数依赖:
–传递–>
结果:属于2NF ,因为非主属性Area传递依赖于Sno,所以不满足3NF。而所有非主属性都完全函数依赖于候选码Sno,所以属于2NF。
第二题:
候选码:(Sno,Cno)
函数依赖:
学号和课程号共同决定某一个学生在某一门课上的成绩,以及他的任课老师是谁。
某一个任课老师只属于某一个系。
某一门课程属于某一个系开设的。
结果:属于1NF,因为非主属性Tsdept可以由候选码(Sno,Cno)决定,也可以由Cno单独决定,也就是说Tsdept对Cno是部分函数依赖,而属于第二范式的要求是所有非主属性要完全函数依赖于候选码。所以不属于2NF。
第三题:
候选码:(PID,Ename)、(PID,Salary)
函数依赖:
结果:属于3NF。因为没有非主属性,就不存在第三范式定义要求的非主属性既不传递依赖于码,又不部分依赖于码,所以属于3NF。而因为 ,并且Ename并不是码也不包含码,不满足BC范式要求的任何且时X必含有码,所以不属于BCNF。
三、总结
另外一些易错复杂一点的判断范式进阶题:
数据库原理:易错的函数依赖与求解范式的例题,进一步巩固。_小许要加油啊~的博客-CSDN博客
总的来说,只要理解了范式的定义,做题就简单了,当然初学的时候看定义都是云里雾里不知所云,因为定义是有学术严谨性的,自然不会那么直观,而这就需要我们理解并转化为自己的理解了。例题可以加深我们对于定义的理解,建议多去做题,看了上面三个例题应该能够大概知道怎么做了。
由于本人的自身局限性,如果有错误或者不足之处,欢迎指正!也可以在评论区把自己的疑问打出来讨论,如果觉得有帮助,还请多点个赞、收藏一下,给我一点鼓励和动力,我会有继续更新下去的动力的,谢谢!希望对你有帮助!
今天的文章
数据库的2nf范式是否存在传递依赖_数据库把R分解3NF步骤分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80840.html