模式分解(2NF、3NF)

求閉包

求屬性集XX\subseteq U)關於 U上的函數依賴集F的閉包 X_{F^{+}}

1、令X^{\left ( 0 \right )}=X,i=0。

2、對於F中所有左邊爲X^{\left ( i \right )}或其子集的函數依賴,把其右邊的屬性加入X^{\left ( i \right )},得到X^{\left ( i+1 \right )}

3、判斷X^{\left ( i+1 \right )}是否等於U,若相等,則X_{F^{+}}=U。判斷X^{\left ( i+1 \right )}是否等於X^{\left ( i \right )},若相等,則X^{\left ( i+1 \right )}。否則繼續執行第二步,i++。

 

例:有關係 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \},求\left (AB \right )_{F^{+}}

  1. AB^{\left ( 0 \right )}=AB
  2. AB\rightarrow C, A\rightarrow D得,AB^{\left ( 1 \right )}=ABCD
  3. D\rightarrow E \right得,AB^{\left ( 2 \right )}=ABCDE=U
  4. \left (AB \right )_{F^{+}}=U

 

求候選碼

1、把函數依賴集F中的屬性分爲L類、R類、LR類和N類。

L類:只在函數依賴左邊出現的屬性

R類:只在函數依賴右邊出現的屬性

LR類:在函數依賴左邊和右邊都出現的屬性

N類:未在函數依賴中出現的屬性

2、對於各類,有如下性質:

  • 若X是L類,則X必爲關係R的任一候選碼
  • 若X是L類,且 X_{F^{+}}=U,則X爲唯一候選碼
  • 若X是R類,則X不在任何候選碼中
  • 若X是N類,則X必包含在任一候選碼中

3、對屬於L類的屬性,不斷的加入LR的屬性,形成屬性組W,求 W_{F^{+}},若 W_{F^{+}}=U,則W爲候選碼。求出所有的Wi。

 

例:有關係 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

L類:A、B,     R類:C、E,     LR類:D,     N類:無

則候選碼中一定有AB,有\left (AB \right )_{F^{+}}=U,由性質2得,(A, B)爲唯一候選碼。


 

分解爲2NF

若關係R<U, F>中,主鍵爲W,有X\subset WX\rightarrow Z,則可把關係分解爲 R_{1}<X,Z>R_{2}<U-Z>

判斷R1,R2是否均符合2NF;若不符合,則繼續按上述方法分解,直到符合爲止。

 

例:有關係 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

已知候選碼爲(A, B),有AB\rightarrow DE,A\rightarrow DE,故R不符合2NF,分解爲R_{1}<A,D,E>R_{2}<A,B,C>

R1,R2均符合2NF。


 

求最小依賴集

1、去掉F中所有函數依賴右邊的多屬性。

例:A\rightarrow BC\Rightarrow A\rightarrow B,A\rightarrow C

2、去掉F中所有函數依賴左邊的多屬性。

例:對於AB\rightarrow C,若A_{F^{+}}\supset C,則A\rightarrow C

3、去掉冗餘的函數依賴。

例:對於X\rightarrow W,若去掉該條函數依賴後,對於F中剩下的函數依賴,可以得到X_{F^{+}}\supset W,則該條函數依賴可去除


 

分解爲3NF(保持函數依賴)

1、求F的最小依賴集,仍記爲F。

2、對於F中爲出現的屬性,把這些屬性構成一個關係模式R0,同時把這些屬性從U中除去,剩餘的屬性仍記爲U。

3、若有X\rightarrow A\in F,且XA=U,則算法終止,否則執行第4步。

4、對F中的所有函數依賴,按具有相同左部的原則分爲k組。每一組中出現的所有屬性組成的集合爲U_{i},若U_{i}\subseteq U_{j}\left ( i\neq j \right )則去掉U_{i}。剩餘的所有U_{i}各組成一個關係模式。

 

例:有關係R_{1}<A,D,E>R_{2}<A,B,C>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

1、求F的最小依賴集

  • 右邊無多屬性,跳過
  • 左邊AB\rightarrow C爲多屬性,求得A_{F^{+}}=ADE\nsupseteq C,B_{F^{+}}=B\nsupseteq C,故不可去除
  • 去掉AB\rightarrow C,有\left ( AB \right )_{F^{+}}=ABD\nsupseteq C;去掉A\rightarrow D,有\left ( A \right )_{F^{+}}=A\nsupseteq D;去掉D\rightarrow E,有\left ( D \right )_{F^{+}}=D\nsupseteq E,故不可去除

因此,F最小依賴集爲F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

2、 F中所有屬性均有出現,故跳過該步。

3、不滿足算法終止條件,跳過該步。

4、按相同左部可分爲(A, B, C),(A, D),(D, E)。他們之間彼此不存在包含關係,因此該關係模式可分解爲R_{1}<A,B,C>R_{2}<A,D>R_{3}<D,E>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章