第一范式
確保數據表中每列(字段)的原子性,即每個字段都是最小單位,不可拆分。
如:用戶表(user)中的 user_name,password,nick_name。
第二范式
在第一范式的基礎上,保證表中的每列都與主鍵相關。
如果一個關系滿足第一范式,并且除了主鍵外的其余字段都依賴于主鍵,則滿足第二范式。
如:一個用戶只有一個角色,而一個角色對于多個角色,可參考以下建表:
user 用戶表:user_id,user_name,password,nick_name,role_id
role 角色表:role_id,role_name
第三范式
在第二范式的基礎上,確保表中的列都與主鍵直接相關,而不是間接相關。
如:一個用戶可以多個角色,一個角色也可以對應多個用戶,可參考以下建表:
user 用戶表:user_id,user_name,password,nick_name
role 角色表:role_id,role_name
user_role 中間表: id,role_id,user_id
像這樣,通過中間表來建立用戶表與角色表,且符合范式化的原則,就可以稱為第三范式。
反范式
反范式指的是通過增加冗余或者重復的數據來數據庫的讀性能。
如:在上述 user_role 表中加入 role_name ,減少 join 次數。