Mysql 数据库体系结构建议

Mysql 数据库体系结构建议,mysql,database-design,Mysql,Database Design,我想创建一个数据库来存储(欧洲)足球比赛表。 我最初想要的是一个包含competition\u id列的所有比赛的单一表格。 如果我想获得比赛的表格,我会根据比赛id进行选择(例如,其中competition_id=1) 我现在要做一个决定。因为其中一项比赛使用的是小组赛,然后是淘汰赛,这不适用于通用的多功能表 即使我要添加另一个专栏“组”,并在它适用的地方使用它,这似乎是一个坏主意。 另外,没有办法在这张桌子上增加淘汰赛 我正在考虑为每项比赛做一个单独的表格,这样就能够嵌入每种比赛类型的特殊性

我想创建一个数据库来存储(欧洲)足球比赛表。 我最初想要的是一个包含
competition\u id
列的所有比赛的单一表格。 如果我想获得比赛的表格,我会根据比赛id进行选择(例如,
其中competition_id=1

我现在要做一个决定。因为其中一项比赛使用的是小组赛,然后是淘汰赛,这不适用于通用的多功能表

即使我要添加另一个专栏“组”,并在它适用的地方使用它,这似乎是一个坏主意。 另外,没有办法在这张桌子上增加淘汰赛

我正在考虑为每项比赛做一个单独的表格,这样就能够嵌入每种比赛类型的特殊性。未来的证明也是我要看的东西


您有什么建议吗?

您应该制作一个通用的比赛表格,其中包含关于每项比赛的相同数据类型,并为每项比赛类型制作第二个表格。对于查询,请使用JOIN。

无论更高的结构如何,我都希望有一个游戏/比赛表:

game_id, home_team_id, away_team_id, home_score, away_score, etc...
这也可能有关于比赛地点和时间等的信息

我认为这是一个精细的单元,可以促进团队分析和统计报告,而无需合并不同的表

然后,游戏将与比赛联系起来:

competition_id, game_id
在该链接中,您可以添加组信息,也可以将组视为次级比赛


对于淘汰赛(在上一轮比赛结束之前,下一场比赛的参与者是未知的),您可能有一个链接到比赛的二叉树结构。这种结构可能有占位符游戏,或者在游戏预定之前不会链接到游戏,我可以根据您的分析要求,找到一些剥猫皮的方法。

我想这将是我的方法:

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
...
因此,现在您可以存储所需的所有主要信息。
您可以使用结果表的group_id指定这是分组阶段还是淘汰阶段。 如果团队已被淘汰,则可以将“淘汰”设置为1

使用此结构,您可以使用select语句为您生成排名。 您可以使用日期范围来选择特定的季节(年)。所以从技术上来说,你每年都可以使用相同的结构,只需不断增加球队和新游戏。搜索日期范围以获取特定年份/季节的数据

还有很多其他信息可以添加,比如存储不同统计数据的表格,但所有这些都取决于您的想象。

hmmmm

我认为关键在于观察到有几个不同的“基本竞争形式”,你所谓的“竞争”实际上可能由几个阶段组成,每个阶段都是一个单独的“竞争形式”

竞争“形式”本质上是直接淘汰赛和人人对抗。它们都有“主客场比赛”(想想足球)和“一场比赛”(想想网球锦标赛)的味道


像欧洲冠军联赛这样的比赛分为三个阶段:直接淘汰赛阶段,第二阶段有八个不同的“每个人对每个人”比赛,最后阶段又是直接淘汰赛。

你说的比赛表是什么意思?你能举一些简单的例子吗?你可以用基辅迪纳摩:)嘿,安德烈。我这样想:。这应该是乌克兰的排名。谷歌翻译。。。哈哈。增加表的数量会让你的数据库更灵活,更灵活会增加复杂性。如果你愿意做大量的维护,那么选择灵活的;简单的,我会考虑的,谢谢你,本。现在我还不知道会创建什么样的比赛。你是打算存储比赛结果和资料,还是只存储排名?我知道了。你是说用一般的表格来计算比赛、获胜、平局、失分等,然后用另一个表格来计算特殊性?是的,据我所知,这是最好的选择。谢谢罗伯特。我会再等一会儿,看看其他人怎么想。目前,比赛数据库(赛程)和比赛表是独立的、不相关的表。在玩游戏时,一个查询存储分数,另一个查询更新所涉及的两个队的比赛表。因此,基本上,当显示结果时,一个表是查询表,当查询表位置时,另一个表是查询表。谢谢。问题是,比赛可以有分组,也可以没有分组。淘汰赛阶段也是如此。有些没有联赛结构,只是淘汰赛,比如杯赛。这就是为什么你有一个组id,你可以设置为1、2、3、4,这取决于比赛发生在哪个组。如果是淘汰赛,则保持组id为空。如果这是一场淘汰赛,请保持group_id为NULL,并将elimination设置为1,以指定这是一场淘汰赛。是的,这基本上就是对它的总结。