SQL 表是否受益或需要拥有唯一的 ID 列?

spa*_*cus 5 mysql sql-server

根据我的经验,几乎所有表都有一个名为 Id 的字段,它是唯一的主键并已建立索引。我的问题是,如果我不在任何地方使用这个值并且永远不需要这个值,那么拥有它有什么好处。

这是我的问题:

数据库具有这些多对多关系表(通常称为映射表),它们通过其唯一的 ID 将其他两个表链接在一起。

前行:

Id= 1 机器 ID= 1 用户 ID= 2

Id= 2 机器 ID= 1 用户 ID= 3

按照目前代码的方式,当它更新此表时,它会删除计算机的所有用户,然后继续添加所有当前用户。这就是他们选择删除旧条目的方式。问题是这会不必要地夸大 Id 列,因为即使没有任何更改,您也会为每个用户删除/添加。默认情况下,此情况每 90 分钟发生一次。

解决此问题的一种方法是修复代码以正确方式执行操作。另一种解决方案是完全删除 Id 字段。既然我们没有在其他地方链接到这个表,并且我们没有在任何地方的代码中使用 Id 值(我们甚至没有从数据库中提取它),为什么我们需要它?

回到我原来的问题。Id 字段还需要其他内容吗?或者它是否提供了一些我可能想要但可能会失去的好处?

Gol*_*rol 8

不,不需要,特别是对于那些多对多关系,没有它们是完全可以接受的。

如果您与该表有外键关系,那么这些 id 特别有用,但即使如此,您也可以拥有由多个列的唯一组合组成的外键,因此即使对于外键,您也并不严格需要它们,尽管它是强烈建议为此目的使用单值键。

拥有不需要的密钥的额外好处是,一旦需要它,您就不需要添加它。很难说是借口。:)

如果您想通过谷歌搜索更多信息:

  • 这些多对多表通常称为“连接表”或“交叉引用表”。
  • “无意义”的唯一 ID,通常会自动编号,也称为“代理键
  • 由多个字段组成的键(包括主键和外键)称为“复合键”。“复合键”经常被用作同义词,尽管维基百科的定义略有不同。