Je prévois une base de données relationnelle pour stocker des données de jeu de poker (comme ce qui serait inclus dans les historiques des mains). Je voudrais de l'aide pour trouver comment concevoir les associations. Il semble qu'il devrait y avoir 4 modèles: Game, Hand, Player et Action (action unique d'un joueur donné, comme relancer, plier, call). Permettez-moi d'exposer ce que j'ai:Structure de base de données relationnelle pour les données de poker Texas Hold'em
class Game < ActiveRecord::Base
has_many :hands
has_many :actions
has_and_belongs_to_many :players
end
class Hand < ActiveRecord::Base
has_many :actions
belongs_to :game
has_and_belongs_to_many :players
end
class Action < ActiveRecord::Base
belongs_to :game
belongs_to :hand
belongs_to :player
end
class Player < ActiveRecord::Base
has_and_belongs_to_many :games
has_and_belongs_to_many :hands
has_many :actions
end
Est-ce logique?
Salut Tadman, merci pour votre aide - c'était très utile. Je comprends comment vous avez configuré les modèles Game, Hand et Action, mais je ne comprends pas encore très bien le modèle Player. Pourriez-vous expliquer à quoi ressemblerait la table Player (c'est-à-dire quelles clés étrangères sont incluses)? Est-ce qu'il y a une colonne de play_hands avec des valeurs de hand_id dedans? Aussi, cela vous dérangerait-il d'expliquer pourquoi le jeu n'est associé qu'à des mains? Merci encore pour votre aide! – rymodi
Vous pouvez naviguer de Game à Player si vous suivez les liens, comme 'game.hands.first.players' ou en créant votre propre requête personnalisée pour vous rejoindre plus efficacement. De plus, une relation 'has_many ...,: through' n'implique pas une nouvelle colonne, elle fonctionnera en tirant parti d'une relation existante. Dans l'exemple que vous avez donné, la table 'players' n'a besoin que d'une colonne' id' pour fonctionner, le reste dépend de vous. L'action est où toutes les relations sont définies. – tadman