1. 程式人生 > >MySQL三正規化&逆正規化

MySQL三正規化&逆正規化

一、三正規化

概念:為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則(注:在關係型資料庫中這種規則就稱為正規化) 1、確保每列/欄位保持原子性(1NF) 概念:指每個欄位不可以再拆分 案例:地區表

id(編號)   address(地址)     #可以拆分:省  市  區
1		    北京北京朝陽區
2			上海上海浦東新區
3			江蘇泰州海陵區

2、有主鍵,非主鍵欄位依賴主鍵(2NF) 概念:指每個表有一個主鍵,一個表只描述一件事 案例:使用者表

id(編號)  username(使用者名稱)  password(密碼)  address(收貨地址)

#說明:應該新增收貨地址表

3、消除傳遞依賴,非主鍵欄位不能相互依賴(3NF) 概念:一個表不能包含其他表的非主鍵欄位(一個表只能包含其他包的主鍵欄位) 案例:

#文章表
文章編號      文章標題   	 文章內容       使用者ID       #使用者姓名(不該有) 
文章表主鍵    文章表	  	 文章表		 使用者表主鍵    #使用者表非主鍵
#使用者表
使用者ID    使用者姓名   使用者年齡 ...

二、逆正規化

概念:符合正規化設計是為了減少冗餘提高讀寫效率,但有時候我們需要反其道而為之,利用空間來換時間(資料冗餘策略),該設計被稱之為“逆正規化” 案例:

#文章表
編號     標題       內容      評論總數... 
#評論表
編號     所屬使用者   所屬文章   評論內容 ....

正常流: select count(*) from 評論表 where id=當前文章的編號 逆正規化: 給文章表加一個“評論總數字段”後期評論時候給該欄位+1 設計表推薦如下欄位:編號、建立日期、更新日期、是否刪除