2016-10-18 12 views
0

私はJavaScriptでテキサスホールデムを作成しようとしています(ノードとmongodbサーバを使用しています)。Javascript texas holdemデータベース

しかし、私は現在、どのようにデータベースを構造化すべきかに固執しています。ここ

は私がこれまでに得たものである:

player1 - player9 = userid 

は、ユーザーIDが含まれていますplayer9件までのすべての方法player1という列を意味します。存在しない場合は0

player 1cash- player 9cash は、player9のすべての方法でplayer9までのすべての方法で、ユーザーの手前にある現金数表を含む列を意味します。存在しない場合、0になります

player 1cards- player 9cards は、player1という名前の列で、player9という名前の列を意味し、テーブルの上に2つのカード(ユーザーの前に)が含まれます。どれもあれば、0

maxbet : Number 

smallblind : userid // contains userid of small blind 
bigblind : userid // contains high 
blindamount : Number // amount 

cards_on_tableでMAXBET /最大買いになりますでしょう://はテーブル

上のすべてのカードが含まれている私は、この上で続行すると、それが持っているでしょう各列31列。

このデータベースの相互作用をより良くするにはどうすればよいですか、またはDB構造をより良いものに変更するにはどうすればよいですか?

+0

「これをより良くするにはどうすればいいですか」 - これは悪いと思いますか? –

+0

はい、私はそれがより良い@SergioTulentsevを行うことができると感じて – maria

+0

良い点は何ですか?抽象的な "良い" –

答えて

1

リレーショナルモデルをMongoDBに追加するのではなく(あなたの説明からわかるように、単一値フィールドで変換される列指向)、MongoDBのドキュメント指向アーキテクチャを活用して、スキーマ内のオブジェクト:

{ 
    _id: ObjectId("5805d576adf2ac885283779a"), 

    // Name of the room 
    room_name: 'Hold Them Up', 

    // When the room was created 
    created_at: ISODate("2016-10-18T08:04:17.611Z"), 

    // The uptime of the room in seconds or any other unit  
    uptime: 2000, 

    // You could organize this as an object that contains values for 
    // each of the turning phases of the game to allow for better analytics 
    current_table_cards: { 
     flop: ["A", "B", "C"], 
     turn: "D", 
     river: "E" 
    }, 

    // You could also keep track of previous table cards 
    table_cards_history: [ 
     { 
      flop: ["A", "B", "C"], 
      turn: "D", 
      river: "E" 
     }, 
     { 
      flop: ["E", "D", "C"], 
      turn: "B", 
      river: "A" 
     }, 
     ... 

    ], 

    // You could use an array to store the players that are currently playing 
    // and save a history of their previous 5 hands for example 
    // 
    // To track the order of the players, you can either manipulate this array 
    // and consider the indices the order of the players, or you could define 
    // an order property on the objects inside this array 
    players: [ 
     { 
      user_id: ObjectId("5805d576adf2ac8852837791"), 
      cash_amount: 3201, 
      position: 2, 
      win: 1, 
      loss: 0, 
      current_hand: ["E", "F"], 
      hands_history: [ 
       ["A", "B"], 
       ["A", "A"], 
       ... 
      ] 
     }, 
     { 
      user_id: ObjectId("5805d576adf2ac8852837792"), 
      cash_amount: 4288, 
      position: 1, 
      win: 2, 
      loss: 1, 
      current_hand: ["C", "D"], 
      hands_history: [ 
       ["A", "E"], 
       ["B", "B"], 
       ... 
      ] 
     }, 
     { 
      user_id: ObjectId("5805d576adf2ac8852837793"), 
      cash_amount: 2531, 
      position: 3, 
      win: 0, 
      loss: 2, 
      current_hand: ["A", "B"], 
      hands_history: [ 
       ["D", "D"], 
       ["C", "C"], 
       ... 
      ] 
     }, 
     ... 
    ], 

    // Blind information 
    small_blind: ObjectId("5805d576adf2ac8852837792"), 
    big_blind: ObjectId("5805d576adf2ac8852837791"), 
    blind_amount: 100 
} 

これにより、各部屋とプレーヤーのために追跡したい情報に応じて、より多くのフィールドを持つに終わる可能性があり、アプリケーションのためのちょうど出発モデルです。

たとえば、プレーヤの平均賭け金額を追跡したり、ブラインドが変更されたときにタイマーを設定することができます。しかし、これはこの質問の範囲を超えており、異なる議論です。

また、Sergio Tulentsevと彼のコメントに記載されているように、抽出する必要がある情報に基づいてデータモデルを最適化することは非常に重要です。したがって、アプリケーションの要件に基づいて、パフォーマンスを最適化するために、データモデルとクエリのアクセスパターンのバランスをとる必要があります。

+0

flop、turn、riverで何を意味しますか?) – maria

+0

'flop'は最初の3枚のカードはテキサスホールデムゲームでテーブルに置かれ、次のカードは「ターン」と呼ばれ、最後のカードは「川」と呼ばれます:) https://en.wikipedia.org/wiki/Texas_hold_% 27em –

+0

あなたはチャット@ Vlad Zを取る時間がありますか? – maria

関連する問題