需要帮助进行 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 分解的主要内容,如果未能解决你的问题,请参考以下文章

er图的联系转化为关系模式时,怎样进行3NF分解?

关系模式范式分解教程 3NF与BCNF口诀

数据库知识?啥是1NF,2NF,3NF?

数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF

数据库设计范式

表结构的设计