數據庫3范式與反范式
發表時間:2023-07-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在日常開發過程中,我們需要對Mysql數據庫進行操作,這就涉及到表的構建,如何創建一個結構良好的數據庫表,就需要遵循以下3個數據庫范式。1. 第一范式確保數據表中每列(字段)的原子性。如果數據表中每...
在日常開發過程中,我們需要對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表的次數。
以上就是我整理到的關于MYSQL數據庫的建表范式,希望今后會對大家有所幫助。
相關文章:
MySQL索引優化之覆蓋索引
mysql字段類型選擇方法
mysql鎖和索引之間的聯系
以上就是數據庫三范式和反范式的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。