了解 BCNF 函数依赖

Understanding BCNF Functional Dependency

我正在学习 this BCNF 分解教程。给出的功能依赖性是:

A->BCD
BC->AD
D->B

现在,这些都与关系R(A,B,C,D)有关。 BCNF的条件包括:

The relation must be in 3NF and when X->Y, X must be a super key

给定的关系虽然没有可传递的 FD 但 D->B 是部分 FD(或者)是否三个 FD 代表 3 个独立的关系?

如果,它们代表 3 个独立的关系,为什么 D 不是键,如果它们都在同一个关系中,那么 D->B 是部分函数依赖。

我完全糊涂了。请帮我度过难关。

如果我们用 单例右侧 编写给定的 FD 集,我们有 -

A->B
A->C
A->D
BC->A
BC->D
D->B

我们可以立即看到 2 个传递依赖项。我们有 A->D 和 D->B,所以我们不需要 A->B,而且我们有 BC->A 和 A->D,所以我们不需要 BC->D。所以现在我们有 -

A->C
A->D
BC->A
D->B

A->CD
BC->A
D->B

这里的键是ABCCD。由于关系 R 的每个属性在每个键中至少出现一次,因此关系 R 中的所有属性都是主要属性。

请注意,如果一个关系具有所有主要属性,那么它已经在 3NF 中。

因此给定关系 R 在 3NF 中。我希望你明白为什么你在这里完全错了 - "The given relation though doesn't have a transitive FD but D->B is a partial FD "。我刚刚证明了关系是 3NF,这是比 2NF 更高的范式,因此反过来证明关系是 2NF,因此 没有部分依赖

要在 BCNF 中,对于每个函数依赖项 X->YX 应该是一个键。我们看到最后一个函数依赖 D->B 违反了这一点,因为 D 不是键。因此,要转换为 BCNF,我们可以将关系 R 分解为 R1 R2 为 -

R1(A,C,D)

R2(B,D)