我不确定这是否是在数据库中实现订单历史记录表的正确方法。通常,我正在尝试减少冗余。但是由于用户可以在其报价中更改数据,因此我需要保存订单的最低信息。
目标:买方可以看到带有正确标题/图片/原始路径/过敏原(长话……)的旧订单
什么不利于我的方法?
唯一的“恐惧”是该表将充满大量冗余信息。
答案 0 :(得分:1)
这开始只是一个评论,但是它太长了,所以...
您正在使用哪个数据库?
例如,SQL Server在2016版本中引入了temporal tables的概念。基本上,您有两个结构相同的表,其中一个是主表,可以像使用普通表一样使用DML,另一个是存储历史数据的只读表-因此在主表中更新记录时在表中,实际发生的情况是该记录首先被复制到历史记录表中,然后再进行更新。
其他数据库中也可能存在类似的情况,如果您的数据库未提供现成的数据库,也可以使用触发器轻松手动实现。
当然,您可以使用一种称为“软删除”的技术,在该方法中,您可以将其标记为已删除,而不是实际删除数据,而无需使用更新的数据创建新记录并更改现有记录的状态为“不活动”。
这种方法相对于时态表的主要优点是您的实体仍然只有一个表,而不是两个;但是,另一方面,时态表的优点是活动数据与历史数据保存在单独的表中数据,因此活动数据存储在相对较小的表中,因此,所有CRUD操作都更加高效。
在当今时代,内存和存储如此便宜的时候,拥有一个table肿的桌子的“恐惧”对我来说似乎有点奇怪。