我正計劃一個關係數據庫來存儲撲克遊戲數據(比如手中的歷史數據)。我想幫助搞清楚如何設計關聯。似乎應該有4個模型:遊戲,手牌,玩家和動作(給定玩家的單個動作,如提升,摺疊,呼叫)。讓我列出我有什麼:德州撲克數據的關係數據庫結構
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
這是否有意義?
嗨Tadman,謝謝你的幫助 - 這非常有用。我明白你是如何設置Game,Hand和Action模型的,但我對Player模型還是有點不清楚。你能解釋一下Player表的外觀(即包含哪些外鍵)?是否有一個帶有hand_id值的播放列?另外,你會介意解釋爲什麼遊戲只與手相關嗎?再次感謝您的幫助! – rymodi 2010-09-11 21:24:04
如果您按照鏈接,例如'game.hands.first.players'或創建自己的自定義查詢以更有效地加入,則可以從遊戲導航到玩家。另外,'has_many ...,:through'關係不涉及新列,它將通過利用現有關係來工作。在你給出的例子中,「玩家」表只需要一個「id」列來工作,其餘的由你決定。行動就是定義所有關係的地方。 – tadman 2010-09-11 21:30:55