0

我有一個理論問題。我有關係R(A,B,C,D)和依賴B-> C,B-> D。我如何檢查是否屬於BCNF,如果不是我如何將其分解爲BCNF?問題來自一本書。我瞭解基礎知識,但用這個我沒有成功,有人可以向我解釋嗎?數據庫關係正常化到BCNF

+2

什麼書是你學習BCNF,它是如何說識別BCNF,到BCNF的算法是什麼,以及你在這個練習中到目前爲止獲得的算法,以及你卡在哪裏?你正在有效地尋求一本教科書的一章。網上有很多書籍和幻燈片。請具體說明。 – philipxy

回答

0

首先計算關閉集合R

  • {A} = {A}
  • {B} = {B,C,d}
  • {C} = {C}
  • {d} = {d}
  • {A,B} = {A,B,C,D} (這是R的關鍵字,因此我們不必計算任何包含關鍵字AB的閉包集合
  • {A,C} = { A,C}
  • {A,D} = {A,D}
  • {B,C} = {B,C,d}
  • {B,d} = {B,C,d}
  • {C,d} = {C,d}
  • {A ,C,D} = {A,B,C,D}(也是一個關鍵字,因爲它包含關閉中的所有屬性R)。
  • {B,C,d} = {B,C,d}

集如{A,B,C}並沒有計算爲{A,B}(密鑰)是一個子集。接下來,我們必須確定新的FD(功能依賴)。我不會解釋這個過程,因爲我確定你的教科書會描述它。的依賴關係是:

  • 乙 - 「ç
  • 乙 - > d
  • AB - 」ç
  • AB - > d
  • BC - > d
  • BD - 「ç
  • ACD - >乙:

現在,每次在它的左s表示沒有超密鑰FD ide,是BCNF違規行爲。我們可以使用這種違規行爲來拆分關係R。我們違反的FD是B→C,B→D,BC→D和BD→C。我們可以將關係分解爲FD B→C。分裂關係的第一個「一半」將包含所有FD左側的屬性關閉元素,在這種情況下屬性B。所以我們的第一個關係將是R11(B, C, D)。我們的第二個關係將包含FD的左側(B)和不屬於B關閉的屬性,屬性A。所以我們得到關係R12(A,B)。現在讓我們看看:關係R12當然在BCNF中,因爲它只包含兩個屬性。現在我們來檢查關係R11。此關係的新密鑰爲B,因爲B的結尾包含R11的所有屬性。沒有任何FD關於R11有效,因爲它們都在其左側包含B。所以這兩個關係都在BCNF。我希望這對你來說已經夠清楚了。

編輯:只有現在注意到這個職位是4個月前...那麼我希望它仍然有用(可能是其他成員正在搜索這個主題)。