我想创建一个数据库来存储(欧洲)足球比赛表。
我最初想要的是一张包含competition_id
列的所有比赛的单人桌。
如果我想参加比赛,我会根据比赛ID(例如where competition_id=1
)进行选择。
我现在有决定。因为其中一个比赛使用了小组然后淘汰游戏,这不适用于一般的通用表。
即使我要添加另一列“组”并且它适用的地方也使用它,这似乎是一个坏主意。 另外,没有办法在这张桌子上添加淘汰赛。
我正在考虑为每场比赛单独制作一张桌子,从而能够嵌入每种比赛的特殊性。未来的证明也是我要看的东西。
你有什么建议吗?
答案 0 :(得分:1)
您应该制作一个general_competitions表,其中包含每个竞赛的相同数据类型,以及每个竞赛类型的第二个表。对于查询,请使用JOIN。
答案 1 :(得分:1)
无论结构越高,我都希望有一个游戏/匹配表:
game_id, home_team_id, away_team_id, home_score, away_score, etc...
这可能还有关于比赛场地和时间的信息等。
我认为这是一个细化的单元,可以促进团队分析和统计报告,而无需将不同的表联合起来。
然后游戏将与比赛联系起来:
competition_id, game_id
在该链接中,您可以添加群组信息,或者可以将群组视为子竞赛
对于淘汰赛(下一场比赛的参赛者在上一轮比赛完成前未知),你可能会有一个与游戏相关的二叉树结构。这样的结构可能会有占位游戏,也可能没有链接到游戏,直到他们被安排,我可以看到一些方法来剥离那只猫,这取决于你的分析要求。
答案 2 :(得分:0)
我想这可能是我的方法:
table Competitions
competition_id PK
competition_name
...
table Teams
team_id PK
team_name
...
table Results
result_id PK
competition_id FK
home_team_id FK
away_team_id FK
group_id
eliminatied
date_played
...
现在您可以存储所需的所有主要信息 您可以使用Results表的group_id来指定它是组还是淘汰阶段。 如果团队已被淘汰,您可以将淘汰赛设置为1。
通过这种结构,您可以提出选择语句来为您生成排名。 您可以使用date_played范围来选择特定季节(年)。所以从技术上讲,你每年都可以使用相同的结构,只需继续添加团队和新游戏。搜索日期范围以获取特定年份/季节的数据。
可以添加很多其他信息,例如用于存储不同统计信息的表格,但所有这些都取决于您的想象力。
答案 3 :(得分:0)
Hmmmmmmmmmm。
我认为关键在于观察到有几种不同的“基本竞争形式”,而你所谓的“竞争”实际上可能由几个阶段组成,每个阶段都是一个单独的“竞争形式”。 / p>
竞争“形式”本质上是直接淘汰,每个人都反对每个人。他们俩都有“主场和客场比赛”(想想足球)和“单场比赛”(想想网球锦标赛)的风格。
像欧洲冠军联赛这样的比赛分为三个阶段:直接淘汰赛阶段,第二阶段有8个不同的“每个人都参加比赛”比赛,最后阶段再次直接淘汰赛