Foreign_Key引用Composite Primary_Key的一部分

问题描述 投票:1回答:1

我有三个表如下:

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'中的引用列列表匹配的主键或候选键

我知道这是因为PostalCodePostalCode表中复合PK的一部分 - 我该如何解决这个问题?

sql sql-server foreign-keys composite-primary-key
1个回答
3
投票

你不能仅引用主键的一部分 - 它是一个全有或全无的选择,没有中间立场:要么你引用WHOLE主键(在外键中使用PostalCodeCountryCode),如下所示:

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

或者你根本不参考PostalCode表。

© www.soinside.com 2019 - 2024. All rights reserved.