2014-02-19 77 views
1

可以將2NF中的每一個關係都製作成3NF,具有無損連接和依賴保存?每2NF關係可以做成3NF關係嗎?

編輯:

有關係R與函數依賴集F的。 R2NF中,但不在3NF中。我們可以將關係R分解爲更小的關係,它們在3NF中,並且與依賴關係構成具有無損連接?每一次都可以做到嗎?

+0

其實每個關係都可以轉換成3NF狀態。 –

+0

'每個2NF關係可以變成3NF關係嗎?'你想問怎麼轉換? –

+0

問這裏http://cs.stackexchange.com/questions得到更好的答案 –

回答

1

總之:是的 - 它可以做到。

更長的解釋。

假設我們有關係R這是介於x -> y之間。假設R是不是在2NF,新的關係PQ必須存在,其中P: x -> zQ: z -> yPQ切不可瑣碎。這裏xyz對應的功能實體(它們不是「列」在通常情況下,他們也可能是「列」,如果SQL表方面講)。

讓我們假設也是PQ沒有傳遞子關係(如R有) - 即它們屬於3NF(否則,將改變什麼,我們還是要更深入,再次重複所有,直到發現子沒有傳遞性關係的關係)。

因此,我們有:

R(x) = y, 
P(x) = z, => Q(P(x)) = y 
Q(z) = y 

這是通過傳遞關係的定義。所以,R將被分成兩個關係PR(因爲只有PQ足以建立關係x -> y,所以R是冗餘的,可與PQ被替換爲這兩條的關係)。我們的PQ在3NF,因此,我們有R轉換爲3NF關係。實際上,這是工作,它應該在歸一化2NF→3NF時完成(即以這種方式找到並解決所有傳遞關係)。