MySQL 數據庫設計的範式介紹

範式概念:在設計數據庫時,需要遵循的一些規範。

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

目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。

範式分類:

1. 第一範式(1NF):數據庫表的每一列都是不可分割的原子數據項。

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

        2NF中相關概念的介紹(案例見下表):

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

範式案例:

(1)將案例表修改爲滿足1NF

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

  --------》 

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

(2)將滿足1NF的表修改爲滿足2NF

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

--->

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

(3)將滿足2NF的表修改爲滿足3NF

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

 ----》

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章