2011-06-19 5 views
0

データベースは非常に簡単です。以下は、この質問小さなサッカーリーグのためのモデリングデータベース

  • ROUND(round_id, round_number

  • TEAM(team_id, team_name

  • MATCH(match_id, match_date, round_id

  • アウトカム(team_id, match_id, score)に関連するスキーマの一部があります

私は、再生されたすべての試合のデータを取得するためのクエリに問題があります。以下の簡単な質問はもちろん、試合ごとに2つの行が表示されます。私は1つの行のマッチデータを持つようにクエリを記述する必要がありどのように

select * 
from round r 
inner join match m on m.round_id = r.round_id 
inner join outcome o on o.match_id = m.match_id 
inner join team t on t.team_id = o.team_id 

  • MATCH(match_id, match_date, team_away, team_home, score_away, score_home):このように見えるようにOUTCOMEテーブルをドロップし、MATCHテーブルを変更 -

    それとも私は、データベースを再設計する必要がありますか?

+0

これはかなり難しいでしょう。別々にする理由がない限り、おそらくMATCHテーブルに結果を保存するのが最も簡単でしょう。少なくとも、「OUTCOME」テーブルのホーム/アウェイフラグなどは、物事を大幅に単純化します。 – jswolf19

答えて

1

あなたがほとんどoutcomeテーブルの上に自己結合を使用して、元のテーブルからの提案の変化を生成することができます:もちろん

select o1.team_id team_id_1, 
     o2.team_id team_id_2, 
     o1.score score_1, 
     o2.score score_2, 
     o1.match_id match_id 
from outcome o1 
inner join outcome o2 on o1.match_id = o2.match_id and o1.team_id < o2.team_id 

、家庭用の情報と離れので、あなたの提案の代替的なアプローチを生成することはできません結局、より良いかもしれない。また、条件o1.team_id < o2.team_idに注意してください。この条件は、冗長な対称一致データを取り除きます(実際には、同じ重要な側面と見なすことができる同じoutcome行も削除されます)。

いずれの場合でも、この選択を結合の一部として使用すると、一致ごとに1つの行を生成できます。

+0

自己結合を検討していましたが、マッチテーブルを変更する方が良い解決策になると思われます。場合によっては選ぶのが本当に難しいです:) – drv

+0

@drv確かに。私はマッチ結果の解決策を自分自身とマッチテーブルに向かっている。このアプローチでは、成果が出る前に、どのチームが互いに対戦しているかについての情報は保持されません。 – vhallac

+1

@drvの場合は、マッチテーブルのチームと結果スコアを別のテーブルに持つことも考えられます(つまり、 'team_away'と 'team_home'を' MATCH'に追加し、 'OUTCOME'を(' match_id、score_away、score_homeあなたが望むならば、ホーム/アウェイフラッグがより良いかもしれないので、これは、チームがプレーしたすべてのゲームのクエリを引き起こす可能性があります。これらのタイプのクエリを持つことも... – jswolf19

0

あなたはすべての演奏試合が、TEAM_IDとTEAM_NAMEある貴様のための2行をフェッチ: - チームのホーム のための1 - 1チームのために離れて

ので、お問合せは、マッチテーブルを使用して

0

良いですあなたが説明しているように、ゲームのロジックを簡単かつ自然にキャプチャし、初期モデルではないホームチームとアウェイチームをさらに表示します。 ラウンドIDをラウンドテーブルに外部キーとして追加し、おそらく一致した状況を示すフラグを追加することができます。

0

結果が低下します。マッチごとに1つの結果しか得られないので、別のテーブルであってはなりません。

キャンセルされた一致を処理する方法を検討することがあります。スコアはおそらくnullですか?

+0

さて、まだ試合が行われていない試合を知る必要があります。したがって、この状況ではスコアはゼロです。 – drv

+0

と考えられます。おそらく '-1'の特別な値でしょうか? (1チームは表示されませんでした)、そのチームだけが「-1」を取得します。処理する必要があるエッジケースがいくつかあります。 – Bohemian

関連する問題