2017-01-07 12 views
1

多相関連がリレーショナルDB設計のルールを破り、最終的にはアプリケーションに大きな害を及ぼすことがわかりました。したがって、左の代替方法ではSTIを使用しています。誰かがSTIの仕組みを説明したり、多型関連を使用する際に別の良い選択肢があるかどうかを知ることができます。Rails多相関連を使用する代わりに

感謝の

答えて

1

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は、ほとんど同じサブモデルが多少異なる動作をしている場合に適しています。その場合、あなたのテーブルはきれいになり、あなたのデータは自然に整理され、大きな被害はありません。

+0

パーフェクト!ご説明をいただき、ありがとうございます。だから、別の方法はありません。ポリモルホリックまたはSTIです。 – jjplack

+0

あなたを助けてうれしい! – VAD

関連する問題