【问题标题】:How to design my database?如何设计我的数据库?
【发布时间】:2012-03-09 14:33:10
【问题描述】:

我想为足球比分创建一个数据库。

显然,我们有:

  • 国家/地区(荷兰、德国、(但也包括欧洲))
  • 比赛(荷甲、德甲、欧联)
  • 球队(特温特、拜仁慕尼黑、马德里竞技)
  • 球员(卢克·德容、曼努埃尔·诺伊尔、蒂亚戈·门德斯)
  • 比赛(特温特 - 埃因霍温,拜仁 - 勒沃库森等)
  • 事件(卢克·德容在第 40 分钟进球)

我正在使用 Dezign,我在其中创建了以下方案:

显然,比赛与国家有关,玩家与团队有关,等等。

但随后出现了一些问题。 Event 属于 Match 和 Player。所以事件可以得到一个match_id 和一个player_id。但是,任何球队的任何球员都可以在他不属于的比赛中“得分”(C队的一名球员可以在A队和B队的比赛中得分)。例如,我该如何限制这一点?

此外,一支球队可以参加“正常”比赛,也可以参加欧冠。因此,Team 实体中的简单竞争 ID 是不够的。

你有什么其他想法吗?

编辑以回应菲利普

【问题讨论】:

    标签: database


    【解决方案1】:

    您缺少一个实体来表达Lineup(team, match)LineupPosition (lineup, player)

    然后您可以将EventLineupPosition(特定比赛中的特定球员)相关联,从而将您的Event 链接到正确的Match,通过LineupPosition->Lineup->@ 987654329@.

    【讨论】:

    • 查看添加的图像有问题,你是说这样的吗?我可以看到它确实适用于比赛得分问题之外的球员。但是如何限制两个以上具有相同match_idLineups?
    • 阵容中没有match_id,而是匹配中的home_lineup_idaway_lineup_id。这样你每场比赛只能有两个阵容,并且不会丢失主客场信息。
    • 我再次编辑了图像。到目前为止非常感谢,我确实有最后一个问题。当我在LineupPosition 中创建条目时,我可以将多个球队的球员添加到同一个lineup_id。这可能会派上用场(例如,国家队),但对于“正常”的比赛,这应该是不可能的。对此有什么想法吗?
    • 有点晚了,但是很抱歉,不知道如何在数据库级别执行此操作。