多相関連がリレーショナルDB設計のルールを破り、最終的にはアプリケーションに大きな害を及ぼすことがわかりました。したがって、左の代替方法ではSTIを使用しています。誰かがSTIの仕組みを説明したり、多型関連を使用する際に別の良い選択肢があるかどうかを知ることができます。Rails多相関連を使用する代わりに
感謝の
多相関連がリレーショナルDB設計のルールを破り、最終的にはアプリケーションに大きな害を及ぼすことがわかりました。したがって、左の代替方法ではSTIを使用しています。誰かがSTIの仕組みを説明したり、多型関連を使用する際に別の良い選択肢があるかどうかを知ることができます。Rails多相関連を使用する代わりに
感謝の
STIについて
あなたはSTIを使用しているときは、DBに、独自のテーブルを持っている1つの親モデルを持っています。そして、あなたはいくつかのサブモデルを持っています。しかし、彼らは独自のテーブルを持っていません。代わりに、そのオブジェクトは親モデルのテーブルに格納されます。
はのは、親モデルVehicle
を生成する例で
を見てみましょう。その列にtype
列を追加します。その列は、対応するオブジェクトが属するサブモデルの名前を格納するために使用されます。
$ rails generate model vehicle type:string color:string price:decimal{10.2}
その後Vehicle
が自分の親モデルであることを伝えるサブモデルを生成します。
$ rails generate model car --parent=Vehicle
$ rails generate model truck --parent=Vehicle
あなたは以下のモデルを取得します:
あなたは新しい車を作成するときに今では保存されますclass Car < Vehicle
end
class Truck < Vehicle
end
vehicles
テーブルにあり、type
カラムには'car'
となります。トラックはvehicles
テーブルにも格納されます。しかし、彼らはの列に'truck'
を持っています。
良い選択肢と悪い選択肢について教えてください。
あなたが知っているように、STIは銀色の弾丸ではなく、かなり悪い練習と見なされます。たとえば、親モデルのテーブルを混乱させた悪夢にすることができます。それはあなたのデータを効果的に索引付けすることを妨げる可能性があります。
真実は、あなたのニーズに合った特定の練習を使うことができます。 STIは、ほとんど同じサブモデルが多少異なる動作をしている場合に適しています。その場合、あなたのテーブルはきれいになり、あなたのデータは自然に整理され、大きな被害はありません。
パーフェクト!ご説明をいただき、ありがとうございます。だから、別の方法はありません。ポリモルホリックまたはSTIです。 – jjplack
あなたを助けてうれしい! – VAD