Rails - シングルテーブル継承(STI)とは
STIの詳細1(実例やメリットとデメリット等)
Single-table inheritance vs. polymorphic associations in Rails: find what works for you
STIの詳細2(歴史、実例、代替方法、デメリットへの反論)
ProsとCons
Pros
- シンプルな実装
- DRY
- 必要に応じてサブクラスに独自の"振る舞い"を追加できる
Cons
- データのメンテナンス性が下がり、不整合なデータが生成されがち
- クエリパフォーマンスが下がり、検索が遅くなる
Consの理由
- 開発が進み、モデル間で独自のカラムを持つようになると、あるモデルでは不要な項目となるため、データ上にnullが多くなる
- 不要な項目を適切にnullにするためには、validationを厳格に行う必要があるが難しい
- 運用が進みデータが溜まると、nullが存在する項目のクエリではパフォーマンスが悪くなる