Normalization
1NF 和 2NF 是否有一致的定義?
我試圖理解第一和第二範式,我看到很多看似矛盾的資訊,或者只是不同的要求集讓我感到困惑。我有一張表,我想進入 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 個要求:
- 只有單值屬性。
- 屬性域不變。
- 每個屬性/列都有一個唯一的名稱。
- 儲存數據的順序無關緊要。
這沒有說明重複組或 PKey,但有 4 個其他要求。看起來這個例子仍然是 1NF。
然後是這篇文章,有4個要求: 定義所需的數據項,因為它們成為表中的列。
- 定義所需的數據項,因為它們成為表中的列。
- 將相關數據項放在一個表中。
- 確保沒有重複的數據組。
- 確保有一個主鍵。
1 和 2 似乎可以簡化為具有相同類型的數據,但它表示不應該有重複的數據組,並且需要有一個前兩個似乎不需要的主鍵。所以這些例子不在 1NF 中。
- 消除單個表中的重複組。
- 為每組相關數據創建一個單獨的表。
- 使用主鍵標識每組相關數據。
再次表明它不在 1NF 中。
是否需要主鍵?1NF 範例中的數據組是否像獅子一樣?是否有明確的要求清單?
“有明確的要求清單嗎?”:沒有。原因是許多研究人員認為它是關係數據模型定義的組成部分(即在 RDM 中,您有關係,而不是表,並且值不是複合的)。相反,對於其他人,您可以與復合值建立關係,並且 1NF 是排除此類關係的附加約束(在關係模型上)。
如今,它只具有歷史意義。這是引入它的原始文章的連結:大型共享數據庫的數據關係模型,並註意到它在關係數據模型定義的競賽中被描述,我認為它可以被視為的一部分模型的定義。請注意,在文章中,它被簡單地稱為範式,而 1NF 的名稱是其他研究人員在介紹其他範式時給出的。