求最小函式依賴集
最小函式依賴集步驟:
① 用分解的法則,使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}。