SQL Server表创建错误:引用中没有主要或候选密钥



一个非常基本的脚本使我发疯。它说它找不到引用的键。不知道这是怎么回事。我正在使用SQL Server 2014,此脚本是为了创建我的数据库表。我正在尝试在表TABLE_2中进行id_TABLE_1参考表TABLE_1的ID。

CREATE TABLE TABLE_1
(
    id int identity,
    email varchar(50) not null,
    constraint PK_TABLE_1 primary key (id,email)
)
GO
CREATE TABLE TABLE_2
(
    id int identity,
    id_TABLE_1 int not null,
         
    constraint PK_TABLE_2 primary key (id),
    constraint FK_TABLE_2 foreign key (id_TABLE_1) 
        references TABLE_1(id) on delete cascade
)
GO

错误是:

msg 1776,级别16,状态0,行32
参考表'表_1'中没有主键或候选键,与外键'fk_table_2'中的参考列列表匹配。

msg 1750,级别16,状态0,行32
无法创建约束或索引。请参阅以前的错误。

您可以在这里帮我吗?

根据注释,您正在尝试引用不存在的索引。TABLE_1表上的主要键是一个复合键,包含两列:idemail

为此,您可以将主键更改为:

CONSTRAINT PK_TABLE_1 PRIMARY KEY (id)

或仅在id列上创建新索引:

CREATE INDEX IX_TABLE_1_id ON TABLE_1 (id);

拥有包含身份列的复合主键是没有意义的。ID列已经是唯一的,因此应该是主要键。

如果您希望电子邮件也是唯一的,请从主键中删除它并将其声明为唯一。

最新更新