【问题标题】:Expose database auto-incrementing ids via APIs or web pages通过 API 或网页公开数据库自动递增 id
【发布时间】:2017-06-08 07:24:47
【问题描述】:

我认为不公开自动递增的数据库 ID(帐户、产品等)是更好的方法。我们也许可以使用 UUID 并通过 API 或网页公开它们。

但我查了很多大公司似乎并不在意:

  • Google、Amazon、Facebook、Twitter(似乎都有数字 自动递增帐户 ID)
  • Macys 和 Ebay 显示自动递增的产品 ID(或网络 ID) 身份证

亚马逊似乎确实关心的一个案例:

  • 亚马逊确实在其产品目录中使用了 ASIN 编号(其中 据说内部链接到他们的数字自动递增数据库 产品 ID。)

那么,在使用 UUID 时,我们是否试图解决一个不存在的问题?只是不值得花时间和精力?

【问题讨论】:

  • 随机值不提供信息,这比提供信息要好。就关怀而言,公司是精神病患者。

标签: database rest api database-design


【解决方案1】:

关于对帐户表使用自动递增 id,以下是它的坏主意的一些原因:

  1. 如果在一段时间内采样,序列号会向公众公开表中的记录数和表的增长率。​​li>
  2. 如果 api 的安全性较差,可以通过简单地增加 id 并调用 api 直到检索到所有数据来刮取数据库中的所有记录。
  3. 当使用自增 ID 并插入多个相关实体时,您需要多次调用数据库才能将实体插入数据库。如果使用 UUID,您可以构建整个对象集,而无需与数据库交互。例如,对于订单标题和订单行项目,您需要插入订单标题,获取主 ID,然后插入带有订单标题 ID 的订单行项目。

  4. 在将数据从 dev 迁移到 staging 或 staging 到 live 时,如果使用自动增量 id 和外键等,插入新数据可能会很困难。

【讨论】:

  • 1.如果有更多损失的大公司不在乎暴露增长率,那么……? 2. 如果 API 的安全性很差,那么还有更大的问题需要考虑。 4. 通常你从不把你的测试数据投入生产。即使需要数据转储也会解决这个问题。对于小型配置编辑或其他东西,更好的方法是不要直接在 prod db 上工作,而是使用管理工具。
  • 我们真正应该寻找的是 - 有什么真正明显的好处吗?感谢 cmets。
  • @redbaron 可能自动 ID 对 Big Company X 无关紧要,但对您的组织可能仍然很重要。也许 B.C.X 已经在他们的年度报告中发布了有关增长的信息(因此通过自动增量 ID 公开相同的信息,对他们来说并不重要),但一家小型初创公司可能希望将此类信息保密。我认为复制大公司的想法和做事方式有时是错误的心态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多