在使用多个互斥子类型建模超类型/子类型关系时,如何通过约束来强制执行这种相互排他性?
我的第一个猜测是:
SuperType
(PK) super_id
(PK) type_id
Constraint: type_id in (1,2)
SubType1
(FK) super_id
(FK) type_id
Constraint: type_id = 1
SubType2
(FK) super_id
(FK) type_id
Constraint: type_id = 2
答案 0 :(得分:0)
您所描述的内容仍然不会强制执行子行的状态。
为此,您需要抛弃类型鉴别器并在相反方向添加FK,这将导致循环FK,这将需要延迟约束来解析 - something like this。
我个人认为最好只使用最简单的数据库模型......
SuperType
(PK) super_id
SubType1
(PK, FK) super_id
SubType1
(PK, FK) super_id
......并在申请层面强制执行儿童的排他性和存在。