2013-03-19 47 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结果而言)。