数据库原理:通过例题弄懂函数依赖,并附带题目

您所在的位置:网站首页 范式的基本概念 数据库原理:通过例题弄懂函数依赖,并附带题目

数据库原理:通过例题弄懂函数依赖,并附带题目

2024-01-13 21:17| 来源: 网络整理| 查看: 265

本篇文章主要讲解函数依赖的基本概念,后面会有例题。函数依赖是我们了解范式、求解关系模式属于什么范式的关键,建议对于基本概念还不懂的人仔细看看,本篇可以和另一篇讲解范式的文章一起阅读,题目基本上大差不差。

这篇文章也不光是定义,还有我对于定义的理解,一般定义有其学术严谨性难以理解,而我自己的理解或许能够帮助到你能直观理解。

另一篇文章链接传送门:数据库原理:了解范式(1NF、2NF、3NF、BCNF),做例题快速弄懂_Allow-er的博客-CSDN博客

一、函数依赖的定义

定义:设R(U)是属性集U上的关系模式,X、Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作 X\rightarrow Y

理解:其实这个定义很简单,比如有一个关系模式S(Sno,Sdept,Sname),其中Sno代表学生学号,Sdept代表所在系,Sname代表名字。根据函数依赖的定义,我们就是得出:Sno\rightarrow Sdept,Sno\rightarrow Sname 这么两个函数依赖,也就是学号可以确定学生所在系、学号还可以确定学生姓名。就这么简单,理解这个就行了。

二、平凡、非平凡函数依赖 2.1 非平凡的函数依赖

定义:X\rightarrow Y,但 Y\nsubseteq X,则称X\rightarrow Y 是非平凡的函数依赖。

理解:上面例子中的 Sno\rightarrow SdeptSno\rightarrow Sname 就是两个非平凡的函数依赖。因为Sdept和Sname都不是Sno的子集(Sno中不包含Sdept、Sname)。就是这么简单。一般来说不研究和考虑非平凡的函数依赖。

2.2 平凡的函数依赖

定义:X\rightarrow Y,但 Y\subseteq X,则称X\rightarrow Y 是平凡的函数依赖。

理解:非平凡和平凡的函数依赖就在于Y是不是X的子集。所以之前的两个函数依赖都不是平凡的函数依赖。只要记住平凡、非平凡函数依赖中的一个即可,另外一个自然就知道了。

三、完全、部分函数依赖 3.1 完全函数依赖

定义:在R(U)中,如果X\rightarrow Y , 并且对于X的任何一个真子集X',都有 X' --/--> Y , 则称Y对X完全函数依赖。记作:X\overset{F}{\rightarrow}Y

上面的X'--/-->Y是X'不能推出Y,也就是Y不函数依赖于X'的意思。

理解:完全和部分函数依赖区别的关键在于是否有X'\rightarrow Y ,这里将举一个例子来理解区分完全和部分函数依赖,例子在部分函数依赖理解。

3.2 部分函数依赖

定义:若 X\rightarrow Y ,但Y不完全函数依赖于X,则称Y对X的部分函数依赖。记作:X\overset{P}{\rightarrow}Y

 理解:假设有关系模式S(Sno,Cno,Sdept),其中Sno代表学号,Cno代表课程号,Sdept代表学生所在系。能够得到函数依赖:Sno\rightarrow SdeptSno,Cno\rightarrow Sdept 。

其中Sno是集合(Sno,Cno)的子集,有 Sno\rightarrow Sdept , 所以函数依赖 Sno,Cno\rightarrow Sdept 是部分函数依赖。可表示为Sno,Cno\overset{P}{\rightarrow}Sdept

四、传递、直接函数依赖 4.1 传递函数依赖

定义:在R(U)中,如果 X\rightarrow Y  ( Y\nsubseteq X ) , Y--/-->X , Y\rightarrow Z ,Z\nsubseteq Y 则称Z对X传递函数依赖。

理解:故名思意就是有传递的意思,就是如果有a-->b、b-->c,则能够推出a-->c,这里还必须b-/->a也就是b不能反推出a,否则就属于直接函数依赖了。

4.2 直接函数依赖

定义:在传递函数依赖的定义上如果 Y\rightarrow X,则称为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)

PIDEnameSalary100A胡一民2400100A张小华2100100B张小华2100200A胡一民2400200B胡一民2400200C李红卫1500200C张小华2100200D李红卫1500 5.2 解析 第一题:

 候选码:Sno

函数依赖:Sno\rightarrow Sname,Date,Sdept,Class

Sdept\rightarrow Area

Class\rightarrow Area

传递依赖:Sno--传递-->Area

结果:有传递依赖,无部分依赖。

第二题:

候选码:(Sno,Cno)

函数依赖:Sno,Cno\rightarrow Grade,Teacher

Teacher\rightarrow Tsdept

Cno\rightarrow Tsdept

传递依赖:Sno,Cno --传递--> Tsdept

部分依赖:Sno,Cno--部分-->Tsdept

结果: 有传递依赖,有部分依赖。

第三题:

候选码:(PID,Ename)、(PID,Salary)

函数依赖:PID,Ename\rightarrow Salary

PID,Salary\rightarrow Ename

Ename\rightarrow Salary

部分依赖:PID,Ename --部分--> Salary

结果: 无传递依赖,有部分依赖。

六、总结

这几个题目可以和另一篇判断范式的文章一起学习,建议一起看看,题目改为求解范式级别,一起弄懂函数依赖和范式事半功倍。

如果有疑问或者错误欢迎在评论区指正,希望能够点赞收藏给我一点鼓励。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3