2011-01-22 29 views
2

假設遊戲有兩個玩家。每個球員都有一個得分和最高得分。用戶表是不言而喻的。我想到的第一件設計如下:記錄通用雙人遊戲結果的正確數據設計是什麼?

match_id,user1_id,user2_id,score1,score2

的問題是假設我想取勝%排名用戶的快捷方式。在上表中,單個用戶ID將分散在user1_id和user2_id之間。它似乎需要多個查詢,似乎很混亂。另一種方法是保持一個單獨的統計數據表格

USER_ID,winloss

這使得查詢很容易,但似乎並沒有在理論上正確,因爲統計數據表存儲派生數據。有沒有辦法解決這個問題,這涉及到一個很好,乾淨的理論上正確的數據結構,這很容易查詢?

回答

3

如何在比賽中爲每個用戶記錄一條記錄?主鍵是match_iduser_id的組合。還包括一個布爾winner字段。

match_id,USER_ID,得分,獲勝者

雖然不是你要求的一部分,這也很容易地擴展到更多的玩家。

查詢取勝%是一個簡單的問題:

SELECT winner, count(winner) FROM match_results 
WHERE user_id = (some_user) GROUP BY winner; 
+0

哇,現在我正在想象六角網球場(得分在平手和優勢等級上將非常複雜),而在所有四方都有目標的足球比賽,而不僅僅是兩個:-) – paxdiablo 2011-01-22 14:51:07

0

我將有一個用戶表(明顯),稱爲與之匹配的連接表只匹配ID,這將有USER_ID,match_id事務表,得分了。因此,對於特定的比賽,將有兩個記錄對應於兩個用戶。

此外,我還會在匹配表中存儲獲勝的user_id的fk引用。只需快速找到每個用戶的勝率即可。