2017-01-02 91 views
1

您能否給我提供一篇文章,其中提供了一個3NF但不包含在BCNF中的數據庫設計示例,然後說明如何將其轉換爲BCNF?我看到的所有試圖解釋BCNF的文章都給出了1NF中的表格的示例,然後將它們轉換爲BCNF。這並沒有讓我看到3NF和BCNF之間的區別。BCNF標準化

在此先感謝

+0

的可能的複製[深入淺出3NF和BCNF之間的區別(必須能夠解釋一個8歲)]( http://stackoverflow.com/questions/8437957/difference-between-3nf-and-bcnf-in-simple-terms-must-be-able-to-explain-to-an-8) – sqlvogel

回答

0

具有謂詞和匹配約束。

|員工(EMP_ID)在發送電子郵件(EMAIL)時,課程(CRS_ID)在年(YR)。

對於每個員工和課程;該員工最多隻參加一次該課程,可能有多名員工參加了該課程。

對於每位員工,該員工只有一封電子郵件。

對於每封電子郵件,只有一名員工擁有該電子郵件。

對於每個員工和課程;該員工在一年內完成了該課程。

對於每個員工和年份;該員工可能在當年參加了一門以上的課程。

對於每個課程和年份;這一年有可能有不止一名員工參加該課程。

 
R {EMP_ID, EMAIL, CRS_ID, YR} 

KEY {EMP_ID, CRS_ID} 
KEY {EMAIL, CRS_ID} 

的函數依賴於此的是

 
FD {EMP_ID, CRS_ID} --> {YR} 

FD {EMAIL, CRS_ID} --> {YR} 

FD {EMP_ID} --> {EMAIL} 

FD {EMAIL} --> {EMP_ID} 

因此,考慮這些每一個爲FD X --> Y它認爲要麼

  • X是超密鑰
  • Y是一個子項

,因此R處於第三NF。

對於BCNF,所述要求是,在任何R非平凡FD X --> Y,X是一個超密鑰。

所以,現在我們可以分解這

 
{EMP_ID, EMAIL} {EMP_ID, CRS_ID, YR} 

OR 

{EMP_ID, EMAIL} {EMAIL, CRS_ID, YR} 

這將消除這兩個函數依賴於子項。


下面是一個檢查列表2NF到BCNF

 
--------------------------------------- 
For each nontrivial |  NF 
    FD X --> Y  | 
at least one holds | 2nd 3rd BCNF 
--------------------------------------- 
X is a superkey  ✔  ✔  ✔ 

Y is a subkey   ✔  ✔ 

X is not a subkey  ✔ 
--------------------------------------- 

FD X --> Y is trivial iff Y ⊆ X