外键可以引用多个表吗?

use*_*511 6 sql foreign-keys

所以我在数据库设计方面做了一些练习,出现了一个问题,我无法弄清楚如何纠正.

我对此很陌生,所以我不是最好的,但在这里.

所以我想创建两个不同的表,一个叫做Team,另一个叫做Player.这些表彼此差异很大.

然后我想要另一个名为Challenge的表,我想引用Team或Player.

基本上有比赛,他们要么单独比赛,要么作为一个团队.我想要一个外键来引用团队,如果它是一个团队挑战,或者玩家,如果它是个人.

我无法组合这两个表,因为它们包含非常不同的元素.

我只是有点困惑如何做到这一点.我可以只有一个外键,它将引用一个或另一个表.或者我应该有两个,一个为空.

或者我可以在团队和播放器中添加另一个ID密钥.然后在Challenge中,如果一个新的Type键表明它是一个组,它将引用Team,如果它的个体,它引用Player.

再一次,这个很新,所以希望我有道理.

小智 2

您可以在挑战中添加两列:PlayerID 和 TeamID,两者都可以为 NULL。

PlayerID references Player.id
TeamID references Team.id
Run Code Online (Sandbox Code Playgroud)

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

  PlayerID  = 14
  TeamID = NULL
Run Code Online (Sandbox Code Playgroud)

请注意,引用的列(Player.id 和 Team.id)必须定义为 NOT NULL,因为它们是从表 Challenge 引用的