创建外键FK_Review_Review_ID时触发Msg1750错误,求排查解决
问题根源&解决方案
嘿,这个错误我太熟悉了!你碰到的Msg 1750问题,核心原因很明确:
你要创建的外键
FK_Review_Review_ID只引用了Reviewers表的Review_ID列,但Reviewers的主键是复合主键(Reviewer_ID, Review_ID)——单一的Review_ID并不是这张表的主键,也没有唯一约束,不符合外键的引用规则。
SQL对外键的要求很严格:被引用的列必须是被引用表的主键,或者是带有唯一约束的候选键。而你的Reviewers表里,只有Reviewer_ID+Review_ID的组合才能唯一标识一行数据,单独的Review_ID做不到,所以数据库直接拒绝创建这个外键。
两种解决办法,看你业务需求选:
办法1:把外键改成引用复合主键的全部列
如果你的业务逻辑是:Review表的每一条记录,需要关联到Reviewers里特定评论者+特定评论的组合,那你得这么改:
- 先给
Review表补上Reviewer_ID列(因为现在这张表没有这个字段):
ALTER TABLE Review ADD Reviewer_ID INT NOT NULL; GO
- 删除之前报错的外键(如果已经尝试创建过的话),再创建复合外键:
ALTER TABLE Review DROP CONSTRAINT IF EXISTS FK_Review_Review_ID; GO ALTER TABLE Review ADD CONSTRAINT FK_Review_Reviewer_Review FOREIGN KEY (Reviewer_ID, Review_ID) REFERENCES Reviewers (Reviewer_ID, Review_ID); GO
办法2:给Reviewers的Review_ID加唯一约束
如果你的业务里Review_ID本身就是全局唯一的(不需要和Reviewer_ID组合就能确定一条评论),那更简单:给Review_ID加个唯一约束,让它成为候选键,这样就能被外键引用了:
ALTER TABLE Reviewers ADD CONSTRAINT UQ_Reviewers_Review_ID UNIQUE (Review_ID); GO -- 现在再创建外键就没问题了 ALTER TABLE Review ADD CONSTRAINT FK_Review_Review_ID FOREIGN KEY (Review_ID) REFERENCES Reviewers (Review_ID); GO
小提醒
设计表结构的时候,外键的引用关系一定要和被引用表的主键/唯一约束对齐——复合主键对应的外键也必须是复合列,不然肯定会踩这类坑~
内容的提问来源于stack exchange,提问作者Judge15
相关产品推荐
相关产品推荐

