我的数据库中有一个 Logs 表,用于存储用户操作的记录。有一个 UserID 列,它是用户表的外键,用于在添加日志时检查 UserID 是否存在。但是,尝试删除用户会导致约束失败,因为它会在 Logs 表中留下一个不再存在于 Users 表中的 UserID。从日志中删除有问题的行不是一种选择,因为关键是要有持久的记录(这样我们基本上可以找出谁破坏了什么),所以删除该用户的所有操作反而违背了目的。
是否有一种简单的方法可以在插入新日志时检查约束(以确保用户当时存在)但在删除用户时不检查?我通过 LINQ 访问数据库,所以我的查询是在 C# 中,而不是 SQL,所以任何需要它的东西都出来了,但是我可以通过 MS SQL Server Management Studio 访问数据库,所以我可以用它做我喜欢的事情.
编辑稍作澄清:知道谁采取了行动的价值不仅在于问责制;它有助于确定问题是用户特定的、组织特定的还是系统范围的,这可以大大缩小可能原因的范围。一旦用户被删除,仍然值得保留他们的操作,并且出于各种原因了解该用户执行了哪些操作仍然很有用 - 例如,当追踪由一个用户执行某种特定组合的事情引起的问题时(例如. 两个动作分开很好,但当一个紧跟着另一个时会导致错误)。