我想创建一个可以运行的1对1的对决比赛的数据库。它需要跟踪谁赢了,输了每场比赛以及关于比赛的任何评论,以及随机决定下一场比赛。
规则:
有玩家x个。每个玩家最终都会玩其他玩家一次,实际上覆盖了所有可能的玩家独特组合。
数据库表(样本数据):
DECLARE @Players TABLE (
ID INT PRIMARY KEY IDENTITY,
Name VARCHAR(50)
)
ID Name
-- -----
1 Alex
2 Bob
3 Chris
4 Dave
DECLARE @Matches TABLE (
ID INT PRIMARY KEY IDENTITY,
WinnerId INT,
LoserId INT
)
ID WinnerId LoserId
-- -------- -------
1 1 2
2 4 2
3 3 1
DECLARE @Comments TABLE (
ID INT PRIMARY KEY IDENTITY,
MatchId INT,
Comment VARCHAR(MAX)
)
ID MatchId Comment
-- ------- ------------------------------
1 2 That was a close one.
2 3 I did not expect that outcome.
问题:
- 我怎样才能有效地查询得到一个随机匹配了尚未发生的?
主要问题是玩家的数量会随着时间的推移而增长。现在在我的例子数据中,我只有4名球员出现了6次可能的比赛。
Alex,Bob
Alex,Chris
Alex,Dave
Bob,Chris
Bob,Dave
Chris,Dave
这将是小到足以简单地保持抓住对应于玩家的ID 2张随机数,然后检查对决表,如果已经发生的对决。如果它有:再获得2个并重复该过程。如果它还没有用作下一场比赛。但是,如果我有10,000名球员,可能会有49995000次比赛,并且它会变得太慢。
任何人都可以在正确的方向指向我更高效的查询吗?如果这能帮助提高效率,我愿意改变数据库设计。
这是哪个DBMS的用途? – 2012-04-22 22:18:24