体育联盟数据库设计

时间:2011-03-01 07:05:40

标签: sql database-design

我正在开发一个数据库来存储体育联盟的统计数据。 我想展示几个表:

  • 表示球队在当前和上一场比赛中的位置的联赛表
  • 表格显示了球队在每个锦标赛中的位置

我有一张火柴桌:

  • 匹配(IdMatch,IdTeam1,IdTeam2,GoalsTeam1,GoalsTeam2)

通过这张桌子,我可以根据球队的比赛来计算每支球队的总积分。但每次我想要显示联赛表时我都要计算得分。

另外我有一个问题需要计算,在最后10个赛程中哪个位置归类为一个团队,因为我必须进行10次查询。

为数据库表中的每个灯具存储联赛表是另一种方法,但每次我更改已经播放的匹配时,我必须从那里重新计算每个灯具......

有没有更好的方法来解决这个问题?

由于

2 个答案:

答案 0 :(得分:3)

问题在于(例如)最近10个赛程中球队的位置或排​​名是派生数据。因此将它存储在一个表中是一个重复,并且完全没有必要,它创建了一个更新异常,其中没有。当然,像往常一样,无论何时创建重复项,您都会遇到相应的问题,即让它们保持最新并彼此同步,这些问题的解决方案永远不合理。因此,不要首先创建重复项,并且不会在第二位产生影响,并且在第三位没有编码的半解决方案。

只需为从真实源表派生的所有结果集(您认为是“表”)创建视图。这包括任何排名或职位列表;在任何情况下(夹具,锦标赛,联赛,国家)。

在SQL中很容易获得排名或位置。但代码取决于您拥有的SQL(或非SQL)的风格。有些风格不能处理子查询,而是提供RANK()函数。如果您指定了您拥有的SQL,我可以提供详细信息。

答案 1 :(得分:0)

我认为游戏每天或每周发生一次。

如果是这样,您可以在更新匹配项后运行触发器或批处理操作,并将这些结果存储在摘要表中。

这样每次比赛只计算一次。