我正在开发一个数据库来存储体育联盟的统计数据。 我想展示几个表:
我有一张火柴桌:
通过这张桌子,我可以根据球队的比赛来计算每支球队的总积分。但每次我想要显示联赛表时我都要计算得分。
另外我有一个问题需要计算,在最后10个赛程中哪个位置归类为一个团队,因为我必须进行10次查询。
为数据库表中的每个灯具存储联赛表是另一种方法,但每次我更改已经播放的匹配时,我必须从那里重新计算每个灯具......
有没有更好的方法来解决这个问题?
由于
答案 0 :(得分:3)
问题在于(例如)最近10个赛程中球队的位置或排名是派生数据。因此将它存储在一个表中是一个重复,并且完全没有必要,它创建了一个更新异常,其中没有。当然,像往常一样,无论何时创建重复项,您都会遇到相应的问题,即让它们保持最新并彼此同步,这些问题的解决方案永远不合理。因此,不要首先创建重复项,并且不会在第二位产生影响,并且在第三位没有编码的半解决方案。
只需为从真实源表派生的所有结果集(您认为是“表”)创建视图。这包括任何排名或职位列表;在任何情况下(夹具,锦标赛,联赛,国家)。
在SQL中很容易获得排名或位置。但代码取决于您拥有的SQL(或非SQL)的风格。有些风格不能处理子查询,而是提供RANK()函数。如果您指定了您拥有的SQL,我可以提供详细信息。
答案 1 :(得分:0)
我认为游戏每天或每周发生一次。
如果是这样,您可以在更新匹配项后运行触发器或批处理操作,并将这些结果存储在摘要表中。
这样每次比赛只计算一次。