Entity framework core 用于记录跟踪的数据库设计

Entity framework core 用于记录跟踪的数据库设计,entity-framework-core,asp.net-core-2.0,Entity Framework Core,Asp.net Core 2.0,背景:我正在编写一个应用程序,并使用efcore设计数据库。有一些特定的表存储用户操作,我需要跟踪谁创建了记录、上次修改了记录和删除了记录(软删除) 我有一个用户表,其中有一个int作为主键,每个字段(CreatedBy、LastModifiedBy、DeletedBy)都有一个指向用户行的int 我有一个完整的审计设置,其中整行的旧/新内容都存储在save上,这很好。但这个问题是关于通过跟踪创建/修改/删除的更直接的内容 帮助台通常每天使用这些字段来帮助用户快速确定发生了什么,但应用程序本身中

背景:我正在编写一个应用程序,并使用efcore设计数据库。有一些特定的表存储用户操作,我需要跟踪谁创建了记录、上次修改了记录和删除了记录(软删除)

我有一个用户表,其中有一个int作为主键,每个字段(CreatedBy、LastModifiedBy、DeletedBy)都有一个指向用户行的int

我有一个完整的审计设置,其中整行的旧/新内容都存储在save上,这很好。但这个问题是关于通过跟踪创建/修改/删除的更直接的内容

帮助台通常每天使用这些字段来帮助用户快速确定发生了什么,但应用程序本身中有很多地方最终会利用这些字段(从应用程序的角度来看,moreso创建/修改了这些字段)


问题:我打算在表和用户表之间创建pk/fk关系。然而,它让我思考是否有更好的策略,然后将这3个字段和关系添加到未来的每个表中。可能是存储表名及其主键的单个表,以及与用户表有关系的已创建/修改/删除列,以便只有1个表与用户表有这些主键/fk关系。我只是觉得必须有更好的方法/更有效的方法来处理这件事。有更好的方法来处理这个问题吗?

不要按照你的想法去做,坚持你原来的设计-保留所有审核字段,因为它们与表本身的每个表都相关。添加一个存储来自其他表的审核字段的表只会创建一个设计噩梦

现在,一个更大的问题是如何跟踪审计事务。我喜欢的设计如下:

  • CreateBy。添加默认绑定子字符串(SUSER_NAME(),1,50)
  • 创造。添加默认绑定GETDATE()
  • 更新比
  • 更新
允许硬删除(即坏数据)。软删除以名为ActiveInd(BIT)的附加列的形式出现,该事务将作为更新存储在该列中。这意味着更新和软删除被记录到UpdateBy/UpdateTs列中

如果您打算跟踪web应用程序中的活动,那么这应该可以满足您的需要。如果您有一个后端系统正在加载和处理数据,我将包括一个跟踪所有作业的LoadInfo表,然后您可以添加LoadSequenceKey和ParentSequenceKey(在此处添加一个自引用外键)然后,您可以在所有表上创建外键,这些表由将序列键存储为CreateSequenceKey或UpdateSequenceKey的作业修改

根据我在StackOverflow的经验,这可能是你会得到的最好答案,因为大多数人要么反对投票,要么告诉你我们在这里是如何解决具体的代码问题,而不是广泛的设计问题


注:我没有否决你的问题。

我认为这是一个非常具体的设计问题,所以我不认为人们会这么快否决,但唉,事实就是这样。我觉得它足够具体,而且你已经尽职尽责了。所以我回答。