數據庫三范式和反范式

在日常開發過程中,我們需要對mysql數據庫進行操作,這就涉及到表的構建,如何創建一個結構良好的數據庫表,就需要遵循以下3個數據庫范式。

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表的次數。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享