我有三张表如下:
Encodable
我很容易在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
我收到错误消息:
引用的表'PostalCodes'中没有主键或候选键与外键'FK_PostalCode'中的引用列列表匹配
我知道这是因为ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode) REFERENCES PostalCode(PostalCode);
是PostalCode
表中复合PK的一部分 - 我该如何解决这个问题?
答案 0 :(得分:3)
CAN NOT 仅引用主键的一部分 - 它是全部或全部选项,没有中间立场:要么引用< strong> WHOLE 主键(在外键中使用PostalCode
和 CountryCode
),如下所示:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode, CountryCode) REFERENCES PostalCode(PostalCode, CountryCode);
或者你不要完全引用PostalCode
表。