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