跟踪数据库中已修改元组的最佳方法是什么?

时间:2010-01-13 15:11:51

标签: database relational

我目前正在开发一个项目,我必须跟踪在关系数据库中修改的元组。这应该包括更新的元组,还包括插入和删除的元组。我的问题是实现这一目标的最佳方法是什么?我有几个自己的想法,但也许有更容易/更好的方法,我没有想到,或者已经有一个项目正是这样做。

该项目的最终目标是它将适用于不同供应商的关系数据库,但第一个实现将使用MySQL数据库。稍后可以支持其他数据库系统。但如果适用于MySQL的解决方案可以很容易地适应另一个数据库,那就太好了。

我的第一个想法是解析日志文件。但是,我不确定这些日志文件是否包含实际修改的元组,而且我可以想象这些日志文件并不总是可用(例如,在共享主机上)。

我的第二个想法是在应用程序级别拦截查询。执行INSERT,DELETE或UPDATE查询时,可以解析这些查询,并且可以预先确定它们将影响的元组。对于INSERT操作,这只是插入的元组,对于DELETE或UPDATE操作,可以通过在新的SELECT语句中应用WHERE子句来识别元组。

作为最后一句话,我想补充一点,在这个发展阶段,表现并不是一个重要因素。

如果需要更多细节,我很乐意提供。

2 个答案:

答案 0 :(得分:2)

使用触发器捕获INSERT,UPDATE和DELETE,并将条目记录到新表中。您可以在该表上使用时间戳来记录事务发生的时间。将来您可以在该表中查询修改信息。

答案 1 :(得分:0)

这将需要一些依赖于数据库的功能,但您可以根据您的体系结构封装它们,但是您可以使用数据库触发器,我通常会建议您使用它,除非是审计这一点。在每种触发器中,您只需向日志表写入所需的任何信息即可。只有一个建议。