資料庫設計階段中為何要考慮「反規範化」

2021-09-05 20:44:42 字數 410 閱讀 9125

在設計關係型資料庫的時候,我們都會被告知,應該盡量地遵照正規化(nf)的原則去做(正規化,在有的時候也稱為規劃化),正規化的主要目標就是減少冗餘。冗餘主要的問題是:重複的資料和增加了操作的複雜性。

但正如世界上很多的事情一樣,資料庫設計也不可能是生硬的。正規化確實避免了冗餘,但也帶來了其他的問題,主要有兩個問題

1. 效能問題。因為按照正規化設計的時候,資料會被盡可能地拆分在不同的**裡面。這樣的情況下,要找到一條完整的資料,就需要對多個表進行聯接(join),這種操作毫無疑問地降低了速度。

2. 歷史資料問題。例如員工都會有職稱的資訊,但是要考慮到員工的職稱會變動。如果僅僅保留乙個職稱資訊,在某些系統中就會有問題。所以這種情況下,我們就必須考慮記錄員工職稱變動的情況。

那麼,如果為了解決上面兩類問題,我們就可能要考慮「反規範化」,即允許部分的冗餘。

sql資料庫反規範設計常用方法

一位dba朋友狼總結了乙個關於此方面的幾個原則,其實我們在設計的時候也是在不經意間也遵循了這些原則,拿來跟大家共享一下,特別有感於這些天面試程式設計師,簡歷上寫精通資料庫設計,一問就說幾個正規化,其他冗餘的資料都是垃圾,偶真是比較汗顏啊。不廢話了,原則如下 反規範化設計 為了提公升效能而使用反規範化...

資料庫設計中的命名規範

該篇部落格是緊接著上篇部落格的總結部落格,上篇部落格具體說了下工作總結需要包括的幾項及總結的意義。這篇部落格是對機房收費系統整個實現過程進行總結,主要分為三個階段 第一,系統資料庫的設計 第二,系統窗體的設計 第三,系統 的編寫。首先總結乙個經驗,第一次往往都是痛苦的,如果是做正確的事結果往往會使你...

資料庫設計中的正規化規範

主要內容 資料庫設計的要求 簡潔,結構清晰,減少冗餘,節省儲存空間。第一正規化 要求單個表中每個列必須是原子列 每一列都是不可分割的最小資料單元體 列不存在重複屬性,每個實體的屬性也不存在多個資料項。注意 資料表的主鍵可以使用聯合主鍵,避免重複屬性的出現 對年齡屬性來說,可以將乙個人的年齡設定成出生...