您現在的位置是:首頁 > 網頁遊戲首頁網頁遊戲

高效能表結構設計:正規化與反正規化設計

  • 由 綻放蒼穹的程式設計師 發表于 網頁遊戲
  • 2022-06-23
簡介反正規化化設計優缺點反正規化設計可以減少表的關聯可以更好的進行索引最佳化

第三正規化怎麼消除

高效能表結構設計:正規化與反正規化設計

常說的三大正規化

第一正規化

定義:屬於第一正規化關係的所有屬性都不可再分,即資料項不可分。

簡單理解:每個列都

不可以再

拆分。

第二正規化

定義:要求資料庫表中的每個例項或行必須可以被惟一地區分。

簡單理解:不要有部分依賴。該多對多就去做多對多,不要把多對多關係放在一張表

第三正規化

定義:每一個非主屬性既不部分依賴於也不傳遞依賴於業務主鍵,也就是在第二正規化的基礎上消除了非主鍵對主鍵的傳遞依賴。

簡單理解:表關聯有個主鍵就行,不要放除關聯主鍵之外的其他關聯表資料。

反正規化設計

為了效能和讀取效率的考慮而適當的對資料庫設計正規化的要求進行違反。

允許存在少量的冗餘,換句話來說反正規化化就是使用空間來換取時間。

實際工作中的反正規化實現

快取和彙總

:在一些表中加一些冗餘欄位,比如點讚的總數,對應主表的名稱。比如講一些結果提前進行處理彙總到一張表中。

計數器表

:網站點選數、使用者的朋友數、檔案下載、舉報、點贊次數等進行記錄。

分庫分表中的查詢

:大量的請求一個庫扛不住,將資料分散開。一張表的資料量太大分開幾個表進行儲存。

正規化化和反正規化對比

正規化化設計優缺點

正規化化的更新操作通常比反正規化化要快。

當資料較好地正規化化時,就只有很少或者沒有重複資料,所以只需要修改更少的資料。

正規化化的表通常更小,可以更好地放在記憶體裡,所以執行操作會更快。

很少有多餘的資料意味著檢索列表資料時更少需要DISTINCT或者GROUP BY語句。在非正規化化的結構中必須使用DISTINCT或者GROUPBY才能獲得一份唯一的列表,但是如果是一張單獨的表,很可能則只需要簡單的查詢這張表就行了。

正規化化設計的缺點是通常需要關聯。稍微複雜一些的查詢語句在符合正規化的表上都可能需要至少一次關聯,也許更多。這不但代價昂貴,也可能使一些索引策略無效。例如,正規化化可能將列存放在不同的表中,而這些列如果在一個表中本可以屬於同一個索引。

反正規化化設計優缺點

反正規化設計可以減少表的關聯

可以更好的進行索引最佳化。

反正規化設計缺點也很明顯,1、存在資料冗餘及資料維護異常,2、對資料的修改需要更多的成本。

Top