Oracle SQL 12c 如何在复合主键中正确使用复合外键?

Non*_*714 5 oracle foreign-key primary-key oracle-12c

免责声明:我是一名学生。我不在航空公司工作。我不会假装是一个专业的程序员。

您好,我想了解我需要更正哪些内容才能使这些表协同工作。我确定这很明显,但对我来说不是。对我来说,看起来我正确匹配了我的列。我确定这与使用复合外键作为复合主键的一部分有关 - 但我不知道如何更正。我完整的代码,有许多“待办事项”尚存,是在Github上吉斯特这里

我目前无法访问 Oracle DBMS,并且几天后都无法访问,所以我使用的是 SQLFiddle;它没有提供 SQLPlus 或 Developer 可以提供的完整输出。它也不是最佳的,因为我正在研究 12c,但 SQLFiddle 仅提供 11g 支持。提前谢谢你。

这是 SQL 小提琴的错误输出:

ORA-02256: number of referencing columns must match referenced columns
Run Code Online (Sandbox Code Playgroud)

这是两个不一致的表。

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)
);
Run Code Online (Sandbox Code Playgroud)

ato*_*pas 4

ORA-02256: 引用列数必须与被引用列数匹配

原因:外键引用列表中的列数不等于被引用列表中的列数。
操作:确保引用列与被引用列匹配。

问题是外键应该引用复合主键中使用的两列。

FLIGHT_DATE列添加到表中RESERVATIONS并更改代码:

CONSTRAINT FK_reservations_flight_ID FOREIGN KEY (FLIGHT_ID)
    REFERENCES FLIGHT(FLIGHT_ID,FLIGHT_DATE)
);
Run Code Online (Sandbox Code Playgroud)

到:

CONSTRAINT FK_reservations_flight_ID FOREIGN KEY (FLIGHT_ID,FLIGHT_DATE)
    REFERENCES FLIGHT(FLIGHT_ID,FLIGHT_DATE)
);
Run Code Online (Sandbox Code Playgroud)