數據庫常用三大範式

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

常用的三大範式:

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

舉例說明:

在上面的表中,“家庭信息”和“學校信息”列均不滿足原子性的要求,故不滿足第一範式,調整如下:

可見,調整後的每一列都是不可再分的,因此滿足第一範式(1NF);

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

第二範式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。

舉例說明:

在上圖所示的情況中,同一個訂單中可能包含不同的產品,因此主鍵必須是“訂單號”和“產品號”聯合組成,但可以發現,產品數量、產品折扣、產品價格與“訂單號”和“產品號”都相關,但是訂單金額和訂單時間僅與“訂單號”相關,與“產品號”無關,這樣就不滿足第二範式的要求,調整如下,需分成兩個表:

   

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

第三範式需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。

舉例說明:

上表中,所有屬性都完全依賴於學號,所以滿足第二範式,但是“班主任性別”和“班主任年齡”直接依賴的是“班主任姓名”,而不是主鍵“學號”,所以需做如下調整:

  

 

   第二範式(2NF)和第三範式(3NF)的概念很容易混淆,區分它們的關鍵點在於:

  • 2NF:非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分
  • 3NF:非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列。(不可以間接相關
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章