假设我有两个表格上的数据库,T10 和T11, 具有10和第11栏中,分别在10列完全相同。

什么(如果有的话)规范化规则,我违反了?

有帮助吗?

解决方案

编辑:我已被告知,没有正常的形式如下理论上侵犯。由于这是公认的答案,我在这里留下它作参考,并因为想着3NF可能在这样的问题的做法有助于避免的情况。

您违反了第三范式(3NF),因为如果大致相同的数据在两个表中被保持,则每个表中的每个属性是不直接依赖于它的相应的表的键。

其他提示

信不信,重复列跨表违反任何理论上的正常的形式在本身。除域/关键正常的形式(DKNF)、正常形式是定义方面的个人,不多,表格。DKNF中定义的条款的约束,其中有没有在一般的情况。因此,如有违反通常的形式:

  • 它必须是特定的一个表格和独立存在的具有两个表(即该表将仍然违反了通常的形式,甚至如果你移除其他表格),或
  • 的关系具有约束违反DKNF,这意味着它不是一种例的一般情况概述的问题,但一个更具体的情况。这不是重复列创建违反而是附加的限制的额外柱。

请考虑 正常的形式, 使用的简短的定义从维基百科文章:

1NF
表忠实地代表的关系,并没有重复的群体。

这一个相当直截了当。术语"重组"具有多种含义的理论,但他们没有任何重复或列的数据。

2NF
没有非核心属性表格中的功能依赖于一个适当的子集的任何候选人的关键。

在这里,重要的期审查是"功能的依赖".实质上,一个功能的依赖是你的项目有关的两栏,X和Y和风了一个函数X→Y。你不能拥有的功能之间的依赖关系的两个(或更多)表*.此外,候选键不能跨越多个表格。

3NF
每一个非核心属性是非间接依赖于每个候选人的关键在表中。

传递的依赖性定义方面的功能的依赖:一个传递的依赖是一个依赖其中X→Z仅仅是因为X→Y和Y→Z。X、Y和Z必须在同一个表,因为这些功能的依赖性。

4NF
每一个不平凡多值的依赖关系中的表格是依赖于一个superkey.

多值的依赖关系 是有点棘手,但是它可以说明一个例子:"每当的元组(a、b、c)和(a、d、e)存在r元组(a、b、e)和(a、d、c)还应该存在r"(这里的"r"是一个表)。最重要的是为该事项在另一方面,多值的依赖关系仅适用于一个单一的表格。

5NF
每一个不平凡加入的依赖性表中所隐含的superkeys表。

一个表格有一个 加入的依赖 如果可以表现为自然加入的其他表。这些其他表格,然而,并不需要存在数据库。如果表T11 在例如有加入的依赖,它仍然会有一个甚至如果你移除表T10

6NF (C。日)
表没有不平凡加入的依赖关系,在所有的(参照普遍加入操作者)。

同样的推理为5NF.

基本正常关键的形式 (EKNF)
每一个不平凡的功能依赖在该表的依赖关系的一个基本的关键属性或依赖于一个superkey.

同样的推理为2NF.

博伊斯–科德通常的形式 (BCNF)
每一个不平凡的功能依赖在该表是依赖于一个superkey.

同样的推理为2NF.

域/关键正常的形式 (DKNF)
每一个制约因素表是一个合乎逻辑的结果表域限制和关键的限制。

如果T11 具有约束取决于T10, 然后这是一个关键制约因素或一个更复杂的约束,仍然指的是T10.后一种情况下是不是一般的情况下提到这个问题。换句话说,虽然可能有特定的大纲与重复列违反DKNF,这是不正确的。此外,它的约束(不正常的形式)中定义的条款的多个表格和约束(不列重复工作),导致DKNF违反。


目的正常化,包括防止异常情况。然而,正常化并不是完全在于它并不能保证一个关系数据库将是完全免费的离异常情况。这是一个实例,其中的做法偏离理论。

如果这还不能说服你,考虑的模式公里。's评论暗示,T11 代表一个历史(或版本控制)版本的T10.主键的T11 由主键列举行共同T10, ,再加上额外的柱(日/版本列)。T11 具有不同的候选键,使所有之间的差异易和异常免费,标准化设计。

*有人可能认为你可以使用的加入创建一个依赖性之间的两个表格。虽然加入可能会创造一个表格,具有依赖性的依赖性上存在的这种表,而不是之间的三方成员的加入。在这种情况下,这再次意味着,一个表将是一个加入了表格,并将遭受的依赖关系本身,而不论其他表格中的数据库。

也许避免冗余数据的规则? (即在相同在两个表的数据)

如果在11列的10是相同的,为什么不能这仅仅是一个表,其中第十一列留为空白(具有可能的第12列沿着表示它是哪一种类型的数据,即,它表本来在最初)?

这要看什么的表格中。

如果没有记录彼此相关(例如,如果一个表只是存档记录原产于但是从第一表中删除),你没有违反任何规则。

但是,如果这些都是每个表中的相同的记录,你有依赖关系问题 - 第十一列仅依赖于从记录,而不是其他列的键值。假设所有十列不参与主键,你已经违反了第3 NF。

具有两个相同或近乎相同的关系本身不是违反任何常用的普通形式。 Outis已经非常全面地解释了原因。这很可能是一个违反的正交设计的原理的,这是关系数据库设计理论的另一个方面。

如果所有10列是你的关键,那么第二范式的组成部分:消除冗余数据。具体而言,这属于“Nonsurrogate对战替代主键”的窘境下 - 老实说,我不记得任何这两个选择的是“违反” 2NF,但代理键无疑更加接近2NF的精神

只有主密钥可以是表之间的冗余。具有在多个表中的非主键列的任何量的违反第三范式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top