想将机组分配链接到上表,因为我收到一个错误 如何解决这个错误?

问题描述

CREATE TABLE Route(
RouteNo VARCHAR(10),Origin VARCHAR(30),Destination VARCHAR(30),DepartureTime VARCHAR(15),SerialNo VARCHAR(5),ArrivalTime VARCHAR(15),PRIMARY KEY(RouteNo) );

CREATE TABLE Employee(
EmployeeID VARCHAR(5) NOT NULL,Name VARCHAR(30),Phone NUMBER,JobTitle VARCHAR(30),PRIMARY KEY(EmployeeID) );



CREATE TABLE Flight(
SerialNo VARCHAR(5),RouteNo VARCHAR(5),FlightDate DATE,ActualTD VARCHAR(10),ActualTA VARCHAR(10),PRIMARY KEY(SerialNo,RouteNo,FlightDate),FOREIGN KEY(RouteNo) REFERENCES Route(RouteNo),FOREIGN KEY(SerialNo) REFERENCES Airplane(SerialNo) ); -- does Airplane table exists ? 

CREATE TABLE CrewAssigment(
EmployeeID VARCHAR(5),Role VARCHAR(45),Hours INT,PRIMARY KEY(EmployeeID,FOREIGN KEY(EmployeeID) REFERENCES Employee(EmployeeID),FOREIGN KEY(FlightDate) REFERENCES Flight(FlightDate) );

Select * from CrewAssignment

这是我在 CrewAssignment 表中遇到错误代码,上面是引用外键的表。

错误报告 - ORA-02270: 此列列表没有匹配的唯一键或主键 02270. 00000 - “此列列表没有匹配的唯一键或主键” *原因:CREATE/ALTER TABLE 语句中的 REFERENCES 子句 给出没有匹配的唯一或主要的列列表 引用表中的键约束。 *操作:使用 ALL_CONS_COLUMNS 查找正确的列名 目录视图

解决方法

一些反对意见。

  • 这显然是一个 Oracle 问题,而不是 MySQL。我怎么知道? ORA-02270 是 Oracle 数据库错误代码;注意你使用的标签。

  • 您应该使用 VARCHAR2 数据类型而不是 VARCHAR。为什么? Oracle 建议这样做。

  • create table flight 首先失败,因为它引用了 airplane 表,并且它还不存在(至少,在您发布的代码中不存在)

  • 您抱怨的错误是由于 create table crewassignment。它的一个外键引用了 flight 表:

    FOREIGN KEY(flightdate) REFERENCES flight(flightdate)
    

    但是 flight 的主键是复合的,由 3 列组成:

    PRIMARY KEY(serialno,routeno,flightdate)
    

    这意味着您无法创建该外键。

那么,怎么办?不知道,我不知道负责这种数据模型的规则。要么修改flight表的主键,要么修改crewassingment表的外键约束。

也许您可以向 flight 表(由序列(或标识列,如果您的数据库版本支持)组成)添加一个新列,然后让 crewassignment 表引用 主键。您当前用作主键 (serialno,flightdate) 的列将切换为 唯一 键。