将以下关系分解为BCNF

时间:2017-10-08 21:30:52

标签: database-design relational-database database-normalization functional-dependencies bcnf

给定具有属性A,B,C,D,E和一组功能依赖性A-> B,BC-> E,ED-> A的关系R.将其分解为高正常形式。

1 个答案:

答案 0 :(得分:1)

来自 candidate key 的定义:

  

在数据库的关系模型中,关系的候选键是   这种关系的最小超级钥匙;也就是说,一组属性   这样:

     
      
  1. 该关系没有两个不同的元组(即通用数据库语言中的行或记录),并且具有相同的值   属性(这意味着属性集是超级密钥)
  2.   
  3. 这些属性没有适当的子集(1)成立(这意味着该集合是最小的)。
  4.   

鉴于F.D的左侧只有CD,这意味着每个密钥都必须拥有CD

闭包(CD)并不等于所有属性,但是,从F.D& s中我们可以清楚地看到:

闭包(CDA)=闭包(CDB)=闭包(CDE)=所有属性的集合,这意味着所有三个CDACDBCDE都是候选键。< / p>

现在让我们按照这个stanford lecture中给出的BCNF分解算法。

  

给定模式R。

     
      
  1. 计算R。
  2. 的键   
  3. 重复直到所有关系都在BCNF中。      
        
    • 选择任何R&#39;具有F.D A - > B违反了BCNF。
    •   
    • 分解R&#39;进入R1(A,B)和R2(A,其余属性)。
    •   
    • 为R1和R2计算F.D&。
    •   
    • 计算R1和R2的密钥。
    •   
  4.   

A-->B违反了BCNF,因为A不是关键,所以我们将R分解为

R1(A,C,D,E)和R2(A,B)。

R2现在在BCNF中,但R1不是由于F.D ED-->A,因为ED不是关键。所以我们进一步将R1分解为:

R3(C,D,E)和R4(A,E,D),现在显然R3和R4都在BCNF中。