想要将船员分配链接到上面的表格,因为我收到一个错误 如何解决此错误?


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),
RouteNo VARCHAR(5),
FlightDate DATE,
Role VARCHAR(45),
Hours INT,
PRIMARY KEY(EmployeeID, RouteNo, FlightDate),
FOREIGN KEY(EmployeeID) REFERENCES Employee(EmployeeID),
FOREIGN KEY(RouteNo) REFERENCES Route(RouteNo),
FOREIGN KEY(FlightDate) REFERENCES Flight(FlightDate) );
Select * from CrewAssignment

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

错误报告-ORA-02270:这个列列表没有匹配的唯一键或主键02270. 00000 -"此列列表没有匹配的唯一键或主键";*原因:CREATE/ALTER TABLE语句中出现了REFERENCES子句给出一个列列表,其中没有匹配的唯一列或主列引用表中的键约束。*操作:使用all_con_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, routeno, flightdate)将切换到唯一的关键。

相关内容

  • 没有找到相关文章

最新更新