關於資料庫反正規化設計的一些要點

2021-09-25 21:31:38 字數 1096 閱讀 5719

在實際的開發應用中,我們常用的資料庫設計是反正規化的。原因是遵循三大正規化的資料庫設計常常帶來一定的弊端,例如,加大開發的複雜度、帶來一定的效能損耗。

·第一正規化:強調的是列的原子性,即資料庫表的每一列都是不可分割的原子資料項。

·第二正規化:要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性。

·第三正規化:任何非主屬性不依賴於其它非主屬性。也就是資料不冗餘或者通過外來鍵約束建立表的關聯

即不滿足上述三大正規化的資料庫設計

1.合理冗餘

在資料庫規範中,提倡我們儘量減少資料冗餘。但是,在實際的開發中,合理的資料冗餘反而能降低我們的開發難度、提公升查詢效率。

比如,在我的訂單表中我就利用了合理冗餘的優勢,規避了三大正規化帶來的影響。

我的訂單表中冗餘了username這個字段,並且username是那種變更頻率小或者不變更的字段。每次我在查詢訂單的時候,都需要把username這個欄位也查出來。假如我不在訂單表中冗餘username欄位,那麼每次查詢訂單的時候,我就需要進行訂單表和使用者表的聯表查詢,這個效能是非常差的。

當然,為了揚長避短,資料冗餘也有一定的限定條件:

a.變更頻率小或者不變更的內容,如省市區、姓名、性別等;

b.冗餘的資料不宜過大,過大的話會讓表占用空間過大,從而影響查詢效能

2.去除外鍵

在三大正規化中,要求我們通過外來鍵約束建立表的關聯。但是在實際開發中,常見的方案是去除外鍵,資料完整性和資料一致性由我們的程式來控制

1.減少了聯表查詢,提公升查詢效能

2.降低開發難度

1.占用更多的磁碟空間,以空間換時間

2.存在資料一致性問題。當冗餘資料發生變更時,維護起來是一件很麻煩的事情,因此適合用於那些變更頻率小或者不變更的字段。

資料庫的反正規化設計

正規化設計可以消除資料庫的資料冗餘及插入異常,但是過分的正規化設計可能導致資料查詢時需要關聯多張表,導致資料庫查詢效率下降,因此在實際工作中,需要適當的反正規化設計。符合三正規化的資料庫設計 使用者資訊表 使用者名稱 主鍵 密碼,姓名,手機號,註冊日期 圖書資訊表 圖書名稱 主鍵 出版社名詞,圖書 ...

資料庫正規化設計和反正規化設計

1 庫表設計遵從三大正規化。a 資料庫設計的第一大正規化 資料庫表中的所有欄位都只具有單一屬性 單一屬性的列是由基本資料型別所構成的 設計出來的表都是簡單的二維表。乙個列存放的資訊只是乙個屬性的資訊,不能乙個字段存放多個屬性的組合資訊。即資料庫表中的所有字段值都是不可分解的原子值 b 資料庫設計的第...

資料庫設計的正規化和反正規化介紹

正規化化 總結 一正規化就是屬性不可分割,二正規化就是要有主鍵,其他欄位都依賴於主鍵,三正規化就是要消除傳遞依賴,消除冗餘,就是各種資訊只在乙個地方儲存,不出現在多張表中 反正規化化 不滿足正規化的模型,就是反正規化模型,反正規化跟正規化所要求的正好相反,在反正規化的設計模式,並不是完全不遵守正規化...