外键可以引用多个表吗?

6

我正在进行一些数据库设计练习,但遇到了一个问题,无法解决。

我还是个新手,可能不够好,但我会尽力。

我想创建两个不同的表,一个叫做Team,另一个叫做Player。这两个表之间非常不同。

然后我想再创建一个称为Challenge的表,它可以引用Team或Player。

基本上有比赛,它们可以单独比赛,也可以组成团队比赛。如果是团队挑战,则需要一个外键引用Team,如果是个人挑战,则需要引用Player。

由于这两个表包含的元素非常不同,所以我不能将它们合并在一起。

我有点困惑如何操作。我是否可以只有一个外键来引用其中一个表?或者我应该有两个外键,其中一个为空。

或者我可以在Team和Player中添加另一个ID键。然后,在Challenge中,如果新Type键指示它是团体,则引用Team;如果是个人,则引用Player。

因为我是新手,希望我的意思能够表达清楚。


你不能将一个列作为外键同时关联两个表。 - John Gibb
1
一个解决方法是创建一个“竞争者”表,其中包含团队和玩家的一行。现在您有了一个CompetitorId可用于Challenge的外键,并且团队和玩家都可以使用竞争者的外键返回到它。不过,可能并不值得这么麻烦。 - John Gibb
1个回答

2

您可以在挑战中添加两列:PlayerID和TeamID,这两个列都可以为空。

PlayerID references Player.id
TeamID references Team.id

例如,一个挑战有一个玩家:

  PlayerID  = 14
  TeamID = NULL

请注意,所引用的列(Player.id和Team.id)必须定义为NOT NULL,因为它们从表challenge中被引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接