Ключ родителей Oracle не найден - PullRequest
4 голосов
/ 19 марта 2012

Я пытаюсь добавить ограничение в таблицу бронирования, бронирование может быть либо на рейс, либо на проживание, либо на оба варианта.

Reservation

  • Первые 4 записи, забронированные на рейс, выезд и размещение
  • Следующие 4 записи забронировали только рейс и установили acc_id на NULL
  • После 2-х записей забронировано только проживание, следовательно, в полете, на вылете и месте установлены на ноль.

Вот мои ограничения для этой таблицы

ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT HOLIDAY_PK PRIMARY KEY (RESV_ID);
ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT CUSTOMER_FK FOREIGN KEY (BOOKING_CUS_ID) REFERENCES CUSTOMER (CUS_ID);
ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT STAFF_FK3 FOREIGN KEY (EMP_ID) REFERENCES STAFF (EMP_ID);
ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT FLIGHT_FK FOREIGN KEY (IN_FLIGHT_ID) REFERENCES FLIGHT (FLI_ID);
ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT FLIGHT_FK1 FOREIGN KEY (OUT_FLIGHT_ID) REFERENCES FLIGHT (FLI_ID);
ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT ACC_FK FOREIGN KEY (ACC_ID) REFERENCES ACCOMMODATION (ACC_ID);

и единственное ограничение, приводящее к ошибке:

ALTER TABLE HOLIDAY_RESERVATION ADD CONSTRAINT FLIGHT_FK1 FOREIGN KEY (OUT_FLIGHT_ID) REFERENCES FLIGHT (FLI_ID);

Я получаю

ERROR at line 1:
ORA-02298: cannot validate (U1146815.FLIGHT_FK1) - parent keys not found

В чем проблема? Я понимаю, что это связано с детьми-сиротами, но я устанавливаю нули, поэтому я не понимаю, пожалуйста, сообщите

Ответы [ 2 ]

15 голосов
/ 19 марта 2012

Ошибка указывает, что в таблице FLIGHT нет записи по крайней мере для одного из значений FLI_ID в диапазоне от 11 до 18. Вам необходимо вставить строку в таблицу FLIGHT для любых рейсов.отсутствует или обновите таблицу, чтобы иметь другую OUT_FLIGHT_ID.

2 голосов
/ 17 ноября 2014

Удалите все строки из дочерней таблицы, которая используется для изменения столбца для наличия ссылок.

ALTER TABLE sales ADD CONSTRAINT sales_time_fk
FOREIGN KEY (time_id) REFERENCES times (time_id) 
RELY DISABLE NOVALIDATE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...