1. 程式人生 > 其它 >求最小函式依賴集

求最小函式依賴集

最小函式依賴集步驟:
  ① 用分解的法則,使F中的任何一個函式依賴的右部僅含有一個屬性;

  ② 去掉多餘的函式依賴:從第一個函式依賴X→Y開始將其從F中去掉,然後在剩下的函式依賴中求X的閉包X+,看X+是否包含Y,若是,則去掉X→Y;否則不能去掉,依次做下去。直到找不到冗餘的函式依賴;

  ③去掉各依賴左部多餘的屬性。一個一個地檢查函式依賴左部非單個屬性的依賴。例如XY→A,若要判Y為多餘的,則以X→A代替XY→A是否等價?若A屬於(X)+,則Y是多餘屬性,可以去掉;

  ④若步驟③改變了函式依賴的左屬性,重複②步驟一次。

 

【題1】關係模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC},求F的最小函式依賴集。


解:
(1)分右

  F={B->D,DG->C,BD->E,AG->B,ADG->B,ADG->C}

(2)去多餘依賴

  ①若B->D冗餘,則去掉B->D,得G={DG->C,BD->E,AG->B,ADG->B,ADG->C}   

    B+ ={B}不包含D,所以不冗餘,不能去掉。

  ②若DG->C冗餘,則去掉DG->C,得G={B->D,BD->E,AG->B,ADG->B,ADG->C}

    (DG)+ ={DG}不包含C,所以不冗餘,不能去掉。

  ③若BD->E冗餘,則去掉BD->E,得G={B->D,DG->C,AG->B,ADG->B,ADG->C}

    (BD)+ ={BD}不包含E,所以不冗餘,不能去掉。

  ④若AG->B冗餘,則去掉AG->B,得G={B->D,DG->C,BD->E,ADG->B,ADG->C}

    (AG)+ ={AG}不包含B,所以不冗餘,不能去掉。

  ⑤若ADG->B冗餘,則去掉ADG->B,得G={B->D,DG->C,BD->E,AG->B,ADG->C}

    (ADG)+ ={ABCDEG}包含B,所以冗餘,去掉。

  ⑥若ADG->C冗餘,則去掉ADG->C,得G={B->D,DG->C,BD->E,AG->B}

    (ADG)+ ={ABCDEG}包含C,所以冗餘,去掉。

  綜上:F={B->D,DG->C,BD->E,AG->B}

(3)去左冗餘
  ①看DG->C,若D->C冗餘,D+ ={D}不包含C,所以G不能去掉。

  ②看DG->C,若G->C冗餘,G+ ={G}不包含C,所以D不能去掉。

  ③看BD->E,若B->E冗餘,B+ ={BD}不包含E,所以D不能去掉。

  ④看BD->E,若D->E冗餘,D+ ={D}不包含E,所以B不能去掉。

  ⑤看AG->B,若A->B冗餘,A+ ={A}不包含B,所以G不能去掉。

  ⑥看AG->B,若G->B冗餘,G+ ={G}不包含B,所以A不能去掉。

  左屬性沒有變動,所以F的最小函式依賴集為Fm={B->D,DG->C,BD->E,AG->B}。