在一个表中的多个字段上使用外键

say*_*yth 2 sql-server-2008 foreign-key database-design sql-server

可能是简单的问题。

对于两张桌子。一对多关系是从 A -> B、TeamID -> Fk_Team 创建的,但是有多个字段需要引用这个关系如何工作。

所以

A                          B
TeamID                     EventID
teamName                   datetime
teamocation                homeTeam
etc                        awayTeam
                           Weather
                           Fk_team 
Run Code Online (Sandbox Code Playgroud)

那么我如何定义 homeTeam 和 awayTeam 都利用 Fk_Team 关​​系并且 homeTeam 和 awayTeam 条目必须存在于 TeamID.teamName 字段中?

Aar*_*and 7

你不能把它作为一个单一的约束来实现;你需要创建两个:

ALTER TABLE dbo.B ADD CONSTRAINT FK_HomeTeam 
  FOREIGN KEY (homeTeam) REFERENCES dbo.A(teamName);

ALTER TABLE dbo.B ADD CONSTRAINT FK_AwayTeam 
  FOREIGN KEY (awayTeam) REFERENCES dbo.A(teamName);
Run Code Online (Sandbox Code Playgroud)

正如我在评论中提到的那样,存储TeamID在两列中会更有效率dbo.B- 这样你INT在每行中重复两个s,而不是像“Billy Bob's Bait and Tackle Mudhens”或“South Cincinnati”这样庞大的字符串叛逆者。”

它还使更改团队名称变得更加容易(除非重点是在游戏进行时记录他们的历史名称,但即使如此,我也会将名称随时间存储在某种历史表中,而不是在每场比赛中) .