部分函数依赖(partial functional dependency)是一个数学用语。在
关系模式R(U)中,如果X→Y,并且存在X的一个真子集X0,使得X0→Y,则称Y对X部分函数依赖。
设有
关系模式R(U),U是属性集,X和Y是U的
子集,如果X→Y是一个
函数依赖,且对X的任何一个
真子集X'都不存在X'→Y,则称X→Y是一个
完全函数依赖(Full Functional Dependency),即Y完全函数依赖于X。记为
例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)是完全函数依赖,不存在着部分函数依赖。
设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值呢?这显然是不可靠的,因为当前每人只选一门课这一事实并不限定他只能选一门课,只有当制度规定每人只能选一门课时,上述论断才真正构成一个数据依赖。