考虑一个包含多个(3-4)表的数据库,这些表有很多列(从15到40)。在每个表中,我们每年生成数千条记录,并为每条记录进行大约十几条更改。
现在我们需要为我们的系统添加以下功能:每当用户对其中一个表的记录进行更改时,系统需要跟踪它 - 我们需要有完整的更改历史记录能够将行数据恢复到选定点。
由于某些原因,我们无法在同一个表中保留“最终”和“历史”数据(因此我们无法在表格中添加一些列来保留某种版本信息,就像wordpress在保存编辑历史时所做的那样的帖子)。
解决这个问题的最佳方法是什么?我在想两个解决方案:
优点:
我们的数据存储方式与原始表中的数据完全相同
每当我们需要向原始表添加新列时,我们都可以对镜像表执行相同的操作
缺点:
优点:
我们只有一个所有跟踪表的历史记录表
每次添加新的跟踪表时,我们都不需要创建新的镜像表,
缺点:
在这样的系统中保留版本历史的最佳方法是什么?
其他信息:
将来每个跟踪表都会发生变化(即添加新列),
将来可以更改跟踪表的数量(即添加了新表)。
仅供参考:我们正在使用laravel 5.3和mysql数据库。
答案 0 :(得分:0)
您需要多久访问一次审核数据?存储成本是否值得关注?您是否需要在需要普通数据的同一系统中使用它?
基本上,拥有一个名为foo的表和一个名为foo_log的第二个表并不常见。它还允许您以不同的方式存储foo_log,甚至可能是辅助DB。如果foo_log在主轴磁盘上并且foo在闪存上,你仍然可以快速读取,但是你可以获得更便宜的备份存储。
如果你不需要显示这些数据,只是出于法律原因需要它,或者弄清楚出了什么问题,单表并不是一个糟糕的计划。
但如果问题是备份,听起来可能是这样,为什么不定期备份MySQL数据库并将备份存储在其他地方呢?