簡體   English   中英

分解為BCNF

[英]Decomposition to BCNF

雖然我確實了解正常形式是什么,但在使用它們時遇到了麻煩。 我正在學習數據庫系統的課程,因此在某種程度上我迷失了方向。 我嘗試過Google,stackoverflow,課程幻燈片和書籍,但是每次出現的示例似乎都使我偏離了軌道。 如果我在這篇文章中做出一些錯誤的假設/結論,我將非常希望獲得一些指導,但最后我還是會缺少一些指導。

我今天參加的一個具體練習是:給定此數據庫,將其轉換為BCNF:

DB:  
AB -> EF  
F -> AB  
A -> CD

據我了解,這里有兩個可能的候選鍵。 AB和F。這是因為兩者都可以派生整個DB,並且在它們都由一個左側組成的意義上來說兩者都是最小的。

假設我們將F作為主鍵。
最初: DB(F->AB)

對於1NF,似乎沒有重復的基團。 校驗。
對於2NF,似乎沒有部分依賴性。 (用F作為唯一主鍵,這不是不可能嗎?)
對於3NF,有一個問題! AB和A都不是鍵,而是確定其他屬性。 為了解決這個問題,他們需要成為關鍵:(很抱歉,沒有下划線,似乎沒有選擇下划線的選項)

DB(F->AB)
R1(AB->EF)
R2(A->CD)

據我了解,對於BCNF,該過程如下:將3NF DB與原始DB進行比較。 查找原始DB中出現的整個3NF DB,至少存在一個右側的情況。 我不太確定怎么可能沒有這個。 也許我誤會了這部分。 無論如何,繼續;

第一次出現是F-> AB。 這是主鍵,因此可以。
第二次出現是AB-> EF。 由於AB是候選鍵,因此也可以。
最后一次出現是A-> CD。 A只是候選密鑰的一部分。 這違反了BCNF,必須重寫。 這就是我完全下車的地方。 我不知道如何重寫它,並且我不確定到目前為止該程序是否有意義。 誰能幫我把它包好嗎?

您是對的:A-> CD是違反BCNF的依賴項。 您將關系分為兩部分:

  • 違反依賴性的屬性:ACD
  • 違反依賴項(A)右側的屬性以及其余屬性:這樣就得到ABEF

因為所有功能依賴項均符合BCND規則,所以在這里停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM