0

本週我有一個數據庫期中,我在識別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。

回答

2

R中的違規行爲是部分傳遞函數依賴關係。當這些FD被提取爲單獨的關係時,它們不再是部分或傳遞的。這就是我們正常化的原因,所以當他們孤立時他們停止違規應該不足爲奇。

R1/R2:在REF取決於D,候選鍵AD的子集,所以它是一個局部的依賴性。當提取到只有D作爲候選鍵的R1時,依賴關係不再是部分的。 R的其餘部分變爲R2,其仍包含部分FD(A -> BCG)和傳遞FD(A -> G -> H)。

R3/R4:在R2A -> G -> H所以G -> H是一個傳遞FD。當提取到R3時,它不是很長的傳遞。 R2的其餘部分變爲R4,但仍包含部分FD(A -> BCG)。

R5/R6:在R4BCG取決於A其是候選鍵AD的子集。當提取到只有A作爲候選鍵的R5時,依賴關係不再是部分的。 R4的其餘部分變成R6,其沒有任何非平凡的FD。

你最終的答案應該是R1,R3 ,R5和R6。

PS。請注意,並非所有BCNF違規都可以歸類爲部分或傳遞函數依賴關係。

+0

謝謝你的解釋和修復我的最終答案。 – mamajava

+0

@philipxy顯示部分和傳遞的FD違反BCNF並不難。我的觀點並非將BCNF違規分類,而是對OP問題中的違規行爲給予有效(熟悉的)解釋,而這恰恰可以用這些術語來描述。爲了完整起見,我添加了一個PS。 – reaanb

+0

@reaanb可以很容易地顯示在中正非黃金屬性的部分依賴違反BCNF,因爲他們違反2NF - 但後來,他們文件描述符不出來SKS的。要證明哪些部分,傳遞和其他依賴違反BCNF並不容易,而不參考不在SK之外的FD。既然*後者*事項,爲什麼要麻煩?部分及傳遞,從3NF熟悉的概念,是沒有用在這裏 - 除非你使用了一個3NF加就是一個最好的屬性決定,並決定集之間的差集的每一個元素的定義 - 這又是不是再部分或傳遞。 – philipxy