2016-08-07 43 views
0

我正在創建一個簡單的數據庫,並且一直遇到此錯誤,ORA-02270:此列列表沒有匹配的唯一或主鍵。我一直試圖解決這個問題超過一天,我不明白我做錯了什麼。我已經看過關於這個錯誤的其他帖子,但不明白我在這裏做錯了什麼。數據庫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

外鍵是對另一個表的主鍵的引用。

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 games_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), 

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

並執行類似於player_game_stats的操作。

您可能需要擺弄每張桌子的鑰匙。重要的是,表中的外鍵應該包含與它引用的表的主鍵相同的列。

相關問題