何時在數據庫設計中應用規範化
您好數據庫管理員。最近,我一直在閱讀有關規範化的內容,以提高我的數據庫設計技能。但是,我對何時應用此技術感到有些困惑。在學習規範化之前,我通常會閱讀需求中的場景/描述,並使用名詞作為實體和動詞作為它們之間關係的線索來繪製一個 ER 圖(使用陳氏符號),然後直接執行 SQL 語句來創建桌子。
目前,在我看來,規範化是在設計 ER 圖然後將其應用於任何包含多值屬性的實體之後進行的。
我這樣想對嗎?或者我應該在創建 ER 圖之前進行規範化,也許是在列出系統的可能屬性之後?
好問題。數據庫規範化通常被教導為通過分解進行規範化的過程- 即您採用現有模式,然後通過應用從舊設計創建新模式的無損分解來改進它。在實踐中,這通常不是必需的。
如果您正在創建一個新表或一組新表,那麼您的出發點通常是您要表示的屬性列表。因此,您應該辨識屬性之間的依賴關係,然後直接基於這些依賴關係創建規範化表。通常,這可以在表格甚至添加到實際設計之前在腦海中或在紙上完成。
ER 建模不一定是實現這一目標的最佳方式。對象角色建模是一種創建語義模型的方法,它比 ER 建模更準確地擷取數據建模和業務規則的更多方面。您可以使用NORMA等工具直接從 ORM 模型生成 5NF 數據庫模式,而無需任何特定的規範化步驟。
聽起來你在 CS 課程或類似課程的某個地方學到了它(這是 IMO 的一件好事)。我也在一些課程中學到了它,我喜歡老師採取的方法:
來自其他大學、課程……的同事告訴我,他們收到了以非常理論化(因此相當無聊)的方式解釋規範化的大論文,他們不知道如何將這些理論知識轉化為 ER 圖。
另一方面,我們花了很多時間學習如何正確設計 ER 圖,構成良好且可維護的數據庫的想法,如何解決圖中以及數據庫(使用 SQL)本身中出現的問題等等. 在考慮了這些概念之後,我們被告知“你所做的就是‘標準化’”。在設計 ER 時,您已經完成了這個和那個,這是規範化的第一種形式……
對於老師提出的此類問題,我腦海中浮現的一句話是“使用經過精心設計且設計合理的 ER 模型,您已經擁有規範化的數據庫,因此您無需考慮所有形式的規範化”。
由於您的問題不是關於如何/為什麼使用規範化,而是何時在設計過程中,我認為我上面的長文本給了您一個可能的答案:當您了解良好數據庫設計的原則時,您的最終 ER 模型是規範化的(例如您創建了正確的連接表,使用的外鍵適用,…)。我認為這是一個需要與表的設置、它們的關係等齊頭並進的過程。
當然,規範化並不總是需要或想要的,但在大多數情況下,“繪製” ER 並仔細考慮它可以讓您免於通過查看模型並思考來應用規範化:“好吧,第一種形式,我的價值觀是否盡可能原子"