Normalization

1NF 和 2NF 是否有一致的定義?

  • September 8, 2021

我試圖理解第一和第二範式,我看到很多看似矛盾的資訊,或者只是不同的要求集讓我感到困惑。我有一張表,我想進入 2NF。

到目前為止,我知道每個欄位都需要是原子的才能實現 1NF,並且列中的每個欄位都必須是相同的類型。

我們以這個動物園參觀表為例:

Animal  Date        Minutes_watched Type_of_exhibit Biome Area  
Lion    10/10/2020  10      Regular     Sahara     1
Giraffe 10/10/2020  20      Special     Sahara     1
Python  4/10/2020   15      Regular     Jungle     2
Penguins4/10/2020   15      Regular     Arctic     3
Lion    10/10/2020  12      Regular     Sahara     1

我的兩個主要問題是,1NF 是否需要唯一的主鍵?並且在 1NF 中是否有像上面那樣重複的數據組(具有兩個 Lion 行,或具有生物群落和區域關係)?

這篇評價最高的 SO 文章說 1NF 只是不允許非嵌套表。這對我來說表明上表在 1NF 中。

這篇 geeksforgeeks.org 文章指出有 4 個要求:

  1. 只有單值屬性。
  2. 屬性域不變。
  3. 每個屬性/列都有一個唯一的名稱。
  4. 儲存數據的順序無關緊要。

這沒有說明重複組或 PKey,但有 4 個其他要求。看起來這個例子仍然是 1NF。

然後是這篇文章,有4個要求: 定義所需的數據項,因為它們成為表中的列。

  1. 定義所需的數據項,因為它們成為表中的列。
  2. 將相關數據項放在一個表中。
  3. 確保沒有重複的數據組。
  4. 確保有一個主鍵。

1 和 2 似乎可以簡化為具有相同類型的數據,但它表示不應該有重複的數據組,並且需要有一個前兩個似乎不需要的主鍵。所以這些例子不在 1NF 中。

https://docs.microsoft.com/en-us/office/troubleshoot/access/database-normalization-description#first-normal-form :

  1. 消除單個表中的重複組。
  2. 為每組相關數據創建一個單獨的表。
  3. 使用主鍵標識每組相關數據。

再次表明它不在 1NF 中。

是否需要主鍵?1NF 範例中的數據組是否像獅子一樣?是否有明確的要求清單?

“有明確的要求清單嗎?”:沒有。原因是許多研究人員認為它是關係數據模型定義的組成部分(即在 RDM 中,您有關係,而不是表,並且值不是複合的)。相反,對於其他人,您可以與復合值建立關係,並且 1NF 是排除此類關係的附加約束(在關係模型上)。

如今,它只具有歷史意義。這是引入它的原始文章的連結:大型共享數據庫的數據關係模型,並註意到它在關係數據模型定義的競賽中被描述,我認為它可以被視為的一部分模型的定義。請注意,在文章中,它被簡單地稱為範式,而 1NF 的名稱是其他研究人員在介紹其他範式時給出的。

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