サブタイプモデルのテーブル設計

サブタイプモデルをテーブルに落とし込むには、何通りか方法があります。実装方法ごとのメリット、デメリットについて確認します。

例として、「User」のサブモデルとして「Student」と「Teacher」が存在する場合のテーブル設計について考えてみます。

447-design-subtype_table1.png

設計方法

DB設計といえば、以下の本が有名です。

SQLアンチパターン

この本の5章でサブタイプのモデリングについて取り上げられています。ここでも以下4つの方法でテーブル設計してみます。

  1. シングルテーブル継承
  2. 具象テーブル継承
  3. クラステーブル継承
  4. 半構造化データ

シングルテーブル継承

447-design-subtype_table2.png
  • 1つのテーブルにサブタイプの属性を全て詰め込みます。
  • サブタイプの識別には、user_typeを利用します。
  • サブタイプの属性が少ないときに適切です。

具象テーブル継承

447-design-subtype_table3.png
  • 「teachersテーブル」と「studentsテーブル」にそれぞれ共通属性を持たせます。
  • 共通の属性が必要になった時には、全ての具象テーブルに追加する必要があります。
  • 複数の具象テーブルをまたいで検索するには、UNIONを利用するなどの必要があり、処理が複雑になります。

クラステーブル継承

447-design-subtype_table4.png
  • 共通属性のみを持った基底テーブルに、サブタイプのテーブルが外部キーで結合します。
  • フレームワークによっては実装しずらいなどあるかもしれません。

半構造化データ

447-design-subtype_table5.png
  • サブタイプの識別には、user_typeを利用します。
  • attributesカラムの型を「TEXT」や「JSON」としておきます。
  • attributesカラムにサブタイプで必要な属性を全て格納します。
  • 「サブタイプの属性を検索などで全く利用しない」「仕様が未確定で新しい属性が頻繁に上がってくる」などのときに適してます。
【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。