我是MySQL(以及整个数据库)的新手,所以我不确定存储数据的最佳方法。
我想存储体育赛事的统计数据,我们将从冰球开始。每个玩家都有他们的职业生涯统计数据,但我也为每场比赛都有得分(我们希望在每场比赛结束时向玩家提供游戏表)。
我有一个日程表,其中包含每个事件涉及的团队,日期和游戏代码。我还有一个玩家表,将他们的身份与玩家ID联系起来。
这是我到目前为止所考虑的两种方法:
使用存储过程为每个创建一个表 按计划进行游戏,并在该表内存储所有玩家 ids,以及该特定游戏的统计数据。当评分游戏发生时,它会改变当前游戏桌的表数据和该玩家的职业统计表。
或者最好是创建一个“游戏得分”表并记录每个得分 使用gameid& amp;播放(目标,点球等)到桌子上 playerid作为参考?
如果我们预计在一个赛季中有100场比赛(个别比赛统计数据会在赛季末被删除,然后保留长期统计数据),第一种方法可能会很快变得凌乱。
第二种方法可能会很快结束一个非常长的表,这可能会使查询变得缓慢,因为它继续增长。
我倾向于第二种方法,但如果可能的话,我希望听到一些意见。或许我采取完全不正确的方法,并希望有人送我走正确的道路。非常感谢任何帮助。
答案 0 :(得分:1)
这实际上取决于您希望获得数据的精确度,但我倾向于远离存储过程,并且更倾向于在代码中执行任何业务逻辑,因为它更易于维护。
我会有以下表格:
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上得分的目标数量与比赛得分的比赛结果(如如果奥维奇金在比赛中打入2球或更多球,那么,如果弗里里赢了或输掉了比赛,那么。