database - 通过 API 或网页公开数据库自动递增的 ID

标签 database rest api database-design

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

但我查了一下,很多大公司似乎并不关心:

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

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

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

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

最佳答案

关于为帐户表使用自动递增的 ID,以下是为什么它不是一个好主意的一些原因:

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

  4. 将数据从开发迁移到暂存或暂存到实时时,如果使用自动递增 ID 和外键等,插入新数据可能具有挑战性。

关于database - 通过 API 或网页公开数据库自动递增的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44396924/

相关文章:

database - 将现有数据库克隆到新数据库

java - 如何在 Jersey 中实现这种身份验证机制

.net - RESTful服务特定场景的最佳实践

node.js - REST API 中不同方法的良好实践

sql - AVG 和从一列计数

mysql - 获取记录 Eloqouent laravel 5 的部分

用于存储用户日常事件的 SQL 表结构

java - 在 Spring 中处理嵌套 REST 资源调用的更优雅的方式?

api - Azure/Bing 图像搜索 API : How do I add multiple image filters?

php - Laravel 5.3 API 中的搜索功能