一、第一範式
第一範式主要是確定資料表中每個字段的值必須具有原子性,也就是說資料表中每個字段的值為不可再次拆分的最小資料單元。

上圖為反例
符合MySQL的第一範式
二、第二範式
第二範式是指在第一範式的基礎上,確定資料表中除了主鍵之外的每個字段都必須依賴主鍵。
如下圖不符合第二範式
由于商品的名稱和價格字段不依賴于商品類别的主鍵id,是以不符合第二範式。
三、第三範式
第三範式是在第二範式的基礎上,確定資料表中的每一列都和主鍵字段直接相關,也就是說,要求資料表中的所有非主鍵字段不能依賴于其他非主鍵字段。
符合第三範式的t_goods商品資訊表
符合第三範式的t_goods_join_category關聯表
四、反範式化
如果資料庫中的資料量比較大,系統的UV和PV通路頻次比較高,則完全按照MySQL的三大範式設計資料表,讀資料時會産生大量的關聯查詢,在一定程度上會影響資料庫的讀性能。此時,可以通過在資料表中增加備援字段來提高資料庫的讀性能。
五、範式優缺點
1、優點
- 範式化的更新操作通常比反範式化要快。
- 當資料較好的範式化時,就隻有很少或者沒有重複資料,所有隻需要修改更少的資料。
- 範式化的表通常更小,可以更好的放到記憶體中,所有執行操作更快。
- 很少有多餘的資料意味着檢索清單資料時更少需要
或者DISTINCT
語句。GROUP BY
2、缺點
範式化的缺點就是需要更多的關聯,不但代價昂貴,而且優化複雜。
六、反範式化優缺點
反範式化的設計,将所有字段放到一張表中,可以很好地避免關聯。如果不使用關聯表,則對大部分查詢最差情況——即使表沒有使用索引——是全表掃描。當資料比記憶體大時,這也可能比關聯要塊很多,因為這樣可以避免随機I/O。
- 由于同一個字段,可能備援到多個表,更新複雜。
- 反範式化的表通常比較大,字段多,涉及多個索引,更新插入性能差。
好學若饑,謙卑若愚