Foreign_Key引用Composite Primary_Key的一部分

时间:2017-12-22 18:51:08

标签: sql sql-server foreign-keys composite-primary-key

我有三张表如下:

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) } 表中CountryCodeTicket表的外键引用:

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的一部分 - 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

CAN NOT 仅引用主键的一部分 - 它是全部或全部选项,没有中间立场:要么引用< strong> WHOLE 主键(在外键中使用PostalCode CountryCode),如下所示:

ALTER TABLE Ticket 
ADD CONSTRAINT FK_PostalCode
    FOREIGN KEY (PostalCode, CountryCode) REFERENCES PostalCode(PostalCode, CountryCode);

或者你不要完全引用PostalCode表。