【发布时间】:2016-01-08 14:17:07
【问题描述】:
考虑具有以下函数依赖关系的关系 R(A, B, C, D, E):A->BC, D->CE, C->E
AD+ = ABCDE
主要属性:AD 非主要属性:BCE
分解成3NF而不是BCNF
R1(A, B, C, D) R2(C,E)
【问题讨论】:
标签: database relational-database relational-algebra 3nf bcnf
考虑具有以下函数依赖关系的关系 R(A, B, C, D, E):A->BC, D->CE, C->E
AD+ = ABCDE
主要属性:AD 非主要属性:BCE
分解成3NF而不是BCNF
R1(A, B, C, D) R2(C,E)
【问题讨论】:
标签: database relational-database relational-algebra 3nf bcnf
我已经很久没有这样做了。但是如果我记得在 3NF 中,如果一列传递依赖于另一列,则不允许列在表中。
在这种情况下,唯一的传递依赖是A -> C -> E,这意味着需要从R中提取E。
这是你所做的,我的理解。 有些东西告诉我你可能需要从 R1 中提取 C,但这可能只是 BCNF 中的必要条件。
【讨论】:
您的情况的第三范式如下:
R1 (A B C)
R2 (C E)
R3 (C D)
R4 (A D)
请注意,这是以第三范式保留依赖关系分解关系的唯一方法,并且所有生成的依赖关系都使得所有分解的模式也都在 BCNF 中。
最后,我们可以注意到,相同的关系可以在 BCNF 中通过失去一些函数依赖性以不同的方式分解。
【讨论】: