在三元关系中映射子类

时间:2017-09-22 21:34:45

标签: database entity-relationship

中间表中复合主键中的属性是否可以为空?我有一个三元关系,其中两个实体有子类。子类有自己唯一的主键。中间表的主键由子类主键组成(见下图),因此有时某些属性为空。

我订单进入中间表。您可以看到有时这些属性为null。例如,客户从餐馆菜单订购某些东西,那么餐饮订单ID将为空。这样做会好吗?如果不是应该怎么做?

enter image description here

1 个答案:

答案 0 :(得分:2)

复合键字段不能为空。 customermenu应隐藏各自的抽象,以便order不会对特定类型的客户或菜单产生严重依赖。如果您需要一个中间表,请给它一个合成主键,让它处理餐厅和餐饮菜单之间的区别。使用表继承(如果您有Postgres)或视图来表示每种类型的客户或菜单的完整数据集。

但首先要确保你真的需要将这些表分开 - 外键可以为null,但首先更少的表和外键使应用程序逻辑更容易。