属性集X关于函数依赖集F的闭包XF+ 的求解过程
一、定义:
设F为属性集U上的一组函数依赖,X⊆U,XF+ ={A | X→ A能y由F根据Armstrong公理推导出 },XF+ 称为属性集X关于函数依赖集F的闭包。
二、用途
1.若判断X→Y是否能由F根据Armstrong公理推导出,则求出XF+ ,判断Y是否为XF+ 的子集;若Y为XF+ 的子集,则X→Y能由F根据Armstrong公理推导出,否则不能。
2.如果XF+ = U,X是R<U , F>的候选码。
三、求解算法
对R<U , F>,求属性X(X ⊆ U)关于U上的函数依赖集F的闭包XF+
- 输入:X,F
- 输出:XF+
- 步骤:
(1)令X0 =X,i =0;
(2)求MID,这里的 MID ={A| (∃V) (∃W) (V→W ∈ F ⋀ V ⊆Xi ⋀ A∈W ) }; 也就是说先令MID' 为空集,对于F中的每一个函数依赖Y→Z,满足属性集Y⊆Xi ,那么MID' =MID' ∩ Z;最终的MID' 即为所求的MID
(3)Xi+1 =MID∪Xi
(4)判断Xi+1 =Xi 是否相等
(5)若相等或Xi+1 = U,则Xi+1 就是XF+ ,算法终止。
(6)若不相等,则令i = i +1,返回第(2)步。
四、例子说明:
已知关系模式R<U,F>,其中U={A,B,C,D,E};F={AB→C,B→D,C→E,EC→B,AC→B},求XF+ 。
(1)令X0 =AB,求X1:
先求此时的MID:
因为F中有AB→C,B→D,所以MID=CD
所以得X1=X0∪MID=AB∪CD=ABCD;
又因为X0≠X1且X1≠ U,所以要继续求X2; // 如果这时X0=X1了,那么根据求解算法第(5)步,X1即为所要求得的XF+
(2)有X1=ABCD,求X2:
先求此时的MID:
因为F中有C→E,AC→B,所以MID=BE; // AB→C,B→D在第(1)步中已经出现了所以这里忽略
所以得X2=X1∪MID =ABCD∪BE=ABCDE;
因为此时X2= U 了,所以根据求解算法第(5)步,X2即为所要求得的XF+ ,算法结束。