1. 程式人生 > >MySQL三大範式和反範式

MySQL三大範式和反範式

博文 減少 用戶 之間 小數 字段 聲明 tails 有一種

1. 第一範式
確保數據表中每列(字段)的原子性。
如果數據表中每個字段都是不可再分的最小數據單元,則滿足第一範式。
例如:user用戶表,包含字段id,username,password

2. 第二範式
在第一範式的基礎上更進一步,目標是確保表中的每列都和主鍵相關。
如果一個關系滿足第一範式,並且除了主鍵之外的其他列,都依賴於該主鍵,則滿足第二範式。
例如:一個用戶只有一種角色,而一個角色對應多個用戶。則可以按如下方式建立數據表關系,使其滿足第二範式。
user用戶表,字段id,username,password,role_id
role角色表,字段id,name
用戶表通過角色id(role_id)來關聯角色表

3. 第三範式
在第二範式的基礎上更進一步,目標是確保表中的列都和主鍵直接相關,而不是間接相關。
例如:一個用戶可以對應多個角色,一個角色也可以對應多個用戶。則可以按如下方式建立數據表關系,使其滿足第三範式。
user用戶表,字段id,username,password
role角色表,字段id,name
user_role用戶-角色中間表,id,user_id,role_id
像這樣,通過第三張表(中間表)來建立用戶表和角色表之間的關系,同時又符合範式化的原則,就可以稱為第三範式。

4. 反範式化
反範式化指的是通過增加冗余或重復的數據來提高數據庫的讀性能。
例如:在上例中的user_role用戶-角色中間表增加字段role_name。
反範式化可以減少關聯查詢時,join表的次數。
---------------------
作者:lamp_yang_3533
來源:CSDN
原文:https://blog.csdn.net/lamp_yang_3533/article/details/50765183
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

MySQL三大範式和反範式