【发布时间】:2012-11-01 11:32:12
【问题描述】:
我正在编写一个模型来记录对其他模型所做的更改,以便记录每个属性更改。我正在寻找有关如何最好地构建更改记录表的意见。
例如,我有一个带有name 属性的User 模型。当该用户的名称从Bob 更改为Ted 时,我想将Change 记录保存到数据库中。
此外,如果用户同时更新User 上的多个属性,我想将这些属性记录为单个Change。例如,User 将name 和email 属性分别从Bob 和bob@bobsdomain.com 更改为Ted 和ted@teddy.com。
给定对象上正在更改的属性集是任意的。您将如何构建表格?
目前,我正在做类似以下的事情(简化):
Changes:
user_id:integer
changed_fields:string
old_values:text
new_values:text
在上述示例中,这些记录如下所示:
:changed_fields => "name",
:old_values => "Bob",
:new_values => "Ted"
和
:changed_fields => "name,email",
:old_values => "Bob,bob@bobsdomain.com",
:new_values => "Ted,ted@teddy.com"
在 Change 模型上,我有特殊的 getter/setter 方法,可以解析输入/输出以映射到特定格式。
有没有更好的方法来模拟这种东西?
如果不是,考虑到值可以是任意的,那么格式化数据库值以使解析输入/输出工作的最佳方式是什么。
我使用 Postgres 作为我的数据库,使用 ActiveRecord 作为 ORM。
【问题讨论】:
标签: database postgresql database-design activerecord schema