簡要:每一項技術都離不開數據庫,數據庫猶如人的大腦;密不可分,一旦出了問題(故障),停頓,卡主后果可想而知;潛心學習數據庫優化3個月,現在將學到的經驗分享給大家,希望能夠跟各位PHP大神分享和學習探索,如果有不對或者好的建議告知下;*~*!
設計好處
1. 良好的數據庫邏輯設計和物理設計師數據庫獲得高性能的基礎
2. 范式化設計和反范式化設計(減少冗余、減少異常、讓數據組織的更加和諧)
3. 優化目的
? ? (1) 減少數據冗余(盡量)
? ? (2) 盡量避免數據維護中出現更新、插入和刪除等異常
? ? ? ? a. 插入:如果表中的某個實體隨著另一個實體而存在
? ? ? ? b. 更新:如果更改表中的某個實體的單獨屬性時,需要對多表進行更新
? ? ? ? c. 刪除:如果刪除表中的某一時則會導致其他實體的消失
設計過程
1. 需求分析
? ????? (1) 全面了解產品設計的需求
????????(2) 存儲需求(比如一對多,多對一等)
????????(3) 數據處理需求
????????(4) 數據的安全性和完整性
2. 邏輯分析
3. 設計數據的邏輯結構
4. 數據實體之前的邏輯關系,解決數據冗余和維護異常
5. 物理設計
????????根據所使用數據特點設計表結構
6.維護優化
????????對索引、存儲結構等進行優化
7. 范式化
????????設計沒有數據冗余和維護異常的數據結構
8. 反范式化
????????針對范式化而言的,在前面介紹了數據庫設計的范式,所謂的反范式化就是為了性能和讀取效率的考慮而適當的對數據庫設計范式的要求進行違法,而允許存在少量的數據冗余,換句話來說反范式化就是使用空間來換取時間
本篇單單解釋物理設計、范式化與反范式化各自優缺點;其他將在文章《數據庫優化》系列一一講明;
范式化與反范式化
1. 范式化設計的優缺點?
? ? ????(1) 優點
? ? ? ? ? ? ????a. 盡量減少數據冗余
????????????????b. 范式化的更新操作比反范式化更快
????????????????c. 范式化的表通常比反范式更小
? ? ? ? (2) 缺點
? ? ? ? ? ? ? ? a. 對于查詢需要對多個表進行關聯(mysql限制不能超過10張表)
????????????????b. 更難進行索引優化
2. 反范式化設計的優缺點?
? ? ????(1) 優點
? ? ? ? ? ? ? ? ? ? a. 減少表的關聯
????????????????????b. 更好進行索引優化
? ? ? ? (2) 缺點
? ? ? ? ? ? ? ? a. 存在數據冗余及數據庫維護異常
????????????????b. 對數據修改需要更多的成本
設計范式化要求的三范式:
? 第一范式?
????????* 數據庫表中的所有字段都只具有單一屬性
????????* 單一屬性的列是由基本的數據類型所構成的?
????????* 設計及出來的表都是簡單的二維表?
第二范式
? ? ? ? * 要求一個表中只具有一個業務主鍵,也就是說符合第二范式的表中不能存在非主鍵列對只對部分主鍵的依賴關系
第三范式
? ? ? ? * 數據不能存在傳遞關系,即每個屬性都跟主鍵有直接關系而不是間接關系
物理設計
1. 物理設計的內容?
? ? ????(1) 定義數據庫、表及字段的命名規范
? ? ? ? (2) 選擇合適的存儲引擎
????????(3) 為表中的字段選擇合適的數據類型
????????(4) 建立數據庫結構
2. 定義數據庫、表及字段的命名規范??
? ? ? ? (1) 可讀性原則
????????(2) 表意行原則
????????(3) 長名原則
3. 選擇合適的存儲引擎
4.?為表中的字段選擇合適的數據類型(數據頁)?
? ?????當一個列可以選擇多種數據類型時,應該優先考慮數字類型,其次是日期或二進制類型,最后是字符類型。對于相同級別的數據類型,應該優先選擇占用空間小的數據類型
5.??如何為Innodb選擇主鍵?
? ? ? ? (1) 主鍵應該盡可能的小
????????(2) 主鍵應該是順序增長的
????????(3) Innodb的主鍵和業務主鍵可以不同;
相關鏈接?
作者:不動峰
博客園:http://www.cnblogs.com/mylly/
備注:現承接企業大型網站/接口/微信公眾號/企業號/小程序,有意向的朋友請聯系(QQ:857280707)? 版權所有,歡迎保留原文鏈接進行轉載:)