【问题标题】:Confusion over relationship in a tennis tournament context网球锦标赛背景下的关系混淆
【发布时间】:2013-12-01 17:54:52
【问题描述】:

我正在制作一个简单的网球数据库,其中包含:

  • 锦标赛(男子/女子单打、男子/女子双打、混合双打)
  • 玩家
  • 结果

我的结果表看起来像

  • 结果ID
  • 播放日期
  • Player1ID(成为 ParticipantID1)
  • Player1Score
  • Player2ID(成为 ParticipantID2)
  • Player2Score

然后我意识到一个玩家可以参加多个锦标赛,所以我需要另一张桌子,参与者(或者可以称为团队,或情侣)。

  • 参与者ID
  • 玩家ID
  • 锦标赛ID

所有三个 ID 都是复合的。

现在乔(ID:1)和汤姆(ID:2)可以成为双打搭档,但乔仍然可以打单打

参赛者 ID -- PlayerID -- TournamentID

1 ----------------- 1 ------------ 1

1 ----- 2 ------------ 1

2 ----------------- 1 ------------ 2

现在我遇到的问题是,必须为参与者表打开自动增量/识别,这意味着必须完成更多的编码工作(在创建和验证等时)。

我遇到的第二个问题是所有单打球员数据都会重复,因为它们会存储在 Player 表和 Participant 表中。

我可以有另一个结果表,即 DoubleResults,但我觉得这没有必要。

这是唯一可以做到的方法还是我的大脑一片空白?

【问题讨论】:

  • 单打选手数据为什么会重复?应该只是被多次使用的 PlayerID。
  • 因为结果表实际上应该只链接到 PlayerID 或 ParticipantID。我猜可以使用 -If TournamentType = 'Singles' Use PlayerID Else Use ParticipantID- 逻辑,但看起来不太好?

标签: sql foreign-keys relational-database relationship


【解决方案1】:

一场比赛会有很多场比赛。因此,您需要在锦标赛和比赛之间建立一对多的关系。

一场比赛会有一个类型(单打、双打等)。所以你的匹配表必须包含一个类型 id。

您需要在球队和比赛之间建立多对多的关系。一支球队可以有一名或两名球员,这取决于比赛的类型。在这一点上,它归结为您想要存储多少细节。将获胜的团队 ID 存储在此表中可能就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2020-12-12
    • 2012-08-22
    • 1970-01-01
    • 2019-03-22
    • 2020-10-08
    相关资源
    最近更新 更多