极小函数依赖集求解方法
每一个函数依赖集F均等价于一个极小函数依赖集Fm。称Fm为F的最小依赖集。
- 逐一检查F中各函数依赖FDi:X->Y,若Y=A1A2 Ak,k>=2,则用{X->Aj|j = 1,2, ,k}来取代 X -> Y
- 逐一检查F中各函数依赖FDi:X->A,令G = F -{X -> A},若A ∈ XG+,则从F中去掉此函数依赖(因为F与G等价的充要条件A)
- 逐一检查F中各函数依赖FDi:X->A,设X = B1B2 Bm,逐一考查Bi(i =1,2, ,m),若A ∈ (X - Bi)F+,则以X - Bi 取代X(因为F与F-{X->A}∪{Z->A}等价的充要条件是A∈ZF+,其中Z = X - Bi)。
###
以上是极小化的算法思想,下面举一个例子进行详细的解释
F = {B -> CD,C -> D,DE -> C,CE -> AB,E -> C},求其极小依赖集。
1、分解右部为多属性的函数依赖得:F={B -> C,B -> D,C -> D,DE -> C,CE -> A,CE -> B,E -> C}
2、去多余函数依赖
考查B -> C:G = F-{B->C},因为 C 不属于 (B)的G的闭包{BD},所以不能去掉B->C。
考查B->D:G=F-{B->D},因为D ∈(B)G+={BCD},所以应该去掉B->D。
F = {B->C,C->D,DE->C,CE->A,CE->B,E->C}
考查C->D:G=F-{C->D},因为D 不属于(C)G+ = {C},所以不能去掉C ->D。
考查DE ->C:G = F-{DE->C},因为C ∈ (DE)G+={DECAB},所以应该去掉 B->D。
F={B->C,C->D,CE->A,CE->B,E->C}
考查CE -> A:G = F -{ CE->A },因为 A 不属于 (CE)G+ ={CEBD},所以不能去掉 CE ->A.
考查CE->B:G = F-{CE->B},因为B 不属于(CE)G+ ={CEAD},所以不能去掉CE->B。
考察E -> C:G =F - {E->C},因为 C不属于(E)G+={E},所以不能去掉CE->C.
于是F = {B->C,C->D,CE->A,CE->B,E->C}
3、去左部多余属性
考查CE->A。(CE)F+={ABCDE}
假设E是多余的,C->A代替CE->A,(C)F+(C的F闭包)={ADC}。因为(C)F+的闭包≠(CE)F+的闭包,所以E不是多余的,不能去掉。
假设C是多余的,E->A代替CE->A,(E)F+(E的F闭包)={ACBDE},因为(E)F+的闭包=(CE)F+的闭包,所以C是多余的
之后的F ={B->C,C->D,E->A,CE->B,E->C}
考查CE->B,(CE)F+={ACBDE}
假设E是多于的,C->B代替CE->B,(C)F+={ADC}。因为(C)F+的闭包≠(CE)F+的闭包,所以E不是多余的,不能去掉。
假设C是多余的,E->A代替CE->A,(E)F+={ACBDE},因为(E)F+的闭包=(CE)F+的闭包,所以C是多余的
之后的F = {B->C,C->D,E->A,E->B,E->C}
所以根据定理,求得的F位与函数依赖集等价的极小函数依赖集。