数据建模子类型 - 超类型关系时要使用哪些约束?

时间:2012-06-24 08:30:59

标签: sql database-design

在使用多个互斥子类型建模超类型/子类型关系时,如何通过约束来强制执行这种相互排他性?

我的第一个猜测是:

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

1 个答案:

答案 0 :(得分:0)

您所描述的内容仍然不会强制执行子行的状态

为此,您需要抛弃类型鉴别器并在相反方向添加FK,这将导致循环FK,这将需要延迟约束来解析 - something like this

我个人认为最好只使用最简单的数据库模型......

SuperType
  (PK) super_id

SubType1
  (PK, FK) super_id

SubType1
  (PK, FK) super_id

......并在申请层面强制执行儿童的排他性和存在。