1

架構R =(A,B,C,d,E)如何將模式分解爲3NF?

函數依賴F1 = {A-> BC,CD-> E,B-> d,E-> A}
函數依賴F2根據F1,候選密鑰-A,E,BC,CD
根據F2,根據F2,根據F 1,候選密鑰-A,E,BC,CD 根據F2 ,候選鍵 - A,B,DE

條件的模式是在3NF:
對於所有X-> Y,以下各項中的至少一項爲真:
1,X是一個superke ÿ
2. X-> Y是微不足道的(即,Y屬於X)
3. YX每個屬性被包含在候選鍵

我知道R是在3NF根據F1但根據F2不在3NF中。

R不是在3NF根據F2因爲在功能依賴性D-> C,
1. d不是超密鑰
2. D-> C是不平凡
3. CD是C是不包含在任何候選鍵中。
因此,根據F2,R不在3NF中。

現在我怎麼能把它轉換成3NF?

我試過以下內容:
將R分解爲(A,B,D,E)(C,D)(B,C,D,E),以便依賴性也得以保留。

這是正確的,是否有任何其他方式分解?

回答

1

在你的例子的第三正常形式的分解是以下的(後每個架構我已經把函數依賴的突起就可以了):

R1 <(A D E), {A → DE, DE → A}>  
R2 <(B D E), {DE → B, B → DE}> 
R3 <(A B), {B → A, B → A}>  
R4 <(C D), {D → C}> 

使用的算法是經典Bernstein’s algorithm。該算法的草圖如下:

  1. 變換的依賴於規範形式:在此情況下,結果是{A→d,A→E,DE→B,B→A,d→C}
  2. 組具有相同的左側部分的依賴關係,在這種情況下:{A→DE, DE→B, B→A, d→C}
  3. 從每個組產生分解,在這種情況下:( ADE,DEB,BA,DC)
  4. 檢查一個關係是否包含在另一個(在這種情況下,這不會發生)
  5. 檢查至少一個鍵被包含在子模式(真正的,因爲鍵是{DE,B,A})

請注意,您的分解是不正確的。

0
  1. 你分解後,原來的關係消失了,而新的組件都有自己的FD(函數依賴)& CKS(候選鍵),所以你可能要繼續分解。
  2. 只是每個有問題的FD分解並不意味着沒有更多問題的FD。
  3. 根據阿姆斯特朗的公理,當一些FD持有時,其他人持有。所以可能有問題的FD,你沒有明確給出。
  4. 分解可能無法「保留」FD,即沒有組件包含FD的所有屬性,因此如果FD存在問題,則可能無法正確分解。

所以,如果你想分解到一個特定的NF(正常形式),使用已被證明可以做到這一點的算法。