如何确定BCNF

时间:2016-10-08 06:01:21

标签: database bcnf

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

很明显,如果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?

1 个答案:

答案 0 :(得分:4)

当且仅当每个函数依赖X → Y具有行列式(X)是超级密钥时,关系才在BCNF中,也就是说,它确定了该关系的所有其他属性。

要看到这一点,你可以计算相对于函数依赖集的决定因素的“闭包”:如果它包含所有属性,那么它就是超级密钥。

因此,举例来说,在您的示例中,A的关闭本身就是A加上B:

A+ = AB

这意味着A不是超级密钥,并且该关系不在BCNF中。实际上,您关系的唯一关键是A C D G