本週我有一個數據庫期中,我在識別BCNF違規時遇到了問題。我知道如何分解關係,並找出哪些是關鍵,哪些是超級關鍵。我也可以寫出隱含的FD。我正在看以下視頻:https://www.youtube.com/watch?v=hTFyG5o8-EA。如何指出違規BCNF?
概括起來,這位女士解釋應用BCNF算法如下關係開始(她用學生的例子,但我已經轉換成字母簡化它):
R(A,B ,C,D,E,F,G,H)與FD:A→BCG,G→H,D→EF。
我知道關鍵是AD,因爲它的關閉是AD + = ABCDEFGH。 她說,提出所有的文件描述符屬於違規行爲,並開始應用算法:
BCNF嘗試#1:
R1 = d - > EF(d + = DEF)//沒有違規,但爲什麼呢?這不僅僅是違規嗎?
R2 = ABCDEFG - (DEF - D)= ABCDGH //違規,也混淆爲什麼?它包含兩個鍵。
BCNF嘗試#2上R2:
R3 = G - > H(G + = GH)//沒有違反,因爲只有兩個屬性GH,相信
R4 = ABCDG //違規,但我不知道爲什麼。
BCNF嘗試#3 R4:
R5 = A - > BCG //沒有違反
R6 = AD //沒有違反(?)(?)
最終關係: R1,R2,R5,R6。
謝謝你的解釋和修復我的最終答案。 – mamajava
@philipxy顯示部分和傳遞的FD違反BCNF並不難。我的觀點並非將BCNF違規分類,而是對OP問題中的違規行爲給予有效(熟悉的)解釋,而這恰恰可以用這些術語來描述。爲了完整起見,我添加了一個PS。 – reaanb
@reaanb可以很容易地顯示在中正非黃金屬性的部分依賴違反BCNF,因爲他們違反2NF - 但後來,他們文件描述符不出來SKS的。要證明哪些部分,傳遞和其他依賴違反BCNF並不容易,而不參考不在SK之外的FD。既然*後者*事項,爲什麼要麻煩?部分及傳遞,從3NF熟悉的概念,是沒有用在這裏 - 除非你使用了一個3NF加就是一個最好的屬性決定,並決定集之間的差集的每一個元素的定義 - 這又是不是再部分或傳遞。 – philipxy