2

我有一个包含此表的数据库ConversionClient我想在这些表之间创建关系,
因此 ID_Send 在转换参考到客户端
中的 ID和 ID_Receive 在转换参考到客户端中的 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 
                    ) 
4

2 回答 2

2

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

毕竟:您还能如何从子表到父表的明确、确定性的引用?仅当您使用唯一标识父表中的一行的列时,此操作才有效。

ID_Send唯一的解决方法是在父表中的和列上放置一个唯一索引ID_Receive,然后引用该唯一索引。

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

于 2012-08-20T04:41:28.820 回答
2

Motazz,表中只能有一个主键,就像您在 Client 表中一样。摆脱错误:

第一次创建客户表,第二次将转换代码替换为:

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])
                    )
于 2012-08-20T04:45:33.327 回答