【问题标题】:How is every binary relation BCNF?每个二元关系BCNF如何?
【发布时间】:2016-02-01 00:40:49
【问题描述】:

因此,作为我的任务的一部分,我必须证明具有两个属性的任何关系都在 BCNF 中。

根据我的理解,如果对于一个关系,我们有第三范式和一个非关键属性在功能上确定关键属性,它违反了 BCNF。

假设我的关系由两个属性 A1、A2 组成

场景1(只有一个函数依赖)

A1 -> A2 (so A1 is the key, and A2 does not FD A1 : so no violation)

同样适用

A2 -> A1

如果

A1->A2 and A2->A1

这里的键可以是A1,A2。而另一个非关键属性在功能上决定了关键。

【问题讨论】:

  • 你的推论与你要证明的东西有什么关系?另外:您解决了 BCNF 不持有的充分条件,但您没有解决所有 BCNF 情况。所以你的共鸣是不健全的。另外:当一些FD持有其他人时。 (包括琐碎的 FD)。但你没有解决这个问题。
  • 并不是每个二元关系都在 BCNF 中。您的教师忽略了当 {} 是行列式而不是 CK 时,即某些属性/子行在每个元组中必须具有相同的值但可以有多个元组,那么关系甚至不在 2NF 中,因为 { } 是一个行列式,它是比任何 CK 更合适/更小的子集。 (它可以分解为 2 个组件,其中一个是属性/子元组上的投影,另一个是所有其他属性)。正确的是,{} 不是行列式(或者是但是 CK)的每个二元关系都在 BCNF 中。

标签: database-normalization functional-dependencies bcnf


【解决方案1】:

在每个函数依赖中X -> YXY 都是属性集。当XY 是空集1 时,这需要特别注意。因此,在只有两个属性 A1A2 的示例中,我们拥有所有可能的非平凡依赖:

1. {} -> {A1}
2. {} -> {A2}
3. {} -> {A1 A2}
4. {A1} -> {A2}
5. {A2} -> {A1}

所有其他可能的依赖都是微不足道的依赖,即右集是左集的子集(例如{A1} -> {}{} -> {}{A1} -> {A1}{A1 A2} -> {A1} 等)。我们知道这些依赖总是成立的,所以在范式的定义中不考虑它们。

1.当从依赖项中排除空集时,定理为真

考虑依赖 4 和 5。我们有四种可能的情况:

1. Only 4 holds, so we have: {A1} -> {A2}

这意味着{A1} 是候选键(因为从{A1} -> {A2} 我们可以推导出{A1}->{A1 A2}),并且BCNF 条件得到满足,因为每个依赖项都有一个超键作为行列式;

2. Only 5 holds, so we have: {A2} -> {A1}

相当于前面的情况,只是交换了A1A2的角色;

3. Neither 4 nor 5 hold (no functional dependencies),

所以正式满足 BCNF(因为没有依赖项违反 BCNF);最后:

4. both hold, so we have {A1} -> {A2} and {A2} -> {A1}

在这种情况下,关系也在 BCNF 中,因为 {A1}{A2} 都是候选键,因为它们决定了所有属性(简单地将上面的 1 和 2 放在一起)。

2。当我们在函数依赖中允许空集时,定理不成立

考虑一个关系R(A1, A2),覆盖F的依赖关系

F = { {}-> {A1} }

{} -> {A1}的意思,回顾函数依赖的定义,就是A1这个列有一个常数值。所以我们有两列的关系,其中一列始终具有相同的值。在这种情况下,唯一的候选键是{A2},因为{A2}+ = {A1 A2}{A1 A2} 是一个超级键,并且该关系不在 BCNF 中,因为非平凡的函数依赖 ({} -> {A1}) 具有一个不是超级键。


1 请注意,在有关该主题的科学文献(以及有关数据库的书籍中)有时明确排除了函数依赖中空集的可能性(例如,参见:Tsou, Don -Min, and Patrick C. Fischer. “Decomposition of a Relation Scheme into Boyce-Codd Normal Form.” ACM SIGACT News 14, no. 3 (July 1, 1982): 23–29. https://doi.org/10.1145/990511.990513), 虽然有时它被允许,或不被讨论。

【讨论】:

  • 如果您使用的 BCNF 的定义在这篇文章中,那肯定会很好。 PS“因为每个依赖项都有一个超键作为行列式” 不。因为每个非平凡的 FD 都有一个超键作为行列式。 (引用您使用的定义来检查/建立您的推理/理由会有多大帮助。)“它们不被考虑在正常形式的定义中”这是错误的,并且您实际上是混乱的意思是,正如我在上一条评论中所说的那样,您并没有明确表示。 (你似乎一直想走捷径,这只是把事情搞砸了。)
【解决方案2】:
For any relation to be in BCNF, the following must holds.

X → Y is a trivial functional dependency (Y ⊆ X).

X is a superkey for schema R

Wikipedia link here

For Example, there is a relation R = {A,B} with two attributes. 
The only possible (non-trivial) FD's are {A}->{B} and {B}->{A}. 
So, there are four possible cases:

1. No FD's holds in R. {C.K = AB}, Since it is an all key relation it's always in BCNF.

2. Only A->B holds. In this case {C.K = A} and relation satisfies BCNF.

3. Only B->A holds. In this case {C.K = B} and relation satisfies BCNF.

4. Both A->B and B->A holds. In this case there are two keys {CK = A and B} and
   relation satisfies BCNF.

Hence, every Binary Relation (A relation with two attributes) is always in BCNF!

【讨论】:

  • 可以有更多的 FD,一个 FD 的形式是 set -> set。另外:并非每个二元关系都在 BCNF 中,请参阅我对问题的评论。
【解决方案3】:

证明任何具有两个属性的关系都在 BCNF 中。 Boyce-Codd 范式规则:

如果 R 处于第三范式并且对于每个 FD,LHS 是超级键,则关系 R 处于 BCNF 中

所以如果,A1 和 A2 是唯一的属性:A1 -> A2 和 A2 -> A1 作为函数依赖,那么在两个函数依赖中,左边是一个超级键。满足BCNF的条件。

【讨论】:

  • 可以有更多的 FD,一个 FD 的形式是 set -> set。另外:并非每个二元关系都在 BCNF 中,请参阅我对问题的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2013-03-08
相关资源
最近更新 更多