Normalization

2NF 的定義是否禁止對部分鍵或僅直接鍵的_transitive_ 依賴?

  • December 13, 2015

我們知道一個關係在 2NF 中,當且僅當它在 1NF 中並且沒有非主屬性依賴於候選鍵的真子集。但是這個定義中的“依賴”在以下意義上是嚴格的還是鬆散的:

給定依賴集

A -> B
B -> C

是關係

([D],[A],C)

(即候選鍵是{D,A})在 2NF 中?

我問的原因是給定的依賴集沒有直接{D,A}依賴關係,左側有適當的子集,但是傳遞依賴A -> C確實違反了 2NF。所以我的問題是:

在 2NF 的定義中,“不允許的”依賴是直接依賴還是傳遞依賴“算作”違規?我認為傳遞依賴確實很重要(並且上面的關係不在 2NF 中),但是按照學術文獻中通常介紹的 1NF、2NF、3NF 等的順序,傳遞依賴通常只在3NF階段。

“鬆散”依賴是正確的想法

您似乎在考慮“嚴格”與“鬆散”或“直接”與“直接或傳遞”的 FD,其中明確給出的 FD 被視為“嚴格”/“直接”的 FD。這種“傳遞性”的概念只是你選擇如何定義情況的產物。給定 FD 集的相關性僅在於它們的閉包是相關的。

2NF 的定義是指所有部分 FD 和所有完整 FD。用什麼特別的詞來描述一堆持有的東西是無關緊要的。當某些 FD 集存在時,某些其他 FD 也存在。他們都只是在場。根據定義,它們是給定的閉包中的那些。

重新給定 FD

人們只會說“這些FD持有”是一個普遍的問題。請注意,這意味著“其閉包中的所有 FD 都持有”,因為如果給定的 FD 持有,則閉包的持有——根據閉包的定義。但是,如果他們沒有說閉包中的那些是唯一持有的,那麼您(通常)在您可以確定的關係方面受到限制。所以通常他們的意思是,唯一的就是給定的閉包中的那些。即,給定的構成了持有者的掩護

此外,如果他們在實踐中這樣說,請注意他們實際上可能不知道除了給定的閉包之外沒有任何其他 FD,即它們形成了一個覆蓋。在不知道沒有其他人的情況下,可以回答“這些的閉包是什麼”,但可能無法回答“CK 是什麼”。

傳遞與非傳遞 FD

術語“傳遞”FD 和“非傳遞”FD 被定義並在 3NF 的定義中發揮作用。(非傳遞性 FD 是不傳遞性的。)但它們也沒有根據給定的 FD 定義為“直接”。

FD(功能依賴) A-> C 是傳遞性的,當有一個 X 時 A -> X 和 X -> B而不是 X -> A。(可能最後一個合取是出乎意料的。)

傳遞 FD 是那些作為所有FD 持有的結果而持有的,而不僅僅是給定的那些。

類似地,3NF 的定義是指所有傳遞 FD 和所有FD 。(2NF 加上每個非傳遞依賴於每個候選鍵的非主屬性給出 3NF。)除了“非傳遞”FD 之外,沒有“直接”FD 的概念。

引用自:https://dba.stackexchange.com/questions/123363