Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 引用表中没有主键或候选键_Sql_Sql Server_Database - Fatal编程技术网

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)
);
我还创建了下面的表,它是table
Request
的多值属性,但是我得到了一个错误

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)”真的是主键的一个非常糟糕的选择。我认为当数据以千为单位时,您以后不会从该索引中获得太多好处。