如何确定BCNF

问题描述 投票:1回答:1

我已经在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?

database bcnf
1个回答
4
投票

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

要看到这一点,您可以计算关于函数依赖集的行列式的“闭包”:如果它包含所有属性,那么它就是超级键。

所以,例如,在你的例子中,我们得到A的封闭是A本身加上B:

A+ = AB

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

© www.soinside.com 2019 - 2024. All rights reserved.