日期:2014-05-16  浏览次数:20675 次

复习要点-函数依赖

函数依赖的定义
设有关系模式R(U),X和Y是属性集U的子集,函数依赖是形为X->Y的一个命题,只要r是R得当前关系,对r中任意两个元组t和s,都有t[X]=s[X]蕴含t[Y]=s[Y],那么称FD X->Y在关系模式R(U)中成立。
理解 - 首先,函数依赖是定义在关系模式R(U)上的,相当于R(U)是范围,在R(U)上成立的函数依赖,不一定在R(V)上成立。其次,函数依赖相当于数学中的函数的概念,即Y是X的函数,回顾数学中函数的概念为:设在某变化过程中有两个变量x、y,如果对于x在某一范围内的每一个确定的值,y都有唯一确定的值与它对应,那么就称y是x的函数,x叫做自变量。在数学中使用Y=Y(X),而在数据库中使用X->Y表示。
这个概念表示对于同一个X,不可以有两个Y与其对应,其实在XOY坐标上理解就是任意画一条垂直于X轴的竖线(与Y平行),于Y=Y(X)的图像只能有一个焦点。而对于不同的X,Y可以相同,就是于X轴平行的线与函数相交可以有任意多个焦点。

FD的逻辑蕴含(函数依赖的逻辑蕴含
设F是关系模式R上成立的函数依赖的集合,X->Y是一个函数依赖。如果对于R的每个满足F的关系r也满足X->Y,那么称F逻辑蕴含X->Y,记为F|=X->Y。
理解 - 这个概念需要体会和理解,并不是死记硬背。首先理解清楚定义,F是FD得集合,即一堆V->W的集合,定义范围也是关系模式R,任意满足F的r都满足X->Y,则F逻辑蕴含X->Y,实质上就是说F隐含了这个X->Y的关系,X->Y已经包含在F设定的决定关系中了。那么随即引申出下一个概念 - 函数依赖集F的闭包

函数依赖集F的闭包
设F是函数依赖集,被F逻辑蕴含的函数依赖全体构成的集合,成为函数依赖集F的闭包,记为F+。即F+ = {X->Y|F|=X->Y}
理解 - 首先要注意,闭包F+是函数依赖关系的集合,其次,闭包这个概念同样在Javascript中存在,其实从字面上可以理解为兜兜转转都在这个范围内,出不去,闭包就像是说,所有的东西都在里面的,你在推导出来的结果还是在这个范围中。

FD的推理规则
A1 自反性 若Y?X?U,则X->Y在R上成立
A2 增广性 若X->Y在R上成立,且Z?U,则XZ->YZ在R上成立
A3 传递性 若X->Y和Y->Z在R上成立,则X->Z在R上成立
A4 合并性 {X->Y, X->Z} |= X->YZ
A5 分解性 {X->Y, Z?Y} |= X->Z
A6 伪传递性 {X->Y, WY->Z} |= WX->Z
A7 复合性 {X->Y, W->Z} |= XW->YZ
A8 通用一致性定理 {X->Y, W->Z} |= X∪(W-Y)->YZ
根据A4+A5推出:
如果A1……An是关系模式R的属性集,那么X->A1……An成立的充分必要条件是X->Ai(i=1,...,n)
理解 - 其中A1 - A3相当好理解,而A4 - A8都可以从A1 - A3推导出,书中未给出A5 - A8的证明,为了加强复习,这里就给出A5 - A8的证明。
证明A5:
任何R中的关系r,对于X->Y,即任意t和s为r的元组,若t[X]=s[X],则t[Y]=s[Y],因为Z?Y,即t[Z]=s[Z],得证。
证明A6:
X->Y, WY->Z,由A2=> XW->WY,再由A3=> XW->Z
证明A7:
任何R中的关系r,对于X->Y, W->Z,即任意t和s为r的元组,有:
若t[X]=s[X],则t[Y]=s[Y]
若t[W]=s[W],则t[Z]=s[Z]
那么t[XW]=s[XW],有t[YZ]=s[YZ],得证。
证明A8:
而X∪(W-Y)?XW,所以根据A7即得证A8。

平凡的FD
对于FD X->Y,如果Y?X,那么称X->Y是一个“平凡的FD”,否则成为“非平凡的FD”
理解 - 对于一个属性集X的子集Y,都有X->Y,放哪都玩得转,所以我们关心的是非平凡的FD

FD和关键码的关系
设关系模式R的属性集是U,X是U得一个子集。如果X->U在R上成立,那么称X是R得一个超键。如果X->U在R上成立,但对于X的任一真子集X1都有X1->U不成立,那么称X是R上得一个候选键。
理解 - 这里再次复习超键和候选键之前的定义:
超键:在关系中能唯一标识元组的属性或属性集成为关系模式的超键。
候选键:不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了。
看到这里,大家应该明白了,其实函数依赖就是关键码概念的推广,它可以使用命题的方式给出超键,候选键的定义,比起前几章节对超键和候选键的描述性定义更为准确。

属性集的闭包
设F是属性集U上的FD集,X是U的子集,那么(相对于F)属性集X的闭包用X+表示,它是一个从F集使用FD推理规则推出的所有满足X->A的属性A的集合:
X+={属性A|F |= X->A}
理解 - 不要和之前的F+概念混淆起来,两个根本不是一个等量级或者说具有可比性的概念,首先F+是函数依赖关系的集合,F+中的每个元素是X->Y形式的,而X+是属性的集合,X+中的每个元素是属性A,这个属性A使得F 逻辑蕴含 X->A,其次在定义F+时必须要说明范围即R(U),而在定义X+时,范围即是F,表示在函数依赖集F上的U的子集X。以下一条定理帮助求属性集闭包。

X->Y能用FD推到规则推出的充分必要条件是Y?X+
求属性集闭包X+的算法
1、首先初始化X+就等于X
2、F中找出每个FD,例如Y->Z,如果Y?X+,那么将Z并入X+,即X+:=X+∪Z
这是因为Y?X+根据上述充分必要条件可以知道X->Y,又Y->Z,由A3,X->Z,也就是说Z也函数依赖X,那么Z必然属于X+这个闭包
3、循环执行步骤2,直至没有新的属性加入到X+
- 理解求属性集X的闭包X+就是,从已知的BB函数依赖AA的一堆关系FD中,找出所有X能决定的属性A的集合。

FD推理规则的完备性
FD推理规则A1, A2, A3是完备的。
理解 - 本定理的证明只需要理解即可,没必要多深究,要知道完备性的意义,完备性保证了可以推出的所有被蕴含的FD,而正确性保证了推出的所有FD是正确的。

FD集的等价
如果关系模式R(U)上得两个函数依赖集F和G,有F+=G+,则称F和G是等价的函数依赖集。
理解 - F和G等价,意味着F中的每个FD都可以从G推导而来,反之亦然。函数依赖集F中的FD很多,应该从中去掉平凡的FD,冗余的FD,FD中冗余的属性,以求得与F等价的最小依赖集G。

最小依赖集
如果函数依赖集G满足下列3个条件,则称G是最小依赖集:
1、G中的每个FD的右边都是单属性;
2、G中没有冗余的FD,即G中不存在这样的函数依赖X->Y,使得G-{X->Y}与G等价;
3、G中每个FD的左边没有冗余的属性,即G中不存在这样的函数依赖X->Y, X有真子集W使G-{X->Y}∪{W->Y}与G等价。
显然,每个函数依赖集至少存在一个等价的最小依赖集,但并不一定唯一。以下引申出求最小依赖集的算法

求最小依赖集算法
算法分成三步骤:
1、据推理规则的分解性A5,得到一个与F等价的FD集G,G中每个FD的右边均为单属性。
2、在G的每个FD中消除左边冗余的属性。
3、在G中消除冗余的FD。
以上步骤不可颠倒

?