關係數據庫原理之求閉包

閉包就是由一個屬性直接或間接推導出的全部屬性的集合,例如: f={a->b,b->c,a->d,e->f} 由a可直接獲得b和d,間接獲得c,則a的閉包就是{a,b,c,d}
 
如下是寫的比較科學規範的頂一記求解方法
設X和Y均爲關係R的屬性集的子集,F是R上的函數依賴集,若對R的任一屬性集B,一旦X→B,必有BY,且對R的任一知足以上條件的屬性集Y1 ,必有YY1,此時稱Y爲屬性集X在函數依賴集F下的閉包,記做X+。
計算關係R的屬性集X的閉包的步驟以下:
 第一步:設最終將成爲閉包的屬性集是Y,把Y初始化爲X;
第二步:檢查F中的每個函數依賴A→B,若是屬性集A中全部屬性均在Y中,而B中有的屬性不在Y中,則將其加入到Y中;
第三步:重複第二步,直到沒有屬性能夠添加到屬性集Y中爲止。 最後獲得的Y就是X+。
 
 例1,設關係R(A,B,C,D,E,G)有函數依賴集 F={AB→C,BC→AD,D→E,CG→B},求AB的閉包。
 解:首先從AB出發,令X={A,B},因爲函數依賴AB→C左邊的全部屬性都在X中,因此能夠把右邊的C添加到X中,這時X={A,B,C}。
其次考慮函數依賴BC→AD,左邊B、C均在X中,右邊D不在X中,將其添加到X中,此時X={A,B,C,D}。
再考慮函數依賴D→E,同理可將E添加到X中,此時X={A,B,C,D,E}。
 上述方法再不能向X中添加屬性,因此獲得{A,B}+={A,B,C,D,E}。
 
若是知道如何計算任意屬性的閉包,那麼就能檢驗任意函數依賴X→Y是否被函數依賴集F邏輯蘊涵,其步驟以下:
 第一步:計算X的閉包X+;
第二步:判斷Y是否被X+ 所包含,若是YX+,說明F邏輯蘊涵函數依賴X→Y;不然說明F不會邏輯蘊涵函數依賴X→Y。
 例如: 在例1中獲得屬性D在{A,B}+ 中,因此F邏輯蘊涵AB→D。
如今判斷函數依賴D→A是否被函數依賴集F邏輯蘊涵。
計算{D}+,獲得{D}+={D,E},因爲A不在{D}+中,因此該函數依賴不蘊涵於給定的函數依賴集F。
 
若是要求候選碼的話就是他的閉包包括了屬性集的全部屬性就是候選碼。但要求其子集都不是超碼,既不能推出其全部的屬性。
來源:http://blog.sina.com.cn/s/blog_627a16f10100ykon.html
相關文章
相關標籤/搜索