Database design 哪种方法更好-在每个表中更改跟踪属性,而不是在一个跟踪表中更改跟踪属性

Database design 哪种方法更好-在每个表中更改跟踪属性,而不是在一个跟踪表中更改跟踪属性,database-design,Database Design,我试图在两种跟踪记录是否已更改以及何时和由谁更改的方法之间做出选择。我对获取已经改变的实际数据不感兴趣,只对数据已经改变的事实感兴趣。我正在使用SQLServer2008 第一种方法是在每个表中有以下6列:Created On、Created By、Last Updated On、Last Updated By、Deleted On和Deleted By 第二种方法是使用一个表,我们称之为Change Tracker,它有这6列,其他表将有一个到Change Tracker表的FK 哪种做法更好

我试图在两种跟踪记录是否已更改以及何时和由谁更改的方法之间做出选择。我对获取已经改变的实际数据不感兴趣,只对数据已经改变的事实感兴趣。我正在使用SQLServer2008

第一种方法是在每个表中有以下6列:Created On、Created By、Last Updated On、Last Updated By、Deleted On和Deleted By

第二种方法是使用一个表,我们称之为Change Tracker,它有这6列,其他表将有一个到Change Tracker表的FK

哪种做法更好?为什么


另外,如果在SQL Server中启用更改跟踪,是否需要这些列?

我认为第二种方法没有好处,总是使用第一种方法。
顺便说一句,deleted_by和deleted_on是冗余字段。创建的_xx和更新的_xx字段足够了

感谢您的快速评论。你为什么说删除的_xx是多余的?我们要跟踪已删除的记录。是否要使用已删除的\u xx字段来确定记录已删除?总之,最好也是最好的方法是添加一些布尔数据类型的活动属性(例如,名为ACTIVE的字段)。因此,为了“删除”记录,我们必须在单个更新查询中更新活动字段和更新日期的值。为了选择所有活动记录,我们只需进行类似“select*FROM MyTable WHERE active=1”的查询。我知道Oracle应用程序使用这种方法,我同意他们的观点。)我明白了重点,感谢您的详细介绍。在这种情况下,如何设置主键-如果启用了deleted_,我可以将我的自然键和deleted_合并为主键。在这种情况下,我不能将它与isActive组合,因为这样它将只允许一条删除的记录。我曾想过要有一个活跃的专栏,但有一个问题