模式R =(A,B,C,D,E)
功能依赖性F1 = {A-> BC,CD-> E,B-> D,E-> A} 功能依赖性F2 = {A-> D,A-> E,DE-> BC,B-> A,D-> C}
根据F1,候选键 - A,E,BC,CD
根据F2,候选键 - A,B,DE
架构处于3NF的条件:
对于所有X-> Y,至少下列之一为真:
1. X是超级键
2.X-> Y是微不足道的(即,Y属于X)
3. Y-X中的每个属性都包含在候选键
我知道根据F1,R在3NF中,而在F2中则不在3NF中。
根据F2,R不在3NF中,因为在功能依赖性D-> C,现在我该如何将其转换为3NF?
我尝试了以下内容:
将R分解为(A,B,D,E)(C,D)(B,C,D,E),使得依赖性也得以保留。
这是正确的还有其他方法可以分解吗?
答案 0 :(得分:2)
您示例的第三范式中的分解如下(在每个模式之后我将函数依赖项的投影放在其上):
R1 <(A D E), {A → DE, DE → A}>
R2 <(B D E), {DE → B, B → DE}>
R3 <(A B), {B → A, B → A}>
R4 <(C D), {D → C}>
使用的算法是经典Bernstein’s algorithm。该算法的草图如下:
请注意,您的分解不正确。
答案 1 :(得分:0)
因此,如果您想要分解为特定的NF(正常形式),请使用已经证明可以做到这一点的算法。