函數依賴集的閉包
F:FD的集合稱為函數依賴集。
F閉包:由F中的所有FD可以推導出所有FD的集合,記為F+。
例1,對於關系模式R(ABC),F={A→B,B→C},求F+。
根據FD的定義,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43個FD。其中,φ表示空屬性集。
屬性集閉包
屬性集閉包定義 :
對F,F+中所有X→A的A的集合稱為X的閉包,記為X+。可以理解為X+表示所有X可以決定的屬性。
屬性集閉包的算法:
A+:將A置入A+。對每一FD,若左部屬於A+,則將右部置入A+,一直重復至A+不能擴大。
超鍵、候選鍵
若X+包含R的所有屬性,則X是超鍵。當X不可約時則為候選鍵。 如上例:A+=ABC,則A為超鍵,因為A不可約則為候選鍵。
設關系模式R中U=ABC.......等N個屬性,U中的屬性在FD中有四種范圍:
例2,對於關系模式R(ABCD),F={A→B,B→C,D→B},求其候選鍵。
先按照屬性集閉包的算法,求各個閉包,然后求得候選鍵。
(1) 求A+。
① A+=A。
② 由A→B,而A €A+可知,則A+=AB。
③ 由B→C,而B A+可知,則A+=ABC。
④ A+封閉,即A+=ABC。
(2) 求B+、C+、D+。
按步驟(1)可得:B+=BC,C+=C,D+=BCD。
(3) 求其候選鍵。 顯然,R的候選鍵為AD。
例3,對於關系模式R(ABC),F={A→BC,BC→A},求其候選鍵。
(1) 求屬性的閉包。
按例2可得:A+=ABC,B+=B,C+=C。
(2) 求屬性集的閉包。
由BC→A,則(BC)+=ABC,其余屬性集閉包為屬性閉包的並集。
(3) 求其候選鍵。 顯然,R的候選鍵為A和BC。
最小函數依賴集
定義:如果函數依賴集F滿足以下條件,則稱F為一個極小函數依賴集。也稱為最小依賴集或最小覆蓋。
(1)F中任一函數依賴的右部僅含有一個屬性。
(2)F中不存在這樣的函數依賴X→A,使得F與F-{X→A}等價。
(3)F中不存在這樣的函數依賴X→A,X有真子集Z使得F-{X→A}U{Z→A}與F等價。
最小依賴集通用算法:
① 用分解的法則,使F中的任何一個函數依賴的右部僅含有一個屬性;
② 去掉多余的函數依賴:從第一個函數依賴X→Y開始將其從F中去掉,然后在剩下的函數依賴中求X的閉包X+,看X+是否包含Y,若是,則去掉X→Y;否則不能去掉,依次做下去。直到找不到冗余的函數依賴;
③ 去掉各依賴左部多余的屬性。一個一個地檢查函數依賴左部非單個屬性的依賴。例如XY→A,若要判Y為多余的,則以X→A代替XY→A是否等價?若A屬於(X)+,則Y是多余屬性,可以去掉。
例4、求F={A→B,B→A,B→C,A→C,C→A},最小(極小)函數依賴集合
1、利用分解規則,將所有的函數依賴變成右邊都是單個屬性的函數依賴。從題目來看,F中的任何一個函數依賴的右部僅含有一個屬性:
{A→B,B→A,B→C,A→C,C→A}
2、去掉F中多余的函數依賴
(1)設A→B冗余,從F中去掉A→B,則F1={B→A,B→C,A→C,C→A}。計算(A)F1+:設X(0)=A,計算X(1):掃描F1中各個函數依賴,找到左部為A或A子集的函數依賴,A→C。故有X(1)=X(0)U C=AC;掃描F1中各個函數依賴,找到左部為AC或為AC子集的函數依賴,C→A,X(2)=X(1)U C=AC.但AC不包含B,故A->B不能從F中去掉。
(2)設B→A冗余,從F中去掉B→A,則F2={A→B,B→C,A→C,C→A}。計算(B)F2+:設X(0)=B,計算X(1):掃描F2中各個函數依賴,找到左部為B或者B子集的函數依賴,B→C.故有X(1)=X(0)U C =BC;掃描F2中各個函數依賴,找到左部為BC或為BC子集的函數依賴,C->A,X(2)=X(1)U A=ABC.X(2)包含所有屬性,故B→A可從F中去掉。
(3)設B→C冗余,從F中去掉B→C,則F3={A→B,A→C,C→A}。計算(B)F3+:掃描F3中各個函數依賴,找不到左部為B或B子集的函數依賴,因為找不到這樣的函數依賴,故有X(1)=X(0)=B,(B)F1+= B不包含C,故B→C不是冗余的函數依賴,不能從F1中去掉。
(4)設A→C冗余,從F中去掉A→C,則F4={A→B,B→C,C→A}。計算(A)F4+:設X(0)=A,計算X(1):掃描F4中各個函數依賴,找到左部為A或A子集的函數依賴,A→B。故有X(1)=X(0)U B=AB;掃描F4中各個函數依賴,找到左部為AB或為AB子集的函數依賴,B→C,X(2)=X(1)U C=ABC.X(2)包含所有屬性,故A→C可從F中去掉。
(5)設C→A冗余,從F中去掉C→A,則F4={A→B,B→C}。計算(C)F5+:設X(0)=C,計算X(1):掃描F5中各個函數依賴,找到左部為C或C子集的函數依賴,找不到左部為C或C子集的函數依賴,因為找不到這樣的函數依賴,故有X(1)=X(0)=C,(B)F1+= C不包含A,故C→A不是冗余的函數依賴,不能從F中去掉。
(6)至此,所有依賴均以驗算完畢,故F最小(極小)函數依賴集合為:{A→B,B→C,C→A}