我已经在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?
发布于 2016-10-08 15:38:57
关系是BCNF中的当且仅当每个函数依赖X → Y都有一个作为超键的行列式(X),也就是说,它决定了关系的所有其他属性。
要观察这一点,您可以计算行列式相对于函数依赖集的“闭包”:如果它包含所有属性,则它是超键。
例如,在您的示例中,A的闭包是A本身加上B:
A+ = AB这意味着A不是超键,关系也不在BCNF中。事实上,你们关系中唯一的关键是A C D G。
https://stackoverflow.com/questions/39929215
复制相似问题