模式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,而在F2N则不在3NF。
根据F2,R不在3NF中,因为在函数依赖性D-> C中, 1. D不是超级钥匙 2. D-> C并非无足轻重 3. C的C-D不包含在任何候选键中。 因此根据F2,R不在3NF中。
现在我该如何将其转换为3NF?
我尝试了以下方法: 将R分解为(A,B,D,E)(C,D)(B,C,D,E),使得依赖性也被保留。
这是正确的,有没有其他方法可以分解?
您的示例的第三个正常形式的分解如下(在每个模式之后我将函数依赖项的投影放在它上面):
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。该算法的草图如下:
请注意,您的分解不正确。
因此,如果您想要分解为特定的NF(正常形式),请使用已经证明可以做到这一点的算法。