版权归原作者所有,如有侵权,请联系我们

[科普中国]-部分函数依赖

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

定义

设有关系模式R(U),U是属性集,X和Y是U的子集,如果X→Y是一个函数依赖,且对X的任何一个真子集X'都不存在X'→Y,则称X→Y是一个完全函数依赖(Full Functional Dependency),即Y完全函数依赖于X。记为

反之,如果X'→Y成立,则称X→Y是部分函数依赖(Partial Functional Dependency),即Y部分函数依赖于X。记为2

图解表示部分函数依赖可以用图1示意:属性集A由属性 构成(要求至少两个属性),表示为 ;如果 ,且在A中的一个属性 ,那么,

例题分析例1 在关系模式Student中,因为Sno不能函数决定Grade,Cno也不能函数决定Grade,但(Sno,Cno)可以唯一地函数决定Grade,所以(Sno,Cno)→Grade是完全函数依赖。因为Sno可以函数决定Sage,所以(Sno,Cno)→Sage是部分函数依赖。

从定义可知,只有当函数依赖的决定方是组合属性时,讨论部分函数依赖才有意义,当函数依赖的决定方是单属性时,只能是完全函数依赖。

例2 在关系模式S(Sno,Sname,Sage,Sdept)中,函数依赖的决定方是Sno,是单属性,所以Sno→(Sname,Sage,Sdept)是完全函数依赖,不存在着部分函数依赖。2

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

一般只能根据语义来确定一个函数依赖。例如,姓名一年龄这个函数依赖只有在没有同名人的条件下成立,如果允许有相同名字,则年龄就不再函数依赖于姓名了。设计者也可以对现实世界作强制的规定。例如不允许同名人出现,因而使姓名→年龄函数依赖成立,若发现有同名人存在,则拒绝装入该元组,这在一般情况下是不合情理的。

注意,函数依赖不是指关系模式R的某个或某些关系满足的约束条件。而是指R的****一切关系均要满足的约束条件。例如,学生选课SC(SNO,CNO,GRADE)关系模式,假定在当前的记载中,每个学生都选了一门课程,我们能不能就此断言,SNO的属性值可以唯一地确定CNO值呢?这显然是不可靠的,因为当前每人只选一门课这一事实并不限定他只能选一门课,只有当制度规定每人只能选一门课时,上述论断才真正构成一个数据依赖。

记号和术语(1) ,但则称非平凡的函数依赖。若不特别声明总是讨论非平凡的函数依赖。

(2)若则记作

(3)若 不函数依赖于 ,则记作 。1