1. 程式人生 > 其它 >mysql資料庫設計三正規化 資料庫設計三大正規化 

mysql資料庫設計三正規化 資料庫設計三大正規化 

mysql資料庫設計三大正規化 

 

1 資料庫正規化

1.1 為什麼要正規化

為什麼需要資料庫正規化呢,因為必須保證資料庫設計的合理性

  • 資料庫設計關係整個系統的架構,關係到後續的開發效率和執行效率
  • 資料庫的設計主要包含了設計表結構和表之間的聯絡

1.2 如何是合理資料庫

如何是合理資料庫

  • 結構合理
  • 冗餘較小
  • 儘量避免插入刪除修改異常

1.3 如何才能保證資料庫設計水平

如何才能保證資料庫設計水平

  • 遵循一定的規則
  • 在關係型資料庫中這種規則就稱為正規化

1.4 什麼是正規化(NF= NormalForm)

什麼是正規化(NF= NormalForm

  • 正規化是符合某一種設計要求的總結
  • 要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化

1.5 正規化的分類

第一正規化
第二正規化
第三正規化
Boyce Codd正規化=NCNF,由BoyceCodd提出的,比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 資料庫表之間關係

資料庫表之間的三種關係:

  1. 一對一
    關聯對映:一對一
    一對一關係就如球隊與球隊所在地址之間的關係,一支球隊僅有一個地址,而一個地址區也僅有一支球隊。
    資料表間一對一關係的表現有兩種,一種是外來鍵關聯,一種是主鍵關聯。圖示如下:
    一對一外來鍵關聯:
  2. 一對多
    關聯對映:一對多/多對一
    存在最普遍的對映關係,簡單來講就如球員與球隊的關係;
    一對多:從球隊角度來說一個球隊擁有多個球員 即為一對多
    多對一:從球員角度來說多個球員屬於一個球隊 即為多對一
    資料表間一對多關係如下圖:
  3. 多對多
    關聯對映:多對多
    多對多關係也很常見,例如學生與選修課之間的關係,一個學生可以選擇多門選修課,而每個選修課又可以被多名學生選擇。
    資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
    資料表間多對多關係如下圖:

2.6 三大正規化總結

正規化是指導資料設計的規範化理論,可以保證資料庫設計質量
第一正規化:欄位不能再分
第二正規化:不存在區域性依賴
第三正規化:不含傳遞依賴(間接依賴)

使用正規化可以減少冗餘,但是會降低效能
特定表的的設計可以違反第三正規化,增加冗餘提高效能

1 資料庫正規化

1.1 為什麼要正規化

為什麼需要資料庫正規化呢,因為必須保證資料庫設計的合理性

  • 資料庫設計關係整個系統的架構,關係到後續的開發效率和執行效率
  • 資料庫的設計主要包含了設計表結構和表之間的聯絡

1.2 如何是合理資料庫

如何是合理資料庫

  • 結構合理
  • 冗餘較小
  • 儘量避免插入刪除修改異常

1.3 如何才能保證資料庫設計水平

如何才能保證資料庫設計水平

  • 遵循一定的規則
  • 在關係型資料庫中這種規則就稱為正規化

1.4 什麼是正規化(NF= NormalForm)

什麼是正規化(NF= NormalForm

  • 正規化是符合某一種設計要求的總結
  • 要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化

1.5 正規化的分類

第一正規化
第二正規化
第三正規化
Boyce Codd正規化=NCNF,由BoyceCodd提出的,比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 資料庫表之間關係

資料庫表之間的三種關係:

  1. 一對一
    關聯對映:一對一
    一對一關係就如球隊與球隊所在地址之間的關係,一支球隊僅有一個地址,而一個地址區也僅有一支球隊。
    資料表間一對一關係的表現有兩種,一種是外來鍵關聯,一種是主鍵關聯。圖示如下:
    一對一外來鍵關聯:
  2. 一對多
    關聯對映:一對多/多對一
    存在最普遍的對映關係,簡單來講就如球員與球隊的關係;
    一對多:從球隊角度來說一個球隊擁有多個球員 即為一對多
    多對一:從球員角度來說多個球員屬於一個球隊 即為多對一
    資料表間一對多關係如下圖:
  3. 多對多
    關聯對映:多對多
    多對多關係也很常見,例如學生與選修課之間的關係,一個學生可以選擇多門選修課,而每個選修課又可以被多名學生選擇。
    資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
    資料表間多對多關係如下圖:

2.6 三大正規化總結

正規化是指導資料設計的規範化理論,可以保證資料庫設計質量
第一正規化:欄位不能再分
第二正規化:不存在區域性依賴
第三正規化:不含傳遞依賴(間接依賴)

使用正規化可以減少冗餘,但是會降低效能
特定表的的設計可以違反第三正規化,增加冗餘提高效能