【发布时间】:2017-12-22 18:51:08
【问题描述】:
我有如下三张表:
Country
{
CountryCode Char(3) NOT NULL PRIMARY KEY,
CountryName VARCHAR(50)
}
PostalCode
{
PostalCode VARCHAR(10),
CountryCode Char(3),
CONSTRAINT PK_PostalCode
PRIMARY KEY (PostalCode,CountryCode)
}
Ticket
{
TicketID INT NOT NULL PRIMARY KEY,
PostalCode VARCHAR(10),
CountryCode Char(3)
}
我可以轻松地将Ticket 表中的CountryCode 设为Country 表的外键引用:
ALTER TABLE Ticket
ADD CONSTRAINT FK_CountryCode
FOREIGN KEY (CountryCode) REFERENCES Country(CountryCode);
但是当我尝试在Ticket 表中设置PostalCode 作为对PostalCode 表的外键引用时:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode) REFERENCES PostalCode(PostalCode);
我收到一条错误消息:
引用表“PostalCodes”中没有与外键“FK_PostalCode”中的引用列列表匹配的主键或候选键
我知道这是因为 PostalCode 是 PostalCode 表中复合 PK 的一部分 - 我该如何解决这个问题?
【问题讨论】:
-
对不起,我忘了放在这里,我会相应地编辑帖子
-
如果您可以在 PostalCode 中添加 'Unique' 和 'Not Null' 约束,那么它可以用作候选键,否则您不能在该列上有 FK。
-
你需要做
FOREIGN KEY (PostalCode,CountryCode) REFERENCES PostalCode(PostalCode,CountryCode);
标签: sql sql-server foreign-keys composite-primary-key