我有一个流程,其中我需要保留数据库记录信息的历史记录,但是用户需要能够随时更改它。
情境:
这是因为当卖家更新商品时,他们正在更新与订单相关的相同商品。
我想到了这个问题的3个可能的解决方案,我想了解你认为哪个是最好的(可能来自你以前的经验),或者我还没有想到的更好的解决方案。这是我第一次处理这种情况,因此不确定如何在不需要重构的情况下继续进行。
我的解决方案:
deleted_at
列,以防用户想要在购买之后删除项目,以便我仍然可以保留它以便以后参考以获取历史数据答案 0 :(得分:2)
我也遇到过这个问题,特别是在价格经常变化的产品目录中。或者由于某种原因,特定客户的价格可能会出售或打折。
我发现的唯一解决方案是在购买产品时将相关产品详细信息复制到客户的订单记录。在您的示例中,至少会复制产品名称和产品价格。
这似乎违背了“不存储冗余数据”的理念,但这并不是多余的 - 客户在特定日期以特定价格购买产品这一事实,这仍然是有用的事实上,即使该产品的当前价格发生变化,也是如此。
仍然应该有原始产品表的链接,因此管理人员可以跟踪每个产品包含的订单数量。但产品表中的当前价格不会影响每个客户订单的记录。
您可能还需要创建产品历史记录表,以记录价格或名称的所有更改时间。但这仅适用于历史记录保存,它不会影响购物或购买活动中的典型查询。
在这个设计中: