Normalization

為什麼在 3NF 中有這種關係?

  • February 20, 2013

我有一個關係:

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}

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