0

由于关系数据库不支持直接继承并且外键只能引用一个表,因此我不得不即兴提出一个解决方案(我认为这不是唯一的或其他)。

在我的关系数据库中有 entityA,entityB1 和 entityB2 实体。entityB1 和 entityB2 代表相似的现实生活对象,但具有不同的属性编号,如跑车和家用车。假设 entityA 可以与两个实体创建“购买”关系。通常它可以用 2 个单独的关系来完成,它们有 2 个单独的表的外键。

这是我的解决方案,我创建了仅具有属性 B_ID 的实体 B。当有一条记录插入到 entityB1 或 entityB2 时,记录的主键也将 entityB 作为 B_ID 插入。这样,我尝试用 a 间接引用 entityB1 和 entityB2单身关系。

你能建议我更好的方法吗,因为我需要使用额外的连接来访问 entityB1 和 entityB2 的属性?

4

1 回答 1

0

这是关于超类型/子类型的常见误解。

超类型应始终包含在逻辑模型中。如果无法满足特定应用程序的性能要求,则可以通过将超类型分解为应用程序物理模型中的各种子类型来解决此问题。应注意确保子类型表中没有重复的主键,并且物理模型中折叠的非键属性正确遵守逻辑模型中指定的那些规则。

还应注意验证是否存在性能问题(例如通过负载测试)。在多个应用程序/系统/企业之间共享数据时,将超类型分解为子类型可能会出现问题。

另一种物理建模方法是将子类型合并为超类型。这是通过将所有子类型属性定义为超类型表中的仅物理列来实现的。应注意确保不同子类型的列是唯一填充的列,并且其他子类型的列保持为空。

希望这可以帮助。

于 2015-06-30T11:11:51.197 回答