规范化和主键

Normalization and primary keys

在给定的 table 中,如果没有主键,甚至不可能创建复合主键,那么 table 的正常形式是什么?

如果它的零(0NF)添加一个新列并使其成为主键会将此 table 转换为 1NF?

在您要检查规范化之前,您的 table 必须有一个主键(主键在关系数据库中起主导作用,...)。

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

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

为了让 table 表示关系:

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

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

综上所述,我现在可以回答你的问题了。如果您的 table 遵循规则,特别是行都是唯一的,那么在最坏的情况下,所有列上至少会有一个候选键。如果您的 table 的行不是唯一的,那么 table 不代表关系并且正常形式不适用。可以添加代理键(如自动递增列)以唯一标识行,但这本身不足以使 table 表示关系 (1NF)。

顺便说一句,我建议您避免使用“0NF”或"UNF"。非关系 table 没有规范化级别,因此将任何类型的 "NF" 附加到它们都是误导。

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

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

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

如果您还需要一些说明,可以在评论框中提问。 0NF 不是任何形式的规范化。参考 C.J。 Date or Henry korth(数据库管理系统书籍) 希望这有帮助。

只要你在谈论 tables,还有一个案例需要涵盖。这是重复行的情况。

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

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

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

至于其他要点,前面的优秀答案已经涵盖了。