我已经获得了关系和功能依赖
我希望证明它的形式是正确的,然后将其转换为 BCNF。
现在我建议它在 3NF 中,因为第二个 FD 是一个传递依赖,其关键属性是它的 RHS。第二个 FD 也违反了 BCNF,因为 C 不是 R 的超级键。
但是 - 我不确定如何分解为 BCNF。
如果我分解成;
这会使第一个 FD 无效,并有效地使 (A,C) 成为新密钥 - 所以它看起来不正确!这种关系可以转换为 BCNF 吗?
我已经获得了关系和功能依赖
我希望证明它的形式是正确的,然后将其转换为 BCNF。
现在我建议它在 3NF 中,因为第二个 FD 是一个传递依赖,其关键属性是它的 RHS。第二个 FD 也违反了 BCNF,因为 C 不是 R 的超级键。
但是 - 我不确定如何分解为 BCNF。
如果我分解成;
这会使第一个 FD 无效,并有效地使 (A,C) 成为新密钥 - 所以它看起来不正确!这种关系可以转换为 BCNF 吗?
这种关系可以转换为 BCNF 吗?
通过应用“分析算法”,可以在 BCNF 中转换每个关系,这可以在任何关于数据库的好书中找到。
请注意,该关系有两个键,AB 和 AC,因此所有属性都是素数(因此该关系自动在 3NF 中)。
您必须首先找到所有违反 BCNF 的依赖项,在这种情况下仅限C → B
,因为C
它不是超级键。
然后,您将关系分解为两个关系,一个包含C
并且所有属性由它确定(在这种情况下仅B
),另一个包括所有其他属性加上C
。
所以分解实际上是:
R1(B, C), with key C, with the only (non-trivial) dependency C → B
R2(A, C), with key AC, without (non-trivial) dependencies
然后必须对每个具有违反 BCNF 的依赖关系的关系重复分解,但在这种情况下不存在这样的关系,因为R1
和R2
都在 BCNF 中。
最后请注意,分解不会保留依赖关系。事实上AB → C
,分解中没有保留依赖关系。