我正在关注BCNF分解的this教程。给出的功能依赖性是:
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是部分功能依赖关系。
我完全糊涂了。请帮我搞清楚。
答案 0 :(得分:2)
如果我们使用 singleton右侧编写给定的FD集合,我们有 -
A->乙
A-&以及c
A-> d
BC->一种
BC-> d
D- >乙
我们可以立即看到 2 传递依赖。我们有A-> D和D-> B因此我们不需要A-> B,并且我们也有BC-> A和A-> D因此我们不需要BC-> D 。所以现在我们有 -
A-&以及c
A-> d
BC->一种
D->乙
或
A-> CD
BC->一种
D->乙
此处的密钥为 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 as -
[R <子> 1 子>(A,C,d)
[R <子> 2 子>(B,d)