历史表树

时间:2018-08-20 12:34:11

标签: database database-design

我已经在关系表中表示了一棵树。每个节点都是可以更改值的记录,我也可以插入,删除或分组某些节点。

对所有这些更改进行历史记录记录的最佳方法是哪一种?

是否存在数据库设计模式?

2 个答案:

答案 0 :(得分:0)

这似乎不是一种设计模式,更多的是DB设计。

重要问题: 1.您需要多少历史记录?将其存储在数据库本身中是否安全?还是担心数据库可能受到损害,并且您需要坚不可摧的记录?

假设您可以将此数据存储在db中,则没有太多要设计的内容

  1. 在数据库用来记录新表的任何元表上创建触发器,并让IT部门在刚创建的表上创建新触发器。这样,它是免维护的。
  2. 在平面表中收集以下信息:whowhatwhen

创建历史表时,请确保创建触发器以防止更新任何记录或删除任何内容。记录应为append only!

答案 1 :(得分:0)

谢谢您的回答。 关于您的安全性问题,我没有任何限制,因此可以将历史数据存储在数据库中。

假设可以在关系数据库中对历史数据进行建模,可以使用几种技术(例如,用于历史记录和事务日志的分离表)来进行建模,

  • 基于行的审核-此技术为每个行创建一个单独的表 关系表维护历史数据。审核表包含操作表时间的每一列;开始时间和结束时间,以保持生命周期 数据。两个附加属性;操作类型和用户名。

  • 基于列的审核-基于列的审核解决了以下问题: 基于行的审核。审计表的历史列中的数据仅存储更改后的值,但主键(例如ID)除外,该ID用于引用其操作表。

  • 日志表审核-日志表已长期用于关系数据库中的事务管理。由于交易性质,需要了解 操作,数据和执行时间,日志表也可用于审计目的。

对于我的问题,我猜测基于行的审计可能是一种不错的方法,因为也有可能跟踪操作,并且如果我添加了诸如root之类的属性,则可以存储树的结构。

从设计Db的角度,或者从一些教程或文章开始实施,您有建议吗?

谢谢。

相关问题