generated at
具象テーブル継承

基底クラス S と、それを継承した A B がある時に、これらをどうtableで表現するか
A B を個別にtableを作り、全てのcolumnを持たせる


こういう構造がある時に
ts
type 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; }
こうする
A
nameagestatusversion
hoge20XXX2
B
nameagepriority
piyo20high


個別に正しい実装をできる
NULLなどの制約を設けられる
tableの定義を見れば、どの値が必須項目なのかわかる
「これは A です」「これは B です」のようなtypeを表すcolumnが不要
クラステーブル継承と異なり、 join 不要
共通属性のみを選択し、UNIONしたViewを定義しておくと便利


短所
A B を個別で見た時に、どれが共通の属性なのか判別するのが難しい
上記例で言えば、 name age が共通している
これらの共通している項目が、たまたま共通しているだけなのか、意図したものなのかの判断ができない
tableをまたいで共通の属性に対するユニーク制約がかけられない
共通の項目に変更があった場合に修正が面倒そう
A B C も...、columnを増やす必要がある
これはこれで共通項目の集計がダルそう
集計前に、 A , B , C ,..を全てJOINしたtableに対して、集計する必要がある


参考