mysql資料庫設計三正規化 資料庫設計三大正規化
mysql資料庫設計三大正規化
1 資料庫正規化
1.1 為什麼要正規化
為什麼需要資料庫正規化呢,因為必須保證資料庫設計的合理性
- 資料庫設計關係整個系統的架構,關係到後續的開發效率和執行效率
- 資料庫的設計主要包含了設計表結構和表之間的聯絡
1.2 如何是合理資料庫
如何是合理資料庫
- 結構合理
- 冗餘較小
- 儘量避免插入刪除修改異常
1.3 如何才能保證資料庫設計水平
如何才能保證資料庫設計水平
- 遵循一定的規則
- 在關係型資料庫中這種規則就稱為正規化
1.4 什麼是正規化(NF= NormalForm)
什麼是正規化(NF= NormalForm
)
- 正規化是符合某一種設計要求的總結
- 要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化
1.5 正規化的分類
第一正規化
第二正規化
第三正規化Boyce Codd
正規化=NCNF,由Boyce
和Codd
提出的,比3NF
又進了一步,通常認為是修正的第三正規化.
第四正規化
第五正規化
各個正規化是依次巢狀包含的,正規化越高,設計質量越高,在現實設計中也越難實現
一般資料庫設計,只要達到第三正規化,即可避免異常的出現
2 各個正規化詳解
2.1 第一正規化
2.1.1 第一正規化定義
要求:最基本的正規化
資料庫表每一列都是不可分割的基本資料項,同一列中不能有多個值
簡單說就是要確保每列保持原子性
第一正規化的合理遵循需要根據系統的實際需求來定
2.1.2 第一正規化示例
示例:使用者表(使用者名稱,家庭地址)就不合理
使用者表(使用者名稱,省,城市,詳細地址)很合理
系(系名稱,系主任,系高階職稱人數)不合理
系(系名稱,系主任,系教授人數,系副教授人數)合理
2.2 第二正規化
2.2.1 第二正規化定義
要求:第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵
而言)
即在一個數據庫表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中
2.2.2 第二正規化示例
示例:
學號和課程編號作為聯合主鍵
課程名稱只依賴於課程編號,而和學號沒有關係
分析以上的設計發現數據冗餘
如何解決呢?
- 提取出學生表
- 提取成課程表
- 提取選課表,存放選課記錄
1,學生表
2,課程表
3,選課表
2.3 第三正規化
2.3.1 第三正規化定義
要求:
- 確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關
- 屬性不依賴於其他非主屬性
示例1:學生班級表
分析以上的表,發現有問題存在 班級名稱和班級資訊出現了資料冗餘
如何解決?
1,學生表
2,班級表
2.4 正規化優缺點
正規化優點:
- 結構合理
- 冗餘較小
- 儘量避免插入刪除修改異常
缺點:
- 效能降低
- 多表查詢比單表查詢速度慢
資料庫的設計應該根據當前情況和需求做出靈活的處理。
在實際設計中,要整體遵循正規化理論。
如果在某些特定的情況下還死死遵循正規化也是不可取的,因為可能降低資料庫的效率,此時可以適當增加冗餘而提高效能。
示例:
比如經常購物車條目的中除了條目編號,商品編號,商品數量外,可以增加經常使用的商品名稱,商品價格等
商品表
訂單明細表
2.5 資料庫表之間關係
資料庫表之間的三種關係:
- 一對一
關聯對映:一對一
一對一關係就如球隊與球隊所在地址之間的關係,一支球隊僅有一個地址,而一個地址區也僅有一支球隊。
資料表間一對一關係的表現有兩種,一種是外來鍵關聯,一種是主鍵關聯。圖示如下:
一對一外來鍵關聯:
- 一對多
關聯對映:一對多/多對一
存在最普遍的對映關係,簡單來講就如球員與球隊的關係;
一對多:從球隊角度來說一個球隊擁有多個球員 即為一對多
多對一:從球員角度來說多個球員屬於一個球隊 即為多對一
資料表間一對多關係如下圖:
- 多對多
關聯對映:多對多
多對多關係也很常見,例如學生與選修課之間的關係,一個學生可以選擇多門選修課,而每個選修課又可以被多名學生選擇。
資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
資料表間多對多關係如下圖:
2.6 三大正規化總結
正規化是指導資料設計的規範化理論,可以保證資料庫設計質量
第一正規化:欄位不能再分
第二正規化:不存在區域性依賴
第三正規化:不含傳遞依賴(間接依賴)
使用正規化可以減少冗餘,但是會降低效能
特定表的的設計可以違反第三正規化,增加冗餘提高效能
1 資料庫正規化
1.1 為什麼要正規化
為什麼需要資料庫正規化呢,因為必須保證資料庫設計的合理性
- 資料庫設計關係整個系統的架構,關係到後續的開發效率和執行效率
- 資料庫的設計主要包含了設計表結構和表之間的聯絡
1.2 如何是合理資料庫
如何是合理資料庫
- 結構合理
- 冗餘較小
- 儘量避免插入刪除修改異常
1.3 如何才能保證資料庫設計水平
如何才能保證資料庫設計水平
- 遵循一定的規則
- 在關係型資料庫中這種規則就稱為正規化
1.4 什麼是正規化(NF= NormalForm)
什麼是正規化(NF= NormalForm
)
- 正規化是符合某一種設計要求的總結
- 要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化
1.5 正規化的分類
第一正規化
第二正規化
第三正規化Boyce Codd
正規化=NCNF,由Boyce
和Codd
提出的,比3NF
又進了一步,通常認為是修正的第三正規化.
第四正規化
第五正規化
各個正規化是依次巢狀包含的,正規化越高,設計質量越高,在現實設計中也越難實現
一般資料庫設計,只要達到第三正規化,即可避免異常的出現
2 各個正規化詳解
2.1 第一正規化
2.1.1 第一正規化定義
要求:最基本的正規化
資料庫表每一列都是不可分割的基本資料項,同一列中不能有多個值
簡單說就是要確保每列保持原子性
第一正規化的合理遵循需要根據系統的實際需求來定
2.1.2 第一正規化示例
示例:使用者表(使用者名稱,家庭地址)就不合理
使用者表(使用者名稱,省,城市,詳細地址)很合理
系(系名稱,系主任,系高階職稱人數)不合理
系(系名稱,系主任,系教授人數,系副教授人數)合理
2.2 第二正規化
2.2.1 第二正規化定義
要求:第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵
而言)
即在一個數據庫表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中
2.2.2 第二正規化示例
示例:
學號和課程編號作為聯合主鍵
課程名稱只依賴於課程編號,而和學號沒有關係
分析以上的設計發現數據冗餘
如何解決呢?
- 提取出學生表
- 提取成課程表
- 提取選課表,存放選課記錄
1,學生表
2,課程表
3,選課表
2.3 第三正規化
2.3.1 第三正規化定義
要求:
- 確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關
- 屬性不依賴於其他非主屬性
示例1:學生班級表
分析以上的表,發現有問題存在 班級名稱和班級資訊出現了資料冗餘
如何解決?
1,學生表
2,班級表
2.4 正規化優缺點
正規化優點:
- 結構合理
- 冗餘較小
- 儘量避免插入刪除修改異常
缺點:
- 效能降低
- 多表查詢比單表查詢速度慢
資料庫的設計應該根據當前情況和需求做出靈活的處理。
在實際設計中,要整體遵循正規化理論。
如果在某些特定的情況下還死死遵循正規化也是不可取的,因為可能降低資料庫的效率,此時可以適當增加冗餘而提高效能。
示例:
比如經常購物車條目的中除了條目編號,商品編號,商品數量外,可以增加經常使用的商品名稱,商品價格等
商品表
訂單明細表
2.5 資料庫表之間關係
資料庫表之間的三種關係:
- 一對一
關聯對映:一對一
一對一關係就如球隊與球隊所在地址之間的關係,一支球隊僅有一個地址,而一個地址區也僅有一支球隊。
資料表間一對一關係的表現有兩種,一種是外來鍵關聯,一種是主鍵關聯。圖示如下:
一對一外來鍵關聯:
- 一對多
關聯對映:一對多/多對一
存在最普遍的對映關係,簡單來講就如球員與球隊的關係;
一對多:從球隊角度來說一個球隊擁有多個球員 即為一對多
多對一:從球員角度來說多個球員屬於一個球隊 即為多對一
資料表間一對多關係如下圖:
- 多對多
關聯對映:多對多
多對多關係也很常見,例如學生與選修課之間的關係,一個學生可以選擇多門選修課,而每個選修課又可以被多名學生選擇。
資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
資料表間多對多關係如下圖:
2.6 三大正規化總結
正規化是指導資料設計的規範化理論,可以保證資料庫設計質量
第一正規化:欄位不能再分
第二正規化:不存在區域性依賴
第三正規化:不含傳遞依賴(間接依賴)
使用正規化可以減少冗餘,但是會降低效能
特定表的的設計可以違反第三正規化,增加冗餘提高效能