- 締切済み
Mysqlを使用した構造
現在試合結果ページを作成しています。 参考サイト:http://www.so-net.ne.jp/antlers/games/484 上記が参考サイトであり、各表組み(レイアウト)は完成しています。 マッチレビューから下は作っていませんので省きます。 残りは上から順にスコア、得点者、各詳細(シュートの本数など)、警告者、メンバー(スタメンとサブ)。 Mysqlにて1.試合日程 2.試合結果のテーブルを作りました。 テーブル内の構図は 1.試合日程のテーブル id、日付、対戦相手、場所など 2.試合結果のテーブル id、試合日程id、得点、失点、各詳細 を作りました。 ここからが困っており、得点者、警告者、メンバー(スタメンとサブ)の構図なんですが、 各項目ごとにテーブルを作った方がよいのか、試合結果テーブルに入れた方がよいのか迷っています。 自分が考えていたのは 3.得点者テーブル id、試合結果id、ホームの得点者、アウェイの得点 4.警告者テーブル id、試合結果id、ホームの警告者、アウェイの警告者 5.メンバー(スタメンとサブ)のテーブル id、試合結果id、ホームのスタメン、ホームのサブ、アウェイのスタメン、アウェイのサブ として作ることを考えていたのですが、いかがでしょうか? 一番効率がよく早く出来る方法を教えていただけないでしょうか? 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- seastar3
- ベストアンサー率69% (99/142)
ポイントは試合結果テーブルを分けることだと思います。そして、得点者テーブルと警告者テーブルは必要ないでしょう。あとでビューを作りましょう。 以下のような設計を提案します。 1 テーブル 6種類 (1) メンバテーブル(id,名前,ポジション) (2) コートテーブル(id,コート名、所在地) (3) 対戦チームテーブル(id,チーム名,ホームコートid) (4) 試合テーブル(id,日付,対戦チームid,コートid,ホームアウェイ区分) (5) 試合選手情報テーブル(試合id,ポジションコード,選手id) ポジションコード20をサブに、21を途中出場とする。 (6) 試合情報テーブル(試合id,情報コード,データ) この試合情報テーブルの情報コードが大切で、例えば、 1:試合得点->データは4桁で2桁自チーム得点、2桁相手チーム得点 2:得点者->データはメンバidで、当然得点と同じレコード数になる。 3:警告者->データはメンバid 4:PK情報->10ビットを10進数化し記録、1ビートがゴールかセーフかを意味する。 5:退場者->データはメンバid 6:試合時間 7:その他 などと決めて、横に項目を広げないようにします。 試合情報テーブルのレコード例 101,2,506 2 E-R図 対戦チームテーブル<-+-試合テーブル<--試合情報テーブル-->メンバテーブル コートテーブル<----+ 3 ビュー (1)試合出場選手出力ビュー SELECT メンバid, 日付 FROM 試合テーブル,試合選手情報テーブル WHERE 試合テーブル.id = 試合選手情報テーブル.試合id AND (ポジションコード<=11 OR ポジションコード=21) (2)ホーム得点者情報ビュー SELECT メンバid, 日付 FROM 試合テーブル,試合情報テーブル WHERE 試合テーブル.id = 試合情報テーブル.試合id AND ホームアウェイ区分 = 0 AND 情報コード = 2 (3)各選手アウェイ得点集計ビュー SELECT データ,COUNT(*) FROM 試合テーブル,試合情報テーブル WHERE 試合テーブル.id = 試合情報テーブル.id AND ホームアウェイ区分 = 1 AND 情報コード=2 GROUP BY データ デバッグしていませんが、このようにリレーションを効かせると自由に情報を集計できます。