Normalization
辨識某個關係符合的範式
我對標準化練習有一點問題。我有以下關係:
R = {L,K,D,S,O,W}
它呈現瞭如下所示的功能依賴關係(FD):
F = { {D,S,K} -> {O}, {O} -> {K}, {O,L} -> {W} {W,L,K} -> {O}, {D,S,W} -> {L}}
我必須確定滿足什麼範式(NF)。所以我從確定候選鍵開始;他們是:
{D,S,O,L} {D,S,L,K} {D,S,K,W} {D,S,O,W}
然後,我從上到下工作(不確定這是否是好的策略)。
- 這種關係不在 BCNF 中,因為每個 FD 的左側都不包含鍵,例如
{O} -> {K}
- 我對 3NF 的定義是,對於每個重要的簡單 FD,左側包含一個密鑰,或者右側是密鑰的一部分(或者它是一個密鑰)。一切都匹配,我認為關係
R
在 3NF 中。然後我查看了處於 2NF 的條件並看到:
- 這種關係包含部分依賴,例如
{O} -> {K}
- 這種關係包含傳遞依賴。
傳遞依賴是針對每個 FD的
X -> A
,X
是鍵的子集或超集(對嗎,但是如果X
是鍵的子集,那麼這是部分依賴)?這種依賴對我不起作用
{W,L,K} -> {O}
——這是傳遞的。那麼,關係R
在 1NF 中嗎?這很奇怪,要麼我對 3NF 的定義不好,要麼這種關係在 3NF 中……但它不在 2NF 中,這是不可能的。怎麼了?
所有屬性都是素數,它們至少屬於一個候選鍵。
因此,這種關係 - 微不足道 - 在 3NF 中。
如果您查看 2NF 和 3NF 的要求,則會發現例外以“每個非主要屬性…”開頭。由於關係有 0 個非主要屬性,因此這些要求被簡單地涵蓋了。
關於您的分析,第一部分是可以的(找到候選鍵,關係不在 BCNF 中並且它在 3NF 中)。
最後一部分,關於 2NF,顯示出混亂。再次檢查 2NF 定義以及如何定義部分依賴和傳遞依賴。