2

我正在按照教程进行 BCNF 分解。给出的功能依赖项是:

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

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

关系必须在 3NF 中,当 X->Y 时,X 必须是超级键

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

如果它们代表 3 个独立的关系,为什么 D 不是键,如果它们都处于相同的关系中,那么 D->B 是部分功能依赖。

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

4

1 回答 1

2

如果我们用单例右侧写给定的 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 中。我希望你明白为什么你在这里完全错了 - “给定的关系虽然没有传递 FD 但 D->B 是部分 FD”。我刚刚证明了关系在 3NF 中,这是比 2NF 更高的范式,因此反过来证明了关系在 2NF 中,因此没有部分依赖

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

R 1 (A,C,D)

R 2 (B,D)

于 2015-06-24T16:25:05.167 回答