Normalization

第一範式,為什麼它好,它如何減少冗餘

  • June 21, 2021

我在 SO 上問了一個類似的問題,並被建議在這裡問問題類型。這是關於關係數據庫的課程。一個範例問題詢問“為什麼關係數據庫中的每個表都應該是第一範式”我的第一個問題是 3NF 是否被認為更好,所以該陳述不會是錯誤的嗎?我的第二個問題是人們說第一範式很好,因為它消除了冗餘。我不明白它是如何做到這一點的,因為 1)所有值都是原子的 2)有一個主鍵 - 這兩者都不能消除冗餘。

我想另一種方式來問它為什麼值是原子的很重要?

第一範式最重要的不是消除冗餘,而是消除重複組

與其在一條記錄中包含多列相同類型的數據,(0NF)您將重複的資訊刪除到一個單獨的關係中並將它們表示為行。這就是構成 1NF 的原因。

具有以下列的表:phone_1phone_2phone_3或包含面向列表的數據,例如:212-555-1212, 212-555-1234, 416-967-1111違反 1NF。

1NF 很重要,因為它比 0NF 靈活得多,同時在插入、更新和讀取數據時更容易使用。這是因為每種類型的數據元素(例如客戶電話號碼)都只有一列可以找到它,而該列對於每條記錄只有一條數據。這意味著您可以使用簡單的 SQL 語句來讀取或寫入單個數據元素,而無需解析分隔字元串或使用諸如:where phone_1=@Number or phone_2=@Number or phone_3=@Number等結構。

關於 1NF 與 3NF,範式是累積的。3NF 中的表也在 1NF 中,所以說“關係數據庫中的每個表都應該在 1NF 中”就像說“關係數據庫中的每個表都應該在 3NF 中”一樣正確。我會說這兩個都是真的,但我會補充說“除非你有一個非常好的、經過深思熟慮的非規範化理由”

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