将 EER 映射到关系模型。超类与(强制;不相交)子类的强制参与

问题描述 投票:0回答:1

我有一个超类 A,它与另一个实体 (X) 具有 1:*(一对多)关系,并且 A 的参与是强制性的。 A 有两个子类,它们具有各自不同的属性,B 和 C。超类-子类层次结构的组织方式是参与约束是强制性的,并且不能重叠,要么是 B,要么是 C,没有“抽象”A .

在将其映射到关系模型时,我只为 B 和 C 创建了两个单独的表(关系),并将它们的主键作为 X 实体的外键。然后我意识到外键必须可以为空,因为它可以是 B 或 C。但是,它创建了一个不希望的选项,将两个外键都设为空或同时将其中两个外键设为空。

我能想到的另一个选择是为两个子类创建一个单一的关系并添加一些标志(isB 和 isC),但是如果每个子类的属性数量都会增加,那就会很混乱。而且,它会生成很多空值。

我该怎么办?适应这种情况并将其映射到关系模型的最佳实践是什么?

Link to an example diagram

database database-design entity-relationship relational-model
1个回答
0
投票

好吧,我想我已经找到解决方案了。在映射时,只保留两个子类(特别是当它们具有许多属性时)、将外键保留在 X 实体中并使它们可为空是有意义的。我错过的是你可以为你的 X 实体创建一个检查约束,它会做类似的事情

CHECK (
    (B_ID IS NOT NULL AND C_ID IS NULL) OR
    (B_ID IS NULL AND C_ID IS NOT NULL)
)
© www.soinside.com 2019 - 2024. All rights reserved.