设计比赛数据库的最佳方法


13

我正在创建一个网页,用于在即将到来的2012年欧洲杯足球锦标赛的所有比赛中下注。需要一些帮助来确定淘汰赛阶段应采取的方法。

我在下面创建了一个样机,当存储所有“已知”小组赛比赛的结果时,我非常满意。这种设计使检查用户是否正确下注变得非常容易。

但是,存储四分之一决赛和半决赛的最佳方法是什么?这些比赛取决于小组赛的结果。

我想到的一种方法是将所有比赛添加到matches表中,但是在淘汰赛阶段将不同的变量或标识符分配给主队/客队。然后将其他标识符映射到团队的其他表中……这可能有用,但感觉不正确。

基本数据库设计


您是否决定使用MySQL还是愿意接受替代方案?
杰克说,请尝试topanswers.xyz

我已经意识到了。.MySQL是否有任何优点/缺点?
hampusohlsson 2011年

没有执行检查约束。通常,使用DRI实施约束的选项更少-但是,这是否对您很重要,很大程度上取决于您的应用程序。如果您想发表更多意见,很高兴聊天:)
杰克说,请尝试topanswers.xyz,

谢谢,但是我不认为我会使用约束,因为我对此不太熟悉。将在将应用程序中的所有数据发送到数据库之前对其进行验证,使其保持简单
hampusohlsson 2011年

好好。当然,这在数据库中更简单,但这是另外
一遍

Answers:


3

首先,我将尝试修复模型本身中的所有预定信息,包括

  • 日期/地点
  • 结构(即小组/淘汰赛阶段)
  • 规则(即得分,抢七规则)

这些信息中的一些将是表中的数据,某些将在视图中被编码。

大概是这样的:

  • team(team_id,group_code枚举('A','B','C','D'),名称)
  • 比赛(match_id,kickoff_at)
  • group_match(match_id,team_id_home,team_id_away,group_code)
  • Knockout_match(match_id,Knockout_code枚举('Q1','Q2','Q3','Q4','S1','S2','F')
  • 结果(match_id,score_home,score_away)

诸如第Q1支球队的信息之类的信息永远不需要直接存储,因为它可以从小组赛阶段的结果中得出。随着比赛的进行,唯一要做的更改是插入result表格中。


3

我认为使用团队ID是正确的方法。决赛所有回合的另一种抽象程度只是增加了不必要的复杂性,除了给比赛表预先加载数据外,没有太多好处。

数据结构看起来很可靠,可以支持这一点。一旦输入初始比赛结果,就需要将四分之一决赛和半决赛添加到比赛表中。如果比赛是随机分配的,则这是手动操作,但是,如果它们按特定顺序排列...

   A
match 1 -----+
   B         A
          match 5 -----+
   C         C         |
match 2 -----+         |
   D                   A
                    match 7
   E                   F
match 3 -----+         |
   F         F         |
          match 6 -----+
   G         G
match 4 -----+
   H

...那么这可以通过查询来完成。同样,取决于团队数量,查询的复杂性可能不值得付出


1

将所有匹配项存储在表“ matches”中是一个好主意。但是,我会向其添加一个附加字段“排名”,因为稍后您需要它来构建一个二叉树来有效地查询内存中的表。这是一个经典的排名算法问题,您可以在Google上参加格雷码锦标赛以获取更多信息,或查看我的stackoverflow历史记录。基本上,锦标赛是二叉树。这是一篇有关格雷码的好文章:http : //villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm。不幸的是它是法国的。以下是如何根据排名生成二叉树的方法:http : //blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.