我有一个系统(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_LOG上插入该记录。按照这种方式,我可以向系统管理员返回一个“可读”的日志(如上所示)。
然而,我在维护日志上的FK时产生了一个很大的问题,在一段时间的日志记录之后,许多寄存器将不会从系统中删除,因为它们在日志表中被引用为FK。:(
我会问是否有其他选择或更好的方法来生成这种类型的日志。如果你知道这些方法的名称,请告诉我,这样我就可以在谷歌上搜索它。
发布于 2013-10-04 08:57:14
移除FK约束,它就会起作用。您需要的是"Audit表“,它们不需要引用完整性,因为它们是不可变的--一次编写,并且是永久的,所以将它们包含在与其他表的连接中是没有意义的。
发布于 2013-10-04 09:01:11
引用完整性(外键消失)是数据库保留的这类日志的问题之一。但您也可以将表添加到您的架构中,以便从FK表中移动“已删除”的行。然后,使用“活动的”FK表和“删除的”FK表的联合计算日志表上的连接。Bam@!没有遗漏的FK。
或者,可以对日志文件中的数据进行反规范化(将FK链接字段展开到日志文件中的数据列)。是的,这占用了更多的空间,但节省了查询时间,并记录了事件发生时出现的信息。
https://stackoverflow.com/questions/19171447
复制相似问题