1、一、函数依赖的逻辑蕴涵定义:设有关系模式 R(U)及其函数依赖集 F,如果对于 R 的任一个满足 F 的关系 r 函数依赖 XY 都成立,则称 F 逻辑蕴涵 X Y,或称 XY 可以由 F 推出。例:关系模式 R=(A,B,C),函数依赖集 F=AB,BC, F 逻辑蕴涵 AC。证:设 u,v为 r中任意两个元组:若 AC 不成立,则有 uA=vA,而 uCvC而且 AB, BC,知uA=vA, uB=vB, uC=vC,即若 uA=vA则 uC=vC,和假设矛盾。故 F逻辑蕴涵 AC。满足 F依赖集的所有元组都函数依赖 XY(XY 不属于 F集),则称 F逻辑蕴涵 XY(XY 由 F依赖集中
2、所有依赖关系推断而出)二、Armstrong 公理1、定理:若 U为关系模式 R的属性全集,F 为 U上的一组函数依赖,设X、Y、Z、W 均为 R的子集,对 R(U,F)有:F1(自反性):若 XY(表 X包含 Y),则 XY 为 F所蕴涵;(F1:XX)F2(增广性): 若 XY 为 F所蕴涵,则 XZYZ 为 F所蕴涵;(F2:XZY)F3(传递性): 若 XY,YZ 为 F所蕴涵,则 XZ 为 F所蕴涵;F4(伪增性):若 XY,WZ(表 W包含 Z)为 F所蕴涵,则 XWYZ 为F所蕴涵;F5(伪传性): 若 XY,YWZ 为 F所蕴涵, 则 XWZ 为 F所蕴涵;F6(合成性): 若
3、 XY,XZ 为 F所蕴涵,则 XYZ 为 F所蕴涵;F7(分解性): 若 XY,ZY (表 Z包含于 Y)为 F所蕴涵,则 XZ 为F所蕴涵。函数依赖推理规则 F1F7 都是正确的。2、Armstrong 公理:推理规则 F1、F2、F3 合称 Armstrong公理;F4 F7 可由 F1、F2、F3 推得,是 Armstrong公理的推论部分。三、函数依赖的闭包 定义:若 F为关系模式 R(U)的函数依赖集,我们把 F以及所有被 F逻辑蕴涵的函数依赖的集合称为 F的闭包,记为 F+。即:F+=XY|XYF “应用 Armstong公理从 F中导出的任何 XY” F 包含于 F+,如果 F
4、=F+,则 F为函数依赖的一个完备集。 规定:若 X为 U的子集,X 属于 F+。例:R=ABC,F=AB, BC, 求 F+解: F+ =A,AB,AC,ABC,B,C,AA,ABA,ACA,ABCA,BB,CC,AB,ABB,ACB,ABCB,BC,AC,ABC,ACC,ABCC,BBC,AAB,ABAB,ACAB,ABCAB,BC,AAC,ABAC,ACAC,ABCAC,BCB,ABC,ABBC,ACBC,ABCBC,BCC,AABC,ABABC,ACABC,ABCA,BCBC例:已知关系模式 R中U=A,B,C,D, E, G,F=ABC, CA, BCD, ACDB, DEG, BE
5、C, CGBD, CEAG,判断 BDAC 是否属于 F+解:由 DEG 知 DE,BDBE 又知 BEC,CA 所以 BEA, BEAC 由、知,BDAC,所以 BDAC 被 F所蕴涵,即 BDAC 属于F+例:已知关系模式 R中U=A,B,C,E, H, P, G,F=ACPE, PGA, BCE, AP, GAB, GCA, PABG, AEGB, ABCPH,证明 BGHE 属于 F+证:由 BCE 知 BC,BE, BGGC 又知 GCA,AP 所以 BGA, BGABCP 又 ABCPH,由、知 BGHE,所以 BGHE 被 F所蕴涵,即 BGHE 属于 F+四、属性集闭包 1、定
6、义:若 F为关系模式 R(U)的函数依赖集,X 是 U的子集,则由 Armstrong公理推导出的所有 XAi 所形成的属性集例:设 R=ABC,F=AB, BC当 X分别为 A,B,C是求 X+。解:当 X=A时,X+=ABC当 X=B时,X+=BC当 X=C时,X+=C* X代表的属性集可以决定的属性集(包括本身)2、定理:当且仅当 Y属于 X+时,XY 能根据 Armstron公理由 F导出。证:设 Y=A1,A2,An充分条件:当 Y属于 X+时,对于每个 i,XAi 可由公理导出。再用合并规则可得 XY。必要条件:若 XY 能够由公理导出,则根据分解规,XAi(i=1,2,n)成立,
7、所以 Y属于 X+。3、计算 X+(1)算法依据:若 F为关系模式 R(U)的函数依赖集,X,Z,W 是 U的子集,对于任意的 ZWF,若 XZ(表 X包含 Z),则 XXW。(2)算法:a.令 X+ = X;b.在 F中依次查找每个没有被标记的函数依赖,若“左边属性集”包含于 X+ ,则令 X+ = X+“ 右边属性集 ”,为被访问过的函数依赖设置访问标记。c.反复执行 b直到 X+不改变为止。(先令 X+等于本身,然后在 F+中依次查找左边包含于 X+的属性,把其右边的对应属性并到 X中)(3)算法实现输入:关系模式 R的子集 X,R上的函数依赖集 F。输出:X 关于 F的闭包 X+算法伪
8、语言描述:Closure(X,F)olds=; news=X; G=F;while (olds!=news)olds=news;for (G中的每个函数依赖 WZ)if (news包含 W)news=newsZ;从 G中删除函数依赖 WZ;return news;例:已知关系模式 R中U=A,B,C,D, E, G,F=ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG,求(BD)+,判断 BDAC 是否属于 F+解:X+=BDEGCA结论:(BD)+=ABCDEG,BDAC 可由 F导出,即 BDAC 属于 F+例:已知关系模式 R中U=A,B,C,E, H,
9、P, G,F=ACPE, PGA, BCE, AP, GAB,GCA, PABG, AEGB, ABCPH,证明 BGHE 属于 F+证:因为,(BG)+ =ABCEHPG,所以 BGHE 可由 F导出,即 BGHE 属于 F+4、结论判定函数依赖 XY 是否能由 F导出的问题,可转化为求 X+并判定 Y是否是 X+子集的问题。即求闭包问题可转化为求属性集问题。判定给定函数依赖 XY 是否蕴涵于函数依赖集 F算法实现:输入:函数依赖集合 F,函数依赖 XY输出:若 XYF+输出真,否则输出假算法伪语言描述:number(F,XY) if (Y包含于 close(X,F)return 真elsereturn 假Ai|i=1,2,称为 X对于 F的闭包,记为 X+。