【问题标题】:Why store whole records in audit tables?为什么要将整个记录存储在审计表中?
【发布时间】:2020-05-30 04:50:54
【问题描述】:
我曾在几家公司工作,每家公司的审计表都存储了每次更改的完整记录快照。
据我了解,仅存储更改的列以在任何给定时间点重新创建记录就足够了。显然会减少存储空间。此外,我认为它会提高性能,因为我们需要写入的数据量要少得多。
正如我在不同的数据库和框架中看到的那样,我没有在这里放置任何特定的标签。
我很乐意理解这种方法背后的原因。
【问题讨论】:
标签:
sql
database
database-design
relational-database
【解决方案1】:
这里有一些重要的原因。
首先,存储变得越来越便宜。因此,减少记录的数量或大小几乎没有经济利益。
其次,围绕更改的“上下文”可能非常有用。在发生更改时重建记录的外观可能会很棘手。
第三,检测变化的逻辑比看起来要复杂。当您有 NULL 值时尤其如此。如果代码中存在错误,那么您将丢失存档。整个记录不易出错。
第四,记住(2)和(3)需要为每个被归档的表实现,进一步引入错误的可能性。
我可以总结为存储整个记录使用更少的代码行。更少的代码行更易于维护且不易出错。这些节省超过了减小存档大小的好处。