我们可以再次使用已删除记录的ID吗?

时间:2011-03-23 10:18:12

标签: ruby-on-rails

我正在做RoR教程,我们可以在应用程序中添加,更新,删除用户详细信息,同时id会自动定义用户,但是一旦我们删除了用户详细信息,那么对于该ID,它会显示找不到的记录。 我们可以再次使用该ID吗?

3 个答案:

答案 0 :(得分:7)

从您的评论中看起来,您尝试通过在释放后重新使用较低值ID来节省使用高价值ID。一般来说,这不是一个好主意。

您在顶端用完ID的可能性很小(如果您继续使ID列接受更大的整数,则为零)但是重新分配ID可能会让您面临问题。例如,如果您想删除用户但保留他们创建的内容(例如博客帖子),则重新分配ID将意味着新ID所有者成为这些旧评论的所有者。

这感觉很浪费,但最好的办法就是留下旧的,空置的ID空置并吃掉新的ID。

答案 1 :(得分:0)

你可以使用这样的东西(Rails 3语法)

@user = User.find_by_id(params[:id]) || User.where("id > ", params[:id]).first || User.where("id < ", params[:id]).last

答案 2 :(得分:0)

我不建议重新使用唯一 ID。

首先,问问自己为什么要为用户分配唯一的ID:

  • 唯一识别用户
  • 为用户资源创建唯一网址
  • 将其他对象(订单,博客帖子,游戏数据)与特定用户
  • 相关联

所以,如果你删除了一个用户 - 会发生什么?

在我写的几乎每个应用程序中,用户总是留下痕迹。来自曾经暴露于互联网的URL(由google索引)或来自该用户的数据(保存为记录(订单等))。

重用用户ID会导致问题 - 因此可以重构应用程序以应对这些问题。在99%的这些案例中,最简单的解决方案是继续为这些用户生成新的唯一ID。

在某些情况下,您需要保留已删除用户的数据(例如,金融系统和网上商店是很好的例子)。这将在删除用户后保持唯一ID的存在 - 您无法重复使用它。

TL; DR:可以重用唯一ID,但会出现问题。解决这些问题的最简单方法是生成新的唯一ID。

作为补充说明,唯一ID不必是自动递增的整数。