为了账号安全,请及时绑定邮箱和手机立即绑定

每个表都应该有主键吗?

每个表都应该有主键吗?

慕标5832272 2019-06-28 16:16:08
每个表都应该有主键吗?我正在创建一个数据库表,并且没有分配给它的逻辑主键。所以,我想把它放在没有主键的地方,但我觉得有点愧疚。我应该吗?每个表都应该有主键吗?
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

简短答覆:.

详细答覆:

  • 你需要把你的桌子粘在什么东西上
  • 如果希望对表进行群集,则需要某种主键。
  • 如果您的表设计不需要主键,请重新考虑您的设计:很可能,您遗漏了一些东西。为什么要保留相同的记录?

在MySQL中,InnoDB存储引擎总是在没有显式指定的情况下创建主键,从而生成一个额外的列,您无法访问它。

注意,主键可以是复合的。

如果您有一个多到多的链接表,则在链接所涉及的所有字段上创建主键。因此,您确保没有描述一个链接的两个或多个记录。

除了逻辑一致性问题之外,大多数RDBMS引擎还将受益于将这些字段包含在唯一的索引中。

而且,由于任何主键都涉及创建唯一索引,所以您应该声明它并获得逻辑一致性和性能。

请参阅我的博客中的这篇文章,了解为什么您应该总是为唯一的数据创建一个唯一的索引:

P.S.有一些非常非常特殊情况下你不需要主键。

大多数情况下,它们包括日志表,这些日志表没有任何基于性能原因的索引。


查看完整回答
反对 回复 2019-06-28
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

总是最好有一个主键。这样它就会相遇第一范式并允许您继续沿着数据库规范化路径。

正如其他人所指出的,没有主键是有原因的,但是如果有主键,大多数都不会受到伤害。


查看完整回答
反对 回复 2019-06-28
?
Qyouu

TA贡献1786条经验 获得超11个赞

除了少数几种非常罕见的情况(可能是多到多的关系表,或者临时用于海量数据的表),我还是同意这样的说法:

如果它没有主键,它就不是一个表!


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 1181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信