Relational database 创建超类表以减少关系量

Relational database 创建超类表以减少关系量,relational-database,entity-relationship-model,Relational Database,Entity Relationship Model,由于关系数据库不支持直接继承,并且foreing键只能引用一个表,所以我不得不改进一个解决方案,我认为它不是唯一的 在我的关系数据库中有entityA、entityB1和entityB2实体。entityB1和entityB2表示类似的现实生活对象,但具有不同的属性号,如跑车和家用车。假设entityA可以与这两个实体创建购买关系。通常可以使用两个独立的关系来完成,具有两个独立表的外键 这是我的解决方案,我创建了实体B,它只具有属性B_ID。当有一条记录插入到entityB1或entityB2时

由于关系数据库不支持直接继承,并且foreing键只能引用一个表,所以我不得不改进一个解决方案,我认为它不是唯一的

在我的关系数据库中有entityA、entityB1和entityB2实体。entityB1和entityB2表示类似的现实生活对象,但具有不同的属性号,如跑车和家用车。假设entityA可以与这两个实体创建购买关系。通常可以使用两个独立的关系来完成,具有两个独立表的外键

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


你能给我建议一个更好的方法吗?因为我需要使用额外的连接来访问entityB1和entityB2的属性,这是关于超类型/子类型的常见误解

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

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

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

希望这有帮助