關係型數據庫設計:三大範式的通俗理解

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

而一般咱們用的最多的就是第一範式(1NF)、第二範式(2NF)、第三範式(3NF),也就是本文要講的「三大範式」。函數

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

舉例說明:blog

在上面的表中,「家庭信息」和「學校信息」列均不知足原子性的要求,故不知足第一範式,調整以下:get

可見,調整後的每一列都是不可再分的,所以知足第一範式(1NF);產品

 

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

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

舉例說明:im

在上圖所示的狀況中,同一個訂單中可能包含不一樣的產品,所以主鍵必須是「訂單號」和「產品號」聯合組成,d3

但能夠發現,產品數量、產品折扣、產品價格與「訂單號」和「產品號」都相關,可是訂單金額和訂單時間僅與「訂單號」相關,與「產品號」無關,

這樣就不知足第二範式的要求,調整以下,需分紅兩個表:

   

 

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

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

舉例說明:

上表中,全部屬性都徹底依賴於學號,因此知足第二範式,可是「班主任性別」和「班主任年齡」直接依賴的是「班主任姓名」,

而不是主鍵「學號」,因此需作以下調整:

  

這樣以來,就知足了第三範式的要求。

ps:若是把上表中的班主任姓名改爲班主任教工號可能更確切,更符合實際狀況,不過只要能理解就行。

相關文章
相關標籤/搜索