0

「マッチ」を格納するテーブルがあります。これらのマッチには、MatchId、TeamA、TeamB、Wager、Winner の列があります。

TeamA と TeamB が各チームのプレーヤーのリストを返せるようにしたいと考えています。数はそれぞれ任意である可能性がありますが、これは可能ですか、それとも実用的ですか? これを設計する他の方法は考えられません。これに対してより良いスキーマはありますか? プレーヤーは UserId になり、ユーザーはチームにバインドされません。チームは試合に関連するだけです。

編集: たとえば、プレーヤー A、B、C、D、E、F

マッチ 1: 3v3 ABC vs DEF

Match2: 3v3 DAB vs FEC

プレーヤーは特定の TeamId にバインドされるべきではありません。これは、試合のみに依存するためです。プレイヤーは、試合で望む誰とでもチームを組むことができます。

4

3 に答える 3

2

考えられるデータベース スキーマは次のようになります。 ここに画像の説明を入力

次に、次のように選択できます。

SELECT M.*, P.*
FROM Matches M
JOIN MatchPlayers MP ON MP.MatchID = M.MatchID
JOIN Players P ON P.PlayerID = MP.PlayerID
WHERE M.TeamA_ID = MP.TeamID OR M.TeamB_ID = MP.TeamID

私の SQL が粗雑であるか、スキーマがゴミである場合は、すみません。

その特定の SQL は、プレーヤーが所属していたチームを教えてくれませんが、いくつかの小さな変更を加えて情報を得ることができます。

あなたが望むもの、他のデータに関連するデータ、シリアル化は答えではありません-またはそれはあなたが考えているものではありません...そこに用語の不一致を感じます。.NET からのデータベースの使用について読んでください。Web 上にはすばらしいチュートリアルがたくさんあります。リレーショナル データベースの設計についてもお読みください。Web ソースはこれにも最適です。

于 2011-03-15T23:20:56.770 に答える
0

2 つのアプローチ:

1: TeamA、TeamB の列に XML を使用します。これにより、アプリで簡単に処理できる構造化された文字列で完全なチーム リストを作成できます。

2: より多くのテーブルを使用する: より包括的なスキーマは次のようになります。

Match MatchID Name 行われる一致

チーム TeamID MatchID IsHomeTeam Name 試合に出場するチーム

Player PlayerID TeamID 名前 各チームのすべてのプレーヤー

編集:これは、要件を明確にした後の単純なバージョンです

于 2011-03-15T23:11:53.303 に答える
0

.NET を使用してデータを消費していると仮定しています。Players プロパティをリストとして持つチーム クラスを作成できます。クラスに [Serializable] 属性を配置します。

シリアル化メソッドを使用して、チームを文字列に変換します。文字列をデータベースに書き込みます。

逆シリアル化メソッドを使用して、チームをメモリ内オブジェクトに逆シリアル化します。

入門書については、次の記事を参照してください: http://msdn.microsoft.com/en-us/library/90c86ass(v=vs.71).aspx

個人的には、より多くのテーブルを使用します。Player エンティティと 1-* の関係を持つ Team エンティティを持ちます。マッチ テーブルにチーム FK を配置します。

次の方法で、試合に出場する選手を獲得します。

SELECT P.PlayerName
FROM Matches M (NOLOCK)
JOIN Team T (NOLOCK)
  ON T.TeamID = M.TeamA_ID
JOIN Players P (NOLOCK)
  ON P.PlayerId = T.PlayerId

UNION ALL

SELECT P.PlayerName
FROM Matches M (NOLOCK)
JOIN Team T (NOLOCK)
  ON T.TeamID = M.TeamB_ID -- NOTE TEAM B
JOIN Players P (NOLOCK)
  ON P.PlayerId = T.PlayerId
于 2011-03-15T23:12:46.163 に答える