【发布时间】:2018-02-06 08:55:17
【问题描述】:
我有一个过程,其中我需要保留数据库记录信息的历史记录,但是用户需要能够随时更改它。
场景:
- 卖家创建了一个价格为 5 美元且名称为“foo”的商品
- 买家购买商品,创建一个链接到该商品 ID 的订单
- 稍后,卖家将商品名称更新为“foobar”,商品价格更新为 6 美元
- 买家查看订单历史记录。商品名称应该是“foo”,价格应该是 5 美元,因为这是他们购买的,但它们分别是“foobar”和 6 美元
发生这种情况是因为当卖家更新商品时,他们正在更新与订单相关的同一商品。
我想到了 3 种可能的解决方案来解决这个问题,我想请您谈谈您认为最好的解决方案(可能来自您之前的经验),或者我还没有想到的更好的解决方案。这是我第一次处理这种情况,所以不知道如何最好地进行而不需要稍后进行重构。
我的解决方案:
- 使项目名称和价格不可变。
- 糟糕的用户体验,因为现在用户必须删除项目并重新创建它才能进行修改
- 需要某种类型的
deleted_at列,以防用户希望在购买后删除该项目,以便我仍然可以保留它以供以后参考以获取历史数据
- 为历史目的创建第二个表
- 不可怕,但需要另一个名称不同的表,不是这个想法的忠实拥护者
- 可能必须运行两次查询以检查两个表中的相似数据,而不是只查询一个表
- 在同一个表中创建两条记录,并标记一个布尔标志或其他标志以区别于历史/当前记录
- 我最喜欢这个,但不确定布尔标志是否会对性能产生负面影响
【问题讨论】:
标签: mysql database database-design