规范化和主键
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。如果客户两次订购相同的产品,我们将有两个相同的行,代表不同的信息。这样不好。
请注意,关系不会发生相应的事情。如果关系中的两个元组具有相同的外观,则它们是相同的元组。
至于其他要点,前面的优秀答案已经涵盖了。
在给定的 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。如果客户两次订购相同的产品,我们将有两个相同的行,代表不同的信息。这样不好。
请注意,关系不会发生相应的事情。如果关系中的两个元组具有相同的外观,则它们是相同的元组。
至于其他要点,前面的优秀答案已经涵盖了。