ポリモーフィック関連
アンチパターンと言われることが多い
例
P1
← C
→ P2
のような依存関係
Cの例id | ... | p_type | p_id |
100 | ... | P1 | 1 |
101 | ... | P2 | 1 |
102 | ... | P2 | 2 |
ここで、 p_id
は2つの意味を表していることに注意する
p_type
の値によって、 p_id
の表す意味が変わる
従って、
p_id
には適切な
外部キー制約を付けることができない
解決策
P1
← PI1
→ C
← PI2
→ P2
定義
(c_id,p1_id)
は複合主キー
c_id
と p1_id
に外部キー制約
P1
、 P2
の共通項を抜き出した基底 B
を作り、
P1
、 P2
、 C
が、 B
を継承しているものとして捉える
以下の様な参照関係になる
P1
→ B
P2
→ B
C
→ B
P1
→ C
← P2
じゃだめ?
依存関係がおかしくなっているのでダメ

ダメ、というか無理

の例に沿って説明するなら
そもそも、
Bugs
や FeatureRequests
が先にあって、
それに対して Comments
ができる
という順序なので、 Bugs
→ Comments
← FeatureRequests
は不可能
Bugs
が生成された時点で Comments
は存在していないし、
そもそも Bugs : Comments = 1 : 多
なので、 Bugs
はどう定義するんですか?という話になる
参考