2014-11-23 94 views
0
--Create Flight schedule table 
    CREATE TABLE FlightSchedule 
    (RouteID VarChar(6), 
    FlightDate DATE NOT NULL, 
    PlaneSerial VarChar(10) NOT NULL, 
    CONSTRAINT FlightIDDATEPK PRIMARY KEY(RouteID, FlightDate), 
    CONSTRAINT FlightNoFK FOREIGN KEY(RouteID) 
     REFERENCES ROUTE(RouteID), 
    CONSTRAINT PlaneSerialFK FOREIGN KEY(PlaneSerial) 
     REFERENCES AIRPLANE(PlaneSerial)); 

    --Create Crew table 
    CREATE TABLE Crew 
    (EmpID NUMBER(5) NOT NULL, 
    RouteID Varchar(6) NOT NULL, 
    FlightDate DATE NOT NULL, 
    CONSTRAINT EMPIDPK PRIMARY KEY(EmpID, RouteID, FlightDate), 
    CONSTRAINT EMPIDFK FOREIGN KEY(EmpID) 
     REFERENCES EMPLOYEE(EmpID), 
    CONSTRAINT RouteIDFK FOREIGN KEY(RouteID) 
     REFERENCES ROUTE(RouteID), 
    CONSTRAINT DATEFK FOREIGN KEY(FlightDate) 
     REFERENCES FlightSchedule(FlightDate)); 

我试图创建2个表,但收到以下错误。已经设置了主键,但不知道什么是错的。Oracle SQL中的唯一或主键错误不匹配

Error at Command Line : 26 Column : 28 
Error report - 
SQL Error: ORA-02270: no matching unique or primary key for this column-list 
02270. 00000 - "no matching unique or primary key for this column-list" 
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement 
      gives a column-list for which there is no matching unique or primary 
      key constraint in the referenced table. 
*Action: Find the correct column names using the ALL_CONS_COLUMNS 
      catalog view 
+0

每个'EMPLOYEE','FlightSchedule'是否都有相应的UQ/PK? – zerkms 2014-11-23 09:05:36

+0

他们在另一张桌子上有自己的PK – XGAl 2014-11-23 09:10:15

回答

0

外键需要引用父表的主键(或所引用的唯一约束的所有列)的所有列。如果FlightSchedule主键是RouteID, FlightDateCrew外键引用FlightSchedule将需要使用的主键

CONSTRAINT DATEFK FOREIGN KEY(RouteID, FlightDate) 
    REFERENCES FlightSchedule(RouteID, FlightDate) 

当然两列,你需要确保你所有的外键引用从父表完成密钥。您尚未发布您引用的其他表的定义,因此我不知道是否有更多的外键存在相同的问题。

相关问题