2016-10-08 103 views
1

我已經閱讀了一堆涉及BCNF的其他線程,但我仍然有點困惑如何編寫一個函數來確定一個關係是否在BCNF給定的關係和一個其功能依賴列表。如何確定BCNF

所以很顯然,如果FD的所有輸入和輸出的聯合不等於關係,那麼它不在BCNF中,但這顯然也是我需要檢查的。

So, say I'm given an input: 
R(A,B,C,D,E,F,G) 
A->B 
C,D->F 
G->E 

那麼我需要檢查以確定它是否是BCNF?

回答

3

一個關係在BCNF中當且僅當每個函數依賴項X → Y有一個行列式(X),這是一個超級鍵,也就是說,它確定了關係的所有其他屬性。

要看到這一點,你可以計算關於函數依賴關係集的行列式的「閉包」:如果它包含所有的屬性,那麼它就是一個超級鍵。

所以,舉例來說,在你的例子,我們有一個的A閉包是A本身以及B:

A+ = AB 

這意味着A不是超密鑰,而關係不屬於BCNF。其實,你們關係中唯一的關鍵是A C D G

+0

啊,這讓事情變得更有意義。謝謝! – djd97