2013-03-19 70 views
0

我有一個關係無法這一關係分解成BCNF

R = { A, B, C, D, E, F, G, H, I } 

而且函數依賴

F ={ 
ABC -> DE 
E -> C 
AB -> F 
C -> G 
F -> H 
H -> IJ 
F -> B 
} 

我能夠做簡單的BCNF分解,但我無法分解此。我有ABC作爲唯一候選人的關鍵。然後,我把它分成兩個關係擺脫打破BCNF,E -> C第一FD的,讓我有關係

{ A, B, D, E, F, G, H, I, J } and { E, C } 

但是,現在馬上我已經失去了從第一關係的候選鍵。那麼這是否意味着我現在必須爲第一個關係尋找一個新的候選關鍵詞,然後繼續分解它的過程直到我們沒有違反BCNF的關係?有人能告訴我如何解決這個問題嗎?

編輯:

行,所以這裏是我已經在做的事情:

我現在有{ A, B, D, E, F, G, H, I, J }{ E, C }

我找到了更大的關係,一個新的密鑰。這個新密鑰是ABDEG

然後我繼續分解關係分裂的關係任何地方違反BCNF。這裏是我採取的步驟:

{ A, B, D, E, F, G, H, I, J } // { E, C } 

{ A, B, D, E, G, H, I, J } // { AB, F } // { E, C } 

{ A, B, D, E, G, H, J } // { H, I } // { AB, F } // { E, C } 

{ A, B, D, E, G, H } // { H, J } // { H, I } // { AB, F } // { E, C } 

所以最後一行是我的最終結果。這似乎是在BCNF?我的答案是否正確,我是否正確分解?

+1

如果ABC是一個候選關鍵字,那麼從E→C來看,ABE必然也是一個候選關鍵字。 – 2013-03-19 18:19:13

+0

乾杯,沒有發現。考慮到這一點,我重新審視了我的結果,並且我仍然得到了相同的答案。 – csss 2013-03-19 18:24:51

+0

有四個候選鍵:ABC,ABE,ACF和AEF。 – 2014-02-07 11:12:15

回答

2

我還沒有檢查過你的結果,但如果目的是「分解成BCNF」,那麼你的結果可能確實是正確的。

這並不意味着你的分解也是最適合來選擇。

BCNF的設計並不意味着它本身就是最好的。

你最好的機會是最合適的合適的分解,是從最不「交織」的FD開始的。例如。 H-> IJ是一個很好的候選人,因爲在其他地方我都沒有提到我和J。

所以你得到{ABCDEFGH}和{HIJ}與他們各自的FD「從原始集繼承」。

現在另一個好的候選人是C-> G。所以你得到{ABCDEFH} {CG}和{HIJ}。

現在另一個好的是F-> H。所以你得到{ABCDEF} {FH} {CG}和{HIJ}。

不,你留下了討厭的FD集ABC-> DE E-> C AB-> F F-> B。現在你選擇其中之一,並接受一些其他FD將變得無法表達的結果。

但這都不意味着你的解決方案是錯誤(就獲得BCNF結果而言)。