資料庫三範式和反範式

亚连
發布: 2018-05-10 10:43:12
原創
3540 人瀏覽過

在日常開發過程中,我們需要對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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!