如何记录系统用户所做的更改

本文关键字:用户 系统 何记录 记录 | 更新日期: 2023-09-27 18:33:46

我有一个系统(c#/asp.net/sqlserver),用户可以在其中登录和管理商店的产品。我需要登录数据库,用户对产品所做的每次更改。前任:

Product A
Inserted by USER1 on 10/03/2013 10:00
Description changed to "Product AA" by USER2 on on 10/03/2013 12:00

实际上,我有一个类似于 PRODUCT 表的PRODUCT_LOG表,每次更改 PRODUCT 上的某些记录时,都会在PRODUCT_LOG上插入该记录。继续这样做,我可以将"可读"日志返回给系统的管理员(如上所述)。

但是,我在日志上维护 FK 时遇到了一个大问题,经过一段时间的日志记录后,许多寄存器不会从系统中删除,因为它们在日志表中作为 FK 引用。 :(

我会问是否有其他选择或更好的方法来生成这种类型的日志。如果您知道方法的名称,请告诉我,以便我可以在谷歌上搜索它。

如何记录系统用户所做的更改

删除 FK 约束,然后它就可以工作了。你想要的被称为"审计表",它们不需要引用完整性,因为它们应该是不可变的 - 一次写入并且永久,因此将它们与其他表一起包含在 JOIN 中是没有意义的。

引用完整性(外键消失)是数据库保留的此类日志的问题之一。 但是,您也可以将表添加到架构中,以便从 FK 表中移动"已删除"的行。 然后,使用"实时"FK 表和"已删除"FK 表的并集来计算日志表上的联接。 Bam@!没有缺少FK。

或者,您可以对日志文件中的数据进行非规范化(将 FK 链接字段扩展到日志文件中的数据列)。 是的,这会占用更多空间,但可以节省查询时间并记录事件发生时显示的信息。