我已经在关系表中表示了一棵树。每个节点都是可以更改值的记录,我也可以插入,删除或分组某些节点。
对所有这些更改进行历史记录记录的最佳方法是哪一种?
是否存在数据库设计模式?
答案 0 :(得分:0)
这似乎不是一种设计模式,更多的是DB设计。
重要问题: 1.您需要多少历史记录?将其存储在数据库本身中是否安全?还是担心数据库可能受到损害,并且您需要坚不可摧的记录?
假设您可以将此数据存储在db中,则没有太多要设计的内容
who
,what
,when
创建历史表时,请确保创建触发器以防止更新任何记录或删除任何内容。记录应为append only!
答案 1 :(得分:0)
谢谢您的回答。 关于您的安全性问题,我没有任何限制,因此可以将历史数据存储在数据库中。
假设可以在关系数据库中对历史数据进行建模,可以使用几种技术(例如,用于历史记录和事务日志的分离表)来进行建模,
基于行的审核-此技术为每个行创建一个单独的表 关系表维护历史数据。审核表包含操作表时间的每一列;开始时间和结束时间,以保持生命周期 数据。两个附加属性;操作类型和用户名。
基于列的审核-基于列的审核解决了以下问题: 基于行的审核。审计表的历史列中的数据仅存储更改后的值,但主键(例如ID)除外,该ID用于引用其操作表。
日志表审核-日志表已长期用于关系数据库中的事务管理。由于交易性质,需要了解 操作,数据和执行时间,日志表也可用于审计目的。
对于我的问题,我猜测基于行的审计可能是一种不错的方法,因为也有可能跟踪操作,并且如果我添加了诸如root之类的属性,则可以存储树的结构。
从设计Db的角度,或者从一些教程或文章开始实施,您有建议吗?
谢谢。