Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我已经在 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?
当且仅当每个函数依赖X → Y都有一个作为超键的行列式 ( X) 时,一个关系才属于 BCNF,也就是说,它决定了该关系的所有其他属性。
X → Y
X
为了观察这一点,您可以计算行列式相对于函数依赖集的“闭包”:如果它包含所有属性,那么它就是一个超键。
因此,例如,在您的示例中,我们的闭包A本身A就是加上 B:
A
A+ = AB
这意味着它A不是超级键,并且关系不在 BCNF 中。事实上,你们关系的唯一关键是A C D G.
A C D G