将关系分解为第四范式



披露:我正在参加斯坦福大学的在线数据库课程。那里的论坛已经死了,我希望在SO上得到一些帮助。

以下是测验问题:

考虑具有多值依赖关系的关系R(A,B,C,D,E)

A -» B, B -» D

并且没有功能依赖性。假设我们将R分解为第四范式,根据我们处理4NF违规的顺序,我们可以得到不同的最终分解。以下哪种关系模式可能在最终的4NF分解中?

我的想法是:

由于我们不存在函数依赖关系,因此唯一的关键是属性集(A,B,C,D,E)。换句话说,问题中的两个多值依赖项都是违反的,我们必须对它们进行分解。

我正在遵循讲座中给出的分解算法:

计算R〔完成〕的密钥

重复,直到所有关系都处于4NF

Pick any R' with nontrivial A -» B that violates 4NF
Decompose R' into R_1(A, B) and R_2(A, rest)
Compute functional dependencies and multivalued dependencies for R_1 and R_2
Compute keys for R_1 and R_2

我看到了两种分解关系的方法:从A -» BB -» D开始。

从A-»B开始

R(A,B,C,D,E)
      |
      +-----------+
      |           |
 R_1(A,B)  R_2(A,C,D,E)

由于BD不再处于同一关系中,因此我们没有4NF冲突,并且我们完成了。在这一点上,我不知道如何计算FD、MVD和密钥。

从B-»D开始

R(A,B,C,D,E)
      |
      +-----------+
      |           |
 R_1(B,D)  R_2(B,A,C,E)
                  |
                  +----------+
                  |          |
             R_3(A,B)  R_4(A,C,E)

在这一点上,(AB)和(BD)被分解成它们自己的关系,所以我们没有违反,我们完成了。

答案选择:

在这一点上,我完全被难住了。我看不出答案选择中的任何关系,也无法想出一个能让我达到目标的想法:

  1. CE
  2. 广告
  3. AE
  4. ABD

我不需要直接的答案,但我缺少什么?

正确答案是AD

这是如何获得的?

考虑一下,就像函数依赖项一样,您可以拥有其他多值依赖项所隐含的多值依赖关系。例如,有一个伪传递性规则(或多值传递性规则)说:

如果X→→Y保持,Y→→Z成立,然后X→→Z−Y持有

对于该规则,可以从A →→ BB →→ D派生A →→ D。因此,如果你在4NF中分解关系,你可以从这个依赖关系开始,得到一个具有属性AD的表。或者,在第一次分解中,在找到R_1(A,B)R_2(A,C,D,E)之后,您应该继续分解R_2,因为它仍然包含非平凡的MVD A →→ D,以找到R_3(A, D)R_3(A, C, E)

最新更新