我有一个有趣的建模问题。我正在尝试在网站上生成一个组织结构图(后端是 C# / SQL 服务器,前端是 javascript / google orgchart API,但建模问题的症结更通用,所以我没有包含任何特定技术下面的标签,因为问题不涉及任何技术特定问题。
我有以下 4 个数据库表:
- 团队- 具有 Id、Name、ParentTeamId 字段(同一表中的另一行)
- 职位- 代表团队中的职位。字段为 Id、TeamId、IsTeamHead 等
- Person - 代表一个人(此表中没有与任何其他表的链接)。字段是 Id、FirstName、LastName 等
- PersonPosition - 代表位置的人(这将两个表连接起来)字段是 Id、PersonId、PositionId、StartDate、EndDate
当我有一个普通的香草组织结构图时,这很有效,因为我基本上循环遍历每个团队(因为每个团队都有其ParentTeamId)并建立一个团队层次结构并显示该团队中的位置(使用TeamId字段)与“Ishead” = true并将与该位置相关联的人显示为头部。
我的问题是(并不少见),有些人现在被赋予了多重责任——他们基本上有两种不同的工作。此前,乔是营销主管,比尔是区域主管,但乔离开了
在营销主管和区域主管之前,这是 2 个不同的人(2 个不同的职位)所以比尔是营销主管,但也是美国的区域经理。我试图弄清楚建模和可视化的正确方法是什么。
建模问题的第一部分是决定我是否应该将其建模为两个不同的位置。如果我这样做了,我可以在这个PersonPosition表中有多个条目(两者都具有相同的PersonId),但问题是我感觉我多算了职位数量。
此外,从可视化的角度来看,同一个人会出现在两个地方。从功能的角度来看,这可能是正确的,但您将多次列出同一个人似乎很奇怪(也许这并不奇怪,但希望获得有关人们在这种情况下所看到的预期可视化以及似乎可以接受的反馈也许应该推动建模)
对“正确”的方法有什么建议吗?