MULTIPLE可以为空的外键是不好的做法?

时间:2018-01-24 10:07:11

标签: sql-server database entity-framework

所以这已经被问了好几次但是我没有找到任何答案在表中有多个可以为空的外键。 据我所知,共识是可以为空的外键是可以的,只要它们至少有一半时间不为空。

我的软件的目标是在构建设备时帮助生产部门处理不同的流程。我们将这些流程称为配置控制 ExtendedBuildup 。这些过程中的每一个对于每种设备类型都是唯一的,并在单独的表中表示。设备可以具有这些过程中的一个或多个。 流程定义链接到名为 DeviceType 的表中的设备。我的 DeviceTypes 表有三个可以为空的外键( IdConfig IdControl IdExtendedBuildup )。

生产部门构建设备后,结果将存储在名为设备的表中。上面提到的每个进程还有一个与构建设备相关的第二个结果表。 这意味着设备表还有三个名为 IdConfigResult IdControlResult IdExtendedBuiltupResult 的可归位外键。

我有点不喜欢有这么多可以为空的外键。 这些可以为空的外键也可以替换为每个表的链接表,但这意味着我最终会得到3个进程加上3个结果表以及每个表的链接表。这意味着我还有6张额外的牌桌。没有更多的空值,但总的来说更多的表。 反转关系(将外键移动到进程或结果表)也是一个选项,但这会导致进程表中的更多项,因为如果我更新 DeviceType 表中的条目(导致新条目,因为我需要有所有更改的完整历史记录)我还必须创建三个新条目,每个进程一个。

将来可能还会有一些新流程必须集成到这个模式中,因此创建一个新流程总是意味着必须有一些新的表和关系。

那我该怎么做呢?我真的在这里发生冲突,因为我无法找到解决所有问题的正确解决方案。

0 个答案:

没有答案