数据库-优化-数据库结构的优化-表范式化优化
生活随笔
收集整理的這篇文章主要介紹了
数据库-优化-数据库结构的优化-表范式化优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據庫表的范式化優化
1、表范式化
范式化是指數據庫設計的規范,目前說道范式化一般是指第三設計范式。也就是要求數據表中不存在非關鍵字段對任意候選關鍵字段的傳遞函數依賴則符合第三范式。
存在以下傳遞函數依賴關系: (商品名稱)->(分類)->(分類描述) 也就是說存在非關鍵字段 “分類描述”對關鍵字段“商品名稱”的傳遞函數依賴。 不符合第三范式要求的表存在以下問題: 1、 數據冗余:(分類,分類描述)對于每一個商品都會進行記錄。 2、 數據的插入異常 3、 數據的更新異常 4、 數據的刪除異常(刪除所有數據,分類和分類描述都會刪除,沒有所有的記錄) 如何轉換成符合第三范式的表(拆分表): 將原來的不符合第三范式的表拆分為3個表 商品表、分類表、分類和商品的關系表2、反范式化
反范式化是指為了查詢效率的考慮把原本符合第三范式的表“適當”的增加冗余,以達到優化查詢效率的目的,反范式化是一種以空間來換取時間的操作。
如何查詢訂單信息?
select b.用戶名,b.電話,b.地址,a.訂單ID,sum(c.商品價格*c.商品數量)as 訂單價格 from 訂單表 as a join 用戶表 as b on a.用戶ID=b.訂單ID join 訂單商品表 as c on c.訂單ID=b.訂單ID group by b.用戶名,b.電話,b.地址,a.訂單ID對于這樣的表結構,對于sum(),group by會產生臨時表,增加IO量。我們怎么優化都效率不高,那我們怎么樣才能讓它效率高了,就需要一些字段進行冗余。
訂單表中增加了冗余字段,那SQL該怎么寫了?
select a.用戶名,a.電話,a.地址,a.訂單ID,a.訂單價格 from 訂單表 as a說明:表結構的設計直接涉及到SQL的查詢效率及優化。
總結
以上是生活随笔為你收集整理的数据库-优化-数据库结构的优化-表范式化优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库-优化-数据库结构的优化-数据类型
- 下一篇: 数据库-优化-数据库结构的优化-拆分优化