我已经获得了关系和功能依赖性
我希望证明它的形式是合理的,然后将其转换为 BCNF。
现在我建议它在 3NF 中,因为第二个 FD 是一个传递依赖,其 RHS 是一个关键属性。第二个 FD 也违反了 BCNF,因为 C 不是 R 的 super key 。
但是 - 我不确定如何分解为 BCNF。
如果我分解为;
这使第一个 FD 无效,并有效地使 (A,C) 成为新 key - 所以它看起来不正确!这个关系可以转化为BCNF吗?
最佳答案
Can this relation be converted to BCNF?
每个关系都可以通过应用“分析算法”在 BCNF 中进行转换,这种算法可以在任何一本关于数据库的好书中找到。
请注意,该关系有两个键:AB 和 AC,因此所有属性都是素数(因此该关系自动处于 3NF 中)。
您必须首先找到所有违反 BCNF 的依赖项,在本例中只有 C → B
,因为 C
不是 super 键。
然后将关系分解为两种关系,一种包含 C
以及由它确定的所有属性(在本例中只有 B
),另一种包含所有属性其他属性加上 C
。
所以分解实际上是:
R1(B, C), with key C, with the only (non-trivial) dependency C → B
R2(A, C), with key AC, without (non-trivial) dependencies
然后必须对每个具有违反 BCNF 依赖关系的关系重复分解,但在本例中不存在这样的关系,因为 R1
和 R2
在 BCNF 中。
最后请注意,分解不会保留依赖关系。事实上,依赖关系 AB → C
在分解中并未保留。
关于schema - 标准化并分解为 BCNF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361332/