雖然這個問題很陳舊,但其他問題/答案似乎並沒有提供關於確定和分解與BCNF的關係的非常明確的逐步的一般答案。
1.確定BCNF:
對於關係R是在BCNF,所有R中保持函數依賴(FDS)需要滿足的特性,即決定X是R.即所有superkeys如果X- > Y保存在R中,那麼X必須是R的超級密鑰才能在BCNF中。
就你而言,可以看出唯一的候選鍵(最小超級鍵)是ACE。 因此兩者的FD:A-> B和C> d違反了BCNF爲A和C兩者都沒有superkeys或R.
2.分解得R導入BCNF形式:
如果R不是在BCNF ,我們將R分解成BCNF中的一組關係S.
這可以用非常簡單的算法來實現:
Initialize S = {R}
While S has a relation R' that is not in BCNF do:
Pick a FD: X->Y that holds in R' and violates BCNF
Add the relation XY to S
Update R' = R'-Y
Return S
在你的情況迭代步驟如下:
S = {ABCDE} // Intialization S = {R}
S = {ACDE, AB} // Pick FD: A->B which violates BCNF
S = {ACE, AB, CD} // Pick FD: C->D which violates BCNF
// Return S as all relations are in BCNF
因此R(A,B,C,d,E)的分解爲一組滿足BCNF的關係:R1(A,C,E),R2(A,B)和R3(C,D)。
還要注意,在這種情況下,保留了功能依賴性,但歸一化到BCNF並不能保證這一點。
我希望這會有所幫助。
來源
2013-08-23 09:13:35
xlm
您是否在側邊欄中閱讀過有關BCNF的所有問題? – 2013-02-27 01:51:35
我閱讀了一個似乎有助於分解的例子。我認爲我明白那部分沒有問題,但對於何時完全分解,我仍然有點困惑。是否當你的關係不再包含你的一個函數依賴關閉時的所有屬性? – raphnguyen 2013-02-27 02:16:43
關係在BCNF中,每個函數依賴關係中的每個「箭頭」都是候選關鍵字中的「箭頭」。 – 2013-02-27 02:22:49