數據庫閉包和候選碼求解方法


閉包概念

  以下是寫的比較科學規范的閉包求解方法,設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的唯一候選碼。

 

 

 


免責聲明!

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



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