2

2 つのスポーツ チームを含む Matchup というテーブルがあるとします。また、Team_AまたはTeam_Bのいずれかに一致する必要がある列を持つ Pick というテーブルもあります。つまり、Matchup のいずれかの列または他の列の外部キーです。これは可能ですか?

マッチアップ
Team_A
Team_B

Pick
Pick_Team - FK Matchup (Matchup の Team_A または Team_B と一致する必要があります)。

4

2 に答える 2

0

Matchup私はあなたのテーブルを 2 つに分割します:Matchup適切な とMatchupDetails.

Matchupテーブルには、MatchupID主キーとして列があります。

1MatchupDetailsつは少なくとも2つの列で構成されます。テーブルを参照するためとMatchupIDMatchupテーブル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)
    
于 2013-08-13T06:06:53.790 に答える
0

これが正しいアプローチだとは思いません。

テーブルの Matchup (Pick としましょう) に追加のフィールドを追加し、それが Team_A または Team_B であることを確認するためにCHECK CONSTRAINTを追加することをお勧めします。

CHECK 制約は、1 つ以上の列で受け入れられる値を制限することにより、ドメインの整合性を強化します。論理演算子に基づいて TRUE または FALSE を返す任意の論理 (ブール) 式を使用して、CHECK 制約を作成できます。

FOREIGN KEY 制約から

外部キー参照では、あるテーブルの主キー値を保持する列が別のテーブルの列によって参照されるときに、2 つのテーブル間にリンクが作成されます。この列は、2 番目のテーブルの外部キーになります。

そして、それはあなたが探しているものではないようです。

于 2013-08-13T05:00:49.297 に答える