规范化和主键

问题描述 投票:1回答:4

在给定的表中,如果没有主键,甚至无法创建复合主键,那么该表的正常形式是什么?

如果其零(0NF)添加新列并使其成为主键,则将此表转换为1NF?

database database-design relational-database database-normalization
4个回答
4
投票

正规形式适用于关系,这是数学结构。表可用于表示关系,但这需要一些规则来确保表不包含比对应关系更多或更少的信息。

为了使表能够表示关系:

  • 所有行和列必须是唯一的
  • 他们所处的顺序无关紧要
  • 所有重要信息必须表示为单元格中的值(即字体,突出显示等,必须无关紧要)
  • 每个单元格必须包含一个值(无论该值是多么简单或复杂)

此外,关系模型关注候选键,而不是主键。关系可以有多个候选键。主键只是某些学科(例如实体 - 关系模型)或某些数据库管理系统(例如,用于物理记录排序)使用的所选候选键。

尽管如此,我现在可以回答你的问题了。如果您的表遵循规则,特别是行都是唯一的,那么在最坏的情况下,所有列上将至少有一个候选键。如果表的行不唯一,则表不表示关系,而普通表单不适用。可以添加代理键(如自动增量列)以唯一地标识行,但这不一定足以使表表示关系(1NF)。

顺便说一句,我建议你避免使用“0NF”或“UNF”。非关系表没有一定程度的标准化,因此将任何类型的“NF”附加到它们是误导性的。


0
投票

在您要检查规范化之前,您的表必须具有主键(主键在关系数据库中扮演主角,...)。

1NF:表示所有表属性必须是单值的。


0
投票

问题1的答案:在给定的表中,如果没有主键,甚至无法创建复合主键,那么该表的正常形式是什么?

答:如果它不是关键的主键,并且如果不可能创建一个复合的原始密钥(据我说你的问题,即使将所有行的列组合成候选键,那么它也将无法识别你的关系是唯一的(有重复的行),因此它不是任何正常的形式。

问题2的答案:如果添加一些列(其中包含唯一值),并且如果所有单元格只包含一个值,那么它在1NF中。

如果您需要一些澄清,可以在评论框中询问。 0NF不是任何形式的标准化。参考C.J. Date或Henry korth(数据库管理系统书)希望这会有所帮助。


0
投票

只要您谈论表格,还有一个案例需要涵盖。这是重复行的情况。

重复行是外观相同但行号不相同的行。这样的表不能有主键。有时,重复的行代表相同的信息。有时不是。

例如,考虑一个只有四列的表:customerid,productid,quentity,price。如果客户两次订购相同的产品,我们将有两个相同的行,代表不同的流量。这不好。

请注意,关系不会发生相应的事情。如果关系中的两个元组具有相同的外观,则它们是相同的元组。

至于其他方面,他们被优秀的早期答案所涵盖。

© www.soinside.com 2019 - 2024. All rights reserved.