2016-11-17 83 views
1

我遇到了將關係轉換成BCNF關係的問題。所以首先我必須把它轉換成3NF。所以在這裏我得到了什麼。BCNF轉換是否正確?

運輸(船舶,容量,日期,貨物,價值)PK:運輸,日期。

FDs:Ship-> Capacity,(Ship,Date) - > Cargo,(Capacity,Cargo) - > Value。

這裏我得到什麼時轉換爲3NF。

R1(船舶,日期,貨物)PK:船舶,日期 R2(船舶,容量)PK:船舶 R3(Calacity,貨物,值)PK:Calacity,貨物

所以第一和第二滿足BCNF因爲

  1. 船舶,日期爲R1的主鍵和僅R1的可用FD是, 船舶,日期 - >貨物和
  2. 船舶是R2的主鍵和只有R2的可用FD被船 - >能力。

但是R3並不是因爲貨物和容量不是運輸的關鍵。所以我要再拍關係R4使得

R4(船舶,容量,貨物)

所以請有人可以驗證我的結果?這些天我正在學習BCNF。

+0

你能解釋一下這個算法嗎?我無法理解,當建立新的關係時。作爲這種關係的例子是BCNF中的Ship-> Capacity FD? – User9125

+0

航運關係的PK是船期和日期。 – User9125

+0

有一個標準算法可以分解爲BCNF。確定* BCNF中的關係是*是不同的算法/測試。 (它是前面算法的一部分。)(找到一個BCNF的定義。)儘可能地發佈一個問題,描述你需要的地方,給出你正在使用的引用,並且詢問你需要去掉什麼。 – philipxy

回答

0

分解爲BCNF的標準算法採用任何關係。你不需要先分解爲3NF。 Google的'BCNF算法'可以找到大學/大學的教科書或演示文稿。雖然https://dba.stackexchange.com/questions/139322/decompose-this-relation-into-bcnf似乎引用一個。

PS你對「只有可用的FD」的推理是不健全的。給你一些可能是封面的FD。 (也就是說只有他們跟隨的FD才能成立)。這意味着其他FD可以擁有隻涉及一些屬性的FD。因此,在一個不使用FD必須保留的其他屬性的組件中 - 即使它不在封面中。你需要學習如何計算一個'最小覆蓋',然後在最小覆蓋的情況下如何計算'關閉一組屬性'。然後,當你放棄屬性並且持有的FD是剩餘屬性集合中的那些屬性時,你可以爲它們設置掩護。請注意,上面鏈接中的算法涉及重複找到一個FD,該FD從FD集合的閉包中(有時用於原始關係,有時用於它的一個組成部分)。不只是你開始的一些封面。

PPS PK是無關緊要的。候選鍵很重要。 PK只是你選擇打電話給PK的一些CK。