2012-03-19 44 views
3

我試圖向預訂表添加約束,預訂可以是航班或住宿,也可以是兩者。未找到Oracle父母的密鑰

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 

出了什麼問題?我知道它與孤兒孩子有關,但我設置了空值,所以我不明白,請告知

+0

根據你的截圖OUT_FLIGHT_ID包含一些數據(不僅是空值)你確定所有這些OUT_FLIGHT_ID是FLI_ID在FLIGHT表嗎? – 2012-03-19 16:13:53

+0

感謝您的指針,我忘記插入另一半的記錄:) – 2012-03-19 16:25:13

回答

14

錯誤表明FLIGHT表中沒有至少一個FLI_ID值之間11和18.您需要在FLIGHT表格中插入一行,以查看是否缺少任何航班,或更新您的表格以獲得不同的OUT_FLIGHT_ID

+0

謝謝賈斯汀,我剛剛意識到我生成了另一半的航班表,並忘記將其插入數據庫:) – 2012-03-19 16:24:51

2

從子表中刪除所有行,用於更改具有引用的列。

ALTER TABLE sales ADD CONSTRAINT sales_time_fk 
FOREIGN KEY (time_id) REFERENCES times (time_id) 
RELY DISABLE NOVALIDATE; 
+0

好點,@Mhamhammad Shahnawaz,...我從來沒有意識到這一點。 :d – gumuruh 2016-04-23 12:19:36