BCNF 的归一化和分解

Normalizing & decomposing to BCNF

我得到了关系和函数依赖

我正在寻找证明其形式的合理性,然后将其转换为 BCNF。

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

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

如果我分解成;

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

Can this relation be converted to 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 不会在分解中保留。