2

在对具有多个互斥子类型的超类型/子类型关系建模时,应如何通过约束来强制执行这种互斥性?

我的第一个猜测是:

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
4

1 回答 1

0

您所描述的仍然不能强制子行的存在

为此,您需要放弃类型鉴别器并在相反方向添加一个 FK,这将导致循环 FK,这将需要延迟约束来解决 -像这样

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

SuperType
  (PK) super_id

SubType1
  (PK, FK) super_id

SubType1
  (PK, FK) super_id

...并在应用程序级别强制执行儿童的排他性和存在。

于 2012-06-24T11:35:24.567 回答