了解BCNF功能依赖性

时间:2015-06-24 05:11:51

标签: database-normalization functional-dependencies 3nf bcnf

我正在关注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是部分功能依赖关系。

我完全糊涂了。请帮我搞清楚。

1 个答案:

答案 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)