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 番目のテーブルの外部キーになります。
そして、それはあなたが探しているものではないようです。