反正規化| JasonChang的學習歷程 - 點部落
文章推薦指數: 80 %
正規化的目的是降低資料的重覆性、避免資料更新異常。
然而,正規化只是建立資料表的原則,而非鐵的定律。
如果過度正規化,在查詢來自於多個資料表的 ...
摘要:反正規化
正規化的目的是降低資料的重覆性、避免資料更新異常。
然而,正規化只是建立資料表的原則,而非鐵的定律。
如果過度正規化,在查詢來自於多個資料表的大量資料時,會造成效能下降。
因此,若要以查詢(select)效能為考量,必須進行適當的反正規化,亦即將原來的第三正規化降成第二正規化,或是將第二正規化降成第一正規化。
例:描述客戶資料的正規化資料表為「客戶」與「國籍」。
客戶(客戶編號,姓名,國籍編號)
國籍(國籍編號,名稱,人口數)
此設計方法,可以使用關鍵字的查詢,很快查詢到資料,例如查詢客戶編號或國籍編號。
但是,若要查詢這兩張資料表所結合(join)的資料時,將會影響查詢效能。
因此,將「國籍」做反正規化,可以改善效能的問題。
反正規化之後:
客戶(客戶編號,姓名,國籍編號,名稱,人口數)
但是,在進行反正規化之後可能又會產生資料重覆的問題,以及資料更新的異常問題。
做反正規化之前的建議:
除非很了解系統的運作流程與商業邏輯,或是已諮詢過系統開發者,否則不輕易做資料表反正規化。
在進行資料表的反正規化之前,必須徹底了解系統中有哪些功能很頻繁地修改(update)資料表,如果系統功能很頻繁地update資料表,反正規化資料表後會影響update的效能,因為欲update的資料可能是很多筆,例如,將客戶資料表裡國籍編號為TPE的客戶update成國籍編號為TAIWAN,國籍編號為TPE的客戶可能數萬筆以上,實是造成效能上的影響。
結語:
在做系統分析時,必須依據業務需求去做適當的資料庫規畫,若需求上是以查詢(select)效能為優先考量,資料表就不需要做太多正規化。
回首頁
延伸文章資訊
- 1資料庫正規化與反正規化使用時機 - Mobile01
今天跟同事討論金流處理的設計,在資料庫方面有認知上的不同。1.我偏向DB自動產生流水號當唯一鍵和做索引,訂單編號另外 ... 反正規化資料庫,會讓後續接手的人看不懂.
- 230-17之MongoDB的設計---正規與反正規化的戰爭 - iT 邦幫忙
Database normalization is the process of organizing the fields and tables of a relational databas...
- 3為什麼我不喜歡資料庫三正規化
哥,現在學資料庫有沒有前途阿?" "當然有啊,前途大大的呢" "那我現在開始學資料庫,需要先從什麼開始呢?" "學課程的話,先了解下資料庫三正規化,SQL ...
- 4[資料庫設計]三大正規化及反正規化冗餘欄位(人渣系統詳解)
核心思想. 1.第一規格化要求消除拆分欄位至原子欄位,即不可再拆分;. 2.第二正規化要求消除部分函數依賴,實現完全函數依賴;. 3.第三正規化要求消除 ...
- 55. 反正規化資料庫的主要優點是什麼? (A)降低資料的重覆性(B ...
5. 反正規化資料庫的主要優點是什麼? (A)降低資料的重覆性 (B)避免資料更新異常 (C)提昇查詢效率 (D)提昇 ...