數據庫設計三大范式


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

而通常我們用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要講的“三大范式”。

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

舉例說明:

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

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

 

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

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

舉例說明:

在上圖所示的情況中,同一個訂單中可能包含不同的產品,因此主鍵必須是“訂單號”和“產品號”聯合組成,

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

這樣就不滿足第二范式的要求,調整如下,需分成兩個表:

   

 

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

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

舉例說明:

上表中,所有屬性都完全依賴於學號,所以滿足第二范式,但是“班主任性別”和“班主任年齡”直接依賴的是“班主任姓名”,

而不是主鍵“學號”,所以需做如下調整:

  

這樣以來,就滿足了第三范式的要求。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM