Foreign_Key 引用 Composite 的一部分 Primary_Key
Foreign_Key reference to part of Composite Primary_Key
我有3个table如下:
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)
}
我很容易在 Ticket
table 中使 CountryCode
成为对 Country
table:
的外键引用
ALTER TABLE Ticket
ADD CONSTRAINT FK_CountryCode
FOREIGN KEY (CountryCode) REFERENCES Country(CountryCode);
但是当我尝试将 Ticket
table 中的 PostalCode
设置为 PostalCode
的外键引用时 table:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode) REFERENCES PostalCode(PostalCode);
我收到一条错误消息:
There are no primary or candidate keys in the referenced table 'PostalCodes' that match the referencing column list in the foreign key 'FK_PostalCode'
我知道这是因为 PostalCode
是 PostalCode
中复合 PK 的一部分 table - 我该如何解决这个问题?
您 不能 仅引用主键的一部分 - 它是全有或全无没有中间立场的选择:要么你引用 WHOLE 主键(通过同时使用 PostalCode
和 CountryCode
在你的外键中)像这样:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode, CountryCode) REFERENCES PostalCode(PostalCode, CountryCode);
或者您 根本不 引用 PostalCode
table。
我有3个table如下:
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)
}
我很容易在 Ticket
table 中使 CountryCode
成为对 Country
table:
ALTER TABLE Ticket
ADD CONSTRAINT FK_CountryCode
FOREIGN KEY (CountryCode) REFERENCES Country(CountryCode);
但是当我尝试将 Ticket
table 中的 PostalCode
设置为 PostalCode
的外键引用时 table:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode) REFERENCES PostalCode(PostalCode);
我收到一条错误消息:
There are no primary or candidate keys in the referenced table 'PostalCodes' that match the referencing column list in the foreign key 'FK_PostalCode'
我知道这是因为 PostalCode
是 PostalCode
中复合 PK 的一部分 table - 我该如何解决这个问题?
您 不能 仅引用主键的一部分 - 它是全有或全无没有中间立场的选择:要么你引用 WHOLE 主键(通过同时使用 PostalCode
和 CountryCode
在你的外键中)像这样:
ALTER TABLE Ticket
ADD CONSTRAINT FK_PostalCode
FOREIGN KEY (PostalCode, CountryCode) REFERENCES PostalCode(PostalCode, CountryCode);
或者您 根本不 引用 PostalCode
table。