generated at
シングルテーブル継承
table設計のパターン

基底クラス S と、それを継承した A B がある時に、これらをどうtableで表現するか
シングルテーブル継承は、 A B の属性を全部1まとめにしたtableを一つ作る

こういう構造がある時に
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; }
こうすることをシングルテーブル継承と呼ぶ
S
nameagestatusversionpriority
hoge20XXX2NULL
piyo20NULLNULLhigh

汎用的な S tableを作りました、ってだけ
modelingの結果として雑すぎて良くないと思うmrsekut
継承した物の数が増えるとcolumnが増え続ける
上記の例で言えば、 C , D , ...がある時
不要なcolumnには NULL が入りまくる
同じ理由でNOT NULL制約をかけられない
「このタイプは、この項目を埋める」というのがtableの定義から自明でない
上記の例で言えば、「 A typeの場合は、 (name,age,status) が必須」というのがわからない
EntityとTableが1対1対応してしまうframworkを使うと起きがちが印象がある
これが、EntityとTableは1対1対応させる必要はないを後押しする理由になる
ECCUBEのOrderItemがクソデカになる原因はこれ






参考
EAVの解決策の一つとして提示されているが良くないと思うmrsekut