在 laravel 中将“历史数据”存储到数据库中的正确方法是啥?
Posted
技术标签:
【中文标题】在 laravel 中将“历史数据”存储到数据库中的正确方法是啥?【英文标题】:What is the right way to store 'historical data' into database in laravel?在 laravel 中将“历史数据”存储到数据库中的正确方法是什么? 【发布时间】:2019-12-10 15:54:31 【问题描述】:我正在使用 Laravel 作为后端开发来创建一个电子商务移动应用程序。
场景:我有一个 Product 表,其中存储了有关产品的一些信息。每当用户购买产品时,他将获得将存储到数据库中的购买历史记录(将显示产品信息)。所以当卖家更新产品信息时,用户购买历史记录的产品信息不会受到影响。
问题:如果我只是简单地创建一个用户的购买历史表来存储每个用户的记录,我认为数据库中需要很多空间。
问题:有没有更好的存储购买历史记录的方法推荐?或者有没有办法在卖家更新或删除产品之前为记录创建“快照”之类的东西?
【问题讨论】:
【参考方案1】:嗯,这更像是一种基于意见的问题。
我个人使用的方法是你也想到的方法:将产品的相关数据存储在一个单独的表中。假设您有 users
、products
和 orders
表。一个用户有很多订单,一个订单有很多产品。我使用附加表details
来存储与产品相关的信息(基本上是相关数据),因此,如果原始产品发生变化,信息仍然保持正确。您还可以将此信息存储在购买历史记录的 json 列中。
另一种方法是在产品更新时创建新的产品对象:
产品 A (id: 1
):价格 - 10 美元 - 01/08/2019
产品 B (id: 2
):价格 - 25 美元 - 2019 年 1 月 8 日
产品 A (id: 3
):价格 - 11 美元 - 2019 年 5 月 8 日(在产品价格“更新”后)
这样,如果有人在 2019 年 2 月 8 日购买了 Product A
,价格将为 10 美元,您历史记录中的外键将指向 product_id = 1
。当然,我不会使用这种方法,因为报告会更难处理。
【讨论】:
谢谢。我刚刚找到了一个名为 Revisionable 的包,我认为它可以帮助我实现这个想法。以上是关于在 laravel 中将“历史数据”存储到数据库中的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表