Normalization
第一範式,為什麼它好,它如何減少冗餘
我在 SO 上問了一個類似的問題,並被建議在這裡問問題類型。這是關於關係數據庫的課程。一個範例問題詢問“為什麼關係數據庫中的每個表都應該是第一範式”我的第一個問題是 3NF 是否被認為更好,所以該陳述不會是錯誤的嗎?我的第二個問題是人們說第一範式很好,因為它消除了冗餘。我不明白它是如何做到這一點的,因為 1)所有值都是原子的 2)有一個主鍵 - 這兩者都不能消除冗餘。
我想另一種方式來問它為什麼值是原子的很重要?
第一範式最重要的不是消除冗餘,而是消除重複組。
與其在一條記錄中包含多列相同類型的數據,(0NF)您將重複的資訊刪除到一個單獨的關係中並將它們表示為行。這就是構成 1NF 的原因。
具有以下列的表:
phone_1
,phone_2
,phone_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 中”一樣正確。我會說這兩個都是真的,但我會補充說“除非你有一個非常好的、經過深思熟慮的非規範化理由”。