У меня есть некоторые сомнения относительно дизайна базы данных для приложения rails, которое используется для записи статистики матчей по футболу (футболу).Несколько has_many через ассоциации между одними и теми же моделями
У меня есть три модели:
- Match
- игрок
- Цель
, которые имеют следующие соотношения:
- Каждый матч может иметь много голов, забитые Игроки хозяев поля
- Каждого матча может иметь много голов, забитых игроками команды посетителей
- Каждого игрока (из дома и команда посетителя) может забить много голов в матче
Вот структура моих моделей:
class Match < ActiveRecord::Base
has_many :home_goals,
class_name: 'Goal',
foreign_key: 'home_match_id'
has_many :home_scorers,
class_name: 'Player',
foreign_key: 'home_scorer_id',
through: :home_goals
has_many :visitor_goals,
class_name: 'Goal',
foreign_key: 'visitor_match_id'
has_many :visitor_scorers,
class_name: 'Player',
foreign_key: 'visitor_scorer_id',
through: :visitor_goals
...
end
class Goal < ActiveRecord::Base
belongs_to :home_match,
class: 'Match',
foreign_key: 'home_match_id'
belongs_to :visitor_match,
class: 'Match',
foreign_key: 'visitor_match_id'
belongs_to :player
end
class Player < ActiveRecord::Base
has_many :goals
has_many :home_matches,
class_name: 'Match',
foreign_key: 'home_scorer_id',
through: :goals
has_many :visitor_matches,
class_name: 'Match',
foreign_key: 'visitor_scorer_id',
through: :goals
...
end
Могу ли я сделать вложенными "has_many_through" отношения на этом пути?
Необычное, что игрок может набрать больше одного мяча в матче. Из-за этого, возможно, что с одним и тем же игроком существует более одного мяча. Возможно ли это или может привести к ошибкам?
Моя конечная цель состоит в том, чтобы иметь возможность подсчитывать, сколько голов забил игрок во всех матчах, получить список домашних игроков, домашних целей, игроков посетителя и целей гостя за каждый матч. Есть ли лучший способ организовать БД?
Почему бы вам не попробовать все это в 'rails console'? – Surya