Foreign_Key引用Composite Primary_Key的一部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Foreign_Key引用Composite Primary_Key的一部分相关的知识,希望对你有一定的参考价值。
我有三个表如下:
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)
}
我很容易在CountryCode
表中使Ticket
成为Country
表的外键引用:
ALTER TABLE Ticket
ADD CONSTRAINT FK_CountryCode
FOREIGN KEY (CountryCode) REFERENCES Country(CountryCode);
但是当我尝试在PostalCode
表中设置Ticket
作为PostalCode
表的外键引用时:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode) REFERENCES PostalCode(PostalCode);
我收到一条错误消息:
引用的表'PostalCodes'中没有与外键'FK_PostalCode'中的引用列列表匹配的主键或候选键
我知道这是因为PostalCode
是PostalCode
表中复合PK的一部分 - 我该如何解决这个问题?
答案
你不能仅引用主键的一部分 - 它是一个全有或全无的选择,没有中间立场:要么你引用WHOLE主键(在外键中使用PostalCode
和CountryCode
),如下所示:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode, CountryCode) REFERENCES PostalCode(PostalCode, CountryCode);
或者你根本不参考PostalCode
表。
以上是关于Foreign_Key引用Composite Primary_Key的一部分的主要内容,如果未能解决你的问题,请参考以下文章