定义
如果函数依赖集F满足以下三个条件,则称F为最小函数依赖集,记作Fm。
①F中每个函数依赖的右部都是单属性,即右部最简化。
②对于F中任一函数依赖X -> A 和X的真子集X',(F - (X - A)) ∪ (X' -> A)
与F都不等价,即左部无多余属性。
③对于F中任一函数依赖X -> A,F - {X -> A}与F都不等价,即无多余函数依赖。
求法
输入:一个函数依赖集F。
输出:F的一个等价的最小函数依赖集Fm。
步骤:
(1)用分解规则,使F中的每个函数依赖的右部仅含单属性。此步为等价分解。
(2)去掉各依赖左部多余的属性。一个一个地检查左部非单个属性地函数依赖。即XY -> A ,判断Y是否多余,则在分解后地F求X的属性闭包X+,若A包含于X+ ,则Y是多余的。此步为等价消属性。
(3)去掉多余的函数依赖。逐一检查上步结果F的各函数依赖X -> A,并将X -> A从F中去掉,然后在剩下的F中去求X+,若A包含于X+,则X -> A多余。依次做下去,直到找不到冗余的函数依赖。此步为等价消依赖。
举例
设有函数依赖集 F = {AB -> CE, A -> C, GP -> B, EP -> A, CDE -> P, HB -> P, D -> HG, ABC -> PG}, 求与 F 等价的最小函数依赖集。
解:
①分解D->HG为D->H、D->G,分解AB->CE为AB->C、AB->E,分解ABC->PG为ABC->P、ABC->G,得到F={AB->C, AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
②判断AB -> C中B是否冗余:由于存在A -> C,故B冗余,F={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
经判断其余左部均无多余属性,进行到下一步。(此处 ABC -> P 和 ABC -> G 可简化)
③判断AB->E是否冗余, F’ ={A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
AB+ = ABCPG, AB->E不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断A->C是否冗余, F’ ={AB->E, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
A+ = A,A->C不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断GP->B是否冗余, F’ ={AB->E, A->C, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
GP+ = GP, GP->B不冗余, **F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G} **
判断EP->A是否冗余, F’ = {AB->E, A->C, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
EP+ = EP , EP->A不冗余, **F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G} **
判断CDE->P是否冗余, F’ = {AB->E, A->C, GP->B, EP->A, HB->P, D->H, D->G, ABC->P, ABC->G}
CDE+ = CDEHG, CDE->P不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断HB->P是否冗余, F’ ={AB->E, A->C, GP->B, EP->A, CDE->P, D->H, D->G, ABC->P, ABC->G}
HB+ = HB, HB->P不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断D->H是否冗余, F’ ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->G, ABC->P, ABC->G}
D+ = DG, D->H不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断D->G是否冗余, F’ ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, ABC->P, ABC->G}
D+ = DH, D->G不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
判断ABC->G是否冗余, F’ ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P}
ABC+ = ABCEP, ABC->G不冗余, F ={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}
故 Fm={AB->E, A->C, GP->B, EP->A, CDE->P, HB->P, D->H, D->G, ABC->P, ABC->G}