資料庫閉包以及求法

來源:互聯網
上載者:User

以下內容都是從百度知道中收集而來,希望能對大家有用

關於閉包易懂的理解方法

閉包就是由一個屬性直接或間接推匯出的所有屬性的集合,例如: 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,必有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(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+ 所包含,如果Y⊆X+,說明F邏輯蘊涵函數依賴X→Y;否則說明F不會邏輯蘊涵函數依賴X→Y。
 例如: 在例1中得到屬性D在{A,B}+ 中,所以F邏輯蘊涵AB→D。
現在判斷函數依賴D→A是否被函數依賴集F邏輯蘊涵。
計算{D}+,得到{D}+={D,E},由於A不在{D}+中,所以該函數依賴不蘊涵於給定的函數依賴集F。
 
如果要求候選碼的話就是他的閉包包括了屬性集的所有屬性就是候選碼。但要求其子集都不是超碼,既不能推出其所有的屬性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.