Single Table Inheritance は、オブジェクトモデルにおいて表現された継承関係を DB にマッピングするためのデザインパターンの 1 つで、 継承関係にある各クラスのフィールドを 1 つのテーブルに集約させるという設計になります。他のパターンとしては、後日に読む
- Class Table Inheritance
- Concrete Table Inheritance
があります。
クラスを DB に永続化するとき、対象クラスに存在するフィールドはそのまま DB に反映されますが、存在しないフィールド値は、対応する DB 上のカラムに null で格納されます。 一方、DB 上のデータをオブジェクトにマッピングするときは、対象レコードが継承ツリー上のどのクラスを表現しているのかを、別カラムで表現しておく必要があります。
パターンの長所
- 1 テーブルのみを対象としておけば良くシンプル
- データを取得するときに JOIN が必要ない
- 特定のフィールドを継承ツリー上のどのクラスに移動したとしても、テーブル設計に影響を与えない
パターンの短所
- 特定のクラスでしか使われないカラムによって DB 容量が消費されてしまう
- 1 テーブルにデータが集中するため、パフォーマンス劣化に繋がる