在我目前的 Rails 应用程序中,我通过按“created_at
”字段对模型进行排序来解决调度冲突。但是,我意识到当从允许这样做的表单中插入多个模型时,所有 created_at
时间都完全相同!
这更像是一个关于最佳编程实践的问题:您的应用程序能否依靠数据库中的 ID 列随着每个 INSERT
递增越来越大以获得它们的创建顺序?换句话说,我能否按 ID 列对从数据库中提取的一组行进行排序,并确保这是基于创建顺序的准确排序?这在我的应用程序中是一个好的做法吗?
最佳答案
生成的标识号将是唯一的。 无论您是否使用序列,例如在 PostgreSQL 和 Oracle 中,或者您是否使用其他机制,例如 MySQL 的自动增量。
但是,序列通常是批量获取的,例如 20 个数字。 所以使用 PostgreSQL 你不能确定哪个字段先被插入。插入记录的 ID 甚至可能存在间隙。
因此,您不应该为这样的任务使用生成的 id 字段,以免依赖数据库实现细节。
在命令执行期间生成一个created 或updated 字段对于以后按创建时间或更新时间排序要好得多。 例如:
INSERT INTO A (data, created) VALUES (smething, DATE())
UPDATE A SET data=something, updated=DATE()
关于ruby-on-rails - 可以依赖数据库中的自动递增主键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845402/