2016-08-07 15 views
0

単純なデータベースを作成していますが、このエラーが発生します。ORA-02270:この列リストに一致する一意または。私はこれを1日以上解決しようとしていて、何が間違っているのか分かりません。私はこのエラーに関する他の投稿を見てきましたが、ここで間違っていることを理解していません。データベースSQLエラー:ORA-02270:この列リストに一致する一意キーまたは主キーがありません

問題なしで作成するテーブルは、TEAMS、PLAYERS、およびGAMESテーブルです。 TEAM_GAME_STATSテーブルまたはPLAYER_GAME_STATSテーブルを作成しようとすると、このエラーが発生します。私は、これらのテーブルの両方から外部キー制約を削除すると、それらを作成する際に問題はないことに気付きました。私はデータに問題を引き起こすかもしれないと思っていますか?誰かが私のコードを見て、私が間違っていることを知らせたり、正しい方向に向けることができたら、私は感謝します。私はテーブルをプライマリ/外部キーだけに単純化しているので、過剰なコードはありません。

CREATE TABLE teams (
    team VARCHAR2(50), 
    CONSTRAINT teams_pk PRIMARY KEY (team) 
); 

CREATE TABLE players (
    player_id   NUMBER, 
    team    VARCHAR2(50), 
    CONSTRAINT players_pk PRIMARY KEY (player_id), 
    CONSTRAINT players_fk_team FOREIGN KEY (team) 
    REFERENCES teams (team) 
); 

CREATE TABLE games (
    game_number NUMBER, 
    player_id  NUMBER, 
    team   VARCHAR2(50), 
    CONSTRAINT games_pk PRIMARY KEY (game_number, player_id, team), 
    CONSTRAINT games_fk_player_id FOREIGN KEY (player_id) 
    REFERENCES players (player_id), 
    CONSTRAINT games_fk_team FOREIGN KEY (team) 
    REFERENCES teams (team) 
); 

CREATE TABLE team_game_stats (
    game_number    NUMBER, 
    team      VARCHAR2(50), 
    CONSTRAINT team_game_stats_pk PRIMARY KEY (game_number, team), 
    CONSTRAINT team_game_stats_fk_game_number FOREIGN KEY (game_number) 
    REFERENCES games (game_number), 
    CONSTRAINT team_game_stats_fk_team FOREIGN KEY (team) 
    REFERENCES games (team), 
); 

CREATE TABLE player_game_stats (
    game_number    NUMBER, 
    player_id     NUMBER, 
    CONSTRAINT player_game_stats_pk PRIMARY KEY (game_number, player_id), 
    CONSTRAINT player_game_stats_fk_game_number FOREIGN KEY (game_number) 
    REFERENCES games (game_number), 
    CONSTRAINT player_game_stats_fk_player_id FOREIGN KEY (player_id) 
    REFERENCES games (player_id), 
); 

CREATE INDEX players_team_idx 
    ON players (team); 

CREATE INDEX games_player_id_idx 
    ON games (player_id); 
CREATE INDEX games_team_idx 
    ON games (team); 

CREATE INDEX team_game_stats_game_number_idx 
    ON team_game_stats (game_number); 
CREATE INDEX team_game_stats_team_idx 
    ON team_game_stats (team); 

CREATE INDEX player_game_stats_game_number_idx 
    ON player_game_stats (game_number); 
CREATE INDEX player_game_stats_player_id_idx 
    ON player_game_stats (player_id); 
+0

問題はここにあります** CONSTRAINT games_pk PRIMARY KEY(game_number、player_id、team)** team_game_statsテーブルはゲームテーブルに1つの一意のプライマリキーを登録できません。 –

答えて

1

外部キーは、別のテーブルの主キーへの参照です。

CONSTRAINT games_pk PRIMARY KEY (game_number, team) 

Oracle SQL: Receiving 'no matching unique or primary key' error and don't know why

変更

CONSTRAINT games_pk PRIMARY KEY (game_number, player_id, team) 

また

する

CONSTRAINT team_game_stats_fk_game_number FOREIGN KEY (game_number) 
REFERENCES games (game_number), 
CONSTRAINT team_game_stats_fk_team FOREIGN KEY (team) 
REFERENCES games (team), 

を変更

CONSTRAINT team_game_stats_game_fk FOREIGN KEY (game_number, team) 
REFERENCES games (game_number, team) 

などのように、player_game_statsと似たようなことをします。

各テーブルのキーを使って操作する必要があります。重要なことは、テーブル内の外部キーには、参照するテーブルの主キーと同じ列を含める必要があることです。

関連する問題