我有一个表,里面有一个人(详细信息)。其中两个字段,我们需要存储和显示更改的历史。它们是"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)
上的索引。