平凡依赖,非平凡依赖,完全依赖,部分依赖,传递依赖,直接依赖的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
平凡依赖,⾮平凡依赖,完全依赖,部分依赖,传递依赖,直接
依赖的区别
⼀. 函数依赖
定义:
设R(U)是属性集U上的关系模式,X,Y是U的⼦集。
若对于R(U)的任意⼀个可能的关系r,r不可能存在两个元组在X上的属性值相等,⽽在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X->Y。
若函数Y不函数依赖于X,则记作X-/->Y。
例如:
⼀个⾝份证号码可以确定⼀个⼈的姓名,不存在说⾝份证号相同,但是是不同的⼈的情况。
(可以做强制性规定⼀些条件使有的函数依赖成⽴。
⽐如规定不允许同名⼈出现,因⽽使姓名->年龄)
所谓函数依赖是指关系中⼀个或⼀组属性的值可以决定其它属性的值。
函数依赖就像⼀个函数y = f(x)⼀样,x的值给定后,y的值也就唯⼀地确定了。
⼆. 平凡依赖
定义:
若X->Y,且Y是X的⼦集(对任⼀关系模式,平凡函数依赖必然成⽴),就是平凡函数依赖。
例如:
在学⽣表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何⼀个,这就是平凡函数依赖.
直⽩点说,就是只要Y是X的⼦集,Y就依赖于X。
三. ⾮平凡依赖
定义:
若X->Y,但Y不是X的⼦集,就是⾮平凡函数依赖。
例如:
在学⽣表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学⽣所在的年级,但年级不是(学号,姓名)的⼦集,这是⾮平凡函数依赖.((学号,姓名)就是⼀个x,学号或者姓名就是⼀个x')。
四. 完全函数依赖
定义:
在R(U)中,如果X->Y。
并且对于X的任何⼀个真⼦集X‘,都有X'-/->Y,则称Y对X有完全函数依赖,记作X->Y(箭头上有个⼤写F)。
例如:
eg 1:在学⽣表(学号,姓名,年级)中,通过属性“学号”就可以推出“年级”,说明“年级”完全依赖于“学号”,这就是完全函数依赖。
eg 2:“⼀门课的成绩”对(学号,课程号)是完全函数依赖。
学号和课程号可以确定对应课程成绩,但是学号和课程号它们谁都不能单独确定成绩。
也就是说X内任意⼀个真⼦集(真⼦集不包含它本⾝),都不能唯⼀确定Y。
五. 部分函数依赖
定义:
若X->Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X->Y(箭头上有个⼤写P)。
例如:
eg 1:在学⽣表(学号,姓名,年级)中,(学号,姓名)虽然也可以推出年级,但是它的真⼦集姓名却推不出年级,这就是部分函数依赖,也叫不完全函数依赖。
eg 2:“院系”对(学号,课程号)是部分函数依赖。
课程号和学号⼀起可以确定院系,但学号是(学号,课程号)的真⼦集,并且学号单独可以确定院系。
六. 传递函数依赖
定义:
在R(U)中,如果X->Y(Y不是X的⼦集),Y-/->X,Y->Z,Z是Y的⼦集,则称Z对X传递函数依赖。
记为X->Z(箭头上是汉字 “传递”)
例如:
学号->院系,院系->院长名,学号->院长名。
直⽩点说就是X确定Y,Y不是X⼦集,Y能确定Z,Z不是Y⼦集,Y不能确定X。
七. 直接函数依赖
定义:
在R(U)中,如果X->Y,Y不是X的⼦集,Y->Z,Z是Y的⼦集,则称Z对X传递函数依赖。
记为X->Z(箭头上是汉字 “直接”)
直⽩点说就是X确定Y,Y不是X⼦集,Y能确定Z,Z不是Y⼦集。