我正在按照本教程进行 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 是部分功能依赖。
我完全糊涂了。请帮助我度过难关。
我正在按照本教程进行 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 是部分功能依赖。
我完全糊涂了。请帮助我度过难关。
如果我们用单例右侧写给定的 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
这里的键是A、BC和CD。由于关系R的每个属性在每个键中至少出现一次,因此关系 R 中的所有属性都是主要属性。
请注意,如果一个关系具有所有主要属性,则它已经在 3NF 中。
因此,给定的关系 R 在 3NF 中。我希望你明白为什么你在这里完全错了 - “给定的关系虽然没有传递 FD 但 D->B 是部分 FD”。我刚刚证明了关系在 3NF 中,这是比 2NF 更高的范式,因此反过来证明了关系在 2NF 中,因此没有部分依赖。
要在 BCNF 中,对于每个函数依赖X->Y,X应该是一个键。我们看到最后一个函数依赖 D->B 违反了这一点,因为 D 不是键。因此,要转换为 BCNF,我们可以将关系R分解为R 1和R 2为 -
R 1 (A,C,D)
R 2 (B,D)