2013-06-28 74 views
1

讓我們玩兩個玩家(或團隊)玩的遊戲,其中結果由兩個玩家(例如足球)的分數表示。在關係數據庫中存儲這種遊戲的結果是否有一種慣用的方式?雙人遊戲的數據庫模式

我想出了兩個可能的模式,其中沒有一個似乎足夠普遍。每場

1.一種行

將有一個表games與列game_id, winner, loser, winner_points, loser_points和每個遊戲將被存儲在表中的一行。

  • 當人們需要遍歷所有遊戲時,這種表示非常棒。
  • 爲玩家統計計算是困難的(例如計算點的數目平均爲玩家)每場

2.兩排

會有一個games表列game_id, player, opponent, player_points, opponent_points。每場比賽將存儲在表中的兩行,他們將有相同的game_id

  • 通過所有遊戲迭代是不平凡的,但仍然很容易
  • 爲玩家計算平均分是簡單SELECT AVG(player_points) FROM games WHERE player = some_player
  • Unfotunately在表中的數據現在是多餘的

回答

4

我建議有更好的關係模型遊戲桌,玩家桌和第三張桌,以處理玩家與遊戲之間的多對多關係。例如:

game(game_id, date, description, ....) 
player(player_id, name, ....) 
player_game(player_id, game_id, score) 

現在你有一個非常靈活的規範化(非冗餘等)架構。

比賽的獲獎者是:

select max(score), player_id from player_game where game_id = 'somegame' 

對於一個球員的總積分是:

select sum(score) from player where player_id = 'someplayer' 

等等...

0

我肯定會每個分數做一行(即每場2行)。我會存儲玩家和分數,如果我想要對手的玩家/分數,我會分別查看。我幾乎肯定會爲每個遊戲一個單獨的表,這將提東西,當它被打得像等

沒有冗餘的數據,一切都容易聚集等