如果我们找到两个传递关系,我们将在归一化中做些什么

时间:2015-12-26 06:53:08

标签: normalization

假设我们有六列A B C D E F,同时删除传递依赖关系我们会遇到依赖关系 F-> E,D,C,B,A(假设F是主键)

  

A-> B(A是朝向B的传递密钥)

     

C-> D(C是朝向D的传递密钥)

在这种情况下,我们会做什么,我们会创建一个包含四列的新表,还是我们会创建两个包含两列的表?

1 个答案:

答案 0 :(得分:2)

如果您的关系模式R(A B C D)具有依赖关系:

A → B
C → D

然后以下事实成立:

  • 关系的关键是:

    A C

  • 该关系既不是Boyce-Codd Normal Form,也不是因为两个依赖关系(A → BC → D)违反了行列式应该是超级键的规则,也没有违反第三范式(因为,除了上一个事实,BD不是主要属性。)

  • 通过在三个关系中分解,可以在第三范式(以及Boyce-Codd范式)中转换关系:

    1. R1(A B)A为关键且唯一依赖:A → B
    2. R2(C D)C为关键且唯一依赖:C → D
    3. R3(A C)A C为关键,没有非平凡的依赖关系

<强> EDITED

由于您已经改变了问题,答案必须完全不同。你应该知道,为了解决规范化问题,你应该有两件事(那两件事):

  1. 关系架构的属性列表

  2. 一组功能依赖

  3. 需要其他信息,而提供部分信息只会造成混淆,并且不会产生正确答案。

    因此,如果我理解了您的问题,您需要规范化关系模式

    R(A B C D E F)
    

    存在以下功能依赖项:

    A → B
    C → D
    F → A B C D E
    

    特定情况下,

    • 该关系的(候选)键为F;

    • 该关系不在BCNF中,因为A → BC → D都违反了行列式应该是超级密钥的规则,也不违反3NF(因为,除了之前的事实,{ {1}}和B不是主要属性);

    • 通过在三个关系中分解它,可以在3NF(以及BCNF)中转换关系:

      1. DR1(A B)为关键且唯一依赖:A
      2. A → BR2(C D)为关键且唯一依赖:C
      3. C → DR3(A C E F)作为关键字和依赖关系:FF → AF → C