範式概念:在設計數據庫時,需要遵循的一些規範。
設計關係數據庫時,遵從不同的規範要求,設計出合理的關係型數據庫,這些不同的規範要求被稱爲不同的範式,各種範式呈遞次規範,越高的範式數據庫冗餘越小。
目前關係數據庫有六種範式:第一範式(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)。
分析選課表可知:主碼爲(學號+課程名稱),非碼屬性(分數)必須完全依賴於碼,且不存在傳遞依賴。
分析學生表可知:主碼爲學號,非碼屬性(姓名和系名)必須完全依賴於碼,且不存在傳遞依賴。
分析系表可知:主碼爲系名,非碼屬性(系主任)必須完全依賴於碼,且不存在傳遞依賴