私はファイルアップロードの宝石を見ていますが、すべてのアセットを単一の「アセット」テーブルに配置し、STIを使用してそれらをサブクラス化する傾向があるようです。、、などのようImageAsset
に。VideoAsset
AudioAsset
Railsは初めてで、STIを使用したことはありません。以前は、images
別のテーブルを作成していました。確かに、いくつかの列を共有する可能性がありますが、いくつかの異なる列もあると思います(サンプルレートは画像には適用されません。たとえば)videos
audios
これらすべてを1つの「アセット」テーブルに詰め込むことの長所:すべてのアセットに対してクエリを実行するのが簡単です。短所:テーブルはより速く大きくなります。それが問題である場合、私は常に「タイプ」列をシャーディングできると思います。また、画像の行などでは、音声のみの列がすべてnullになると予想されます。
私のアプリ全体はアセットに基づいているので、決定を下す前に、長所と短所があることを確認したいと思います。誰かがSTI資産を作って後悔したことがありますか?誰かがそれをして後悔していませんか(大量の資産のために)?ここでは、CTI(クラステーブル継承)がより良いソリューションになるでしょうか?