如何设计多项运动的体育统计数据库?

时间:2010-12-09 23:16:11

标签: database-design

我正在尝试设计一个数据库来存储多种类型体育项目的玩家统计数据。

在数据库中,你会有很多玩家。每个球员属于一个球队,每个球队都参加一项运动。以下是我到目前为止所有这些部分的表格:

播放器(Player_ID,Team_ID,FirstName,LastName)

团队(Team_ID,Sport_ID,TeamName)

运动(Sport_ID,SportName)

现在我想存储玩家的统计数据。我遇到了不同运动员参加不同运动的问题,因此必须为每项运动存储不同类型的统计数据。如果我存储曲棍球运动员和棒球运动员,例如:

  • 对于想要存储目标和助攻的曲棍球运动员

  • 对于棒球运动员我想存储命中,本垒打和打点。

使用一个数据库有没有正确的方法来做这样的事情?我有没有以正确的方式开始?

7 个答案:

答案 0 :(得分:5)

您可以从sportsdb获取灵感,这是由XML Team创建的体育建模的rdbms模式。在该模式中,游戏和玩家统计数据存储在非规范化表格中,并且核心统计数据(如得分)与体育特定的统计数据保持分离。架构非常复杂,但可以让您了解可能的实现

答案 1 :(得分:4)

正确的方法是制作多个表,每个运动似乎都有一个。

播放器(Player_ID,FirstName,LastName)
团队(Team_ID,Sport_ID,TeamName)
TeamList(Team_ID,Player_ID)
运动(Sport_ID,SportName)
HockeyStats(Player_ID,Team_ID,Year,Goals,GamesPlayed,Assists)
BaseBallStats(Player_ID,Team_ID,Years,BoringSport)

这也解决了交易的情况,这些得分来自哪个团队,以及多项运动。

答案 2 :(得分:2)

您的初始设计还可以。

您需要为游戏创建一个表格。所以你会有一个带有字段的游戏表(Game_ID,Sport_ID,Team1_ID,Team2_ID)然后可能(Date_Played,Win_Lose_Tie等......)

然后我会为每项运动创建一个统计表。 TBL_Baseball_Stats(Stat_ID,Game_ID,Player_ID,Hits,HRs,RBIs等......

然后你可以有一个曲棍球统计表。 TBL_Hockey_Stats(Stat_ID,Game_ID,Player_ID,目标,助攻等......)

这将允许您通过玩家,游戏,运动等提取统计数据......

答案 3 :(得分:2)

另一种方法是具有统计ID列的单个表,用于标识该行中描述的统计信息。如果要保留的统计数据会随时间发生变化,这可能会很好。只有当每个统计数据的基本形式相同时才会运作良好(对不起,我是英国人,不熟悉你提到的运动和统计数据),但是有多表次要变量(一个表中的所有百分比统计数据,另一个中的所有简单统计数据等。)

答案 4 :(得分:1)

如果您希望能够动态创建新的运动而不需要修改数据库,则必须创建足够智能的东西来概括存储任何类型的统计数据。无论你选择什么,你都无法用一张桌子来做到这一点。

因此,如果你有一定数量的不同运动项目,我会建议你为每个统计数据创建一个表格。

如果没有(你希望将来能够用他们的统计数据创建新的体育项目),你应该寻找如何抽象这样的事情。一些强硬的草案:

  • 一项运动有很多属性
  • 统计有很多领域和一项运动
  • 字段有许多属性(类型,值等)

如果相同的轮廓出现在不同的统计信息中,您可以利用表继承。

答案 5 :(得分:1)

多项运动有自己不同类型的规则,因此您可以使用基于使用文档的数据库(例如:MONGODB),因为它很灵活,没有特定的列。

答案 6 :(得分:0)

你必须注意,某些运动员在定义主键时会考虑相同的名字(第一个和最后一个)。

对于棒球来说,有很多不同类型的统计数据 - 我会尝试通过至少添加AVG来满足竞争DB的期望。 / Games / Runs / Hits / AB / SB / 2B / 3B。和投手统计数据 - W / ERA / WHIP / SO。