SQL set FOREIGN KEY为非唯一值在SQL developer中抛出错误



我有一个N:M的情况,但我不能使用任何2个非唯一值作为外键,有人可以帮助吗?Platform_Id和Station_Id不能同时被设置为Platform_Host表中的外键。

CREATE TABLE Repair_Platform
(
Platform_Id INT NOT NULL,
Station_Id INT NOT NULL,
Mechanic_Id INT NOT NULL UNIQUE,
Validation_Num INT NOT NULL,
CONSTRAINT Platform_fk1 
FOREIGN KEY (Station_Id) REFERENCES Repair_Station (Station_Id),
CONSTRAINT Platform_fk2 
FOREIGN KEY (Mechanic_Id) REFERENCES Engineer (Engineer_Id),
CONSTRAINT Platform_pk  
PRIMARY KEY (Station_Id, Platform_Id)
);
CREATE TABLE Platform_Host
(
Station_Id INT NOT NULL,
Platform_Id INT NOT NULL,
Vehicle_Id VARCHAR(8) NOT NULL,
DateTime DATE NOT NULL,
CONSTRAINT Host_fk1 
FOREIGN KEY (Station_Id) REFERENCES Repair_Platform (Station_Id),
CONSTRAINT Host_fk2 
FOREIGN KEY (Vehicle_Id) REFERENCES Vehicle (License_Plate),
CONSTRAINT Host_fk3 
FOREIGN KEY (Platform_Id) REFERENCES Repair_Platform (Platform_Id)
);

错误:

ORA-02270:这个列列表没有匹配的唯一键或主键02270.
*原因:CREATE/ALTER TABLE语句中的REFERENCES子句给出了一个列列表,该列列表在被引用表中没有匹配的唯一键或主键约束。
& lt;*操作:使用all_con_columns目录视图查找正确的列名

您需要引用Repair_Platform的整个主键-像这样:

CREATE TABLE Platform_Host
(
-- columns
-- constraints
CONSTRAINT Host_fk3 
FOREIGN KEY (StationId, Platform_Id) 
REFERENCES Repair_Platform (StationId, Platform_Id)
);

只引用主键的一部分——它是全部或不交易。

最新更新