MYSQL关系模式规划

时间:2013-06-06 11:24:56

标签: mysql schema relational

我正试图找出管理此数据存储问题的最佳方法....

我有一张球员,球队和比赛表。

一支球队可能会参与3场比赛。

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

我不希望为每个比赛添加一个列到播放器表,因为我正在离开关系模型。我需要另一张桌子'competition_eligiblity' - 这看起来好像很多工作!

有什么建议吗?

谢谢,

艾伦。

1 个答案:

答案 0 :(得分:0)

是的,您确实需要一张竞争资格表。

把它放在那里真的没有什么工作了。实际上,它的工作量会减少:

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

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

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查询的限制。

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