Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 外键到主键的一部分';s表_Sql Server - Fatal编程技术网

Sql server 外键到主键的一部分';s表

Sql server 外键到主键的一部分';s表,sql-server,Sql Server,我有一个数据库,其中包含此表转换和客户机我想在这些表之间创建关系,因此ID\u在客户机中发送转换对ID的引用,而ID\u在转换中接收对客户机中ID的引用 create table Conversion(ID_Send int , ID_Receive int , [Time] datetime, [Message] varchar(2048),

我有一个数据库,其中包含此表转换客户机我想在这些表之间创建关系
,因此ID\u在客户机中发送转换对ID的引用,而ID\u在转换中接收客户机中ID的引用

create table Conversion(ID_Send int ,
                        ID_Receive int ,
                        [Time] datetime,
                        [Message] varchar(2048),
                        primary key(ID_Send,ID_Receive,[Time])
                        )

create table Client (ID int IDENTITY(1,1) primary key,
                    [First name] varchar(500) not null,
                    [Last Name]varchar(500) not null,
                    [Birth day] datetime,
                    Gender bit not null,
                    Country  varchar(200)not null,
                    City varchar(200) ,
                    [Language] varchar(200)not null, 
                    [Chat name] varchar(500)not null ,
                    [Password] varchar (500)not null,
                    --foreign key(ID) REFERENCES Conversion (ID_Send)--there is an error 
                    ) 

如果您有一个复合主键(由多个列组成),那么所有外键也必须使用主键的所有列来引用该表

毕竟:除此之外,您如何能够从子表到父表进行清晰、确定的引用?只有使用唯一标识父表中一行的列才能执行此操作

唯一的解决方法是在父表中的
ID\u Send
ID\u Receive
列上放置唯一索引,然后引用该唯一索引


但是问题是:如果这些值是唯一的-为什么这些列中的一列不单独是主键???

如果您有一个复合主键(由多个列组成),那么所有外键也必须使用PK的所有列来引用该表

毕竟:除此之外,您如何能够从子表到父表进行清晰、确定的引用?只有使用唯一标识父表中一行的列才能执行此操作

唯一的解决方法是在父表中的
ID\u Send
ID\u Receive
列上放置唯一索引,然后引用该唯一索引


但问题是:如果这些值是唯一的-为什么这些列中的一列不是唯一的主键???

Motazz,在一个表中只能有一个主键,就像在客户端表中一样。要消除此错误,请执行以下操作:

首先创建客户机表, 第二,将转换代码替换为:

create table Conversion(ID_Send int FOREIGN KEY REFERENCES Client(ID),
                    ID_Receive int FOREIGN KEY REFERENCES Client(ID),
                    [Time] datetime,
                    [Message] varchar(2048),
                    primary key(ID_Send,ID_Receive,[Time])
                    )

Motazz,在一个表中只能有一个主键,就像在客户机表中一样。要消除此错误,请执行以下操作:

首先创建客户机表, 第二,将转换代码替换为:

create table Conversion(ID_Send int FOREIGN KEY REFERENCES Client(ID),
                    ID_Receive int FOREIGN KEY REFERENCES Client(ID),
                    [Time] datetime,
                    [Message] varchar(2048),
                    primary key(ID_Send,ID_Receive,[Time])
                    )

…同意这一点,但您似乎暗示OP需要删除表,并以正确的顺序重新创建它们,仅仅是为了添加他们第一次没有添加的外键约束。相反,他们可以简单地使用
altertable。。。添加约束
语句来执行此任务。同意这一点,除非您似乎暗示OP需要删除表并以正确的顺序重新创建它们,只为了添加他们第一次没有添加的外键约束。相反,他们可以简单地使用
altertable。。。添加约束
语句以执行作业。