我正在为一个体育(终极)跟踪项目建立一个数据库。基本上,程序的“原始数据”将是所有球员在同一时间内的位置和ID。但在我看来,我目前的做法似乎过于复杂。
主表games在每个团队中都有7-10个玩家in的列,与players表中包含的in匹配。它还为每个球员在球场上的位置设置了一列。但是这会创建一个列超过28-40列的表!
我对设计自己的数据库相当陌生,所以我可能缺少一些基本的东西,但是有更简单的方法吗?
(对于我想要处理的数据,我确实需要在每个时间戳上记录每个球员的位置)
澄清:“位置”是指球场上的物理位置,而不是球员位置的名称。
发布于 2014-07-31 09:00:18
听起来你的设计不太对。你可能需要这样(我想这是为了足球?):
TeamName TeamID,TeamName.
玩家桌- TeamID,PlayerName,PlayerPreferredPosition.
位置表- PositionID,PositionName,PositionType (后/中/向前/目标保持等)
游戏表- GameID,GameLocation,HomeTeam (FK队),AwayTeam (FK队),MatchStartTime
GamePlayPosition - GameID (FK游戏),PlayerID (FK Player),PositionID (FK位置),TimeStart,TimeEnd
这样你就可以知道球员在什么位置比赛,在任何时候的比赛。
编辑:如果你想要使用一个网格,并准确地指出玩家在那里花费的时间,我建议进行以下更改,但上面的内容仍然是正确的。
在GamePlayPosition表中添加一个代理键-- GamePlayPositionID,将其用作主键。然后添加另一张表:
ExactPlayPosition - GamePlayPositionID (FK),XPosition (小int),YPosition (小int),GameTime (日期时间?)可能是一个整数,表示游戏时间中经过的秒,如果使用游戏时间进行日期时间计算,则更容易比较游戏的相对位置。
您之所以有这样的另一个表,是因为它会有大量的数据,您希望它在行宽方面尽可能小。您将添加大约3600 (比赛中的秒)乘以10 (比赛中的#球员)= 36k记录,如果你不包括休息。如果追踪两队球员,比如说每场比赛有75k记录,比如说超过50场比赛.你知道这个主意。
https://dba.stackexchange.com/questions/72809
复制相似问题