当谈到具有“历史”
价值的关系时,我在各种选择之间犹豫不决。
例如,假设用户在某个日期购买了一件商品......如果我只是以经典方式存储它,例如:
transation_id: 1
user_id: 2
item_id: 3
created_at: 01/02/2010
然后很明显,用户可能会更改其名称,该项目可能会更改其价格,并且 3 年后,当我尝试创建发生的事情的报告时,我有虚假数据。
我有两个选择:
像我之前展示的那样保持愚蠢,但使用类似https://github.com/airblade/paper_trail的东西并执行以下操作:
t = Transaction.find(1); u = t.user.version_at(t.created_at)
创建一个类似
transaction_users
and的数据库,transaction_items
并在进行事务时将用户/项目复制到这些表中。然后结构将变为:transation_id: 1 transaction_user_id: 2 transaction_item_id: 3 created_at: 01/02/2010
两种方法都有其优点,但解决方案 1 看起来要简单得多……您是否发现解决方案 1 有问题?这个“历史数据”问题通常是如何解决的?我必须为我的项目解决这样的 2-3 个模型的问题,您认为最好的解决方案是什么?