2010-06-19 5 views
0

Je suis en train de concevoir une application de sport de base dans RoR et je ne sais pas si ma conception de base de données est correcte. Par exemple, j'ai:RoR DB Design - Dois-je utiliser une table: traversante?

class Game < ActiveRecord::Base 
    has_one :home_team 
    has_one :away_team 
end 

class Team < ActiveRecord::Base 
    has_many :games 
end 

Cependant, quelqu'un m'a dit que la meilleure façon de le faire est:

class Game < ActiveRecord::Base 
    has_many :teams, :through => :game_teams, :limit => 2 
end 

class Team < ActiveRecord::Base 
    has_many :games, :through => :game_teams 
end 

class Game_Teams < ActiveRecord::Base 
    belongs_to :game 
    belongs_to :team 
end 

Y at-il une raison ou je ne voudrais pas que ce soit la conception?

Répondre

1

Je ne pense pas que votre première approche fonctionnera telle qu'elle est. Si votre table games a deux champs home_team_id et away_team_id alors vos has_one associations devront être quelque chose comme has_one :home_team, :class => 'Team'

En outre, Team has_many :games supposerons que la table game a un champ team_id vous donc besoin d'ajouter :conditions ou peut-être :finder_sql pour obtenir Team pour regarder à la fois home_team_id et away_team_id pour trouver ses jeux. Cela illustre l'inconvénient de votre première approche, essentiellement lorsque vous voulez connaître tous les jeux pour une équipe que vous avez 2 champs à regarder.