假设我正在使用ruby在轨道上编写一个基本的跳棋游戏。
所以我有一个玩家模型和一个游戏模型。每场比赛将有两名球员。每个玩家可以玩很多游戏(因为他们可以玩多个游戏)。
存储两个用户属于游戏的最有效方法是什么?我可以像player_one_id:integer
和player_two_id:integer
那样制作字段,但感觉有点笨拙。然后查看玩家当前所处的游戏效率不高。
完成这样的事情的最佳方法是什么?理想情况下,它们存放得很干净,我可以轻松查看玩家当前所处的游戏。
答案 0 :(得分:3)
我会按照你的建议使用两个播放器列(例如player_one_id
和player_two_id
)并设置这样的模型关系:
class Game < ApplicationRecord
belongs_to :player_one, class: "Player"
belongs_to :player_two, class: "Player"
end
class Player < ApplicationRecord
has_many :games
end
我认为它根本不是 hacky ,因为每场比赛你总会有两名球员。
至于查找玩家当前所在的游戏,您可以这样做:
Game.where("player_one_id = ? OR player_two_id = ?", player_id, player_id)
答案 1 :(得分:-1)
你有一个&#34; player_one&#34;表...
player_one
-----------
(PK) player_one_id
EngineerName
&#34; player_two&#34;表...
player_two
---------
(PK) player_two_id
player_name
您现在添加一个名为&#34; Games&#34;的链接表。 (或类似的)引用player_one
和player_two
...
Games
------------------
(PK) GameId
(FK) player_one_id
(FK) player_two_id
这样,你将所有Player One Details和Player Two细节分开保存,并仅使用Ids链接它们......链接表看起来像这样......
player_one | player_two
------------+----------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
这是最佳做法,它为您提供了最大的扩展机会。