【问题标题】:MYSQL Relational Schema PlanningMYSQL 关系模式规划
【发布时间】:2013-06-06 19:37:18
【问题描述】:

我正在尝试找出解决此数据存储问题的最佳方法....

我有一张包含球员、球队和比赛的表格。

一个团队可能会参与 3 场比赛。

一名球员属于一个球队,但可能只有资格参加他或她的球队参加的 3 场比赛中的 2 场。同样,同一球队的另一名球员可能有资格参加所有 3 场比赛。

我不想在每次比赛的玩家表中添加一列,因为我正在远离关系模型。我需要另一张表“competition_eligiblity”吗?但这似乎需要做很多工作!

有什么建议吗?

谢谢,

艾伦。

【问题讨论】:

    标签: mysql schema relational


    【解决方案1】:

    是的,您确实需要一张参赛资格表。

    真的不用再把它放在那里了。实际上,它会少一些工作:

    • 如果涉及向表中添加新列,那么将来添加新的竞赛将是一件非常痛苦的事情。
    • 如果竞赛资格存储在列中,执行查询以获取有关资格的信息将成为一场噩梦。

    假设您想列出玩家有资格参加的所有比赛。这是您的查询:

    select player, "competition1" from players where competition1_eligible = 1
       union all
    select player, "competition2" from players where competition2_eligible = 1
       union all
    select player, "competition3" from players where competition3_eligible = 1
       union all
    select player, "competition4" from players where competition4_eligible = 1
    

    听起来很有趣,是吗?然而,如果您有资格表,则此信息将很容易获得。

    更新:将所有资格信息存储在一个值中将更加噩梦,因为想象一下尝试从字符串中提取该信息。这超出了正常 SQL 查询的限制。

    创建一个新表实际上是一件微不足道的工作,您只需要做一次。如果你这样做,之后的一切都会容易得多。

    【讨论】:

    • 我知道的另一个不太优雅的选项是将每个比赛的组合存储在单个值中,例如:1=comp A 和 B,2=comp A 和 C 等,然后将每个玩家与其中一个 id 相关联/我知道这不是要走的路,但为什么呢?我试图反对这种方法,但需要一些弹药!
    • 谢谢丹 - 非常有帮助。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多