1

ポーカーの手を分析するプログラムを C++ で作成しようとしています。ハンド、プレイヤー、セッションに関するデータを保存するために SQL を使用してください。

セッション テーブルとプレイヤー テーブルに何を格納したいかについてはかなり良い考えがありますが、ハンド テーブルはもう少し注意が必要です。

1 つのハンドには、すべてのプレーヤーの名前、ハンド (表示されている場合)、スタック、日付、賭け金などを含める必要があります。問題は、イベントの保存にあります。1 つの 6 プレーヤー ハンドは、フォールド フォールド フォールド フォールド レイズ 4$ フォールドのようにシンプルですが、それよりもはるかに長くなる可能性があります。

これを行う唯一の方法は、"Events" という列を作成し、アクションを文字列 "FFFFR,4-F" に格納することです。

これを行うためのより良い、よりエレガントな方法が必要ですか?

4

1 に答える 1

3

一連のイベントを 1 つの行に格納することは、第 1 正規形に違反しており、悪い習慣と見なされます。

したがって、一連のイベント全体を 1 つの行に格納する代わりに、別のテーブルに一連の行を格納する必要があります (John Bustos は「ベット」を提案しましたが、提案された列名「イベント」は、よく)それに関連付けられています。すべてのイベントには、それが属するハンドの識別子、イベントを順序付けるためのシーケンス番号が含まれます。これらの 2 つの列は、そのテーブルの主キーを形成します。次に、イベントの種類を格納するための列を作成し (ENUMこれには役立つ場合があります)、一部のイベントでは金額などの追加データを格納できます。

クエリ内のすべてのイベントを一覧表示するには、イベントごとに 1 つずつ、複数の行を生成できます。または、これらすべての行をテキストに変換するサブクエリがあり、それを を使用して単一の文字列に集約できますGROUP_CONCAT

于 2013-01-23T22:18:48.760 に答える