微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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) 的列将切换为 唯一 键。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。