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。。。添加约束
语句以执行作业。