理系学生日記

おまえはいつまで学生気分なのか

PoEAA: Class Table Inheritance

Class Table Inheritance は、Rool-Leaf Mapping とも呼ばれるもので、階層構造を持つオブジェクトモデルと DB 上のエンティティとの関係について、オブジェクトモデルのクラス毎にテーブルを持たせるというデザインパターンです。

オブジェクトモデルとエンティティという対応においては分かりやすいパターンです。 ドメインモデル上で表現されるデータがテーブル上で散らばってしまっているので、その抽出が複雑になります。

長所

  1. 各テーブル上のカラムはそのテーブルに必要な情報を保持する(不要な情報を保持しない)ので、スペースに無駄がない
  2. ドメインモデルとデータベースとの関係が分かりやすい

短所

  1. DB からオブジェクトを作成する際、複数のテーブルを参照する必要があり、その参照は複雑になる
  2. 継承ツリー上でフィールドを親クラスに移動させるような設計変更が、テーブル構造に影響を与える
  3. 継承ツリーの上位にあたるテーブルは頻繁にアクセスされるため、ボトルネックになりやすい