[英]Creating a foreign key to compound primary key
我有两个表格- 教育人员和学院 :
CREATE TABLE [dbo].[Educators]
(
[UserId] [nvarchar](128) NOT NULL,
[FacultyId] [smallint] NOT NULL,
[InstitutionUserId] [nvarchar](128) NOT NULL,
CONSTRAINT [PK_Educators]
PRIMARY KEY CLUSTERED ([UserId] ASC)
)
CREATE TABLE [dbo].[Faculties]
(
[InstitutionUserId] [nvarchar](128) NOT NULL,
[FacultyId] [smallint] NOT NULL,
CONSTRAINT [PK_UserFaculties]
PRIMARY KEY CLUSTERED ([InstitutionUserId] ASC, [FacultyId] ASC)
)
表Faculties
具有由两列( InstitutionUserId
和FacultyId
)组成的复合主键。 我在Educators
表中也有相同的列。 我想将这两个表与一个外键链接在一起。
因此,这是我的查询:
ALTER TABLE [dbo].[Educators] WITH CHECK
ADD CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId]
FOREIGN KEY ([FacultyId], [InstitutionUserId])
REFERENCES [dbo].[Faculties] ([FacultyId], [InstitutionUserId])
但是我收到此错误消息:
消息1776,级别16,状态0,第7行
引用表'dbo.Faculties'中没有与外键'FK_Educators_FacultyId_Faculties_FacultyId'中的引用列列表匹配的主键或候选键。消息1750,第16级,状态1,第7行
无法创建约束或索引。 请参阅先前的错误。
如何解决这个问题呢?
您的表及其约束看起来很好。 我唯一看到的问题是主键中列的顺序
CONSTRAINT [PK_UserFaculties] PRIMARY KEY CLUSTERED
(
[InstitutionUserId] ASC,
[FacultyId] ASC
)
与您在外键约束中声明的顺序不同
ALTER TABLE [dbo].[Educators] WITH CHECK ADD CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId] FOREIGN KEY([FacultyId], [InstitutionUserId])
REFERENCES [dbo].[Faculties] ([FacultyId], [InstitutionUserId])
尝试像这样更改外键声明中的列顺序:
ALTER TABLE [dbo].[Educators] WITH CHECK ADD CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId] FOREIGN KEY([InstitutionUserId], [FacultyId])
REFERENCES [dbo].[Faculties] ([InstitutionUserId], [FacultyId])
密钥应与定义的顺序相同:
ALTER TABLE dbo.Educators
ADD CONSTRAINT FK_Educators_FacultyId_Faculties_FacultyId
FOREIGN KEY(InstitutionUserId, FacultyId)
REFERENCES dbo.Faculties(InstitutionUserId, FacultyId);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.