2 つのスポーツ チームを含む Matchup というテーブルがあるとします。また、Team_AまたはTeam_Bのいずれかに一致する必要がある列を持つ Pick というテーブルもあります。つまり、Matchup のいずれかの列または他の列の外部キーです。これは可能ですか?
マッチアップ
Team_A
Team_B
Pick
Pick_Team - FK Matchup (Matchup の Team_A または Team_B と一致する必要があります)。
2 つのスポーツ チームを含む Matchup というテーブルがあるとします。また、Team_AまたはTeam_Bのいずれかに一致する必要がある列を持つ Pick というテーブルもあります。つまり、Matchup のいずれかの列または他の列の外部キーです。これは可能ですか?
マッチアップ
Team_A
Team_B
Pick
Pick_Team - FK Matchup (Matchup の Team_A または Team_B と一致する必要があります)。
Matchup私はあなたのテーブルを 2 つに分割します:Matchup適切な とMatchupDetails.
Matchupテーブルには、MatchupID主キーとして列があります。
1MatchupDetailsつは少なくとも2つの列で構成されます。テーブルを参照するためとMatchupID、MatchupテーブルTeamIDを参照するためTeamです(1つありませんか?)。2 つの列は、テーブルの複合主キーを形成します。
最後に、このPickテーブルがあります。(コメントの1つによると)複数のユーザーがいるため、UserID参照が必要になります。さらに 2 つの列MatchupID&TeamIDは、 の対応する列セットを参照する複合外部キーとして機能しMatchupDetailsます。また、1 人のユーザーが対戦から複数のチームを選択できないようにするには、複合主キーを使用(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)
これが正しいアプローチだとは思いません。
テーブルの Matchup (Pick としましょう) に追加のフィールドを追加し、それが Team_A または Team_B であることを確認するためにCHECK CONSTRAINTを追加することをお勧めします。
CHECK 制約は、1 つ以上の列で受け入れられる値を制限することにより、ドメインの整合性を強化します。論理演算子に基づいて TRUE または FALSE を返す任意の論理 (ブール) 式を使用して、CHECK 制約を作成できます。
外部キー参照では、あるテーブルの主キー値を保持する列が別のテーブルの列によって参照されるときに、2 つのテーブル間にリンクが作成されます。この列は、2 番目のテーブルの外部キーになります。
そして、それはあなたが探しているものではないようです。