长期以来,我们一直希望创建一个不会丢失历史记录的案例管理系统。进行更改时,我们希望记录该更改,但能够返回到任何时间点并查看记录的样子。我想向 Stack Overflow 社区提出这个问题,看看有哪些方法可以做到这一点,是否已经有技术可以实现这一目标?
问问题
5125 次
2 回答
8
是的,这项技术确实存在——实施它并正确地实施它需要付出一些努力。
您正在寻找的称为时态数据库- 请参阅一些资源:
于 2010-10-06T17:17:39.873 回答
3
我不确定像 marc_s 这样的临时数据库是如何工作的,但是如果您使用的是 SQL Server 2008 或更高版本,则可以利用其内置的更改数据捕获 (CDC) 功能:
启用 CDC 使用复制事务日志来存储表的插入、更新和删除,并创建允许您检索给定日期/时间的行或仅检索更改的表值函数。
但是,您不能单独依赖 CDC,因为您的事务日志将变得难以管理且速度缓慢。所以你要做的是:
- 启用 CDC,
- 使用与原始表相同的模式创建历史表,但添加了更多列来存储行版本信息(很像关系 OLAP 数据库中缓慢变化的维度),以及
- 创建一个作业,该作业将定期轮询 CDC 函数自上次加载以来的更改并将它们推送到历史记录表
然后,您可以在查询中使用历史记录表,像往常一样加入它,但使用额外的谓词来获取“as-of”记录,无论您想要什么日期。
于 2010-10-06T20:26:06.353 回答