4

私はこれを持っています:

class User < ActiveRecord::Base
  has_many :serials
  has_many :sites, :through => :series
end

class Serial < ActiveRecord::Base
  belongs_to :user
  belongs_to :site
  has_many :episodes
end

class Site < ActiveRecord::Base
  has_many :serials
  has_many :users, :through => :serials
end

class Episode < ActiveRecord::Base
  belongs_to :serial
end

User.serials.episodesに対していくつかの操作を実行したいのですが、これはあらゆる種類の巧妙なトリックを意味することを私は知っています。理論的には、すべてのエピソードデータをシリアル化(非正規化)してから、必要に応じてgroup_bySiteに入れることができます。

クエリする必要のあるエピソードがたくさんある場合、これは悪い考えですか?

ありがとう

4

2 に答える 2

0

わざわざ非正規化することはありません。

カウントを確認する必要がある場合は、リレーションシップのcounter_cacheをチェックして、そのクエリを保存することができます。

外部キーに適切なインデックスがありますか?その場合、1つの追加の結合からデータをプルすることはそれほど大きな問題ではありませんが、.serialsを反復処理せずに、1つのクエリですべての結果を取得するにはSQLにドロップダウンする必要があります。

User.serials.collect { |s| s.episodes }.uniq  # ack! this could be bad
于 2010-05-05T00:44:19.033 に答える
0

それは本当にあなたがこのアプリケーションから必要としている規模に依存します。アプリが何トンもの人々にサービスを提供する必要がない場合は、それを選択してください。アクティブなレコードの関連付けから多くのメリットを得ている場合は、先に進んでそれらを使用してください。アプリケーションが拡張するにつれて、アソシエーション使用の特定のインスタンスを、トラフィックの負荷を処理するためのより直接的なアプローチに置き換えることに気付く場合があります。

于 2010-04-22T15:57:34.800 に答える