1. 程式人生 > >數據庫優化之結構設計

數據庫優化之結構設計

IT 規範 業務主鍵 引擎 導致 .cn 數據庫 多表 安全性

設計好處

  • 良好的數據庫邏輯設計和物理設計師數據庫獲得高性能的基礎
  • 範式化設計和反範式化設計(減少冗余、減少異常、讓數據組織的更加和諧)
  • 優化目的
    • 減少數據冗余(盡量)
    • 盡量避免數據維護中出現更新、插入和刪除等異常
      • 插入:如果表中的某個實體隨著另一個實體而存在
      • 更新:如果更改表中的某個實體的單獨屬性時,需要對多表進行更新
      • 刪除:如果刪除表中的某一時則會導致其他實體的消失

設計過程

  • 需求分析
    • 全面了解產品設計的需求
    • 存儲需求(比如一對多,多對一等)
    • 數據處理需求
    • 數據的安全性和完整性
  • 邏輯分析
    • 設計數據的邏輯結構
    • 數據實體之前的邏輯關系,解決數據冗余和維護異常
  • 物理設計
    • 根據所使用數據特點設計表結構
  • 維護優化
    • 對索引、存儲結構等進行優化
  • 範式化
    • 設計沒有數據冗余和維護異常的數據結構
  • 反範式化
    • 針對範式化而言的,在前面介紹了數據庫設計的範式,所謂的反範式化就是為了性能和讀取效率的考慮而適當的對數據庫設計範式的要求進行違法,而允許存在少量的數據冗余,換句話來說反範式化就是使用空間來換取時間

本篇單單解釋物理設計、範式化與反範式化各自優缺點;其他將在文章《數據庫優化》系列一一講明;

範式化與反範式化

  • 範式化設計的優缺點
    • 優點
      • 盡量減少數據冗余
      • 範式化的更新操作比反範式化更快
      • 範式化的表通常比反範式更小
    • 缺點
      • 對於查詢需要對多個表進行關聯(mysql限制不能超過10張表)
      • 更難進行索引優化
  • 反範式化設計的優缺點
    • 優點
      • 減少表的關聯
      • 更好進行索引優化
    • 缺點
      • 存在數據冗余及數據庫維護異常
      • 對數據修改需要更多的成本

設計範式化要求的三範式:
第一範式
* 數據庫表中的所有字段都只具有單一屬性
* 單一屬性的列是由基本的數據類型所構成的
* 設計及出來的表都是簡單的二維表
第二範式
* 要求一個表中只具有一個業務主鍵,也就是說符合第二範式的表中不能存在非主鍵列對只對部分主鍵的依賴關系
第三範式
* 數據不能存在傳遞關系,即每個屬性都跟主鍵有直接關系而不是間接關系

物理設計

  • 物理設計的內容
    • 定義數據庫、表及字段的命名規範
    • 選擇合適的存儲引擎
    • 為表中的字段選擇合適的數據類型
    • 建立數據庫結構
  • 定義數據庫、表及字段的命名規範
    • 可讀性原則
    • 表意行原則
    • 長名原則
  • 選擇合適的存儲引擎

  技術分享圖片

  • 為表中的字段選擇合適的數據類型(數據頁)
    • 當一個列可以選擇多種數據類型時,應該優先考慮數字類型,其次是日期或二進制類型,最後是字符類型。對於相同級別的數據類型,應該優先選擇占用空間小的數據類型
  • 如何為Innodb選擇主鍵
    • 主鍵應該盡可能的小
    • 主鍵應該是順序增長的
    • Innodb的主鍵和業務主鍵可以不同;

相關鏈接

《數據庫優化之實例和故事 》、《數據庫優化之什麽影響性能》

作者:不動峰
博客園:http://www.cnblogs.com/mylly/
版權所有,歡迎保留原文鏈接進行轉載:)

數據庫優化之結構設計