設計好處 良好的資料庫邏輯設計和物理設計師資料庫獲得高性能的基礎 範式化設計和反範式化設計(減少冗餘、減少異常、讓數據組織的更加和諧) 優化目的 減少數據冗餘(儘量) 儘量避免數據維護中出現更新、插入和刪除等異常 插入:如果表中的某個實體隨著另一個實體而存在 更新:如果更改表中的某個實體的單獨屬性時 ...
設計好處
- 良好的資料庫邏輯設計和物理設計師資料庫獲得高性能的基礎
- 範式化設計和反範式化設計(減少冗餘、減少異常、讓數據組織的更加和諧)
- 優化目的
- 減少數據冗餘(儘量)
- 儘量避免數據維護中出現更新、插入和刪除等異常
- 插入:如果表中的某個實體隨著另一個實體而存在
- 更新:如果更改表中的某個實體的單獨屬性時,需要對多表進行更新
- 刪除:如果刪除表中的某一時則會導致其他實體的消失
設計過程
- 需求分析
- 全面瞭解產品設計的需求
- 存儲需求(比如一對多,多對一等)
- 數據處理需求
- 數據的安全性和完整性
- 邏輯分析
- 設計數據的邏輯結構
- 數據實體之前的邏輯關係,解決數據冗餘和維護異常
- 物理設計
- 根據所使用數據特點設計表結構
- 維護優化
- 對索引、存儲結構等進行優化
- 範式化
- 設計沒有數據冗餘和維護異常的數據結構
- 反範式化
- 針對範式化而言的,在前面介紹了資料庫設計的範式,所謂的反範式化就是為了性能和讀取效率的考慮而適當的對資料庫設計範式的要求進行違法,而允許存在少量的數據冗餘,換句話來說反範式化就是使用空間來換取時間
本篇單單解釋物理設計、範式化與反範式化各自優缺點;其他將在文章《資料庫優化》系列一一講明;
範式化與反範式化
- 範式化設計的優缺點
- 優點
- 儘量減少數據冗餘
- 範式化的更新操作比反範式化更快
- 範式化的表通常比反範式更小
- 缺點
- 對於查詢需要對多個表進行關聯(mysql限制不能超過10張表)
- 更難進行索引優化
- 優點
- 反範式化設計的優缺點
- 優點
- 減少表的關聯
- 更好進行索引優化
- 缺點
- 存在數據冗餘及資料庫維護異常
- 對數據修改需要更多的成本
- 優點
設計範式化要求的三範式:
第一範式
* 資料庫表中的所有欄位都只具有單一屬性
* 單一屬性的列是由基本的數據類型所構成的
* 設計及出來的表都是簡單的二維表
第二範式
* 要求一個表中只具有一個業務主鍵,也就是說符合第二範式的表中不能存在非主鍵列對只對部分主鍵的依賴關係
第三範式
* 數據不能存在傳遞關係,即每個屬性都跟主鍵有直接關係而不是間接關係
物理設計
- 物理設計的內容
- 定義資料庫、表及欄位的命名規範
- 選擇合適的存儲引擎
- 為表中的欄位選擇合適的數據類型
- 建立資料庫結構
- 定義資料庫、表及欄位的命名規範
- 可讀性原則
- 表意行原則
- 長名原則
- 選擇合適的存儲引擎
- 為表中的欄位選擇合適的數據類型(數據頁)
- 當一個列可以選擇多種數據類型時,應該優先考慮數字類型,其次是日期或二進位類型,最後是字元類型。對於相同級別的數據類型,應該優先選擇占用空間小的數據類型
- 如何為Innodb選擇主鍵
- 主鍵應該儘可能的小
- 主鍵應該是順序增長的
- Innodb的主鍵和業務主鍵可以不同;
相關鏈接
《資料庫優化之實例和故事 》、《資料庫優化之什麼影響性能》
作者:不動峰
博客園:http://www.cnblogs.com/mylly/
版權所有,歡迎保留原文鏈接進行轉載:)