跟踪数据库表中更改的最佳方法是什么?
想象一下,您有一个应用程序,其中用户(在应用程序的上下文中而不是数据库用户)能够更改存储在某个数据库表中的数据.跟踪所有更改历史记录的最佳方法是什么,以便您可以显示哪个用户在何时更改哪些数据如何?
通常,如果您的应用程序是分层的,则让数据访问层在数据库服务器上调用存储过程以写入数据库更改日志。
在支持此类事物的语言中,面向方面的编程可能是用于此类应用程序的好技术。审计数据库表更改是您通常希望针对所有操作进行记录的一种操作,因此AOP可以很好地工作。
请记住,记录数据库更改会创建大量数据,并且会降低系统速度。根据应用程序的大小,使用消息队列解决方案和单独的数据库来执行审核日志可能是明智的。
使用存储过程来处理此问题也是完全可行的,尽管可能需要进行一些工作才能将用户凭据传递到数据库本身。
我经常看到的一种方法是拥有审计表.然后你可以显示改变了什么,改变了什么,改变了什么,或者你想要的任何东西:)然后你可以编写一个触发器来进行实际的记录.如果做得好,不要太痛苦......
不管你怎么做,都取决于你的用户如何连接到数据库.他们是否通过应用程序中的安全上下文使用单个应用程序用户,他们是否使用自己在域上的帐户进行连接,或者应用程序是否只让每个人都使用通用sql帐户进行连接?
如果您无法从数据库连接获取用户信息,那就更难了.然后你可能会看看在应用程序中进行日志记录,所以如果你有一个名为"CreateOrder"的进程或其他什么,你可以登录Order_Audit表或其他任何东西.
在应用程序中完成所有操作可以让您自己更多地了解应用程序外部所做的更改,但是如果您有多个应用程序都使用相同的数据而您只是想看看您的更改是什么,也许这就是您想要的...... < 耸肩 >
祝你好运!
--Kevin