2014-04-25 32 views
1

我目前正在研究正常化。我知道如何規範化給定非標準化列表的數據。分解成2NF

但是,這是一個有點困惑我

Q. Decompose R{a,b,c,d,e,f} into 2NF using following functional dependencies. 

a -> b,c,d,e,f 
b,c -> a,d,e,f 
b -> f 
d -> e 

對於這個我的回答是:

R0 = a - > b,c 
R1 = b,c - > a,d,e 
R2 = b - > f 

誰能幫助我?

回答

2

主要有兩個問題:

  1. 有很多在你的文件描述符設置冗餘。如果首先計算最小覆蓋率,您經常會節省一些時間。

  2. 無論標準化水平如何分割關係的方式都沒有意義,。這個關係的候選鍵是ABC;但在你的回答中,你有所有鍵在R0一起,沒有別的,這是多餘的(每個表一個鍵就足夠了)和無用的(想想看,沒有什麼可以在這樣的表中查詢!再次將所有的密鑰放在R1中,這也是多餘的。

一種更好的方式來分解這種關係將是

R1(B, F), R2(D, E), R3(A, B, C, D) 

它同時滿足2NF和3NF。

順便說一句,你應該檢查出this Stanford course,這對了解標準化是非常有用的。維基百科頁面也寫得很好。

編輯回答你對評論的問題:函數依賴意味着RHS上的值由LHS上的值決定。在這種情況下,我們有

A -> BC 
BC -> A 

如果更換的東西更直觀的字母,這相當於:

post_id -> { post_title, post_date } 
{ post_title, post_date } -> post_id 

也就是說,如果你知道post_id你可以計算出兩個post_titlepost_date;同時,如果您知道post_titlepost_date,則可以追溯post_id。這是循環依賴的含義。

這就是說,在每一個關係所有的文件描述符應該保留所以R3BC -> DA -> D保持,但你並不需要ABC -> D這是不是在你的FD集,它顯然是多餘的。作爲一方,A -> D也是多餘的,因爲您已經有A -> BC, BC -> D。這就是爲什麼我提到要先計算最小覆蓋率的原因。

+0

謝謝。我很困惑,因爲b,c,d,e,f取決於a和a取決於b,c。所以在你的答案中哪一個取決於哪個?你能證明嗎? D取決於A,B,C(A,B,C - > D)? – IamBatman

+0

@IamBatman:我編輯了我的答案來回答你的問題:) – laurids