0

我已经在 SO 上阅读了一堆涉及 BCNF 的其他线程,但是对于如何编写一个函数来确定一个关系是否在 BCNF 中给定关系及其功能依赖项列表,我仍然有点困惑。

所以很明显,如果 FD 的所有输入和输出的并集不等于关系,那么它不在 BCNF 中,但这显然也是我需要检查的全部内容。

So, say I'm given an input: 
R(A,B,C,D,E,F,G)
A->B
C,D->F
G->E

那我需要检查什么来确定它是否是BCNF?

4

1 回答 1

8

当且仅当每个函数依赖X → Y都有一个作为超键的行列式 ( X) 时,一个关系才属于 BCNF,也就是说,它决定了该关系的所有其他属性。

为了观察这一点,您可以计算行列式相对于函数依赖集的“闭包”:如果它包含所有属性,那么它就是一个超键。

因此,例如,在您的示例中,我们的闭包A本身A就是加上 B:

A+ = AB

这意味着它A不是超级键,并且关系不在 BCNF 中。事实上,你们关系的唯一关键是A C D G.

于 2016-10-08T07:38:57.273 回答