Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
37
Help us understand the problem. What is going on with this article?
@bmf_san

単一テーブル継承・クラステーブル継承・具象クラス継承について

More than 1 year has passed since last update.

概要

リレーショナルなデータベースは継承をサポートをしていないので、オブジェクトの継承関係をデータベースにどのように表現するのか考慮する必要があります。
それを表現する3つのパターン、単一テーブル継承・クラステーブル継承・具象クラス継承とはについて説明します。 

※各パターンの実装におけるメリット・デメリット等には触れません。

前提

今回想定する登場するクラスは4つです。

people_class.png

Party PeopleがRich Peopleを継承するという構造はちょっとわかりづらいかもしれませんが、イメージが伝われば良しとします。

People(人々)

全クラスに共通する属性を持っています。

  • idは一意なキーです。
  • nameは名前です。

OridinaryPeople(パンピー)

良識を持った善良なる一般ピーポーです。

  • good_senseは良識です。bool(0か1)で入ります。

RichPeople(成金)

お金と土地を持っているリッチな人々です。
moneyはお金です。
landは土地です。

※単位とか細かいことは考慮していません。

PartyPeople(パリピ)

パーリーピーポー。

  • free_timeは自由な時間です。
  • middle_nameはミドルネームです。

Single Table Inheritance (単一テーブル継承)

単一テーブル継承は、オブジェクトの継承関係を1つのテーブルで表現します。
テーブルにはサブクラスを判断するためのカラム(type)を持たせます。

single_table_inheritance_table.png

RailsでSTIの実装がサポートされているようです。

Class Table Inheritance (クラステーブル継承)

クラステーブル継承は、オブジェクトの継承関係をクラスごとに1テーブルを用意することで表現します。
スーパークラスのテーブルにはスーパークラスの持つカラムを、サブクラスのテーブルにはサブクラスの持つカラムのみを持たせます。

class_table_inheritance.png

Concrete Class Inheritance (具象クラス継承)

具象テーブル継承は、オブジェクトの継承関係を具象クラスだけ対応したテーブルを用意することで表現します。
各テーブルにはスーパークラスが持つカラムを共通属性として持たせます。

concrete_table_inheritance.png

所感

どのパターンを実装するかはテーブル設計のメリット・デメリットとアプリケーション側のロジックのコストの検討次第でしょうか。
何か語弊がある部分や間違いがある場合はご指摘ください。

参考リンク

その他

bmf-tech.com

37
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
bmf_san
ブログは一部の記事を除いて以下のサイトに移行しました。 http://bmf-tech.com/

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
37
Help us understand the problem. What is going on with this article?