fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

Rails - シングルテーブル継承(STI)とは

STIの詳細2(歴史、実例、代替方法、デメリットへの反論)

みんなRailsのSTIを誤解してないか!? - Qiita

ProsとCons

Pros

  • シンプルな実装
  • DRY
  • 必要に応じてサブクラスに独自の"振る舞い"を追加できる

Cons

  • データのメンテナンス性が下がり、不整合なデータが生成されがち
  • クエリパフォーマンスが下がり、検索が遅くなる

Consの理由

  • 開発が進み、モデル間で独自のカラムを持つようになると、あるモデルでは不要な項目となるため、データ上にnullが多くなる
  • 不要な項目を適切にnullにするためには、validationを厳格に行う必要があるが難しい
  • 運用が進みデータが溜まると、nullが存在する項目のクエリではパフォーマンスが悪くなる