参考:https://blog.csdn.net/prdslf001001/article/details/80336835
例1:关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC};求F的最小函数依赖集
(1)用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;得到:
F={B->D,DG->C,BD->E,AG->B,ADG->B,ADG->C};
(2)去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,依次做下去。直到找不到冗余的函数依赖;
① 去掉B->D,此时F={DG->C,BD->E,AG->B,ADG->B,ADG->C},此条件下得出B的闭包 B+ = B;B+不包含D,所以B->D保留。
②去掉DG->C,此时F={B->D,BD->E,AG->B,ADG->B,ADG->C},此时DG闭包DG+ = DG,不包含C,所以不能去掉DG->C.
③ 去掉BD->E,此时F={B->D,DG->C,AG->B,ADG->B,ADG->C},此时闭包BD+ = BD,不包含E,所以不能去掉BD->E,继续保留。
④去掉AG->B,此时F={B->D,DG->C,BD->E,ADG->B,ADG->C};此时AG+ = AG,不包含B,所以不能去掉AG->B,继续保留。
⑤去掉ADG->B,此时F={B->D,DG->C,BD->E,AG->B,ADG->C},此时ADG+ = ADGCBE,包含了B,所以删除ADG->B,不保留。
⑥去掉ADG->C,此时F={B->D,DG->C,BD->E,AG->B},此时ADG+ = ADGCBD,包含了C,所以删除ADG->C,不保留。
综上所得,此时得到F={B->D,DG->C,BD->E,AG->B};
(3)去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。
此时函数依赖左边非单个属性有:DG->C,BD->E,AG->B;所以做如下操作:
①先来看DG->C,首先去掉D,则此时G的闭包G+ = G,不包含C,保留D。再次去掉G,此时D+ = D,不包含C,所以G也不能去掉;
②再来看BD->E,首先去掉B,得到此时D的闭包D+ = D,不含E,保留B。然后去掉D,此时B+ = BDE,包含了E,所以去掉D,即得出:B->E;
③最后再来看AG->B,去掉A,G+ = G,不包含B,不能去掉A。去掉G的时候,A的闭包A+ =A,不含B,不能去掉A,还是AG->B ;
所以最后得出:F的最小函数依赖集是:F={B->D,DG->C,B->E,AG->B};
参考:https://blog.csdn.net/prdslf001001/article/details/80336835