数据库原理:通过例题弄懂函数依赖,并附带题目
本篇文章主要讲解函数依赖的基本概念,后面会有例题。函数依赖是我们了解范式、求解关系模式属于什么范式的关键,建议对于基本概念还不懂的人仔细看看,本篇可以和另一篇讲解范式的文章一起阅读,题目基本上大差不差。
这篇文章也不光是定义,还有我对于定义的理解,一般定义有其学术严谨性难以理解,而我自己的理解或许能够帮助到你能直观理解。
另一篇文章链接传送门:数据库原理:了解范式(1NF、2NF、3NF、BCNF),做例题快速弄懂_Allow-er的博客-CSDN博客
一、函数依赖的定义
定义:设R(U)是属性集U上的关系模式,X、Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作
理解:其实这个定义很简单,比如有一个关系模式S(Sno,Sdept,Sname),其中Sno代表学生学号,Sdept代表所在系,Sname代表名字。根据函数依赖的定义,我们就是得出:,
这么两个函数依赖,也就是学号可以确定学生所在系、学号还可以确定学生姓名。就这么简单,理解这个就行了。
二、平凡、非平凡函数依赖
2.1 非平凡的函数依赖
定义:,但
,则称
是非平凡的函数依赖。
理解:上面例子中的 ,
就是两个非平凡的函数依赖。因为Sdept和Sname都不是Sno的子集(Sno中不包含Sdept、Sname)。就是这么简单。一般来说不研究和考虑非平凡的函数依赖。
2.2 平凡的函数依赖
定义:,但
,则称
是平凡的函数依赖。
理解:非平凡和平凡的函数依赖就在于Y是不是X的子集。所以之前的两个函数依赖都不是平凡的函数依赖。只要记住平凡、非平凡函数依赖中的一个即可,另外一个自然就知道了。
三、完全、部分函数依赖
3.1 完全函数依赖
定义:在R(U)中,如果 , 并且对于X的任何一个真子集X',都有 X' --/--> Y , 则称Y对X完全函数依赖。记作:
上面的X'--/-->Y是X'不能推出Y,也就是Y不函数依赖于X'的意思。
理解:完全和部分函数依赖区别的关键在于是否有 ,这里将举一个例子来理解区分完全和部分函数依赖,例子在部分函数依赖理解。
3.2 部分函数依赖
定义:若 ,但Y不完全函数依赖于X,则称Y对X的部分函数依赖。记作:
理解:假设有关系模式S(Sno,Cno,Sdept),其中Sno代表学号,Cno代表课程号,Sdept代表学生所在系。能够得到函数依赖:,
。
其中Sno是集合(Sno,Cno)的子集,有 , 所以函数依赖
是部分函数依赖。可表示为
。
四、传递、直接函数依赖
4.1 传递函数依赖
定义:在R(U)中,如果 (
) , Y--/-->X ,
,
则称Z对X传递函数依赖。
理解:故名思意就是有传递的意思,就是如果有a-->b、b-->c,则能够推出a-->c,这里还必须b-/->a也就是b不能反推出a,否则就属于直接函数依赖了。
4.2 直接函数依赖
定义:在传递函数依赖的定义上如果 ,则称为Z对X的直接函数依赖,而不是传递依赖了。
理解:如果a-->b,b-->c,则a-->c,不再被其他条件约束了,可以有b-->a。
五、例题
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 |
5.2 解析
第一题:
候选码:Sno
函数依赖:
传递依赖:--传递-->
结果:有传递依赖,无部分依赖。
第二题:
候选码:(Sno,Cno)
函数依赖:
传递依赖: --传递-->
部分依赖:--部分-->
结果: 有传递依赖,有部分依赖。
第三题:
候选码:(PID,Ename)、(PID,Salary)
函数依赖:
部分依赖: --部分-->
结果: 无传递依赖,有部分依赖。
六、总结
这几个题目可以和另一篇判断范式的文章一起学习,建议一起看看,题目改为求解范式级别,一起弄懂函数依赖和范式事半功倍。
如果有疑问或者错误欢迎在评论区指正,希望能够点赞收藏给我一点鼓励。
更多推荐
所有评论(0)