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

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

答案

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

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

或者你根本不参考PostalCode表。

以上是关于Foreign_Key引用Composite Primary_Key的一部分的主要内容,如果未能解决你的问题,请参考以下文章

组合模式(Composite)

sql 删除对FOREIGN_KEY的支票

sql sql__foreign_key.sql

Rails 迁移重命名索引和foreign_key 列

mysql --外键约束-foreign_key

Rails 活动记录中的自引用问题