數據庫關係理論模式分解理解和總結

Armstrong公理系統

邏輯蘊涵

定義/解釋

好比A->B B->C 在關係模型R<U,F>中成立,能夠獲得A->C字R中也成立,因此稱F邏輯蘊含A->C。html

閉包

定義/解釋

在關係模型R中,F所邏輯蘊涵全部函數依賴叫作F的閉包,記爲\(F^{+}\)算法

某個屬性集關於依賴集的閉包

定義/解釋

即已有X這個屬性集做爲左部,經過依賴集F的全部函數依賴,能夠推導出的全部函數依賴,稱爲X關於F的閉包,記爲\(X_F^{+}\)閉包

例題

已知關係模型R<U,F>,其中U={A,B,C,D,E} F={AB->C,B->D,C->E,EC->B,AC->B},求\((AB)_F^{+}\)函數

算法:把AB做爲左部,而後從F中找到左部是徹底屬於AB的,把對應的右部併到AB裏,做爲新的左部,重複直到不能再增長左部或者已經等於全集。spa

結果:\((AB)_F^{+}\)=ABCDE3d

最小依賴集

例題

F={abd->e,ab->g,b->f,c->j,cj->i,g->h}htm

算法:blog

  1. 將右部有多個的拆開,好比ab->cd 變成 ab->c,ab->d
  2. 嘗試刪除左側的冗餘函數依賴,具體操做是對於每一個函數依賴X->A,假設將該依賴刪除,而後求X在剩下的依賴集中的閉包\(X_G^{+}\),若是A屬於這個閉包,那麼就能夠刪除。
  3. 嘗試刪除左側的冗餘屬性,具體操做是對於剩下的每一個有多個屬性的函數依賴X->A,對於每一個屬性,假設將該屬性刪除,而後求剩下的屬性集在F中的閉包\((X-B_i)^{+}_F\),若是A屬於這個閉包,則能夠刪除。

結果:F={abd->e,ab->g,b->f,c->j,c->i,g->h}遞歸

求候選碼

例題

已知關係模型R<U,F>,其中U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求R的候選碼。get

算法:

  • 找出只在函數依賴左部出現的屬性集X,X確定是任意一個候選碼的成員,由於只在左邊出現,因此少了它確定推不出全集U。
  • 只在右部出現,確定不屬於任何一個候選碼。
  • 其餘的狀況嘗試組合求閉包,若是閉包是全集U,那麼就是候選碼。

結果:

只在左邊出現的是B和D,因此肯定了BD,只在右邊出現的是G,因此排除G,剩下A,C,E。

先考慮一個的組合,ABD,BCD和BDE,三個的閉包都是全集U,因此三個都是候選碼,算法結束。

模式分解

判斷是否無損鏈接

算法

  • 對於一個分解,有k個子集,n個屬性,創建一張k行n列的初始表,對於每一行也就是分解的每一個子集,把該分解子集出現的屬性對應的列寫上\(a_j\),不然寫上\(b_{ij}\)
  • 對於每個依賴,找到左部屬性對應的列,根據行的值分組,對於行的值相同的這些行,查看對應右部屬性的列,若是這些格子裏有a值,那把全部這些格子改爲a值,若是沒有,改爲行最小的b值。若是某個b值改爲a值,那麼其餘行(不屬於當前操做的行)的相同b值也要改爲a值
  • 若是不變則中止,若是出現有一行爲a1 a2 ... an,那麼說明該鏈接爲無損鏈接。

例題

參考

已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一個分解爲R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判斷這個分解是否具備無損鏈接性。

  • 根據每一個分解的屬性,構造出初始表
  • img
  • 而後看第一個依賴A->C,找到A對應的第一列,其中1 2 5行的值相等,找到C對應的第三列,對應格子沒有a值,因此所有改爲\(b_{13}\)
  • img
  • 同理看第二個依賴,B->C,把\(b_{33}\)改爲\(b_{13}\)
  • img
  • 以此類推
  • img
  • img
  • img
  • 最後第三行有a1 a2 a3 a4 a5,因此該分解具備無損鏈接性。

3NF和保持函數依賴的分解

算法

  • F=F的最小依賴集
  • \(U_0\)={不在F出現的屬性}
  • U=U-\(U_0\)
  • 若F中有函數依賴X->A,使得XA=U,那麼分解就是R自己
  • 若是沒有,將剩下的F按左部分組,獲得\(U_i\),分解就是{\(R_1\)<\(U_1\),\(F_1\)>,...} ∪ \(R_0\)<\(U_0\),\(F_0\)>

3NF和保持函數依賴和具備無損鏈接性的分解

算法

  • 求出3NF和保持函數依賴的分解。
  • X是R的碼,讓已有的分解∪上一個{\(R^{*}\)<X,\(F_X\)>}。
  • 若是分解中有某個\(U_i\)屬於X,那麼刪掉該\(U_i\),若是X屬於某個\(U_i\),那麼刪掉。

BCNF和具備無損鏈接性的分解

算法

  • 相似遞歸的方法,首先判斷自身是否是BC範式,若是是,無需分解。
  • 不然,找到當前關係R的主碼,找到一個左邊不含主碼的依賴X->A,設U1=A,分解出去,剩下的U2=U-{A}做爲一個關係模式,繼續重複上面的步驟。
  • 根據X->A的選擇的不一樣,獲得的分解也是不一樣。

4NF和具備無損鏈接性的分解

算法

  • 求出BCNF和具備無損鏈接性的分解。
  • 對於一個關係R<U,F>,若是多值依賴X-->Y成立,則分解{R1<X,Y>,R2<X,Z>)}具備無損鏈接性,其中Z=U-X-Y。
相關文章
相關標籤/搜索