创建超类表以减少关系量



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

在我的关系数据库中,有实体A,实体B1和实体B2实体

.实体B1和实体B2表示类似的现实生活对象,但具有不同的属性编号,如跑车和家用车。假设实体 A 可以与两个实体创建"买入"关系。通常可以用2个独立的关系来完成,这些关系有2个独立表的外键。

这是我的解决方案,我创建了实体 B,它只有属性B_ID。当有记录插入到实体 B1 或实体 B2 时,记录的主键也会插入实体 B B_ID。通过这种方式,我尝试以单一关系间接引用实体 B1 和实体 B2。

你能建议我更好的方法吗,因为我需要使用额外的连接来以这种方式访问实体 B1 和实体 B2 的属性?

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

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

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

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

希望这有帮助。

最新更新