Java學習筆記:資料庫中的正規化和反正規化
正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率、優雅的資料庫,否則可能會設計出錯誤的資料庫。
反正規化,不滿足正規化的模型,就是反正規化模型。反正規化跟正規化所要求的正好相反,在反正規化的設計模式,我們可以允許適當的資料的冗餘,用這個冗餘去取運算元據時間的縮短。本質上就是用空間來換取時間,把資料冗餘在多個表中,當查詢時可以減少或者是避免表之間的關聯。
RDBMS模型設計過程中,常常使用正規化約束我們的模型,但在NOSQL模型中則大量採用反正規化。
資料庫中正規化和反正規化的的主要區別在於:
在正規化化的資料庫中,每個事實資料會出現並且只出現一次;相反,在反正規化化的資料庫中,資訊是冗餘的,可能會儲存在多個地方。
正規化化的優點:
1)正規化化的更新操作通常比反正規化化要快。
2)當資料較好地正規化化時,就只有很少或者沒有重複資料,所以只需要修改更少的資料。
3)正規化化的表通常更小,可以更好地放在記憶體裡,所以執行操作會更快。
4)很少有多餘的資料意味著檢索列表資料時更少需要DISTINCT或者GROUP BY語句。
正規化化設計的schema的缺點是通常需要關聯,較多的關聯可能使得一些索引策略無效,例如,正規化化可能將列存放在不同的表中,而這些列如果在一個表中本可以屬於同一個索引。
反正規化的schema因為所有資料都在一張表中,可以很好地避免關聯。缺點是update操作的代價高,需要更新多個表,至於這會不會是一個問題,需要考慮更新的頻率以及更新的時長,並和執行select查詢的頻率進行比較。
從另一個父表冗餘一些資料到子表的理由通常是排序的需要。
快取衍生值也是有用的。如果需要顯示每個使用者發了多少訊息(像很多論壇做的),可以每次執行一個昂貴的子查詢來計算並顯示它;也可以在user表中建一個num_messages列,每當使用者發新訊息時更新這個值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2771616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫中的正規化和反正規化詳解!資料庫
- 資料庫學習(一)三正規化資料庫
- 手把手教你實現json巢狀物件的正規化化和反正規化化JSON巢狀物件
- 【一文秒懂】帶你徹底搞懂正規化與反正規化資料庫設計資料庫
- 正規化(Normal Form)是資料庫設計中的概念。新的正規化(paradigm)ORM資料庫
- 啥是資料庫正規化資料庫
- 資料庫三正規化資料庫
- 資料庫 三大正規化資料庫
- 資料庫三大正規化資料庫
- python 中的正規表示式學習筆記Python筆記
- 前端資料正規化化前端
- 資料庫正規化與例項資料庫
- 資料庫——三正規化理解資料庫
- 資料庫三大正規化 Mysql資料庫MySql
- 你還記得資料庫三正規化嗎?資料庫
- 正規表示式學習筆記筆記
- 八、資料庫的歸約,三大正規化(規範資料庫設計)資料庫
- 學習筆記:深度學習中的正則化筆記深度學習
- 資料庫設計三正規化資料庫
- HexMap學習筆記(四)——不規則化筆記
- Python學習筆記 - 正規表示式Python筆記
- 資料庫表設計三正規化資料庫
- 機器學習中的範數規則化-L0,L1和L2正規化機器學習
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 資料庫設計之三正規化的的理解資料庫
- 正規表示式學習筆記(1)-認識正則筆記
- 1.2.4 資料庫規範化資料庫
- 【學習筆記】之:Java命名規範筆記Java
- Python學習筆記|Python之正規表示式Python筆記
- js加固之正規表示式學習筆記JS筆記
- 資料庫系統------函式依賴與正規化資料庫函式
- 關係型資料庫設計三大正規化資料庫
- 【資料庫】關係模式的正規化的簡明判斷資料庫模式
- 關聯式資料庫的正規化(Normal Form)知識點資料庫ORM
- 史丹佛程式設計正規化第二課筆記(資料型別在記憶體中的表示)程式設計筆記資料型別記憶體
- 工作學習筆記(二) 正規表示式(轉載)筆記
- 正規表示式中的捕獲和反向引用筆記筆記
- Java學習筆記:Redis的持久化Java筆記Redis持久化