關系數據庫的規范化之第一范式、第二范式、第三范式以及BC范式


  關系數據庫設計的方法之一就是設計滿足適當范式的模式,通常可以通過判斷分解后的模式達到幾范式來評價模式規范化的程度。范式有1NF,2NF,3NF,BCNF,4NF,5NF,其中1NF的級別最低。這幾種范式之間,5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF成立。通過分解,可以將一個低一級范式的關系模式轉化成若干個高一級范式的關系模式,這個過程為規范化。下面我們來看一個栗子(好吃),有錯誤的地方希望讀者可以提出改正。

 

  供應者和它所提供的零件信息,關系模式FIRST和函數依賴集F如下:

  FIRST(Sno,Sname,Status,City,Pno,Qty)(公司編號,名稱,狀態,城市,產品編號,數量)

  F={Sno->Sname,Sno->Status,Status->City,(Sno,Pno->Qty)}

  可以很明顯的看出,該關系中不含有可以再分的數據項(什么是可以再分的數據項?想象一張table,不應存在兩個相同的字段,即兩個相同的數據項。如果存在了,就說明他有了可以再分的數據項,就不是關系模式的數據庫了。存在了可再分的數據項,就要考慮新增實體,將兩個數據項分別放到兩個實體上),所以該關系滿足第一范式的條件。

   1NF 第一范式

    定義:若關系模式R的每一個分量是不可再分的數據項,則關系模式R屬於第一范式

    第一范式有四個缺點:(1)冗余度大(2)引起數據修改不一致(3)插入異常(4)刪除異常   此處對該四個缺點不進行詳細描述

  當我們使用第一范式設計數據庫的時候,會發現我們以Sno作為主鍵(碼)的時候,不能唯一標識非主鍵字段(非主屬性)Qty,但是非主屬性Sname,Status卻可以被Sno唯一標識且和Pno沒有關系,此時對於數據庫的使用會存在影響,所以要消除這種部分函數依賴的情況。消除了這種部分函數依賴關系后,所得到的兩個關系中非主屬性完全依賴於碼,這種規范稱為第二范式。

  2NF 第二范式

    定義:若關系模式R∈1NF,且每一個非主屬性完全依賴於碼,則關系模式R∈2NF

    換句話說,當第一范式消除了非主屬性對碼的部分函數依賴,則稱為2NF。

  我們將FIRST關系分解為FIRST1(Sno,Sname,Status,City)和FIRST2(Sno,Pno,Qty)后,兩關系符合了第二范式的規范,消除了部分函數依賴的關系。

  但在使用中我們發現,City依賴於Status,雖然Status依賴於Sno,但是在數據庫使用過程中我們仍希望表中的每個字段(屬性)可以依賴於主鍵(碼),這樣可以減少數據的冗余度和避免產生異常,這種規范稱為第三范式。

  3NF 第三范式

    定義:若關系模式R(U,F)中若不存在這樣的碼X,屬性組Y及非主屬性Z(Z¢Y)使用X->Y(Y-/->X),Y->Z成立,則關系模式R∈3NF。

    即當2NF消除了非主屬性對碼的傳遞函數依賴,則稱為3NF。

  BC范式

    定義:若關系模式R∈1NF,若X->Y,且Y屬於X,X必含有碼,則關系模式R∈BCNF。

    換句話說,所有的非主碼屬性都需要消除傳遞函數依賴,包括候選碼,則稱為BC范式


免責聲明!

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



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