【问题标题】:Oracle parents key not found未找到 Oracle 父键
【发布时间】:2014-11-18 03:07:44
【问题描述】:

我正在尝试向预订表添加约束,预订可以是航班或住宿,或两者兼而有之。

  • 前 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

似乎是什么问题?我知道这与孤儿有关,但我设置为空所以我不明白,请指教

【问题讨论】:

  • 根据您的屏幕截图,OUT_FLIGHT_ID 包含一些数据(不仅是空值),您确定所有这些 OUT_FLIGHT_ID 都是 FLIGHT 表中的 FLI_ID 吗?
  • 感谢指点,我忘了插入另一半记录:)

标签: sql database oracle


【解决方案1】:

该错误表明FLIGHT 表中没有至少一个介于 11 和 18 之间的 FLI_ID 值的条目。您需要在 FLIGHT 表中插入一行以用于任何航班丢失或更新您的表格以使用不同的OUT_FLIGHT_ID

【讨论】:

  • 谢谢贾斯汀,我刚刚意识到我生成了飞行表的另一半并忘记将其插入数据库:)
【解决方案2】:

从子表中删除所有用于更改列以获取引用的行。

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

【讨论】:

  • 好点,@Mohammad Shahnawaz,...我从来没有意识到这一点。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多