关系数据库 - 存储累积数据的最佳方式?

时间:2015-01-02 22:01:09

标签: mysql sql relational-database

我正在试图找出跟踪随时间累积的数据的最佳方法。

说我有运动员每周都有进球。我可以使用goals列来存储玩家的目标数,并在需要时更新此值:

Player
    id
    name 
    goals

看起来工作正常,但是,我正在考虑在赛季结束时做些什么。我可以继续计算,或者我可以决定我真正感兴趣的是玩家goals_this_season

我不想忘记这个辉煌的赛季,我最好还是创造另一张桌来纪录过去几个赛季的目标吗?

因此,我是否应该完全摆脱我的玩家表中的goals_this_season列?或者这个决定应该取决于我的业务逻辑?即。如果我对goals_this_season更感兴趣,它是否仍然是玩家表的一部分,这样我每次想要玩家goals_this_season时都不需要访问两个表?

SeasonGoals
    id
    season_year 
    player_id == Player.id
    goals

如果我缩放到goals_this_weekgoals_this_game怎么办?这仍然是最好的主意吗?还有其他选择吗?

摘要

  • 我是否应该将与对象相关的历史数据存储在所列的单独表格中?
  • 我是否应该根据我打算如何使用数据库来确定Player.goals_this_season列?或者它应该是SeasonGoals表的一部分吗?

1 个答案:

答案 0 :(得分:2)

您应该做的是规范化数据。玩家和目标之间存在一对多关系,因此规范化要求每个目标应对应player_goals表中的一行。为您的目标添加时间戳,然后使用分组查询(可能在结果表中缓存结果)来获取每个时间段的目标,无论是天,月,年等。