Не удалось добавить ограничение внешнего ключа (ошибка ORA-02270: не найден уникальный или первичный ключ для этого списка столбцов) - PullRequest
0 голосов
/ 17 апреля 2020

Я учусь создавать небольшую и простую базу данных для класса с ограничениями Первичный ключ и Внешний ключ. Я получаю ORA-02770 при попытке выполнить мою инструкцию ALTER TABLE, которая, как я понимаю, уведомляет меня о том, что столбец, на который я ссылаюсь во внешней таблице, не указан в качестве ограничения первичного ключа. Тем не менее, из того, что я вижу, мой синтаксис - правильное именование первичных ключей в моих операторах CREATE TABLES. Я искал в таблице all_cons_columns таблицу player_info, и она также показала первичные ключи в списке. Могу ли я получить руководство? Ниже приведен мой текущий скрипт:

CREATE TABLE Player_Game
( school varchar2(30),
  player_number number(2,0),
  game_number number(1,0), 

  CONSTRAINT playergame_pk PRIMARY KEY (school, player_number,game_number)
);

CREATE TABLE School 
( school varchar2(30), 
  city varchar2(30), 
  coach varchar2(30), 
  team_name varchar2(30),
  win_record number (2,0), 
  loss_record number (2,0), 

  CONSTRAINT school_pk PRIMARY KEY (school)
);

CREATE TABLE Game 
( school varchar2(30),
  game_number number(1,0), 
  game_date DATE, 
  game_score varchar2(15), 

  CONSTRAINT game_pk PRIMARY KEY (school, game_number)
);

CREATE TABLE player_info
( school varchar2(30), 
  player_number number(2,0), 
  player_name varchar2(25), 

 CONSTRAINT playerinfo_pk PRIMARY KEY (school, player_number)
);

CREATE TABLE city 
( city varchar2(30),
  population number(5,0),

 CONSTRAINT city_pk PRIMARY KEY (city)
);

/*Here is the failing alter command */
ALTER TABLE Player_Game
ADD CONSTRAINT playergame_fk FOREIGN KEY (school) REFERENCES game(school); 

1 Ответ

1 голос
/ 17 апреля 2020

У вас неверный список столбцов в playergame_fk в операторе alter table. Список столбцов внешнего ключа должен точно совпадать со списком столбцов первичного ключа, на который он ссылается на .

Список столбцов первичного ключа равен school, game_number, следовательно, ваш внешний ключ должен иметь те же столбцы:

ALTER TABLE Player_Game
ADD CONSTRAINT playergame_fk FOREIGN KEY (school, game_number) 
  REFERENCES game(school, game_number);
...