每当我需要设计一个新的数据库时,我都会花很多时间思考如何设置数据库架构以保留更改的审核日志。
此处已经对此提出了一些问题,但是我不同意在所有情况下都存在一种最佳方法:
我还偶然发现了这篇有关维护数据库更改日志的有趣文章,该文章试图列出每种方法的利弊。它写的很好,并且有有趣的信息,但是这使我的决定更加困难。
我的问题是:是否有我可以使用的参考,也许是一本书或诸如决策树之类的东西,我可以参考这些参考来根据一些输入变量来决定应该走的路,例如:
- 数据库架构的成熟度
- 如何查询日志
- 需要重新创建记录的概率
- 更重要的是:写入或读取性能
- 所记录的值的性质(字符串,数字,斑点)
- 可用存储空间
我知道的方法是:
1.添加创建和修改日期及用户的列
表示例:
- ID
- 值_1
- 值_2
- 值_3
- 创建日期
- 修改日期
- 由...制作
- modified_by
主要缺点:我们失去了修改的历史。提交后无法回滚。
2.仅插入表格
表示例:
- ID
- 值_1
- 值_2
- 值_3
- 从
- 至
- 已删除(布尔值)
- 用户
主要缺点:如何保持外键最新?需要巨大的空间
3.为每个表创建一个单独的历史记录表
历史记录表示例:
- ID
- 值_1
- 值_2
- 值_3
- 值_4
- 用户
- 已删除(布尔值)
- 时间戳记
主要缺点:需要复制所有审核表。如果架构更改,则也需要迁移所有日志。
4.为所有表创建一个合并的历史表
历史记录表示例:
- table_name
- 领域
- 用户
- new_value
- 已删除(布尔值)
- 时间戳记
主要缺点:如果需要,我是否可以重新创建记录(回滚)?new_value列必须是一个巨大的字符串,以便它可以支持所有不同的列类型。