【问题标题】:Decompose the following relation into BCNF将以下关系分解为 BCNF
【发布时间】:2018-03-20 01:30:46
【问题描述】:

给定一个具有属性 A、B、C、D、E 的关系 R 和一组功能依赖关系 A->B、BC->E、ED->A。分解成高范式。

【问题讨论】:

  • 请展示您的能力。谷歌“stackexchange 作业”并阅读How to Ask。我们不是来帮你做作业的。

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


【解决方案1】:

candidate key的定义:

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

  1. 该关系没有两个具有相同值的不同元组(即通用数据库语言中的行或记录) 属性(这意味着属性集是一个超级键)
  2. 这些属性中不存在 (1) 成立的真子集(这意味着该集合是最小的)。

鉴于FD只有CD出现在左侧,这意味着每个键都必须拥有CD

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

closure(CDA) =closure(CDB) =closure(CDE) = 所有属性的集合,这意味着所有三个CDACDBCDE 都是候选键。

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

给定一个模式 R。

  1. R. 的计算密钥。
  2. 重复直到所有关系都在 BCNF 中。
    • 选择任何具有违反 BCNF 的 F.D A --> B 的 R'。
    • 将 R' 分解为 R1(A,B) 和 R2(A,Rest of attributes)。
    • 计算 R1 和 R2 的 F.D。
    • R1 和 R2 的计算密钥。

A-->B违反了BCNF,因为A不是key,所以我们将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 中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2013-03-08
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多