2016-07-13 4 views
0

私は、注文を表すn個のモデルを持っています。 EbayOrderおよびAmazonOrder。各注文モデルはわずかに異なるフィールドを持ちますが、それらはすべて同じ基本的なもの、すなわち注文を表します。これらの類似モデルをどのように構造化するのが最適でしょうか?

問題は、ビューで表示し、料金と売上合計を加算し、その他の分析を実行するためにすべてのオーダーを照会する必要が頻繁にあることです。モデルが別個のエンティティである場合、これを行うのは難しいことです。

STI

STIテーブルはおそらく広い列の数十のようになります。

は、ここで私が考えられてきたいくつかのオプションがあります。

これは注文の各タイプの一対一の重複あろうスレーブ「ジェネリック」モデルであるが、より多くを持っているでしょう

を別のモデルを維持するが、正規化されたデータを用いてレプリカOrderモデルを生成します正規化されたクリーナー・データ。私は、必要なデータ複製のためにこのオプションが気に入らない。データが十分に類似していた場合は、単一Orderモデルに

ノーマライズすべての注文タイプ

は理想的であるが、彼らは注文タイプの中ではかなり異なっています。

答えて

0

別のオプションはPolymorphic associationsを使用することです:あなたが共有する属性を保つことができますが、カスタム属性のためにあなたが別のモデルを使用することができます

class Order < ApplicationRecord 
    belongs_to :specific, polymorphic: true, dependent: :destroy 
end 

class EbayOrder < ApplicationRecord 
    has_one :order, as: :specific 
end 

class AmazonOrder < ApplicationRecord 
    has_one :order, as: :specific 
end 

モデルOrderで。とにかく、このアプローチは、データベースのクエリをより複雑にします。

また、Postgresを使用する場合、別のアプローチを検討することもできます。すべての注文を1つのテーブルに保存しますが、カスタム属性のJSON列を作成します。

関連する問題