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 に答える