1

すべてのプレイヤーが家を持つことができるオンライン ゲーム プロジェクトに取り組んでいます。サーバー上で 10,000 人のプレイヤーの制限があると考えて家を整理しなければならないまで、プロジェクトは順調に進んでいました。

ここにいくつかの事実があります:

各プレイヤーは最大 10 ハウス (最小 1) を持つことができます。 つまり、サーバーがどれだけいっぱいになっても、各プレイヤーには常に 10 の可能な家が存在するように、100.000 の可能な家が必要です。

20 の都市があり、各都市には 200 の地区があり、各地区には 25 の家があります。

問題が発生したとき、データベースはどのように機能しますか?

100.000 軒の家を見たいときはいつでも、それは都市の近隣に属し、それで遊べるようにする必要があります。その後、データを取得できるはずです。

100.000 軒すべての家を 1 つのテーブルにまとめ、そのテーブルに値を設定して、どの都市のどの地域にあるかを示すことを考えていましたが、もっと良い方法があるに違いないと感じています。(多分複数のテーブルを使用していますか?わかりません)

どんな助けでも大歓迎です。

お時間をいただきありがとうございます。

4

1 に答える 1

2

完全な要件が不明であるため、回答するのは困難です。

ただし、データベースを正規化することをお勧めします。少なくとも第 3 正規形です。それが何かわからない場合は、できるだけ早く学習することをお勧めします。

私の最良の推測は次のとおりです。

  1. PLAYER は HOUSE と 1 対多です。複数の PLAYER が同じ HOUSE を所有している場合、それは多対多です。
  2. CITY は NEIGHBORHOOD と 1 対多
  3. NEIGHBORHOOD は HOUSE と 1 対多

JOINS を実行して、PLAYER を都市、近隣、および家に関連付けます。すべてのテーブルに代理主キーと適切な外部キーが必要です。他のすべての候補キーの組み合わせに UNIQUE インデックスを追加します。

すべてのクエリで EXPLAIN PLAN を実行して、それらが TABLE SCAN を必要とせず、適切に実行されることを確認します。

10,000 人のプレーヤーは、データベースにとって大きな数字ではありません。問題ありません。

近隣のすべての家を選択するクエリは次のようになります。

SELECT *
FROM HOUSE H
INNER JOIN NEIGHBORHOOD N
ON H.HOUSE_ID = N.HOUSE_ID
INNER JOIN CITY C
ON N.NEIGHBORHOOD_ID = C.NEIGHBORHOOD_ID
WHERE C.CITY_ID = 8
AND N.NEIGHBORHOOD_ID = 123
ORDER BY H.HOUSE_ID
于 2012-12-28T13:25:54.210 に答える