算法:
用分解的法則,使F中的任何一個(gè)函數(shù)依賴的右邊僅含一個(gè)屬性
去除多余的函數(shù)依賴:從第一個(gè)函數(shù)依賴X→Y開(kāi)始,將其從F中去掉,然后在剩下的函數(shù)依賴中求X的閉包X+,判斷X+是否包含Y,如果包含,則去掉X→Y,否則保留,依次做下去,直到掃描所有函數(shù)依賴為止。
去掉依賴左側(cè)多余的冗余屬性:如XY→A,若要判斷Y是冗余屬性,則計(jì)算X+,判斷A是否屬于X+,如果屬于,則Y是冗余屬性,將其刪除,同理判斷X。
注意:若在第三步中修改了函數(shù)依賴集F,則需要重新做一次步驟二。
例: R={A,B,C,D,E,G},F(xiàn)={B→D,DG→C,BD→E,AG→B,ADG→BC},求F的最小函數(shù)依賴
解:
運(yùn)用分解律,進(jìn)行拆除
F={B→D,DG→C,BD→E,AG→B,ADG→B,ADG→C}
判斷冗余的函數(shù)依賴
1.假設(shè)刪除B→D,則B+={B},故保留
2.假設(shè)刪除DG→C,則(DG)+={D,G},故保留
3.假設(shè)刪除BD→E,則(BD)+={B,D},故保留
4.假設(shè)刪除AG→B,則(AG)+={A,G},故保留
5.假設(shè)刪除ADG→B,則(ADG)+={A,D,G,C,B,E},有B,刪除
6.假設(shè)刪除ADG→C,則(ADG)+={A,D,G,B,E,C},有C,刪除
綜上,F(xiàn)更新為
F={B→D,DG→C,BD→E,AG→B}
判斷左側(cè)的冗余屬性,DG→C,BD→E,AG→B,左側(cè)的屬性個(gè)數(shù)大于1,故進(jìn)行判斷是否冗余
1.看DG→C,假設(shè)刪除D,則G+={G},假設(shè)刪除G,則D+={D},無(wú)C,保留
2.看BD→E,假設(shè)刪除B,則D+={D},假設(shè)刪除D,則B+={B,D,E},有E,則刪除D,得到B→E
3.看AG→B,假設(shè)刪除A,則G+={G},假設(shè)刪除G,則A+={A},無(wú)B,保留。
綜上,F(xiàn)更新為
F={B→D,DG→C,B→E,AG→B}
由于步驟3更新了F,故在進(jìn)行一次步驟2.
1.假設(shè)刪除B→D,顯然B的閉包不包含D
2.假設(shè)刪除DG→C,顯然DG的閉包不包含C
3.假設(shè)刪除B→E,顯然B的閉包不包含E。
4.假設(shè)刪除AG→B,顯然AG的閉包不包含B。
綜上所述最小依賴集為F={B→D,DG→C,B→E,AG→B}。
注:最小依賴集不唯一。
學(xué)者網(wǎng)

評(píng)論 3