【问题标题】: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) 成立的真子集(这意味着该集合是最小的)。
鉴于FD只有C和D出现在左侧,这意味着每个键都必须拥有C和D。
closure(CD) 并不等于所有属性,但是,从 F.D 中我们可以清楚地看到:
closure(CDA) =closure(CDB) =closure(CDE) = 所有属性的集合,这意味着所有三个CDA、CDB 和CDE 都是候选键。
现在让我们按照stanford lecture中给出的BCNF分解算法。
给定一个模式 R。
- R. 的计算密钥。
- 重复直到所有关系都在 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 中。