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。