Normalization
為什麼在 3NF 中有這種關係?
我有一個關係:
R4 = {{T,U,V}, {T → U, U → T, T → V}}
通過查看答案,我知道這種關係在 BCNF 中。
我正在經歷嚴格確定這種關係所遵循的正常形式的過程。我很清楚為什麼這種關係在 1NF 和 2NF 中,如果我假設它在 3NF 中,那麼 BCNF 很容易遵循。
但是,3NF 的定義指出:
每個非主屬性都非傳遞地依賴於表中的每個候選鍵。
但是,據我所知,
{T}
和{U}
都是表的候選鍵,{V}
因此傳遞依賴於{U}
.維基百科上有 3NF 的替代定義:
Carlo Zaniolo 在 1982 年給出了一個與 Codd 等價但表達方式不同的 3NF 定義。該定義表明一個表在 3NF 中當且僅當對於它的每個函式依賴 X → A,至少有一個以下條件成立:
- X 包含 A(即 X → A 是平凡的函式依賴)
- X 是一個超級鍵
- AX 的每個元素,即 A 和 X 之間的集合差,是一個素數屬性(即,AX 中的每一列都包含在某個候選鍵中)
根據這個定義,這種關係顯然在 3NF 中(所有的函式依賴都被“X 是一個超級鍵”覆蓋)。
那麼為什麼會出現差異呢?我如何誤用定義?請不要以我不想要的方式給我提供答案的捷徑,除非您也幫助我理解為什麼我的 3NF 應用(如所述)不准確。
錯誤在於您對傳遞依賴的理解。來自維基百科:傳遞依賴
在數學中,傳遞依賴是一種函式依賴,它憑藉傳遞性而成立。傳遞依賴只能出現在具有三個或更多屬性的關係中。讓 A、B 和 C 在關係中指定三個不同的屬性(或不同的屬性集合)。假設以下三個條件都成立:
1. A → B 2. It is not the case that B → A 3. B → C
那麼函式依賴 A → C(由傳遞性公理從 1 和 3 得出)是傳遞性依賴。
但是,在您的情況下,(2)不成立:
1. U → T -- correct 2. It is not the case that T → U -- wrong 3. T → V -- correct
因此
{V}
不傳遞依賴於{U}
。