R 在 3NF 中当且仅当 R 在 BCNF 中?
R in 3NF if and only if R in BCNF?
考虑关系 R
和函数依赖集 F
,仅包括一个函数依赖:{X->A}
。
证明如果 R 在 3NF 中当且仅当 R 在 BCNF 中。
到目前为止,<- 方向根据定义是微不足道的。但我努力向 -> 方向努力。我们对 F-closure
了解多少?根据定义,我需要检查 F-closure
中的每个函数依赖性 Y->B
,它的琐碎或 Y 是超级键。是否有关于我遗漏的 R 超级密钥的一些结论?
这是证明的草图。
BCNF 中的关系模式暗示该模式也在 3NF 中的事实是由于 3NF 的定义(每个行列式是一个超键或仅暗示素数属性,我们知道每个行列式是一个超键,因为架构在 BCNF 中)。
所以我们必须证明如果关系是3NF,那么它也是BCNF。
现在考虑唯一的依赖项 {X->A}
。对于 3NF 的定义,X
是超键,或者 A
是素数。
在第一种情况下,如果 X
是一个超键,我们知道模式也在 BCNF 中。
因此,我们只需要检查 X
不是(超级)键且 A
是质数的情况。
我们可以通过以下步骤证明这种情况是不可能的。
我们只有两种可能,要么X
包含A
,要么不包含。
如果 X
包含 A
那么这个依赖是微不足道的,而且,因为没有其他依赖,X
是一个键,这违反了我们的假设,所以我们有矛盾。
另一方面,如果 X
不包含在 A
中,那么 X
又是一个键,这再次与我们的假设相矛盾。
最后,请注意,在这个证明中,我假设 R
中没有其他属性来自 XU{A}
的一部分,否则那些其他属性应该出现在关系的任何键中,并且至少应该有另一个依赖关系。
考虑关系 R
和函数依赖集 F
,仅包括一个函数依赖:{X->A}
。
证明如果 R 在 3NF 中当且仅当 R 在 BCNF 中。
到目前为止,<- 方向根据定义是微不足道的。但我努力向 -> 方向努力。我们对 F-closure
了解多少?根据定义,我需要检查 F-closure
中的每个函数依赖性 Y->B
,它的琐碎或 Y 是超级键。是否有关于我遗漏的 R 超级密钥的一些结论?
这是证明的草图。
BCNF 中的关系模式暗示该模式也在 3NF 中的事实是由于 3NF 的定义(每个行列式是一个超键或仅暗示素数属性,我们知道每个行列式是一个超键,因为架构在 BCNF 中)。
所以我们必须证明如果关系是3NF,那么它也是BCNF。
现在考虑唯一的依赖项 {X->A}
。对于 3NF 的定义,X
是超键,或者 A
是素数。
在第一种情况下,如果 X
是一个超键,我们知道模式也在 BCNF 中。
因此,我们只需要检查 X
不是(超级)键且 A
是质数的情况。
我们可以通过以下步骤证明这种情况是不可能的。
我们只有两种可能,要么X
包含A
,要么不包含。
如果
X
包含A
那么这个依赖是微不足道的,而且,因为没有其他依赖,X
是一个键,这违反了我们的假设,所以我们有矛盾。另一方面,如果
X
不包含在A
中,那么X
又是一个键,这再次与我们的假设相矛盾。
最后,请注意,在这个证明中,我假设 R
中没有其他属性来自 XU{A}
的一部分,否则那些其他属性应该出现在关系的任何键中,并且至少应该有另一个依赖关系。