database - BCNF分解

标签 database relational-database

我正在尝试找出执行 BCNF 分解的正确步骤。我找到了这个示例,但我不明白如何执行正确的步骤。

架构 = (A,B,C,D,E,F,G,H) FD 的 + {A -> CGH,AD->C,DE->F,G->G}

谁能告诉我正确的步骤?

最佳答案

使用 FD 确定最小掩护:

{A -> C, A -> G, A -> H, 
 B -> nothing, 
 C -> nothing,
 D -> nothing,
 E -> nothing,
 F -> nothing
 G -> nothing
 H -> nothing
 DE -> F}

注意 AD -> C 被丢弃是因为 A 单独决定了 C 这意味着 D 在FD(参见阿姆斯特朗公理 - 增强)。

3NF 和 BCNF 定义涉及复合键的依赖性。唯一的复合键 你这里是 DEDE 均不参与任何其他非空 FD 因此消除传递依赖并确保依赖属性依赖于 “ key ,整个 key ,只有 key ”在这里不是问题。

打破关系,使得 FD 左侧是关键,右侧是关键 是该键的非键相关属性:

[Key(A), C, G, H]
[Key(D, E), F]

现在从封面中删除这些属性,剩下的就是独立的关系。

[Key(B)]

这应该是 3NF/BCNF

关于database - BCNF分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368271/

相关文章:

database - 我应该创建一个可以为空的外键还是创建一个新表?

相关领域的 Django 查询集

database - 在某些情况下,将冗余数据存储在数据库中以提高速度是否有意义?

数据库设计 : OR relation

c# - 数据适配器更新命令

mysql - 有问题的归一化

mysql - 创建了一个 View 但之后失去了对基础表的特权

postgresql - 安装在特定计算机上的 PostgreSQL 数据库表的说明

mysql - 如何在 SQL 中创建多语言 Unicode 文本属性?

php - 即使在 codeigniter 中 db 的主机名错误,也继续执行