在Laravel中,将“历史数据”存储到数据库的正确方式是什么?

4
我正在使用 Laravel 作为后端开发,创建一款电商移动应用程序。 场景: 我有一个产品表(Product table),存储着关于产品的一些信息。每当用户购买一个产品时,他将获得一条购买记录(其中将显示有关产品的信息),该记录将存储到数据库中。所以当卖家更新他们的产品信息时,用户购买历史记录的产品信息不会受到影响。 问题: 如果我只是简单地创建一个用户的购买历史记录表来存储每个用户的记录,我认为在数据库中需要大量的空间。 问题: 是否有更好的推荐方法来存储购买历史记录?或者是否有一种方法在卖家更新或删除产品之前创建像“快照”之类的记录呢?
1个回答

3
这更像是一个基于观点的问题。我个人使用的方法与您所想的一样:将产品相关数据存储在单独的表中。假设您有usersproductsorders表。用户拥有多个订单,而订单又包含多个产品。我使用一个额外的表details来存储与产品相关的信息(基本上是相关数据),以便在原始产品发生更改时,信息仍然保持正确。您还可以将此信息存储在购买历史记录的json列中。
另一种方法是每当更新产品时创建新的产品对象:
- 产品A(id:1):价格-10美元-2019年1月8日 - 产品B(id:2):价格-25美元-2019年1月8日 - 产品A(id:3):价格-11美元-2019年5月8日(在产品价格“更新”后)
这样,如果有人在2019年2月8日购买了Product A,则价格为10美元,并且您历史记录中的外键将指向product_id = 1。当然,这种方法不是我会使用的方法,因为报告将更难处理。

谢谢。我刚刚发现了一个叫做Revisionable的包,我认为它可以帮助我实现这个想法。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接