需要帮助进行 3NF 分解
Posted
技术标签:
【中文标题】需要帮助进行 3NF 分解【英文标题】:Need assistance with 3NF decomposition 【发布时间】:2019-04-01 08:15:50 【问题描述】:关系 R(A,B,C,D,E) 具有函数依赖关系 A -> B,C,D,E 和 BCD -> E
A 是一把钥匙。 但是,这种关系不在 3NF 中,因为 BCD -> E 是违规的,其中 E 不是素数属性,BCD 不是超键。所以如果我们分解关系,我们得到
R1(A,B,C,D) 和 R2(B,C,D,E) ?还是我在这个分解中不正确
【问题讨论】:
但是如果 A 不是超键且 B 不是主要属性,那么功能依赖(例如 A -> B)是否违反了 3NF?而如果 A -> B 是非平凡的依赖项,则违反 BCNF,A 不是超键 你的分解是正确的,分解产生的关系在 3NF 和 BCNF 中都有。 @CuriousPerson,A 是超级键,因为所有键都是超级键。 【参考方案1】:您的分解是正确的,但从技术上讲,您最好引入第三个关系,因为从 DBA 的角度来看,复合主键不是一个好的做法。
R1(A [PK], X)
R2(X [PK], B, C, D)
R3(X [PK], E)
【讨论】:
标准化到更高的 NF 不会引入新列。这不是标准化。 @philipxy 你在开玩笑吗? 1NF -> 2NF 是添加两列或多列而不是一列。 你显然不知道“标准化”、“1NF”或“2NF”是什么意思。 @philipxy 所以请阅读我的书"Programming with databases" 以了解 NF 并避免以后的任何人身攻击以上是关于需要帮助进行 3NF 分解的主要内容,如果未能解决你的问题,请参考以下文章