BCNF 的归一化和分解
Normalizing & decomposing to BCNF
我得到了关系和函数依赖
我正在寻找证明其形式的合理性,然后将其转换为 BCNF。
现在我提出它在3NF中,因为第二个FD是一个传递依赖,它的RHS是一个key属性。第二个 FD 也违反了 BCNF,因为 C 不是 R 的超级键。
但是 - 我不确定如何分解为 BCNF。
如果我分解成;
这会使第一个 FD 无效,并有效地使 (A,C) 成为新密钥 - 所以它看起来不正确!这个关系可以转换成BCNF吗?
Can this relation be converted to BCNF?
每个关系都可以在BCNF中转换,通过应用“分析算法”,可以在任何关于数据库的好书上找到。
请注意,该关系有两个键,AB 和 AC,因此所有属性都是素数(因此该关系自动符合 3NF)。
您必须首先找到所有违反 BCNF 的依赖项,在本例中仅 C → B
,因为 C
不是超级键。
然后你将关系分解为两个关系,一个包含 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
不会在分解中保留。
我得到了关系和函数依赖
我正在寻找证明其形式的合理性,然后将其转换为 BCNF。
现在我提出它在3NF中,因为第二个FD是一个传递依赖,它的RHS是一个key属性。第二个 FD 也违反了 BCNF,因为 C 不是 R 的超级键。
但是 - 我不确定如何分解为 BCNF。
如果我分解成;
这会使第一个 FD 无效,并有效地使 (A,C) 成为新密钥 - 所以它看起来不正确!这个关系可以转换成BCNF吗?
Can this relation be converted to BCNF?
每个关系都可以在BCNF中转换,通过应用“分析算法”,可以在任何关于数据库的好书上找到。
请注意,该关系有两个键,AB 和 AC,因此所有属性都是素数(因此该关系自动符合 3NF)。
您必须首先找到所有违反 BCNF 的依赖项,在本例中仅 C → B
,因为 C
不是超级键。
然后你将关系分解为两个关系,一个包含 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
不会在分解中保留。