2011-03-01 50 views
2

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

  • 名次表,表示在当前和以前的灯具球队的位置
  • 表,显示了球队的每一个灯具在积分榜上的位置

我有一个匹配表:

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

有了这个表格,我可以根据球队的比赛数据计算出每个球队的总积分。但每次我想要显示联盟表时,我都必须计算积分。

另外我有一个问题,以计算在哪个位置归类在过去10个灯具组中的一个球队,因为我必须做10个查询。

要保存排名表在一个数据库表中的每个夹具是另一种方法,但每次我改变比赛已经发挥我不得不重新计算从那里每个灯具...

是否有更好的方法解决这个问题?

谢谢

回答

0

我假设游戏每天或每周发生一次。

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

这样计算每场比赛只发生一次。

+0

那么,没关系。比赛可以随时更新。从比赛表计算联赛表不是问题。问题是我想要计算一个球队的位置,例如,最近的10个装置。这就是我在桌子上为每个灯具储存联赛表的原因 – John 2011-03-01 07:40:41

3

问题在于(例如)球队在过去10场比赛中的位置或排​​名是派生数据。因此,将它存储在表中并且完全没有必要,它会创建一个更新异常,在那里没有。当然,像往常一样,无论何时创建重复记录,您都会遇到相应的问题,使它们保持最新并且彼此保持同步,解决这些问题的方法永远不会合理。因此,不要在第一时间创建重复副本,而且您不会在第二个地方产生结果,也不会在第三个地方编写半副本。

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

在SQL中获取排名或位置很容易。但代码取决于你拥有哪种SQL(或非SQL)风格。有些风格不能处理子查询,而是提供一个RANK()函数。如果你指定你有哪些SQL,我可以提供细节。