0

免責事項:私は学生です。私は航空会社では働きません。私はプロのプログラマになりすましていません。Oracle SQL 12c複合主キーで複合外部キーを正しく使用する方法は?

ご挨拶、私はこれらのテーブルが一緒に機能するためには、修正する必要があることを理解したいと思います。私はそれが明らかだと確信していますが、それは私にはありません。私には、私の列が正しく一致しているように見えます。複合主キーの一部として複合外来キーを使用することと関係していると確信していますが、これを修正する方法はわかりません。多くの「TODO」がまだ残っている私のフルコードはGithub Gist hereにあります。

私は現時点ではOracle DBMSにアクセスできず、数日間はアクセスしないため、SQLFiddleを使用しています。これは完全な出力SQLPlusや開発者に与えることはできません。私は12cを勉強しているので最適ではありませんが、SQLFiddleは11gしかサポートしていません。早めにありがとうございます。

これは、SQLフィドルのエラー出力です:

ORA-02256: number of referencing columns must match referenced columns 

そして、ここでは一致しない2つのテーブルがあります。

CREATE TABLE FLIGHT (
    FLIGHT_ID NUMBER(3), 
    AIRCRAFT_ID VARCHAR(8), 
    FLIGHT_DATE DATE, 
    CONSTRAINT PK_flight_comp_pk PRIMARY KEY (FLIGHT_ID,FLIGHT_DATE), 
    CONSTRAINT FK_flight_route_ID FOREIGN KEY (FLIGHT_ID) 
    REFERENCES FLIGHT_ROUTE(ROUTE_ID), 
    CONSTRAINT FK_flight_serial_ID FOREIGN KEY (AIRCRAFT_ID) 
    REFERENCES AIRCRAFT(AIRCRAFT_ID) 
); 

CREATE TABLE RESERVATIONS (
    CUSTOMER_ID NUMBER(4), 
    FLIGHT_ID NUMBER(3), 
    QTY_RESERVED_SEATS NUMBER(3), 
    CONSTRAINT PK_reservations PRIMARY KEY (CUSTOMER_ID,FLIGHT_ID), 
    CONSTRAINT FK_reservations_customer_ID FOREIGN KEY (CUSTOMER_ID) 
    REFERENCES CUSTOMER(CUSTOMER_ID), 
    CONSTRAINT FK_reservations_flight_ID FOREIGN KEY (FLIGHT_ID) 
    REFERENCES FLIGHT(FLIGHT_ID,FLIGHT_DATE) 
); 

答えて

0

私はそれを理解しました。テーブルの外部キーではなく、固有のプライマリキーが必要です。出力の後半に表示する必要はありませんが、一意の行を選択する必要があります。以下のように更新され、うまく動作します。

CREATE TABLE FLIGHT (
    FLIGHT_ID NUMBER(5), 
    ROUTE_ID NUMBER (3), 
    AIRCRAFT_ID VARCHAR(8), 
    FLIGHT_DATE DATE, 
    CONSTRAINT PK_flight_comp_pk PRIMARY KEY (FLIGHT_ID), 
    CONSTRAINT FK_flight_route_ID FOREIGN KEY (ROUTE_ID) 
    REFERENCES FLIGHT_ROUTE(ROUTE_ID), 
    CONSTRAINT FK_flight_serial_ID FOREIGN KEY (AIRCRAFT_ID) 
    REFERENCES AIRCRAFT(AIRCRAFT_ID) 
); 

CREATE TABLE RESERVATIONS (
    RESERVATIONS_ID NUMBER (6), 
    CUSTOMER_ID NUMBER(4), 
    FLIGHT_ID NUMBER(5), 
    QTY_RESERVED_SEATS NUMBER(3), 
    CONSTRAINT PK_reservations PRIMARY KEY (RESERVATIONS_ID), 
    CONSTRAINT FK_reservations_customer_ID FOREIGN KEY (CUSTOMER_ID) 
    REFERENCES CUSTOMER(CUSTOMER_ID), 
    CONSTRAINT FK_reservations_flight_ID FOREIGN KEY (FLIGHT_ID) 
    REFERENCES FLIGHT(FLIGHT_ID) 
); 
関連する問題