【发布时间】:2020-12-22 11:06:03
【问题描述】:
我必须为一组(有限的)产品创建一个数据库结构,这些产品具有一些共同的和许多不同的属性。我创建了一个主要的Product 表/类型,并为每个子类型(Car、Bike)创建了一个单独的表。在每个子类型中都有一个具有唯一约束(一对一关系)的 product 的外键引用,它也用作子类型中的主键。
我必须以目标表可以包含任何一种产品类型的方式引用其他表中的产品。例如,有一个以产品为外键的合同表。它可以是任何子类型(Car、Bike 等)。我应该如何为这些外键建模?
我有两个解决方案。我可以在没有 FK 约束的合同表中创建引用,还可以添加另一个字段以保存到产品的子类型(多态关联)。但是我必须在很多地方引用该产品。恐怕这种方法在广泛使用时会造成无法维护的混乱。
第二种解决方案是我只在每个关系中引用产品超类型,并从超类型访问子类型属性,因为每个超类型记录都会有一个且只有一个子类型记录。
我想知道从长远来看,第二种方法的可管理性如何?当我在查询产品表时还需要获取子类型的属性时,连接表的最佳方法是什么?
【问题讨论】:
标签: postgresql database-design foreign-keys