schema - 标准化并分解为 BCNF

标签 schema primary-key database-normalization bcnf

我已经获得了关系和功能依赖性

enter image description here

我希望证明它的形式是合理的,然后将其转换为 BCNF。

现在我建议它在 3NF 中,因为第二个 FD 是一个传递依赖,其 RHS 是一个关键属性。第二个 FD 也违反了 BCNF,因为 C 不是 R 的 super key 。

但是 - 我不确定如何分解为 BCNF。

如果我分解为;

enter image description here

这使第一个 FD 无效,并有效地使 (A,C) 成为新 key - 所以它看起来不正确!这个关系可以转化为BCNF吗?

最佳答案

Can this relation be converted to BCNF?

每个关系都可以通过应用“分析算法”在 BCNF 中进行转换,这种算法可以在任何一本关于数据库的好书中找到。

请注意,该关系有两个键:AB 和 AC,因此所有属性都是素数(因此该关系自动处于 3NF 中)。

您必须首先找到所有违反 BCNF 的依赖项,在本例中只有 C → B,因为 C 不是 super 键。

然后将关系分解为两种关系,一种包含 C 以及由它确定的所有属性(在本例中只有 B),另一种包含所有属性其他属性加上 C

所以分解实际上是:

R1(B, C), with key C, with the only (non-trivial) dependency C → B
R2(A, C), with key AC, without (non-trivial) dependencies

然后必须对每个具有违反 BCNF 依赖关系的关系重复分解,但在本例中不存在这样的关系,因为 R1R2在 BCNF 中。

最后请注意,分解不会保留依赖关系。事实上,依赖关系 AB → C 在分解中并未保留。

关于schema - 标准化并分解为 BCNF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361332/

相关文章:

c# - ERP会计年度交易表的单数据库VS多数据库?

mysql - 市场数据库模式的建议

PostgreSQL 模式设计器

oracle - 我应该使用 Oracle 的 sys_guid() 来生成 guids 吗?

只有 id 和描述的表的数据库规范化

mysql - 在规范化过程中创建非规范化表的现有做法/准则?

hibernate - 在内存数据库(HSQLDB或H2)上使用多个架构域运行grails

mysql - Web 应用程序用户表主键 : surrogate key vs username vs email vs customer Id

mysql - 2张表的主键

sql - 如何提取一列数据并用外键替换?