sql - 从另一个系统获取数据时选择 id 的最佳实践

标签 sql

我的系统正在使用第 3 方服务来处理数据,现在我必须从第 3 方调用 API 并将数据存储到我们的数据库中。请问在这种情况下,id 的最佳做法是什么?

比如我调用交易API,3rd返回的id是123456,我有2种方案,下面2种我应该选择哪种方案

  1. id = 123456
  2. id = 1(递增数),3rd_party_id = 123456

对于第一个解决方案,我只需要使用他们的 id 作为我的系统 id。

对于第二种解决方案,我需要将 id 创建为递增数字,并创建一个名为 3rd_party_id 的新列来存储第 3 方 ID。

在我看来,第一个解决方案已经足够好了,因为它们的 ID 是唯一的。但我想请教更多关于这个案例的想法。提前致谢!

最佳答案

答案是:视情况而定。但是你应该考虑什么呢?以下是一些注意事项。

第三方id是不是很绕的一长串?如果是这样,出于性能原因,您需要自己的 ID,因为整数对于外键引用更有效。

第三方 ID 是某种 PII(个人身份信息)吗?如果是这样,您可能想要屏蔽它,而内部 ID 是一个非常方便的解决方案。

您对实体的定义是否 100% 与第三方相关?如果不是,您可能会发现您想要合并或拆分现有 ID。如果是这种情况,那么内部 ID 就很方便了。

第三方 ID 是引用事物的“规范”方式吗?如果是这样,您可能想使用它。例如,我认为使用 ISO 国家代码作为国家 ID 是可以的。它们是标准的,很少改变。

第三方 id 是否会作为“事物”跨多个数据库使用?如果是这样,您可能希望将其保留为键,这样您就不会在多个数据库中激增相同的 ID。

这些只是一些需要考虑的事情。毫无疑问,其他人也是如此。

关于sql - 从另一个系统获取数据时选择 id 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66478831/

相关文章:

mysql - SQL连接并计算行数

sql - 使用什么数据类型在 SQL Server 数据库表中存储 MAC 地址?

mysql - #1064 - 检查与您的 MariaDB 服务器版本对应的手册以获得正确的语法?

mysql - 如何将MySQL时间戳转换为带有时区的自定义格式?

mysql - 连接 SQL 表而不更改第一个表

java - 如何将具有设置值的不同 MySQL 查询合并为 Java 中的单个查询?

mysql - 对MySQL中表的最大记录数感到困惑

sql - 对 postgresql 9.6 中的列集进行总和值分组

sql - Django与select_related的反向关系

mysql - 在 SQL 中使用先前行中的先前值作为空值