0

次のような表があります。

League_id     League_name          Team_id     Team_name
257           Copa America         11111       ABC
122           Brazil A             11111       ABC
135           La Liga              987         FC Barca
129           Copa Del Rey         987         *FC Barca Football

*Notice that there each team could play in different leagues

Team_nameColumnのサニティ チェックを行いTeam_name、すべてのリーグで同じであることを確認したいと思います。つまり、別のリーグFC Barca Footballと同じではないため、フラグを立てる必要があります。FC Barca

このチェックにアプローチする最良の方法は何ですか?

次のようなエラー メッセージが生成されるはずです: "Team_ID の Team_Name の不一致 = 987" リーグ: ラ リーガ (135) およびコパ デル レイ (129)

ありがとうございました、

4

3 に答える 3

4

これにアプローチする適切な方法はteam_name、このテーブルに を格納しないことです。team_name列はテーブルに属していますteam(ここで、team_idが主キーであると思います)。現実的には、league_nameもこのテーブルにあるべきではありません。 が主キーであるleagueテーブルにあるはずです。league_id

したがって、実際には3つのテーブルが必要です

CREATE TABLE league( 
  league_id   NUMBER PRIMARY KEY,
  league_name VARCHAR2(100) NOT NULL
);

CREATE TABLE team(
  team_id   NUMBER PRIMARY KEY,
  team_name VARCHAR2(100) NOT NULL
);

CREATE TABLE team_league(
  team_league_id NUMBER PRIMARY KEY,
  team_id        NUMBER REFERENCES team( team_id ),
  league_id      NUMBER REFERENCES league( league_id ),
  CONSTRAINT uk_team_league UNIQUE( team_id, league_id )
);

次に、ここで提示したデータを生成するビューを作成できます

SELECT l.league_id, l.league_name,
       t.team_id,   t.team_name
  FROM league l
       JOIN team_league tl on (l.league_id = tl.league_id)
       JOIN team t on (tl.team_id = t.team_id)
于 2012-11-21T16:10:04.720 に答える
0

テーブルを正規化することをお勧めします。

言い換えると:

IDチーム名の列を持つTEAMテーブルを作成します。IDリーグ名の列を持つLEAGUEテーブルを作成します。

リーグには多くのチームを含めることができ、チームには多くのリーグを含めることができます。したがって、これは多対多の関係としてモデル化する必要があります。

つまり、リーグIDチームIDフィールドを使用してTEAM_LEAGUEテーブルを作成します

このモデリングでは、特定のチームに一意のチーム名が1つあるため、問題を回避できます。

于 2012-11-21T16:15:28.683 に答える
0

team_id とチーム名を使用して別のテーブル (Teams) を作成できます。それらに一意の制約を設定します。次に、League_id、League_name、Team_id を含む League テーブルを配置します。
そのため、クエリを実行するときに、teams テーブルから team_name をプルして、team_id ごとに複数のチーム名を許可する冗長性を減らします。

于 2012-11-21T16:14:35.523 に答える