我会尽我所能地将它一般化,这样它就可以重用了。
我正在运行一个具有相当大的MySQL数据库的站点,该数据库已经增长到需要初始化一些汇总/汇总表。为了这个例子,我们假设它是足球统计数据。因为我在同一个数据库中处理多个足球联赛,所以他们中的许多人都玩不同长度的比赛——例如,室内足球联赛玩四个四分之一的比赛,而大多数室外联赛玩半个。
我有三张对这个练习很重要的桌子。我已经修改了所有我认为对我正在寻找的答案不重要的领域。
GAME
`game`.id
`game`.home_team_id
`game`.away_team_id
`game`.number_of_periods
GOAL
// Records for each goal scored in the game
`goal`.id
`goal`.game_id
`goal`.team_id
`goal`.period_number
`goal`.player_id
`goal`.assist_player_id
PERIOD_SUMMARY
`period`.id
`period`.game_id
`period`.team_id
`period`.number
`period`.goals_scored
最后,我应该在时段汇总表中记录下每个时段的比赛记录,不管是否有进球。此表只需要初始化一次,因为通过游戏创建时的触发器添加适当的零填充记录和触发插入/更新请求来更新period_摘要表非常容易。
对我来说,将所有目标分组并用sum()初始化周期汇总表也相当容易,因为我很难找到一种有效的方法来“填充”没有目标得分为0的任何周期。
我想知道的是,是否更容易/更有效地:
编写触发器并用0填充的值预先填充整个期间摘要表,然后运行我已经知道的查询以更新目标计分期间的相应记录。
使用其他方法(可能是临时存储过程?)如果目标表中没有匹配项,则只填充0条记录。