我有一个 ms-access 数据库在工作,它有一个事务日志表。
该表包含以下字段:
日期 - 交易发生的日期。
- Table_Name - 更改字段的表的名称。
- Table_Field - 表中已更改的字段。
- Old_Value - 字段的原始值(如果有)。
- New_Value - 在此事务期间设置的字段的新值。
现在在像这样的事务日志表中,这些记录通常是由修改数据库的系统的编程 API 设置的,是数据库本身的一个功能,还是它们是由数据库触发器之类的东西触发的?还是取决于正在使用的 rdbms?
首先,正确的说法是审计表(或者审计历史)。事务日志是完全不同的东西(它是 DBMS 的核心部分,它记录所有活动事务以保证 ACID 属性)- DBMS 事务日志(它是二进制的,非常难以阅读的格式)一旦被重用不再需要(“一旦不再需要”有点含糊,但是关于事务日志语义的完整论文有点超出这个答案的范围),只要你不清除,审计历史就会永远存在桌子。
要回答实际问题 - 它应该在数据库内部完成(触发器是最简单的方法)。这样做的基本原因是,无论哪个应用程序正在使用数据库,您都希望发生与数据不可或缺的任何事情(即约束、安全规则、审计历史等)。
此外:
Old_Value
和New_Value
字段使用什么数据类型?Person(ID, Name)
,您就会有audit_Person(whoChanged, whenChanged, ID, Name)
,然后在更新或删除时,存储更改前行的状态(您不需要插入,因为您只需在表中查找当前状态),以及更改它的用户的登录名和时间。Person
,则还需要将其添加到“audit_Person”),并且很可能整体上比单表方法更大。