シングルテーブル継承
table設計のパターン
基底クラス S
と、それを継承した A
と B
がある時に、これらをどうtableで表現するか
シングルテーブル継承は、 A
と B
の属性を全部1まとめにしたtableを一つ作る
例
こういう構造がある時に
tstype S = A | B
type A = {
name: string; // この2つはBと共通
age: number; // この2つはBと共通
status: Status;
version: Version
}
type B = {
name: string; // この2つはAと共通
age: number; // この2つはAと共通
priority: Priority;
}
こうすることをシングルテーブル継承と呼ぶ
Sname | age | status | version | priority |
hoge | 20 | XXX | 2 | NULL |
piyo | 20 | NULL | NULL | high |
汎用的な S
tableを作りました、ってだけ
modelingの結果として雑すぎて良くないと思う

継承した物の数が増えるとcolumnが増え続ける
上記の例で言えば、 C
, D
, ...がある時
不要なcolumnには NULL
が入りまくる
同じ理由でNOT NULL制約をかけられない
「このタイプは、この項目を埋める」というのがtableの定義から自明でない
上記の例で言えば、「 A
typeの場合は、 (name,age,status)
が必須」というのがわからない
EntityとTableが1対1対応してしまうframworkを使うと起きがちが印象がある
参考
EAVの解決策の一つとして提示されているが良くないと思う
