假设我们有六列A B C D E F,同时删除传递依赖关系我们会遇到依赖关系 F-> E,D,C,B,A(假设F是主键)
A-> B(A是朝向B的传递密钥)
C-> D(C是朝向D的传递密钥)
在这种情况下,我们会做什么,我们会创建一个包含四列的新表,还是我们会创建两个包含两列的表?
答案 0 :(得分:2)
如果您的关系模式R(A B C D)
具有依赖关系:
A → B
C → D
然后以下事实成立:
关系的关键是:
A C
该关系既不是Boyce-Codd Normal Form,也不是因为两个依赖关系(A → B
和C → D
)违反了行列式应该是超级键的规则,也没有违反第三范式(因为,除了上一个事实,B
和D
不是主要属性。)
通过在三个关系中分解,可以在第三范式(以及Boyce-Codd范式)中转换关系:
R1(A B)
,A
为关键且唯一依赖:A → B
R2(C D)
,C
为关键且唯一依赖:C → D
R3(A C)
,A C
为关键,没有非平凡的依赖关系<强> EDITED 强>
由于您已经改变了问题,答案必须完全不同。你应该知道,为了解决规范化问题,你应该有两件事(只那两件事):
关系架构的属性列表
一组功能依赖
否需要其他信息,而提供部分信息只会造成混淆,并且不会产生正确答案。
因此,如果我理解了您的问题,您需要规范化关系模式
R(A B C D E F)
存在以下功能依赖项:
A → B
C → D
F → A B C D E
在此特定情况下,
该关系的仅(候选)键为F
;
该关系不在BCNF中,因为A → B
和C → D
都违反了行列式应该是超级密钥的规则,也不违反3NF(因为,除了之前的事实,{ {1}}和B
不是主要属性);
通过在三个关系中分解它,可以在3NF(以及BCNF)中转换关系:
D
,R1(A B)
为关键且唯一依赖:A
A → B
,R2(C D)
为关键且唯一依赖:C
C → D
,R3(A C E F)
作为关键字和依赖关系:F
,F → A
,F → C
。