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

时间:2013-10-04 00:52:45

标签: c# asp.net sql-server logging

我有一个系统(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。 :(

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

2 个答案:

答案 0 :(得分:1)

删除FK约束,然后它就可以了。你想要的是什么被称为“审计表”,它们不需要引用完整性,因为它们是不可变的 - 一旦编写和永久,所以将它们包含在JOIN中是没有意义的其他表格。

答案 1 :(得分:1)

参照完整性(外键消失)是数据库保留此类日志的问题之一。但是,您还可以将表添加到架构中,从FK表中移动“已删除”行。然后使用“实时”FK表和“已删除”FK表的并集计算日志表上的连接。巴姆@!不要错过FK。

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