函数依赖的闭包html
定义:若F为关系模式R(U)的函数依赖集,咱们把F以及全部被F逻辑蕴涵的函数依赖的集合称为F的闭包,记为F+。
即:F+={X→Y|X→Y∈F∨“应用Armstong公理从F中导出的任何X→Y”}
△ F包含于F+,若是F=F+,则F为函数依赖的一个完备集。
△ 规定:若X为U的子集,X→Φ 属于F+。算法
关系模式R<U,F>如有n个属性,则在模式R上可能成立的函数依赖有4n个,其中n个属性中组合成X有2n个,组合成Y有2n个。闭包
例:已知关系模式R(ABC),F={A→C,B→C},求F+ide
解:∵U={A,B,C},左部不一样的属性集组合有23=8种:函数
Φ、A、B、C、AB、BC、AC、ABC。.net
(1)∴Φ→Φhtm
(2)∵(A)F+=ACblog
∴A→Φ、A→A、A→C、A→AC。get
(3)∵(B)F+=BCit
∴B→Φ、B→B、B→C、B→BC。
(4)∵(C)F+=C
∴C→Φ、C→C。
(5)∵(AB)F+=ABC
∴AB→Φ、AB→AB 、AB→A、AB→B 、AB→C、AB→BC 、AB→AC、AB→ABC 。
(6)∵(BC)F+=BC
∴BC→Φ、BC→BC、BC→B、BC→C。
(7)∵(AC)F+=BC
∴AC→Φ、AC→BC、AC→B、AC→C。
(8)∵(ABC)F+=ABC
∴ABC→Φ、ABC→ABC 、ABC→A、ABC→B 、ABC→C、ABC→BC 、ABC→AB、ABC→AC。
因此F+共有35个具体以下:
∴Φ→Φ、A→∅、A→A、A→C、A→AC
B→Φ、B→B、B→C、B→BC
C→Φ、C→C、 AB→∅、AB→AB 、AB→A、AB→B 、AB→C、AB→BC 、AB→AC、AB→ABC 、
BC→Φ、BC→BC、BC→B、BC→C、
AC→Φ、AC→BC、AC→B、AC→C、
ABC→Φ、ABC→ABC 、ABC→A、ABC→B 、ABC→C、ABC→BC 、ABC→AB、ABC→AC
转载于:https://blog.csdn.net/xr_acmer/article/details/22893987
函数依赖集的闭包
F:FD的集合称为函数依赖集。
F闭包:由F中的全部FD能够推导出全部FD的集合,记为F+。
例1,对于关系模式R(ABC),F={A→B,B→C},求F+。
根据FD的定义,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43个FD。其中,φ表示空属性集。
属性集闭包
属性集闭包定义 :
对F,F+中全部X→A的A的集合称为X的闭包,记为X+。能够理解为X+表示全部X能够决定的属性。
属性集闭包的算法:
A+:将A置入A+。对每一FD,若左部属于A+,则将右部置入A+,一直重复至A+不能扩大。
超键、候选键
若X+包含R的全部属性,则X是超键。当X不可约时则为候选键。 如上例:A+=ABC,则A为超键,由于A不可约则为候选键。
设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:
(1)左右出现;
(2)只在左部出现;
(3)只在右部出现;
(4)不在左右出现;
求候选键算法:
1.R:只在FD右部出现的属性,不属于候选码;
2.L:只在FD左部出现的属性,必定存在于某候选码当中;
3.N:外部属性必定存在于任何候选码当中;
4.其余属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
例2,对于关系模式R(ABCD),F={A→B,B→C,D→B},求其候选键。
先按照属性集闭包的算法,求各个闭包,而后求得候选键。
(1) 求A+。
① A+=A。
② 由A→B,而A €A+可知,则A+=AB。
③ 由B→C,而B A+可知,则A+=ABC。
④ A+封闭,即A+=ABC。
(2) 求B+、C+、D+。
按步骤(1)可得:B+=BC,C+=C,D+=BCD。
(3) 求其候选键。 显然,R的候选键为AD。
例3,对于关系模式R(ABC),F={A→BC,BC→A},求其候选键。
(1) 求属性的闭包。
按例2可得:A+=ABC,B+=B,C+=C。
(2) 求属性集的闭包。
由BC→A,则(BC)+=ABC,其他属性集闭包为属性闭包的并集。
(3) 求其候选键。 显然,R的候选键为A和BC。
最小函数依赖集
定义:若是函数依赖集F知足如下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。
最小依赖集通用算法:
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,而后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,如果,则去掉X→Y;不然不能去掉,依次作下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,能够去掉。
例四、求F={A→B,B→A,B→C,A→C,C→A},最小(极小)函数依赖集合
一、利用分解规则,将全部的函数依赖变成右边都是单个属性的函数依赖。从题目来看,F中的任何一个函数依赖的右部仅含有一个属性:
{A→B,B→A,B→C,A→C,C→A}
二、去掉F中多余的函数依赖
(1)设A→B冗余,从F中去掉A→B,则F1={B→A,B→C,A→C,C→A}。计算(A)F1+:设X(0)=A,计算X(1):扫描F1中各个函数依赖,找到左部为A或A子集的函数依赖,A→C。故有X(1)=X(0)U C=AC;扫描F1中各个函数依赖,找到左部为AC或为AC子集的函数依赖,C→A,X(2)=X(1)U C=AC.但AC不包含B,故A->B不能从F中去掉。
(2)设B→A冗余,从F中去掉B→A,则F2={A→B,B→C,A→C,C→A}。计算(B)F2+:设X(0)=B,计算X(1):扫描F2中各个函数依赖,找到左部为B或者B子集的函数依赖,B→C.故有X(1)=X(0)U C =BC;扫描F2中各个函数依赖,找到左部为BC或为BC子集的函数依赖,C->A,X(2)=X(1)U A=ABC.X(2)包含全部属性,故B→A可从F中去掉。
(3)设B→C冗余,从F中去掉B→C,则F3={A→B,A→C,C→A}。计算(B)F3+:扫描F3中各个函数依赖,找不到左部为B或B子集的函数依赖,由于找不到这样的函数依赖,故有X(1)=X(0)=B,(B)F1+= B不包含C,故B→C不是冗余的函数依赖,不能从F1中去掉。
(4)设A→C冗余,从F中去掉A→C,则F4={A→B,B→C,C→A}。计算(A)F4+:设X(0)=A,计算X(1):扫描F4中各个函数依赖,找到左部为A或A子集的函数依赖,A→B。故有X(1)=X(0)U B=AB;扫描F4中各个函数依赖,找到左部为AB或为AB子集的函数依赖,B→C,X(2)=X(1)U C=ABC.X(2)包含全部属性,故A→C可从F中去掉。
(5)设C→A冗余,从F中去掉C→A,则F4={A→B,B→C}。计算(C)F5+:设X(0)=C,计算X(1):扫描F5中各个函数依赖,找到左部为C或C子集的函数依赖,找不到左部为C或C子集的函数依赖,由于找不到这样的函数依赖,故有X(1)=X(0)=C,(B)F1+= C不包含A,故C→A不是冗余的函数依赖,不能从F中去掉。
(6)至此,全部依赖均以验算完毕,故F最小(极小)函数依赖集合为:{A→B,B→C,C→A}