generated at
参照を逆転してポリモーフィック関連を解消

名前ついてないんか?mrsekut



こういうポリモーフィック関連に対して
P1 C P2 のような依存関係
Cの例
id...p_typep_id
100...P11
101...P21
102...P22
ここで、 p_id は2つの意味を表していることに注意する
p_type の値によって、 p_id の表す意味が変わる
従って、 p_id には適切な外部キー制約を付けることができない



こうする
中間tableを用意して、参照を逆転させる
P1 PI1 C PI2 P2
定義
PI1
c_idp1_id
(c_id,p1_id) は複合主キー
c_id p1_id に外部キー制約
中間テーブルを作ることで、依存の向きは歪にならない



問題点を挙げるとすれば
PI1 PI2 には同じ c_id が存在してはいけない
tableを跨いでUNIQUE制約を付けられないのでDBのみでは担保できない
アプリケーション側で制御する必要がある
P の数だけ、 (P用のtable, 中間テーブル) が必要になる
なので、readする時のJOINの数はクラステーブル継承の2倍になる
通常は中間tableは多対多の関係に使うが、これは1対1に使っているのでちょっと変




あるいはいっそのこと依存関係を逆転させるか
そうすれば中間テーブルは不要になる
テーブルの都合で逆転するのはおかしいと思うが
P1 P2 に共通項目がない場合はクラステーブル継承よりシンプル?