函數依賴集閉包、屬性集閉包、超鍵、候選鍵和最小函數依賴集的求法。


函數依賴集的閉包

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中有四種范圍:

(1)左右出現;
(2)只在左部出現;
(3)只在右部出現;
(4)不在左右出現;
 
 求候選鍵算法:
1.R:只在FD右部出現的屬性,不屬於候選碼;
2. L:只在FD左部出現的屬性, 一定存在於某候選碼當中;
3. N:外部屬性 一定存在於任何候選碼當中;
4.其他屬性逐個與2,3的屬性組合,求屬性閉包,直至X的閉包等於U,若等於U,則X為候選碼。

例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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM