mysql - 存储体育赛事得分数据的最佳方法是什么?

标签 mysql database database-design

我对 MySQL(以及整个数据库)还很陌生,所以我不确定存储这样的数据的最佳方法。

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

我有一个日程表,其中包含每个事件的参与团队、日期和比赛 ID。我还有一个玩家表,将他们的身份链接到玩家 ID。

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

  1. 使用存储过程为每个 时间表上的比赛,并在该表中存储所有玩家 id 以及该特定游戏的统计数据。当得分比赛发生时,它会更改当前比赛表的表数据以及该球员的职业统计表。

  2. 或者创建一个“游戏得分”表并记录每个得分是否更好 使用 gameid 在该 table 上进行比赛(进球、罚球等)& 作为引用的playerid?

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

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

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

最佳答案

这实际上取决于您想要处理数据的粒度,但我倾向于远离存储过程,而更喜欢在代码中执行任何业务逻辑,因为它更易于维护。

我会有下表:

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

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

例如,通过我刚刚给出的列表,您可以了解像弗勒里这样的守门员与奥维奇金交锋的次数,并显示奥维奇金对弗勒里进了多少球的统计数据比较以及按方框得分的比赛结果(例如如果奥维奇金在比赛中打进 2 个或更多进球,弗勒里就会赢得或输掉比赛)。

关于mysql - 存储体育赛事得分数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669779/

相关文章:

mysql - 数据库设计: need composite key + foreign key

mysql - 如何在 SQL 中按 max(a,b) 排序?

java - 超过 READ COMMITTED 锁等待超时

database - 当过程 #2 失败并引发错误时,如何阻止过程 #1 显示成功消息?

database - 如何从多个 SQLite 数据库中选择所有列

database - 名字和姓氏分开或放在数据库中哪个更好?

MySQL:需要架构帮助 - 如何处理列表?

sql-server - 多对多 "Primary"

mysql - 这个数据库转储设计好吗?

mysql - 无法插入重复键 : MySQL to SQL server