假设我有一个名为Matchup的桌子,其中包含两个运动队。我还有一个名为Pick的表,其中的列必须与Team_A OR Team_B匹配。所以它是Matchup中一个或另一个列的外键。这可能吗?
对决
Team_A
Team_B
选取
Pick_Team - FK比赛(必须与比赛中的Team_A或Team_B匹配)。
答案 0 :(得分:0)
我不认为这是正确的方法。
我更愿意建议你在表格Matchup中添加一个额外的字段(比方说Pick)并添加CHECK CONSTRAINT以确保它是Team_A或Team_B。
CHECK约束通过限制值来强制域完整性 被一列或多列接受。您可以创建CHECK约束 使用任何返回TRUE或FALSE的逻辑(布尔)表达式 关于逻辑运算符。
在外键引用中,在两个表之间创建链接 包含一个表的主键值的一列或多列 由另一个表中的一列或多列引用。这一栏 成为第二个表中的外键。
它似乎不是你想要的。
答案 1 :(得分:0)
我会将您的Matchup
表格分成两个:Matchup
正确和MatchupDetails
。
Matchup
表格将以MatchupID
列作为主键。
MatchupDetails
一个至少包含两列:MatchupID
引用Matchup
表,TeamID
引用Team
表(你做有一个,不是吗?)。这两列将构成表的复合主键。
最后,会有这个Pick
表。由于您有多个用户(根据您的一条评论),因此需要UserID
引用。另外两列,MatchupID
& TeamID
将作为引用MatchupDetails
中相应列集的复合外键。并且为了确保一个用户可以从匹配中选择不超过一个团队,(UserID, MatchupID)
的复合主键应该这样做。
总结一下,这里是模式相关部分的完整概述:
Matchup
:
MatchupID
PRIMARY KEY (MatchupID)
MatchupDetails
:
MatchupID
TeamID
FOREIGN KEY (MatchupID)
FOREIGN KEY (TeamID)
PRIMARY KEY (MatchupID, TeamID)
Pick
:
UserID
MatchupID
TeamID
FOREIGN KEY (UserID)
FOREIGN KEY (MatchupID, TeamID)
PRIMARY KEY (UserID, MatchupID)