2011-04-08 10 views
1

私は最近、PHPとmysql DBを使用して「ゲーム」を作成し始めました。 このゲームには、各プレーヤーが構築してコントロールできる船があります。より効果的なアプローチはありますか?

は今、私はいくつかの、これはこのように私のDBに設定している: ID、名前、クレジットコスト、ミネラルコスト、時間を構築し、説明、スピード、パワー、シールド:

船舶テーブル、そこに列が含まれています

ユーザテーブルが成り立つ数は船のIDに対応 Ship_01_amount .... ship_08_amount

を。

これを実行するより効率的な方法があるのだろうかと思っていました。

今、私は新しい船を追加したい場合、私は自分のテーブルを変更する必要があります。

ありがとうございます。

+0

ユーザーテーブルにはどのようなデータが含まれていますか? –

答えて

3

ユーザーとその船に関する情報を3番目のテーブルに分割する必要があります。したがって、次の表があります:

t_ships: ship_id, name, credit_cost, mineral_cost, etc 
t_users: user_id, name, etc 
t_user_ships: ship_id, user_id, amount 

このようにして、船を追加すると、テーブルt_user_shipsの金額が更新されます。

+0

't_user_ships.user_id'、' t_users/user_id'、 't_user_ships.ship_id'、' t_ships.ship_id'にインデックスを追加すると有益です – SimonDowdles

1

「多対多の関係は何ですか?」を検索します。

または関連する質問/答えチェック:他のすべてのようresolve-many-to-many-relationship

が答えている、「中」または「中間」の表では、ソリューションの鍵となります。特定のユーザーの特定の船に関する情報(所持している金額など)は、そのテーブルのフィールドとして追加することができます。あなたのゲームが必要とするものであれば、旗を浮かべた、現在のスピード、キャプテンの名前、最初の帆の日付などを追加することができます。

0

はい、many-to-many relationshipを使用すると、ユーザーと船舶の間で新しいテーブルマッピングを作成し、User_has_ship(userId、shipId)を発送できます。 MYSQLにforeign key constraintsを使用して、ユーザーと船舶が存在することを確認できます。あなたはあなたが交換する必要があります。この

SELECT * FROM User u, User_has_ship us WHERE u.Id = us.userId and userId=? 

ようにしなければならないので、ユーザ船の

Altoughチェックは今、テーブル結合必要ですか?あなたが現在チェックしているユーザーのIDを持つuserIdで

0

これを基本的に3つのテーブルにします。

  • 表1:現在の出荷テーブル。
  • 表2:ユーザーテーブル(ユーザーデータ+ユーザーIDなど)。
  • 表3: Ships_User_META

    SHIP-ID | USER ID 
    --------+-------- 
        1 | 1 
        2 | 1 
        3 | 1 
        1 | 2 
    

...というように。

したがって、ユーザーに船を簡単に追加したり、船から取り外したりすることができます。

0

あなたはユニタリの船の説明と、列として船への参照を所有するテーブルを持っているようです。ここであなたが持っているのは、あなたのユーザーと船の参照との関係です。これを拡張するには、テーブルスキーマを変更する必要があります。 3つの列を持つテーブルのuser_shipsを作成します: - のuser_idフィールド、 - のship_idフィールド、 - 金額フィールド

あなたが単一に属する船の量を知っておく必要がありますたびに 次の助言しますプレーヤーは、対応するIDで結合されたユーザー、船、およびuser_shipsテーブルでSELECTを実行できます。 ユーザーが船の新しいモデルを作成するときに、user_shipsテーブルにレコードを挿入します。 ユーザーがより多くの船を紛失またはビルドした場合、対応するレコードを更新します。 それだけです!

2

これは、データベースの正規化を読むのに役立つでしょう。良いリソースは次のとおりです:http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

私はこれがあなたの質問に直接答えていないことを知っていますが、それはこれらのような将来の苦境に役立ちます。 "1対多mysql"または "多対1 mysql"のGoogle検索は、いくつかの有用なリソースを引き出すでしょう。

種類について

関連する問題