資料庫MySQL 資料庫表的正規化化優化

2021-10-02 05:32:15 字數 1257 閱讀 1481

正規化化是指資料庫設計的規範,目前說道正規化化一般是指第三設計正規化。也就是要求資料表中不存在非關鍵字段對任意候選關鍵字段的傳遞函式依賴則符合第三正規化。

存在以下傳遞函式依賴關係:

(商品名稱)->(分類)->(分類描述)

也就是說存在非關鍵字段 「分類描述」對關鍵字段「商品名稱」的傳遞函式依賴。

不符合第三正規化要求的表存在以下問題:

1、資料冗餘:(分類,分類描述)對於每乙個商品都會進行記錄。

2、資料的插入異常

3、資料的更新異常

4、資料的刪除異常(刪除所有資料,分類和分類描述都會刪除,沒有所有的記錄)

如何轉換成符合第三正規化的表(拆分表):

將原來的不符合第三正規化的表拆分為3個表

商品表、分類表、分類和商品的關係表

反正規化化是指為了查詢效率的考慮把原本符合第三正規化的表「適當」的增加冗餘,以達到優化查詢效率的目的,反正規化化是一種以空間來換取時間的操作。

如何查詢訂單資訊

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的查詢效率及優化。

mysql資料庫的正規化 理解資料庫正規化

第一正規化 1nf 第一正規化的核心描述為 資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。該正規化講的是列的原子性。有兩層意思 一層是說每一列只能存乙個屬性值 如果把2個屬性值存在1列中 第二層說的是在一張表中屬性值不能重複。在現代關係行資料庫中,都是預設滿足第一正規化的,所以你想...

mysql資料庫的正規化 MySQL資料庫三大正規化

第一正規化 1nf 所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的...

mysql資料庫正規化

減小資料的冗餘性 提高效率 屬性的原子性,每列不可再分解 如 出生年月日 年 月 日 便於後續修改 記錄的惟一性,說明乙個事物 屬性必須完全依賴於主鍵,不能存在部分依賴 如 說明了三個事物 學生資訊 系資訊 課程資訊 存在的部分依賴 姓名對學號存在部分依賴 系名對學號存在部分依賴 系主任對學號存在部...