2012-03-19 7 views
3

予約テーブルに制約を追加しようとしていますが、予約はフライトまたは宿泊施設、あるいはその両方にすることができます。Oracleの親キーが見つかりません

Reservation

  • 第4のレコードは4つのレコードが故にでは、唯一のフライトを予約し、宿泊施設だけ予約した2つのレコードを後NULL
  • からacc_idセットを持って飛行、往路便と宿泊
  • 次内側に計上しますフライト、アウトフライト、および席はヌルに設定されています。ここで

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にはいくつかのデータ(NULLだけでなく)が含まれていますか?これらのOUT_FLIGHT_IDはすべてFLIGHTテーブルのFLI_IDですか? –

+0

ポインタのおかげで、私はレコードの残りの半分を挿入するのを忘れました:) –

答えて

14

FLIGHTテーブルには、FLI_IDの値のうちの少なくとも1つのエントリが11と11の間のエントリを持たないことが示されています。エラーが発生しました。 18. FLIGHTテーブルに行が挿入されていない場合は、テーブルを更新して別のOUT_FLIGHT_IDに変更する必要があります。

+0

Justin、ありがとう、私は飛行テーブルの他の半分を生成し、それをデータベースに挿入するのを忘れた:) –

2

参照を持つ列を変更するために使用されている子テーブルからすべての行を削除します。

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

良い点、@モハマドShahnawaz、...私はそれを実現しなかった。 :D – gumuruh