activerecord 如何为新创建的记录分配 ID?ID 值似乎无处不在。有时它们是连续的,但有时它们似乎是某种散列。有没有办法控制行为?
1 回答
在关系数据库中,您会看到 ID 通常是连续的。这恰好是id
在使用 Rails 的这些数据库中默认调用的自动递增字段。这是 99% 的情况,这意味着 99% 的时间你可以期望看到它以这种方式完成。这是理智的方式。
但是,在某些情况下,数据库中的“id”字段可能不会自动递增,而是可能是一个字符串。在我目前正在使用的数据库中,id 字段称为client_id
,是一个 6 个字符的字符串,例如“RAB001”,需要由代码本身手动分配。这是由于我们支持的遗留系统,我们无法解决这个问题。就是这样。
在 Mongoid 等其他数据库中,id 再次自动生成。但是这里有一个区别:它们不是自动递增的数字,而是哈希。在我碰巧有一个 Mongo 数据库中,对象的一个_id
字段(注意下划线)是这个可爱的、易于理解的1 hash: 4e22b5812f8b7d6f6d000001
。这是由 Mongo 自动生成的,我并不关心它是什么,除非我需要找到一个对象并且没有其他方法可以通过另一个唯一值找到它。
我建议坚持使用自动生成的 ID 系统,无论是 PostgreSQL 或 MySQL 等传统数据库系统提供的,还是 Mongo 提供的。
任何需要手动为记录生成主键的系统都需要有一个巨大的“HERE BE DRAGONS”标签,并且应该像硝酸甘油一样处理或类似于这个恰当的类比。如果可以,请避免使用此系统。
1我在这里讽刺。