中间表中复合主键中的属性是否可以为空?我有一个三元关系,其中两个实体有子类。子类有自己唯一的主键。中间表的主键由子类主键组成(见下图),因此有时某些属性为空。
我订单进入中间表。您可以看到有时这些属性为null。例如,客户从餐馆菜单订购某些东西,那么餐饮订单ID将为空。这样做会好吗?如果不是应该怎么做?
答案 0 :(得分:2)
复合键字段不能为空。 customer
和menu
应隐藏各自的抽象,以便order
不会对特定类型的客户或菜单产生严重依赖。如果您需要一个中间表,请给它一个合成主键,让它处理餐厅和餐饮菜单之间的区别。使用表继承(如果您有Postgres)或视图来表示每种类型的客户或菜单的完整数据集。
但首先要确保你真的需要将这些表分开 - 外键可以为null,但首先更少的表和外键使应用程序逻辑更容易。