披露:我正在参加斯坦福大学的在线数据库课程。那里的论坛已经死了,我希望在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 -» B
或B -» D
开始。
从A-»B开始
R(A,B,C,D,E)
|
+-----------+
| |
R_1(A,B) R_2(A,C,D,E)
由于B
和D
不再处于同一关系中,因此我们没有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)
在这一点上,(A
和B
)和(B
和D
)被分解成它们自己的关系,所以我们没有违反,我们完成了。
答案选择:
在这一点上,我完全被难住了。我看不出答案选择中的任何关系,也无法想出一个能让我达到目标的想法:
- CE
- 广告
- AE
- ABD
我不需要直接的答案,但我缺少什么?
正确答案是AD
。
这是如何获得的?
考虑一下,就像函数依赖项一样,您可以拥有其他多值依赖项所隐含的多值依赖关系。例如,有一个伪传递性规则(或多值传递性规则)说:
如果X→→Y保持,Y→→Z成立,然后X→→Z−Y持有
对于该规则,可以从A →→ B
和B →→ 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)
。