リレーショナルなデータベースは継承をサポートをしていないので、オブジェクトの継承関係をデータベースにどのように表現するのか考慮する必要があります。
それを表現する3つのパターン、単一テーブル継承・クラステーブル継承・具象クラス継承とはについて説明します。
※各パターンの実装におけるメリット・デメリット等には触れません。
今回想定する登場するクラスは4つです。
Party PeopleがRich Peopleを継承するという構造はちょっとわかりづらいかもしれませんが、イメージが伝われば良しとします。
全クラスに共通する属性を持っています。
良識を持った善良なる一般ピーポーです。
お金と土地を持っているリッチな人々です。
moneyはお金です。
landは土地です。
※単位とか細かいことは考慮していません。
パーリーピーポー。
単一テーブル継承は、オブジェクトの継承関係を1つのテーブルで表現します。
テーブルにはサブクラスを判断するためのカラム(type)を持たせます。
RailsでSTIの実装がサポートされているようです。
クラステーブル継承は、オブジェクトの継承関係をクラスごとに1テーブルを用意することで表現します。
スーパークラスのテーブルにはスーパークラスの持つカラムを、サブクラスのテーブルにはサブクラスの持つカラムのみを持たせます。
具象テーブル継承は、オブジェクトの継承関係を具象クラスだけ対応したテーブルを用意することで表現します。
各テーブルにはスーパークラスが持つカラムを共通属性として持たせます。
どのパターンを実装するかはテーブル設計のメリット・デメリットとアプリケーション側のロジックのコストの検討次第でしょうか。
何か語弊がある部分や間違いがある場合はご指摘ください。
関連書籍