2

私はMySQL(およびデータベース全体)にかなり慣れていないため、このようなデータを保存するための最良の方法がわかりません。

スポーツイベントの統計データを保存したいので、アイスホッケーから始めます。各プレイヤーにはキャリア統計がありますが、各ゲームのボックススコアもあります (各ゲームの最後にプレイヤーにゲームシートを提供したいと考えています)。

関係するチーム、日付、および各イベントのゲーム ID を含むスケジュール テーブルがあります。また、ID をプレーヤー ID にリンクするプレーヤー テーブルもあります。

私がこれまでに考えてきた2つのアプローチは次のとおりです。

  1. ストアド プロシージャを使用して、スケジュール上のすべてのゲームのテーブルを作成し、そのテーブル内にすべてのプレーヤー ID とその特定のゲームの統計を格納します。スコアリング プレイが発生すると、現在のゲーム テーブルのテーブル データとそのプレーヤーのキャリア統計テーブルが変更されます。

  2. それとも、単一の「ゲーム スコア」テーブルを作成し、gameid と playerid を参照として使用して、すべての得点プレー (ゴール、ペナルティなど) をそのテーブルに記録する方がよいでしょうか?

最初のアプローチは、1 シーズンに 100 試合を予定している場合、すぐに混乱する可能性があります (個々のゲームの統計はシーズン終了時に削除され、長期的な統計は保持されます)。

2 番目のアプローチでは、非常に長いテーブルがすぐに作成される可能性があり、テーブルが大きくなり続けるにつれてクエリが遅くなる可能性があります。

私は2番目のアプローチに傾いていますが、可能であれば何らかの意見を聞きたいです。あるいは、私はこれに対して完全に間違ったアプローチを取っているので、誰かに正しい道を教えてもらいたいと思っています. どんな助けでも大歓迎です。

4

1 に答える 1

2

それは、データをどの程度細かく取得したいかによって異なりますが、私はストアド プロシージャを使用しない傾向があり、管理しやすいコードでビジネス ロジックを実行することを好みます。

次のテーブルがあります。

Player -> contains player specific items such as size, right-handed, age, etc
PlayerStats-> contains player id, year (of current season), and aggregated stats... you could +1 to this table for scores and penalties for example

Teams -> contains player id, and venue id, team name
Venue -> Items about the arena such as location, average indoor temperature, etc
Games -> contains a home team id (id from teams table) and away team (id from teams table), venue_id, home_box_score, and away_box_score, game_date
PlayerGames -> contains player id, game id, and the game specific goals... For example any player that was in the game goes in here. If some one scores you +1 their score in this table AND the PlayerStats

一般に、テーブルは特定のものの属性である必要があります。これにより、データを結合してさまざまなレポートを作成する際の柔軟性が向上します...

たとえば、先ほど挙げたリストでは、フルーリーのようなゴールキーパーがオベチキンと対戦した回数を調べ、オベチキンがフルーリーで獲得したゴール数とボックス スコア別のゲームの結果の統計比較を表示できます (フルーリーがしたなど)。 ovechkin がゲームで 2 点以上のゴールを決めた場合、ゲームの勝敗を決定します)。

于 2013-03-27T21:41:06.237 に答える