我應該規範化我的數據庫嗎?

在現實世界中規範化

數據庫規範化是應用程序開發的神聖之一。 您所讀過的每本本科程序課程或您已閱讀過的書籍都可能會引發正常化數據庫的重要性。

現在是時候向真理主義挑戰了。 有時可以將數據庫非規範化!

你應該什麼時候正常化?

數據庫規範化可保護數據的完整性。 在許多情況下,這是一個好主意,你應該開始任何數據庫設計工作,並考慮正常化。 如果你可以規範你的數據庫,那就去吧! 事實上,下面是關於如何規範化你的數據庫的一些實用建議:

底線是,你應該規範你的數據庫,除非你有一個真正的理由不這樣做。 規範化通常是合理的設計實踐。 它減少了冗餘信息,優化了性能,並降低了由於在數據庫的不同角落中存儲相同數據而導致數據完整性問題的可能性。

一些好的理由不會正常化

也就是說,有一些很好的理由不對數據庫進行規範化。 我們來看幾個:

  1. 聯接是昂貴的 。 規範化數據庫通常涉及創建大量表。 事實上,您可以輕鬆完成您認為應該是跨越五個或十個表的簡單查詢。 如果你曾經試過做過五表連接,你知道它原則上是有效的,但它在實踐中的速度非常緩慢。 如果您正在構建一個依賴於針對大型表的多連接查詢的Web應用程序,您可能會發現自己在想“如果只有這個數據庫沒有正常化!”當您在腦海中聽到這種想法時,現在是時候了考慮反規範化。 如果您可以將該查詢使用的所有數據都粘貼到單個表中,而不會嚴重影響數據的完整性,那就去做吧! 成為一名反叛者並將你的數據庫進行非規範化。 你不會回頭看!
  2. 標準化設計很困難 。 如果您正在處理複雜的數據庫模式 ,那麼您很可能會發現自己在規範化的複雜性背後對抗桌面。 作為一個簡單的經驗法則,如果你花費了一整天的時間來弄清楚如何移動到第四範式,那麼你可能會將標準化過度。 退後一步,問自己是否值得繼續。
  1. 快速和骯髒應該快速和骯髒 。 如果你只是開發一個原型,只需快速做任何工作。 真。 沒關係。 快速的應用程序開發有時比優雅的設計更重要。 一旦你準備好超越原型階段,記得回頭仔細看看你的設計。 您為快速而骯髒的數據庫設計付出的代價是,您可能需要將其扔掉,並在需要為生產構建時重新開始。
  2. 如果你使用的是NoSQL數據庫 ,傳統的規範化是不可取的。 相反,使用更加寬容的BASE模型設計您的數據庫。 當您存儲非結構化數據(如電子郵件,圖像或視頻)時,這非常有用。

一些謹慎的詞語

數據庫規範化通常是一個好主意。 你應該盡量遵循正常化的原則,當這似乎是合理的。 但是,如果所有指標都指向標準化過於復雜而無法實施,那麼請考慮一種在保護數據的同時完成工作的方法。

最後 - 如果您確實選擇偏離正常化規則,請對您如何執行數據庫完整性保持警惕。 如果您存儲了冗餘信息,請放置觸發器和其他控件以確保信息保持一致。