【问题标题】:Should I use an ID? [duplicate]我应该使用身份证吗? [复制]
【发布时间】:2014-07-05 21:27:13
【问题描述】:

我有一张桌子,上面有类似的产品

产品

id
name
styles_id

我也有一个样式像

的表格

样式

id
name

当我向产品添加样式时,我使用来自 Styles 表的外键 id 值。我在很多项目上都这样做了几年,但我在想为什么?如果我有一个名称为主键且没有idStyles 表,那么获得产品会容易得多。所以我不必进行连接来获取产品的样式名称。我看到它做了很多,但idStyles 表中的优势是什么?

【问题讨论】:

  • 也是stackoverflow.com/q/1229173/458741stackoverflow.com/q/3747730/458741stackoverflow.com/q/590442/458741 等的副本...这是数据库设计中较早的“战争”之一...现在您知道要查找的关键字因为那里有很多信息,不仅仅是在 Stack Overflow 上。
  • 谢谢你的链接帮了很多忙,但是在这种情况下你有什么建议呢?我认为没有 id 的唯一缺点是如果我想更改样式名称但我可以轻松添加 ON UPDATE CASCADE ..
  • 我真的不明白你的建议与@Sven 的链接有何不同。如果您现在想要一个自然键,一般建议是使用代理键,但在名称上添加唯一的非空约束。这样,您将来可以改变主意,而无需更改所有您的代码。

标签: sql


【解决方案1】:

主要优点是您可以更改产品名称而不会影响参考。

您可以添加多个名称,例如,如果您想国际化您的数据库。

几乎每次我未能将自动递增的 id 放入表中时,我都会为此感到遗憾。那可能是当重复出现在表中并且我想删除它们时。那可能是当结构以意想不到的方式发生变化时,例如国际化。那可能是我想知道输入的最后一件事的时候——自动递增的 id 提供了该信息。现在,我几乎在我创建的每个表中都放置了这样一个 id,即使是在做起来很痛苦的数据库中,例如大多数版本的 Oracle。

【讨论】:

  • +1 - 同样,使用 数字 id (a) 连接速度更快,并且 (b) 不容易出现拼写错误和大写/小写问题以及更多麻烦从使用字符串作为标识符。
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 2021-12-31
  • 2023-03-19
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多