MySQL 資料庫設計的正規化介紹

2021-10-06 00:00:46 字數 1493 閱讀 3052

正規化概念:在設計資料庫時,需要遵循的一些規範。

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。

目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。

正規化分類:

1.第一正規化(1nf):資料庫表的每一列都是不可分割的原子資料項。

2. 第二正規化(2nf):在1nf的基礎上,非碼屬性必須完全依賴於碼(在1nf基礎上消除非主屬性對主碼的部分函式依賴)

3. 第三正規化(3nf):在2nf基礎上,任何非主屬性不依賴於其它非主屬性(在2nf基礎上消除傳遞依賴)

正規化案例:

(1)將案例表修改為滿足1nf

在表中【系】的一列可以分為【系名】和【系主任】兩列,不滿足1nf中原子列的要求,因此需要將系這一列拆分為兩列。

但是上述表在滿足1nf之後,仍然存在以下問題:

(2)將滿足1nf的表修改為滿足2nf

為了在1nf基礎上消除非主屬性對主碼的部分函式依賴,即消除姓名、系名、系主任對主碼(學號+課程名稱)的部分函式依賴,需要將表進行拆分,並刪除重複項,拆分結果如下:

上述表已經滿足2nf,已經解決了問題(1),但是還是存在問題(2)和問題(3),如下:

(3)將滿足2nf的表修改為滿足3nf

上述表中,仍然存在傳遞依賴,如:學號可以確定系名,系名可以確定系主任,因此系主任傳遞依賴於學號,為了在2nf基礎上消除傳遞依賴,需要再次分表,將存在傳遞依賴的表拆分。如下:

分析上表可知,已經解決上述問題(2)和問題(3)。

分析選課表可知:主碼為(學號+課程名稱),非碼屬性(分數)必須完全依賴於碼,且不存在傳遞依賴。

分析學生表可知:主碼為學號,非碼屬性(姓名和系名)必須完全依賴於碼,且不存在傳遞依賴。

分析係表可知:主碼為系名,非碼屬性(系主任)必須完全依賴於碼,且不存在傳遞依賴

MySQL 資料庫設計正規化

第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值,或不能有重複的屬性。第二正規化是在第一正規化的基礎上建立起來的,滿足第二正規化必須先滿足第一正規化。第二正規化要求實體的屬性完全依賴與主鍵,不能僅依賴主鍵的一部分。即非主鍵欄位需完全依賴與主...

資料庫設計的正規化和反正規化介紹

正規化化 總結 一正規化就是屬性不可分割,二正規化就是要有主鍵,其他欄位都依賴於主鍵,三正規化就是要消除傳遞依賴,消除冗餘,就是各種資訊只在乙個地方儲存,不出現在多張表中 反正規化化 不滿足正規化的模型,就是反正規化模型,反正規化跟正規化所要求的正好相反,在反正規化的設計模式,並不是完全不遵守正規化...

MySQL 資料庫設計正規化 優化

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正規化 5nf,又稱完美正規化 各種正規化呈遞次規範...