这违反了什么样的规范化规则?

时间:2010-03-04 18:34:31

标签: relational-database database-normalization functional-dependencies 3nf

假设我在数据库上有两个表,T 10 和T 11 ,分别有10和11列,其中10列完全相同两者。

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

7 个答案:

答案 0 :(得分:8)

编辑:我被告知理论上没有违反普通表格。由于这是接受的答案,我将其留在这里作为参考,因为考虑3NF可能在实践中有助于避免问题中出现类似情况。

您违反了Third Normal Form (3NF),因为如果两个表中都保存了大部分相同的数据,那么每个表的每个属性都不会直接依赖于其各自表的键。

答案 1 :(得分:4)

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

答案 2 :(得分:4)

如果11列中的10列是相同的,为什么这不能只是一个表,其中第11列留空(连同可能的第12列表示它是哪种类型的数据,即哪个表是它本来应该是?)

答案 3 :(得分:4)

这取决于表中的内容。

如果没有记录彼此相关(例如,如果一个表只是源自第一个表但已从第一个表中删除的归档记录),则表示您没有违反任何规则。

但是如果每个表中的记录相同,则存在依赖性问题 - 第11列仅依赖于记录中的键值,而不依赖于其他列。假设主键中没有涉及所有十列,则表示您违反了第3个NF。

答案 4 :(得分:3)

有两个相同或几乎相同的关系本身并不违反任何通常的正常形式。 Outis非常全面地解释了原因。然而,它可能违反了Principle of Orthogonal Design,这是关系数据库设计理论的另一个方面。

答案 5 :(得分:0)

如果所有10列都是您的密钥的一部分,则第二范式:消除冗余数据。具体来说,这属于“非代理与代理主要关键”的困境 - 说实话,我不记得这两个选择中的任何一个是“违反”2NF,但代理关键是绝对更接近2NF的精神

答案 6 :(得分:0)

表之间只有主键可能是多余的。在多个表中包含任意数量的非主键列都会违反第三范式。