在三元关系中映射子类

Mapping subclasses in ternary relationships

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

我把命令变成了中级table。您可以看到有时这些属性为空。例如,客户从餐厅菜单中订购了一些东西,那么餐饮订单 ID 将为空。这样做可以吗?如果不是应该怎么做?

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

但首先要确保您确实需要将这些 table 拆分 - 外键可以为空,但首先要减少 table 和外键应用程序逻辑更简单。