Database design 无法将此关系分解为BCNF

Database design 无法将此关系分解为BCNF,database-design,relational-database,normalization,Database Design,Relational Database,Normalization,我有亲戚 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的FD,E->C,给我这些关系 { A, B, D, E, F, G, H, I, J } and { E, C

我有亲戚

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的FD,
E->C
,给我这些关系

{ 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里?我的答案正确吗?我的分解正确吗?

我没有检查你的结果,但是如果目的是“分解成BCNF”,那么你的结果可能确实是正确的

这并不意味着您的分解也是最适合选择的

BCNF中的设计本身并不意味着这也是最好的

你获得最适当的分解的最好机会是从“交织”最少的FD开始。例如,H->IJ是一个很好的候选者,因为在其他任何地方都没有提到I和J

所以你可以得到{ABCDEFGH}和{HIJ},它们各自的FDs是从原始集合“继承”来的

现在另一个很好的候选者是C->G,你得到{ABCDEFH}{CG}和{HIJ}

另一个很好的例子是F->H,得到{ABCDEF}{FH}{CG}和{HIJ}

不,你只剩下一组讨厌的FD ABC->DE E->C AB->F F->B。现在你必须选择其中一个,并接受其他FD将无法表达的结果


但这一切都不意味着你的解决方案是错误的(就获得BCNF结果而言)。

如果ABC是一个候选键,那么从E->C中可以看出,ABE也必须是一个候选键。干杯,我没发现。我考虑了一下结果,仍然得到了相同的答案。有四个候选键:ABC、ABE、ACF和AEF。