Должен ли я денормализовать has_many has_many? - PullRequest
4 голосов
/ 22 апреля 2010

У меня есть это:

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_by Site.

Если у меня есть много эпизодов, к которым мне нужно обратиться, это будет плохой идеей?

спасибо

Ответы [ 2 ]

0 голосов
/ 05 мая 2010

Я бы не стал денормализировать.

Если вам нужно посмотреть на счетчики, вы можете проверить counter_cache для отношения, чтобы сохранить запросы на это.

У вас есть правильные индексы для ваших внешних ключей? Если это так, то извлечение данных из одного дополнительного объединения не должно быть большим делом, но вам может потребоваться перейти на SQL, чтобы получить все результаты в одном запросе без перебора .serials:

User.serials.collect { |s| s.episodes }.uniq  # ack! this could be bad
0 голосов
/ 22 апреля 2010

Это действительно зависит от масштаба, который вам нужен из этого приложения. Если приложению не нужно обслуживать тонны и тонны людей, сделайте это. Если вы получаете много пользы от активных ассоциаций записей, тогда используйте их. По мере масштабирования вашего приложения вы можете заменить конкретные экземпляры использования ассоциации более прямым подходом для обработки нагрузки трафика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...