对于那些对employee表使用SQL hierarchyid的人,如何容纳同一个表中包含的非活动(已停用,已终止)员工记录?对于新的CEO(root),这会导致多行具有NULL parentID。通常的做法是将这些记录迁移到单独的表中吗?
我们有一个包含活动和非活动记录的员工表。这对于使用员工数据但在员工离职后更新自己的相关数据的许多下游系统非常有用。例如,使用employee表跟踪项目管理器的项目系统。如果这些系统只引用一个只有活跃员工的表,那么在提取员工数据时就不会找到匹配的行。
澄清问题 为了澄清这个问题,我已经阅读了有关多个根的文章,我意识到这是可能的。我的问题更多的是如何在现场处理这个问题。如上所述,一种选择是将非活动记录移动到单独的表中,以便根节点始终是单个CEO。另一种选择可能是“组织”的虚拟根,其后是所有CEO记录(过去和现在)。或者您可以完全跳过“/”根,只需从所有CEO记录开始。我假设这种情况(具有主动/非主动CEO类型记录的员工表)很常见,所以我想听听正在使用的解决方案。
源数据更新 仅供参考 - 源员工表位于我的系统的上游,我们从Active Directory源获取更新。我无法切换源以消除child_id / parent_id列。但是,我可以更新我们的副本以包含我们下游应用程序的hierarchyid。我会将child_id / parent_id保存在我们的数据中,以便我可以使用feed更新我们的副本。
答案 0 :(得分:0)
您可以这样做并保持历史层次结构的一种方法是包括一个Start&每个关系的结束日期。因此,有5位副总裁向首席执行官约翰报告,约翰将于下个月离职。当新首席执行官戴夫进来时,这5名副总裁将向戴夫报告。您无需更改整个层次结构。
另一种方法是顶部有一些固定的标题,只需将CEO的名字从John更新为Dave(我不推荐这个,但我已经看过它被使用了)。