【发布时间】:2011-11-12 13:14:06
【问题描述】:
- 我了解主键的价值。
- 我了解索引的价值。
是否应该每个 MySQL 表都有一个自动递增的主键(最好是 INT 字段类型)?
更新
@Raj More 的回答似乎是最有效的。然而,当我想到这个问题时,这个自动递增的主键 ID 将如何与其他表相关联。例如:
表 1
ID | firstname | lastname | email
----------------------------------------
1 | john | doe | 1@email.com
2 | sarah | stow | 2@email.com
3 | mike | bro | 3@email.com
表 2
ID | memberid | display | address
--------------------------------------------
1 | 1 | funtime zone | 123 street
2 | 3 | silly place llc | 944 villa dr
在上面的示例中,消费者可能会来到网站并选择注册免费产品/服务。如果消费者选择,他们可以提供额外的信息(存储在表 2 中)以进行额外的邮寄等。我看到的问题是这些表与“主键自动递增字段”的关系。在表 2 中,“memberid”与表 1 的 ID 相关,但这并不是“非常”清楚的。放入表 2 的任何新信息都将递增 1,但并非所有消费者都会选择参与表 2 所需的数据。
【问题讨论】:
-
@ypercube - 真的吗?您将其列为另一个答案中给出的示例的可能重复项?第一个评论者进行了类似的评估,投了赞成票,然后删除了他自己的评论。
-
为什么听起来很奇怪? ("完全重复:这个问题与之前关于该主题的问题所涵盖的内容完全相同;它的答案可能会与另一个相同的问题合并。")
-
我的回答很快就会被删除。我的观点是,这两种选择都有很多优点和缺点(在其他类似问题中讨论过)。说“我喜欢这个,我选择是的,阅读这个”并不是一个真正的答案。
-
您的更新是表 (2)(与另一个表具有 1:1 关系)的一个很好的例子,其中自动递增的主键是无用的。
memberid可以是 PK(不是自动递增,因为它也是 table1 的 FK)。
标签: sql database database-design normalization