【发布时间】:2018-03-14 14:23:33
【问题描述】:
规范化的重点是什么?
我的意思是,如果范式不在 2NF 中,那是因为部分依赖,即非键属性依赖于候选键的一部分。 因此,假设对于与 FD 的关系 R(A,B,C):
AB->C, B->C
很明显,AB 是候选键,B->C 是部分依赖。
解决方案:分解关系,使得(B,C)形成一个以B为键的新关系。
现在,如果一个关系在 3NF 中是 not,那是因为一个非关键属性依赖于另一个非关键属性,也就是说 如果关系 R(A,B,C) 的 FD 是:
A->B,B->C
显然,A 是关键,B->C 显示传递依赖,因此不在 3NF 中。
解决方案:分解关系,使得(B,C)形成一个以B为键的新关系。
那么,确切的区别是什么? 我的意思是,为什么会有如此明显的区别?基本上在这两种情况下,动作是相同的。 使用行列式(此处为 B)是否是键的一部分的依赖关系分解关系。 为什么有单独的术语,如部分依赖或传递依赖? 为什么不直接看看,如果存在一个依赖关系,其中一个非主属性由一个不是候选键的东西确定(无论它是部分键还是另一个非主属性)
为什么我们不能实现这样的方法:
- 1 NF -- 具有原子形式的所有元素
- X NF -- 如果有的话
non_key -> non_prime_attribute(s)形式的依赖关系, 分解与具有此的新关系之一的关系 特定的“non_key”作为具有这些 non_prime_attributes 的键。 - BCNF : 对于 X->Y 形式的所有依赖项,X 是超键在哪里?
我们可以有这样的NF条件格式吗?它是否结合了所有条件?
【问题讨论】:
-
嗨。以前你的语言不清楚,现在你添加了更多真正不清楚的内容。但是,正如我在评论中所说的那样,当您将其添加到评论中时,我的扩展答案似乎解决了您的添加。
-
您关于我们为什么不以这种方式学习的问题也许是问题的核心。我已经 30 多年没有研究这些东西了,我仍然倾向于做出回应,就好像这些概念现在和当时处于完全相同的状态一样。较新的文本或教程可能已经提出了更好的组织和呈现材料的方法。
-
同时,当我第一次开始在 SO 上发帖时,许多新手甚至从未听说过规范化。如今,很多参与者轻描淡写地把“规范化设计”当作“好设计”的代名词。
标签: database database-design database-normalization