Как исправить ошибку «ORA-02270: нет соответствующего уникального или первичного ключа для этого списка столбцов» ошибка в SQL - PullRequest
3 голосов
/ 26 апреля 2019

Проблема возникает в таблице FLIGHT,

create table LOCATION (  
  airportCode   VARCHAR2(10) not null,  
  country       VARCHAR2(15) not null,  
  address       VARCHAR2(50) not null,  
  PRIMARY KEY(airportCode));

create table ROUTE (  
  routeID           VARCHAR2(10) not null,  
  airportCode       VARCHAR2(10) not null,  
  description       VARCHAR2(100) not null,  
  PRIMARY KEY(routeID, airportCode),
  FOREIGN KEY(airportCode) REFERENCES LOCATION(airportCode));

create table NEACC (  
  memberID          VARCHAR2(20),  
  flightGoldpoints  NUMBER,  
  PRIMARY KEY(memberID));

create table STAFF (  
  staffID           VARCHAR2(20) not null,  
  memberID          VARCHAR2(20) not null,
  name              VARCHAR2(20) not null,
  address           VARCHAR2(50) not null,
  email             VARCHAR2(30) not null,  
  phone             NUMBER not null,
  passportNum       NUMBER not null,
  PRIMARY KEY(staffID),
  FOREIGN KEY(memberID) REFERENCES NEACC(memberID));

create table FLIGHT (   
  flightID          VARCHAR2(20) not null,   
  routeID           VARCHAR2(20) not null,   
  staffID           VARCHAR2(20) not null, 
  captainOrFirstOfficer VARCHAR2(15) CHECK (captainOrFirstOfficer IN ('captain', 'first officer')) not null,
  estDepartDateTime VARCHAR2(20) not null,   
  actDepartDateTime VARCHAR2(20) not null,   
  actArriveDateTime VARCHAR2(20) not null, 
  avgSpeed          NUMBER not null, 
  avgHeight         NUMBER not null, 
  estDuration       NUMBER not null, 
  estFuel           NUMBER not null, 
  PRIMARY KEY(flightID, routeID), 
  FOREIGN KEY(routeID) REFERENCES ROUTE(routeID), 
  FOREIGN KEY(staffID) REFERENCES STAFF(staffID));

Я получил сообщение об ошибке: «ORA-02270: не найдено ни одного уникального или первичного ключа для этого списка столбцов». Внешние ключи и первичные ключи правильно указаны в таблице рейсов, но я не понимаю, почему возникает эта ошибка.

1 Ответ

3 голосов
/ 26 апреля 2019

Первичный ключ в таблице Route:

PRIMARY KEY(routeID, airportCode),

Надлежащая ссылка на внешний ключ должна ссылаться на оба по порядку.Это будет:

FOREIGN KEY(routeID, airportCode) REFERENCES ROUTE(routeID, airportCode), 

Однако FLIGHT не имеет airportCode, поэтому это не сработает.

Я не уверен, в каком направлении вы хотите пойти -- удалить airportCode из первичного ключа или добавить его в таблицу Flight.Но это твоя проблема.

...