数据库之函数依赖、多值依赖

一、函数依赖(Functional Dependency)的概念

函数依赖是数据依赖的一种,它反映属性或属性组之间依存,互相制约的关系,即反应现实世界的约束关系。

设R(U)是属性U上的一个关系模式,X和Y均为U={A1 , A2 , . . . ,An}的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[Y],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。

简单来说,就是一个属性可以唯一决定另一个属性。

例:

(学生:Sno学号,Sname姓名,Sdept系别)

1、Sno->Sname,学号可以决定一个姓名。学号函数决定姓名
2、Sname->Sdept,姓名可能会重复。姓名不能函数决定系别

下面是自己总结的四种依赖关系:

数据库之函数依赖、多值依赖

二、多值依赖(Functional Dependency)的概念

        设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。

        若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

平凡多值依赖就是,属性集合中分为两个真子集,每一个X对应一组Y的取值

        可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

多值依赖的性质:

若 X->->Y , 则 X->->Z  多值依赖对称性

若X->Y.则X->->Y   说明函数依赖是多值依赖的特殊情况,当X->Y的时候,对于每一个X都有一个Y与之对应,那么对于每一对X,Z都有一组Y与之对应

设属性值之间有包含关系 XY包含于W包含于U 那么如果R(U)上有X->->Y,那么在R(W)上一世成立的

若X->->Y 在R(U)上成立,且Y’ 包含于Y,不能断言 X->->Y’在R(U)上成立(注意和上一条性质不同) (因为多值依赖中的定义中涉及了U中除了X,Y之外的其余属性Z,因此换成Y’后就需要涉及Z’ = U-X-Y’ 比之前确定X->->Y的时候属性列多,就不一定了)