web-dev-qa-db-ja.com

1つのテーブルの複数のフィールドで外部キーを使用する

簡単な質問でしょう。

2つのテーブル用。 A-> B、TeamID-> Fk_Teamから1対多の関係が作成されますが、この1つの関係を参照する必要があるフィールドが複数あり、どのように機能するかを示します。

そう

A                          B
TeamID                     EventID
teamName                   datetime
teamocation                homeTeam
etc                        awayTeam
                           Weather
                           Fk_team 

では、homeTeamとawayTeamの両方がFk_Team関係を利用し、homeTeam&awayTeamエントリがTeamID.teamNameフィールドに存在している必要があることをどのように定義しますか?

2
sayth

これを単一の制約として実装することはできません。 2つ作成する必要があります。

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);

コメントで触れたように、TeamIDdbo.Bの2つの列に格納する方がはるかに効率的です。この方法では、すべての行で2つのINTsを繰り返す代わりに、 「ビリーボブのベイトアンドタックルマデンズ」や「サウスシンシナティリベルロッカーズ」などのかさばるストリングス。

また、チームの名前を変更するのがはるかに簡単になります(重要なのは、ゲームがプレイされたときに歴史的な名前を記録することではありませんが、それでも、すべてのゲームではなく、ある種の履歴テーブルに名前を保存します)。 。

7
Aaron Bertrand