【发布时间】:2021-03-19 02:19:48
【问题描述】:
如果您总是知道从某个 API 返回的值(在这种情况下为字符串)将是唯一的,那么可以使用该值作为主键来唯一地定义记录吗?
真的有必要添加一个额外的“id”列,它只是一个自动递增的值吗?
【问题讨论】:
标签: mysql sql database postgresql
如果您总是知道从某个 API 返回的值(在这种情况下为字符串)将是唯一的,那么可以使用该值作为主键来唯一地定义记录吗?
真的有必要添加一个额外的“id”列,它只是一个自动递增的值吗?
【问题讨论】:
标签: mysql sql database postgresql
自然主键作为主键是完全可行和合理的。但是,有一些事情需要考虑:
我会说合成外键(即作为数字创建的人造外键)可能有缺点。如果您对创建的每个数据库都执行此操作,那么您在整个数据库中都有不兼容的键。因此,“产品 ID”之类的内容最终取决于定义它的系统——这可能会导致不必要的混淆。
【讨论】:
除了性能问题之外,PK 还必须服务于业务逻辑。 PK 并不总是必须只是一个自动序列号。自动序列号对于快速用户交互(例如查询和更新请求)以及在 ETL 案例中仍然有用。考虑如果 API 发生变化并且不会总是返回唯一值会发生什么。此外,查看您的数据行并确定可以使记录在商业意义上独一无二的一列或多列。您可能会获得或更多“候选主键”。考虑使用最短的那些而不是 API 密钥,而不是自动序列。简而言之,我建议您不要依赖您无法控制的数据,除非某个来源的“合同”表明它始终是唯一的。
【讨论】: