2

我已经获得了关系和功能依赖

在此处输入图像描述

我希望证明它的形式是正确的,然后将其转换为 BCNF。

现在我建议它在 3NF 中,因为第二个 FD 是一个传递依赖,其关键属性是它的 RHS。第二个 FD 也违反了 BCNF,因为 C 不是 R 的超级键。

但是 - 我不确定如何分解为 BCNF。

如果我分解成;

在此处输入图像描述

这会使第一个 FD 无效,并有效地使 (A,C) 成为新密钥 - 所以它看起来不正确!这种关系可以转换为 BCNF 吗?

4

1 回答 1

2

这种关系可以转换为 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 的依赖关系的关系重复分解,但在这种情况下不存在这样的关系,因为R1R2都在 BCNF 中。

最后请注意,分解不会保留依赖关系。事实上AB → C,分解中没有保留依赖关系。

于 2016-05-21T10:02:24.400 回答