閉包概念
以下是寫的比較科學規范的閉包求解方法,設X和Y均為關系R的屬性集的子集,F是R上的函數依賴集,若對R的任一屬性集B,一旦X→B,必有B⊆Y,且對R的任一滿足以上條件的屬性集Y1 ,必有Y⊆Y1,此時稱Y為屬性集X在函數依賴集F下的閉包,記作X+。
計算關系R的屬性集X的閉包的步驟如下:
第一步:設最終將成為閉包的屬性集是Y,把Y初始化為X;
第二步:檢查F中的每一個函數依賴A→B,如果屬性集A中所有屬性均在Y中,而B中有的屬性不在Y中,則將其加入到Y中;
第三步:重復第二步,直到沒有屬性可以添加到屬性集Y中為止。 最后得到的Y就是X+
例(1): 設有關系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},計算(AE)+
解: (1) 令X={AE},X(0)=AE
(2)在F中尋找尚未使用過的左邊是AE的子集的函數依賴,結果是: A→D, E→C;所以 X(1)=X(0)DC=ACDE, 顯然 X(1)≠X(0).
(3) 在F中尋找尚未使用過的左邊是ACDE的子集的函數依賴, 結果是: CD→I;所以 X(2)=X(1)I=ACDEI。雖然X(2)≠X(1),但F中尋找尚未使用過函數依賴的左邊已經沒有X(2)的子集,所以不必再計算下去,即(AE)+=ACDEI。
說白話一點:閉包就是由一個屬性直接或間接推導出的所有屬性的集合。
例如:f={a->b,b->c,a->d,e->f};由a可直接得到b和d,間接得到c,則a的閉包就是{a,b,c,d}
候選碼的求解理論和算法
對於給定的關系R(A1,A2,…An)和函數依賴集F,可將其屬性分為4類:
L類 僅出現在函數依賴左部的屬性。
R 類 僅出現在函數依賴右部的屬性。
N 類 在函數依賴左右兩邊均未出現的屬性。
LR類 在函數依賴左右兩邊均出現的屬性。
定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類屬性,則X必為R的任一候選碼的成員。
推論:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類屬性,且X+包含了R的全部屬性;則X必為R的唯一候選碼。
例(2):設有關系模式R(A,B,C,D),其函數依賴集F={D→B,B →D,AD →B,AC →D},求R的所有候選碼。
解:考察F發現,A,C兩屬性是L類屬性,所以AC必是R的候選碼成員,又因為(AC)+=ABCD,所以AC是R的唯一候選碼。
定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是R類屬性,則X不在任何候選碼中。
定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是N類屬性,則X必包含在R的任一候選碼中。
推論:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類和N類組成的屬性集,且X+包含了R的全部屬性;則X是R的唯一候選碼。