具有多种选择的实体的数据库设计

Database design for entities with many options

我正在寻找解决以下要求的最佳方法。 "Best"这里的意思是性能胜过"beautiful"设计,我不怕丑,但性能设计。

约束条件如下:

下面是真正让我头疼的部分:我希望能够通过指定多个 Game、一个最小技能和一个最大技能来搜索多个 Player。因此,我有可能拥有这 500 场比赛,所有比赛都由 OR 组合而成,这会产生一个非常长的查询,但速度不是很快。我的方法是我应该以某种方式摆脱 OR 并用 AND 替换它们,但是如果有人 不是 寻找特定的 Game,则意味着他正在寻找玩或不玩该特定游戏的玩家(因为用户对其他游戏感兴趣)。

我真的希望我遗漏了一些明显的东西或一些技巧,阻止我在每个搜索请求中都有数百个 OR-Clauses...

我用 Parse 尝试了它(因此是标签)并得到了一个错误:{"code":154,"message":"too many $or clauses"}

PlayerGame 之间的关系将是另一个 table 例如Player_Game 列如下所示:

  • player_id(播放器的外键)
  • game_id(游戏的外键)
  • 播放(是或否)
  • 技能(整数 1-5)

因此,如果您希望能够通过指定 单个 游戏、最低技能和最高技能来搜索多个玩家”,SQL 查询将是:

select player_id
from   player_game
where  game_id = {GAME_ID}
and    skill >= {MIN_SKILL}
and    skill <= {MAX_SKILL};

但是,如果用户可以 select 多场比赛,那就更难了。我可能会将 selected 游戏保存到某种临时 table 然后查询:

select player_id
from   player_game
where  game_id in (select game_id from temp_games_list)
and    skill >= {MIN_SKILL}
and    skill <= {MAX_SKILL};