關係數據庫原理之求閉包

閉包就是由一個屬性直接或間接推導出的所有屬性的集合,例如: 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章