我已经在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?
答案 0 :(得分:4)
当且仅当每个函数依赖X → Y
具有行列式(X
)是超级密钥时,关系才在BCNF中,也就是说,它确定了该关系的所有其他属性。
要看到这一点,你可以计算相对于函数依赖集的决定因素的“闭包”:如果它包含所有属性,那么它就是超级密钥。
因此,举例来说,在您的示例中,A
的关闭本身就是A
加上B:
A+ = AB
这意味着A
不是超级密钥,并且该关系不在BCNF中。实际上,您关系的唯一关键是A C D G
。