2015-05-28 152 views
1

我正在尋找最好的方法來解決以下要求。 「最佳」在這裏指的表現擊敗「美麗」的設計,我不怕醜,但高性能的設計。數據庫設計的實體,具有許多選項

這裏有約束:

  • 我想有幾個Player在我的數據庫。我預計最多有20k玩家。
  • 有一堆Game那兒,太 - 這是關於500遊戲列表。一旦遊戲進入遊戲,遊戲不會改變,但偶爾遊戲將不得不被添加。
  • PlayerGame之間的關係如下:玩家要麼玩遊戲或他不,他具有用於每一個的遊戲技能(值從1到5)。

現在,這裏是真正讓我頭疼的一部分:我希望能夠通過指定多個Game S,一分鐘的技能和技巧最大搜索多個Player。所以有可能,我有這500場比賽,所有比賽都由OR組合,這使得一個很長的查詢不是很快。我的做法是,我應該以某種方式擺脫的OR和AND將取代他們,但如果有人是尋找特定的Game,這意味着他正在尋找誰玩或不玩特定的遊戲玩家(因爲用戶對其他遊戲感興趣)。

我真的希望我缺少明顯的東西或一些技巧,使我不必在每個搜索請求數百或從句的...

我與解析(因此標籤)試了一下,得到了一個錯誤:{"code":154,"message":"too many $or clauses"}

回答

0

PlayerGame之間的關係將是另一個表格,例如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}; 

但是,如果用戶可以選擇多個遊戲,那就更難了。而不是構造查詢多個OR S或大IN名單,我可能會選擇的遊戲保存到某種臨時表,然後查詢:

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}; 
+0

第一:是的,我們是在SQL的世界,但我會願意切換到任何其他數據庫。目前,我使用Parse,他們使用 - 我認爲 - MongoDB。第二:爲了清晰起見,我更新了問題。陷阱是用戶能夠在他的搜索中指定任何遊戲,搜索玩任何所選遊戲的玩家。 –

+0

@PhilippFlenker在SQL中,你可以只用'IN(...)'該條款。 – RBarryYoung

+0

究竟如何?請記住,用戶可以玩多個遊戲。除非我不明顯,否則在這裏使用IN並不是微不足道的。 –

相關問題