Sql 引用表中没有主键或候选键
我创建了一个表Sql 引用表中没有主键或候选键,sql,sql-server,database,Sql,Sql Server,Database,我创建了一个表Request,它有一个由三列组成的主键,还有一个外键 CREATE TABLE Request ( Iqama varchar(255) , Cid int, ReqID int, FOREIGN KEY (Iqama, Cid) REFERENCES Users(Iqama, ID), PRIMARY KEY (Cid, Iqama, ReqID) ); 我还创建了下面的表,它是tableRequest的多值属性,但是我得到了一个
Request
,它有一个由三列组成的主键,还有一个外键
CREATE TABLE Request
(
Iqama varchar(255) ,
Cid int,
ReqID int,
FOREIGN KEY (Iqama, Cid) REFERENCES Users(Iqama, ID),
PRIMARY KEY (Cid, Iqama, ReqID)
);
我还创建了下面的表,它是tableRequest
的多值属性,但是我得到了一个错误
Msg 1776,第16级,状态0,第51行引用的表“Request”中没有与外键“FK__Request_Services__151B244E”中的引用列列表匹配的主键或候选键 Msg 1750,第16级,状态1,第51行
无法创建约束或索引。请参阅前面的错误 下表:
CREATE TABLE Request_Services_chosen
(
Iqama varchar(255) ,
Cid int,
ReqId_ int,
Servicechosen varchar(255),
FOREIGN KEY (ReqId_, Iqama, Cid) REFERENCES Request(ReqID, Iqama, Cid),
PRIMARY KEY (ReqId_, Iqama, Cid, Servicechosen)
);
下面是用户
表:
CREATE TABLE Users
(
ID int NOT NULL,
Iqama varchar(255) NOT NULL,
Name varchar(255),
Password varchar(255),
Phone varchar(255),
PRIMARY KEY (Iqama, ID)
);
请求
中的主键定义为(cid、iqama、reqid)
,但在您选择的请求服务中的参考
子句中,您使用(reqid、iqama、cid)
。那是错误的顺序
使用相同的顺序
CREATE TABLE Request_Services_chosen(
...
FOREIGN KEY (Cid,Iqama,ReqId_) REFERENCES Request(Cid,Iqama,ReqID),
...
);
请求
中的主键定义为(cid、iqama、reqid)
,但在您选择的请求服务中的参考
子句中,您使用(reqid、iqama、cid)
。那是错误的顺序
使用相同的顺序
CREATE TABLE Request_Services_chosen(
...
FOREIGN KEY (Cid,Iqama,ReqId_) REFERENCES Request(Cid,Iqama,ReqID),
...
);
我肯定这不是MySQL。但是-您应该使用与引用的主键相同的列顺序。如果“Iqama varchar(255)”作为主键的选择真的很糟糕。我认为当数据以千计时,您不会从该索引中获得太多好处。我确信这不是MySQL。但是,您应该使用与引用的主键相同的列顺序。如果“Iqama varchar(255)”真的是主键的一个非常糟糕的选择。我认为当数据以千为单位时,您以后不会从该索引中获得太多好处。