规范化数据历史记录问题

时间:2018-06-13 07:58:55

标签: entity-relationship database-normalization

我有两个实体:LocationEmployee。每位员工一次只能在一个地方工作。对于任何给定的时刻,模型如下:

enter image description here

但是,还需要为每个月末的所有地点和员工存储历史信息。我可以通过在两个实体中添加Month PK属性来实现此目的,但是:在这种情况下如何处理关系?

外键必须完整引用复合PK。我想到了几种选择:

选项1:重复Month实体中的Employee属性,以获得完整的PK作为FK属性。这感觉有点多余?如果员工在某个月内已经存在,那么她肯定必须在同一个月的某个位置工作 - 即两个Month属性必须始终具有完全相同的值:

enter image description here

选项2:重新使用Month实体的PK中的Employee属性作为引用Location的外键。我甚至不知道是否允许这样做(注意:我最终会使用SQL Server,如果这里重要的话)?

enter image description here

选项3:创建一个单独的桥接实体,用于保存Location-Employee关系的历史记录。这感觉有点整洁,但我再次怀疑我是否可以在这里使用一个Month属性,或者我是否需要其中两个属性。此外,它将允许多对多关系(在给定月份的几个位置的员工),在这种情况下不应该发生,并且我希望能够在数据模型中强制执行此操作。

enter image description here

我错过了一些明显的东西吗?什么是"正确"和适当规范化的解决方案?或者我应该暂时退出FK约束?

0 个答案:

没有答案