0

我有一个名为游戏的表(由 int 唯一)。

我有一个名为 members 的表(按用户名唯一)。

在每场比赛中,一次最多可以有 6 名成员参与。

但是,成员可以退出游戏 - 但我仍然需要记录他们参与该游戏的记录。

我需要做以下单独的搜索:

  1. 会员的活跃游戏。

  2. 为会员退出游戏。

  3. 在游戏中搜索一个空位(即没有由成员填充的位置)。

最好的表结构是什么?我应该为会员输入一个文本字段,其中包含所有已退出游戏的列表,并用逗号分隔?(我可以看到的一个问题是我最终将需要这些游戏的游戏信息,因此我随后需要在游戏表上为这些游戏编号中的每一个进行单独搜索。这对于服务器来说似乎真的很慢。 )

在游戏中,我是​​否应该有 6 个文本字段,例如 SLOT1、SLOT2 等以及当前玩家的用户名?但同样,辞职的成员呢?

现在我的问题的主要部分(这引起了上面的所有混乱):

我将如何在我的表上设置我的索引?

当我进行搜索时,我会在游戏中查看 SLOTS1 等,看看是否有任何与玩家用户名匹配的内容。所以这是一个 6 次 ORed 搜索。我该怎么做才能针对这些操作优化数据库上的索引?

那么根据我对每场比赛的退会成员怎么做,那我该怎么做索引呢?

4

1 回答 1

1

使用交叉引用表。这是一个包含三列的表,game(table 的外键games)、user(table 的外键users)和player_number(1 到 6 之间的可空整数,表示玩家占据了哪个“座位”;null 表示球员辞职)。(这取决于你的游戏是如何运作的,以及你希望东西如何组合在一起,但主要的是你有外键gamesusers。)

上述建议中的主键将是(game, user, player_number)(user, game, player_number)在您方便时。

像这样搜索交叉引用表比进行涉及六列 ORing 的查询要容易得多(对您和您的数据库而言)。

users正如@Jermin Bazazian 所建议的那样,切换到表的整数主键可能是一个好主意。

于 2012-04-30T18:01:05.343 回答