2017-10-03 8 views
1

私は何百万人ものプレイヤーがいると楽観的に望んでいるモバイルゲームを作成しています。1:1リレーションシップ。 1つ以上のテーブルに分割しますか?悪い?

私は現在、私はまた、ゲーム内通貨の量を記録する必要がありますすべてのユーザーのためにおよそ8列(すなわち。ユーザID、ユーザ名、パスワード、last_signin、など)

を持つusersテーブルを作成しました彼らは持っている(すなわち、金、銀、宝石など)。

これは1対1の関係です(ユーザーは金の金額を定義する1つの値しか持っていません)。

私はデータベースの専門家ではありません(私はここに掲載しています)。私は金、銀、宝石などをユーザーテーブルに新しい行として追加した場合、ユーザーテーブルが1秒あたりの狂った量のクエリで叩かれることになります。ゲーム内の誰かが、より多くの金、銀色、ログインしてアカウントを作成するたびに、ユーザーテーブルにアクセスおよび/または更新されます。

userid、gold、silver、gemsという列を持つ "resources"という新しいテーブルに、金、銀、宝石を列として追加するほうが賢明でしょうか。この新しいテーブルは、ユーザーとリソースの間に1対1の関係があるため、ユーザーテーブルとまったく同じ行数を持ちます。私は、データベースのデータが分割され、すべてのクエリが同じテーブルに行くわけではないので、それらのクエリが高速であるかどうか疑問に思っています。

1:1 ....なので、明らかに私は1つのテーブルにすべてを入れる方が良いようですが、ゲームデータの大半を1つのテーブルに入れることも悪い考えでした。

アドバイスをいただきありがとうございます!

ライアン

答えて

1

2つのテーブルが互いに1:1の関係で呼び出されるようにするには、多くの場合があります。このようにテーブルを分解するための正規化ルールはありません。しかし、標準化は良い設計の唯一の手口ではありません。

アクセストラフィックは別のハンドルです。あなたの直感は、リソースへのアクセスが基本的なユーザーデータへのアクセスよりもはるかに頻繁になるということです。しかし、リソースにアクセスするトランザクションが基本的なユーザーデータを使用して終了しないように、チェックアウトする必要があります。それは、より多くの費用がかかります:太ったユーザーテーブル以上の結合。

他の応答者は、1:1の関係が1:多くの関係になる日が来るかもしれないことをすでに示唆しています。私は想像することができます。ゲームプレイヤーのモデルは、単一のユーザーがゲームの複数の異なるインスタンスに関与できる場所に拡張されます。この場合、単一のユーザーがすべてのインスタンスで同じ基本ユーザーデータを持つことができますが、各インスタンスでは異なるリソースが使用される可能性があります。私はこれがあなたの場合に起こるかどうかを伝える方法がありません。しかし、そうするならば、あなたは別のリソーステーブルを使うほうが良いでしょう。

0

それは本当にあなたのデータベースがどのように大きな、あなたのゲームデザインに依存し、どのように将来的にあなたのデータベースを展開することがあります。あなたは簡単に メンテナンス/バックアップ用のスリムユーザテーブルを維持することができ

  1. :ので、私は、ユーザーIDを指す外部キーと別のテーブル内のリソースを置きます。
  2. 2つの テーブル間の単純な1対1 JOIN操作では、適切なインデックス付けがある限り、 のすべてに同じテーブルを持つよりも多くのリソースを消費しません。
  3. テーブルを分離しておくことで、懸念の分離を実践しています。 複数の人が別のテーブルに影響を与えることについて心配することなく、別のものに取り組むことができます。
  4. 拡張が容易です。 birth_date、region、first_nameなどの他の列を のユーザーテーブルのユーザーの個人情報とより関連性が高いものとして追加することができます。異なる目的の列が一緒に格納されている場合は、混乱するでしょう。 (PostgreSQLではあなたは単にあなたがそのためのビューを作成することができますが、列 順序を調整することはできません。)これが1である
0

:1人の関係は(ユーザーは今まで1つの値はどのくらいの金を定義する必要があります彼ら持ってる)。

...今のところ;)

は、私はデータベースの専門家(私はここに掲載しています理由です)していません。私は心配しています。ユーザーテーブルの新しい行として金、銀、宝石などを追加した場合

新しい列はありますか?あなたができるでしょう

  • :ので

    「リソース」おそらく

    と呼ばれる新しいテーブルの列としての金、銀、宝石を追加するために賢くだろう頻繁に更新された部分を更新したときに、変更の少ないユーザーデータを書き換えずに書き込みを小さくする

  • これにより、ユーザーへの変更を監査しやすくなりますデータ

関連する問題