[英]No unique constraint matching given keys for referenced table with multiple primary keys
我正在尝试链接这两个表,但收到错误:
没有与引用表“帮凶”的给定键匹配的唯一约束。
注意Robberies
是另一张桌子。
我用它来创建“共犯”表(这是发生错误的时间):
CREATE TABLE info.Accomplices (
RobberID INTEGER,
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Share DECIMAL NOT NULL,
PRIMARY KEY(RobberID, BankName, City, RobberyDate),
FOREIGN KEY(BankName, City, RobberyDate)
REFERENCES info.Robberies(BankName, City, RobberyDate)
);
并以此创建强盗表:
CREATE TABLE info.Robbers (
RobberID INTEGER,
Nickname VARCHAR,
Age INTEGER,
NoYears INTEGER,
PRIMARY KEY(RobberID),
FOREIGN KEY(RobberID) REFERENCES info.Accomplices(RobberID),
CONSTRAINT AgeCheck CHECK (Age > NoYears)
);
Robbers
表中的外键是否需要匹配构成Accomplices
表中的主键的所有组件?
强盗表中的外键是否需要匹配构成共犯表中的主键的所有组件?
不完全是。 它不一定是PK。 FK约束要求在引用表的(一组)列上具有任何 UNIQUE
或PRIMARY KEY
约束。 如果不是唯一的,则FK无法引用它。 从理论上讲,您可以向accomplices
添加UNIQUE
约束:
CREATE TABLE info.Accomplices (
robberid integer,
bankname varchar,
city varchar,
robberydate date,
share decimal not null,
PRIMARY KEY(robberid, bankname, city, robberydate),
UNIQUE(robberid),
FOREIGN KEY ...
);
从设计的角度来看,这没有什么意义,但是它显示了robbers
给定FK约束的要求。
我怀疑您的数据库设计存在逻辑问题。
有关:
CREATE TABLE info.Robberies (
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Amount DECIMAL NOT NULL,
PRIMARY KEY(BankName, City, RobberyDate),
FOREIGN KEY(BankName, City) REFERENCES info.Banks(BankName, City)
);
CREATE TABLE info.Robbers (
RobberID INTEGER,
Nickname VARCHAR,
Age INTEGER,
NoYears INTEGER,
PRIMARY KEY(RobberID),
--FOREIGN KEY(RobberID) REFERENCES info.Accomplices(RobberID),
CONSTRAINT AgeCheck CHECK (Age > NoYears)
);
CREATE TABLE info.Accomplices (
RobberID INTEGER,
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Share DECIMAL NOT NULL,
PRIMARY KEY(RobberID, BankName, City, RobberyDate),
FOREIGN KEY(RobberID) references info.Robbers(RobberID),
FOREIGN KEY(BankName, City, RobberyDate) REFERENCES
info.Robberies(BankName, City, RobberyDate)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.