【发布时间】:2015-11-13 13:30:04
【问题描述】:
我正在尝试链接这两个表,但收到错误消息:
没有唯一约束匹配被引用表“accomplices”的给定键。
注意Robberies 是另一个表。
我用它来创建 Accomplices 表(这是发生错误的时候):
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)
);
然后创建 Robbers 表:
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 表中主键的所有组件?
【问题讨论】:
-
确保您首先创建的表没有引用。如果都有引用,则需要创建一个没有引用的引用,然后添加。有时此问题与缺少表有关
-
您好,我一直在按顺序创建表,除非它们已经创建了父表,否则不会使用外键创建表,所以我认为这不是问题
-
太棒了!好的,接下来检查postgresql.org/docs/8.3/static/… ...您的同谋表包含所有 RobberID 的正确吗?我的意思是,如果您在 robbers 表中提供了一个并且它不存在于非法的共犯中
-
是的,他们应该这样做,因为 RobberID 是 Accomplices 表中的主键
-
了解,但请注意。从 Robbers 中删除您的外键约束。应该管用。这是因为 Robbers ID 可能会尝试使用不在 Accomplices 中的 ID
标签: sql postgresql database-design foreign-keys