将关系分解为第四范式

时间:2016-05-03 01:49:54

标签: relational-database normalization relation database-normalization

披露:我正在接受Stanford's online database course。那个论坛已经死了,我希望得到一些帮助。

以下是测验问题:

  

考虑具有多值依赖关系的关系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. AD
  4.   
  5. AE
  6.   
  7. ABD
  8.   

我不需要直接回答,但我错过了什么?

1 个答案:

答案 0 :(得分:1)

正确答案是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)