一个表,用于保存两个字段的更改历史



我有一个表,里面有一个人(详细信息)。其中两个字段,我们需要存储和显示更改的历史。它们是"IsActive BIT"one_answers"IsIdle BIT"。

目前,它们是Person表中的字段。

要求是能够显示人员何时处于活动状态,何时处于空闲状态。以及谁设定了这些价值观。(所有信号装置都有一个LastUpdatedBy和CreatedBy列)。

我的计划是使用PersonHistory表,PersonIDFK到Person,IsActive和IsIdle列,CreatedBy和LastUpdatedBy列。和一个"生效日期"DATETIME。

因此,当我们创建一个人时,我们会在历史记录中添加一行,其中包含IsActive和IsIdle值、user和PersonID。

要显示一个人,我们必须对该个人记录进行(Untty?)选择,然后连接到历史记录表中该人的最后一条记录。内部联接。。使用ROW_NUMBER从历史记录中选择前1*?可能很慢。

编辑"IsActive"时,我们需要添加一个新行,其中包含PersonID和新的IsActive(和/或IsIdle)值。事实上,我们需要存储两者。只有当这些值发生更改时,才会写入一行。这意味着我们需要进行预保存检查,看看值是否发生了变化。

这似乎是处理这一需求的标准方法吗?或者有更好、更常见的方法吗?

您可以在更改数据结构之前尝试此方法:

select p.*, ph.*
from Person p outer apply
     (select top 1 ph.*
      from personhistory ph
      where ph.personid = p.personid
      order by ph.effectivefrom desc
     ) ph;

为了提高性能,您需要personhistory(personid, effetivefrom)上的索引。

相关内容

  • 没有找到相关文章

最新更新