数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间联系和约束的抽象,是数据内在的性质,是语义的体现。
函数依赖则是一种最重要、最基本的数据依赖。
1.函数依赖
【定义7.4】设R(U)是属性集U上的关系模式,X、Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作;X→Y。
・ 如果X→Y,但Y¢X,则称X→Y是非平凡的函数依赖。一般情况下总是讨论非平凡的函数依赖。
・ 如果X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。
注意:函数依赖X→Y的定义要求关系模式R的任何可能的r都满足上述条件。因此不能仅考察关系模式R在某一时刻的关系r,就断定某函数依赖成立。
例如,关系模式Student(Sno,Suame,SD,Sage,Sex)nJ能在某一时刻,Student的关系r中每个
学生的年龄都不同,也就是说没有两个元组在Sage属性上取值相同,而在Sno属性上取值不同,但我们决不可据此就断定SagerSno。很有可能在某一时刻,Student的关系r中有两个元组在Sage属性上取值相同,而在Sno属性上取值不同。
函数依赖是语义范畴的概念,只能根据语义来确定函数依赖。例如,在没有同名的情况下,Sname→Sage。而在允许同名的情况下,函数依赖就不成立。
【定义7.5】在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X'不能决定Y,则称Y对X完全函数依赖,记作:X→Y。如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作:X→Y,部分函数依赖也称局部函数依赖。
【定义7.6】在R(U,F)中,如果X→Y, Y¢X,Y-X, Y→Z,则称Z对X传递依赖。
2.码
【定义7.7】设K为R(U,F)中的属性的组合,若K—U,且对于K的任何一个真子集K',
都有K,不能决定U,则K为R的候选码(Candidatakey),若有多个候选码,则选一个作为
主码(Piimary key)。
注意:候选码通常也可以称为候选关键字,主码通常也可以称为主关键字或主键。包含在
任何一个候选码中的属性叫作主属性(Prime attribute),否则叫作非主属性(Nonprime attribute)
或非码属性(Non.key attribute)。最简单的情况,关系的单个属性是码;最极端的情况,若关
系的所有属性为码,则称该码为全码(AU-key)。
例如,关系模式CSZ(CITY,ST3ZIP),其属性组上的函数依赖集为:
F= {(CnyST) 一 ZIP,ZIP 一 CITY}
即城市、街道决定邮政编码,邮政编码决定城市。不难看出,(CITY,ST)和(ST,ZIP)都为候选
码,因为它们可以决定关系模式CSZ的全属性,且属性CITY、ST、ZIP都是主属性。
【定义7.8】若R(U)中的属性或属性组X非R的码,但X是另一个关系的码,则称X是R
的外码(Foreignkey)或称外键。
注意:主码与外码提供了关系间联系的方法。例如,在员工(员工号,姓名,部门号,职位, 联系方式)中,部门号不是码,但部门号是关系部门(部门号,部门名,负责人)的码,则部门
号是关系员工的外码。若查询某员工属于哪个部门的部门名,则可通过关系员工的外码“部门号"
建立与关系部门的联系,找到该员工所属的部门名。
3.多值依赖
【定义7.9】若关系模式R(U)中,X、Y、Z是U的子集,并且Z=U-X-YO当且仅当对
R(U)的任何一个关系r,给定一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无
关,则称“Y多值依赖于X”或“X多值决定Y”成立。记为:X—一丫。
多值依赖具有如下6条性质:
・ 多值依赖具有对称性。即若X一一Y,则X—一Z,其中Z=U-X-YO
• 多值依赖的传递性。即若X一一Y, 则X一一Z-Y。
・函数依赖可以看成是多值依赖的特殊情况。
・ 若 X—Y, X一一Z,则 X——YZ。
・ 若 X—Y, X—^Z,则 XT->YAZ。
・ 若 X—Y, X一一Z,则 X—Z—Y。