我正在整理一个新数据库,并且有一些包含临时数据的表。
例如:用户请求更改密码 - 存储令牌,然后删除。
目前我在这些表上有一个主键,它会从 1 向上自动递增。
AUTO_INCREMENT = 1;
我真的看不出这个主键有什么用......我永远不会引用它,它只会变得更大。
像这样的表是否应该有主键?
我正在整理一个新数据库,并且有一些包含临时数据的表。
例如:用户请求更改密码 - 存储令牌,然后删除。
目前我在这些表上有一个主键,它会从 1 向上自动递增。
AUTO_INCREMENT = 1;
我真的看不出这个主键有什么用......我永远不会引用它,它只会变得更大。
像这样的表是否应该有主键?
简短的回答:是的。
长答案:
你需要你的表可以加入某些东西如果你想让你的表被聚集,你需要某种主键。如果您的表设计不需要主键,请重新考虑您的设计:很可能,您遗漏了一些东西。为什么要保留相同的记录?在 MySQL 中,如果您没有明确指定,InnoDB 存储引擎总是会创建一个 PRIMARY KEY,从而产生一个您无权访问的额外列。
请注意,PRIMARY KEY 可以是复合的。
如果您有一个多对多链接表,则在链接中涉及的所有字段上创建 PRIMARY KEY。因此,您可以确保没有两条或更多条记录描述一个链接。
除了逻辑一致性问题之外,大多数 RDBMS 引擎将受益于将这些字段包含在 UNIQUE 索引中。
而且由于任何 PRIMARY KEY 都涉及创建 UNIQUE 索引,因此您应该声明它并获得逻辑一致性和性能。
这是一个SO线程已经有相同的讨论。
有些人仍然喜欢听从你的意见。看看这里
我个人的意见是你应该有主键,以识别或使一行唯一。逻辑可以是您的程序逻辑。可以是自动增量或复合或任何它可以是。