規範化你的數據庫
如果你一直在使用數據庫一段時間,你有可能聽說過術語規範化。 也許有人問你“數據庫是否正常化?” 或者“ BCNF中是這樣嗎?” 正常化經常被忽視,只有學者才有時間享受奢侈品。 但是,了解規範化原則並將其應用於日常數據庫設計任務並不是那麼複雜,並且可以大大提高DBMS的性能。
在本文中,我們將介紹標準化的概念並簡要介紹一下最常見的標準形式。
什麼是標準化?
規範化是有效組織數據庫中的數據的過程。 規範化過程有兩個目標:消除冗餘數據(例如,將相同的數據存儲在多個表中)並確保數據依賴性有意義(僅將相關數據存儲在表中)。 這些都是值得的目標,因為它們減少了數據庫消耗的空間量,並確保數據在邏輯上存儲。
正常形式
數據庫社區製定了一系列確保數據庫正常化的指導原則。 這些被稱為正常形式,並從一個(歸一化的最低形式,被稱為第一正常形式或1NF)到五個(第五正常形式或5NF)編號。 在實際應用中,您經常會看到1NF,2NF和3NF以及偶爾的4NF。 第五範式很罕見,本文不討論。
在我們開始討論正常形式之前,重要的是要指出它們只是指導性和指導性的。 偶爾,有必要偏離他們以滿足實際業務需求。 但是,如果發生變化,評估系統可能產生的任何後果以及可能的不一致性非常重要。 這就是說,我們來探索一下正常的形式。
第一範式(1NF)
第一範式(1NF)為有組織的數據庫設定了非常基本的規則:
- 消除同一個表中的重複列。
- 為每組相關數據創建單獨的表格,並使用唯一列或一組列( 主鍵 )標識每行。
第二範式(2NF)
第二範式(2NF)進一步解決了刪除重複數據的概念:
- 滿足第一範式的所有要求。
- 除去適用於多行表格的數據的子集,並將它們放在不同的表格中。
- 通過使用外鍵在這些新表和他們的前輩之間建立關係。
第三範式(3NF)
第三範式(3NF)更進一步:
- 滿足第二範式的所有要求。
- 刪除不依賴主鍵的列。
博伊斯 - 科德範式(BCNF或3.5NF)
博伊斯 - 科德範式也被稱為“三分之一(3.5)正常形式”,增加了一項要求:
- 滿足第三範式的所有要求。
- 每個決定因素都必須是候選關鍵字。
第四範式(4NF)
最後,第四範式(4NF)還有一個額外要求:
- 滿足第三範式的所有要求。
- 如果沒有多值依賴關係,則關係在4NF中。
請記住,這些規範化指南是累積的。 要使數據庫處於2NF中,它必須首先滿足1NF數據庫的所有條件。
我應該正常化嗎?
雖然數據庫正常化通常是一個好主意,但這不是絕對的要求。 事實上,有些情況下故意違反正常化規則是一種好的做法。 有關此主題的更多信息,請閱讀我應該規範化我的數據庫嗎?
如果你想確保你的數據庫是正常化的,從學習如何把數據庫放到第一範式開始 。