0

我即将开始为 MVC Web 应用程序设计一个数据库,并且正在考虑使用一个名为“更改”或“事件”的表来跟踪对数据库所做的所有更改。它将有一个字段用于表名、记录 ID、进行更改的用户、时间戳以及它是创建还是修改事件。

我的问题是,与每个表中的“创建者”、“创建者”、“修改者”、“修改者”字段相比,这是否是一种糟糕的设计实践。我在想,在父模型类中,我会使用一个保存前的函数来记录每一个变化。我可以看到一个陷阱可能是如果一次更新了许多记录,则可能很难获得正确保存更改的功能。

4

4 回答 4

0

我认为你的方法很好。将这些事件放在单独的表中的一个优点是您可以捕获多个编辑。如果您只有ModifiedDate/ModifiedBy列,则只能看到最后一次编辑。

需要注意的主要事情是表大小,因为审计表可以变得非常大。您还可以决定拆分为多个审计表(例如,使用带有_audit后缀的相同表名)以提高查询性能。

于 2013-06-24T19:33:08.540 回答
0

这取决于你需要什么。创建和维护事件表的原因是维护更改的审计跟踪。

对于某些应用程序,行尾创建/更新的字段是足够的审计线索。

对于更安全的应用程序,您需要一个事件表。您还需要在事件表中包含实际更改(之前/之后)。

于 2013-06-24T19:34:27.387 回答
0

还要考虑一个与时间相关的表,其中每条记录都有一个开始和结束日期,以及一个创建者。任何更改实际上都会设置前一个记录的结束日期并创建一个新记录,结束日期为 NULL。

您当前的记录是结束日期为 NULL 的记录。

基本上,每张唱片都有一个生命周期。

于 2013-06-24T19:39:29.733 回答
0

这是权衡每次数据库中的某些内容发生更改时写入此表的开销以及所需的额外存储空间的好处。

如果您担心在模型类上使用函数,那么另一种选择是数据库触发器。这将是相当健壮的,但设置工作量更大,因为您需要为每个表定义触发器,除非您使用的数据库具有一般记录 DML 更改的功能。

最后,我还建议考虑存档,因为此表有可能很快变得非常大。

于 2013-06-24T19:58:53.347 回答