2

我对 MySQL(以及整个数据库)相当陌生,所以我不确定存储此类数据的最佳方法。

我想存储体育赛事的统计数据,我们将从冰球开始。每个球员都有他们的职业统计数据,但我也有每场比赛的得分(我们希望在每场比赛结束时向球员提供比赛表)。

我有一个日程表,其中包含每个事件所涉及的团队、日期和游戏 ID。我还有一个玩家表,将他们的身份与玩家 ID 联系起来。

到目前为止,这是我想到的两种方法:

  1. 使用存储过程为日程表上的每场比赛创建一个表格,并在该表格中存储所有玩家 ID 和该特定比赛的统计数据。当得分比赛发生时,它会更改当前比赛表格的表格数据和该球员的职业统计表格。

  2. 还是创建一个“游戏得分”表并使用 gameid 和 playerid 作为参考将每个得分(进球、点球等)记录到该表上更好?

如果我们预计一个赛季有 100 场比赛,第一种方法可能会很快变得混乱(个人比赛统计数据将在赛季结束时删除,然后保留长期统计数据)

第二种方法可能很快就会得到一个非常长的表,随着它的继续增长,查询可能会很慢。

我倾向于第二种方法,但如果可能的话,我想听听一些意见。或者,也许我对此采取了完全错误的方法,并且希望有人让我走上正确的道路。任何帮助是极大的赞赏。

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

一般来说,表格应该是特定事物的属性,因为它可以让您更灵活地加入数据以创建许多不同的报告......

例如,通过我刚刚提供的列表,您可以找出像 fleury 这样的守门员打过 ovechkin 的次数,并显示 ovechkin 在 fleury 上打进多少球的统计数据比较,以及按盒子得分(例如 do fleury)的比赛结果如果 ovechkin 在比赛中打进 2 球或更多球,则赢得或输掉比赛)。

于 2013-03-27T21:41:06.237 回答