我创造了一张这样的桌子:
CREATE TABLE festival
(
title text,
place text,
sdate date,
edate date,
PRIMARY KEY (title)
);
现在,我想创建另一个表,使用节日表中的“title”和“edate”。
CREATE TABLE event
(
title text,
edate date,
etime time,
FOREIGN KEY (title, edate) REFERENCES festival (title, edate),
PRIMARY KEY (title, edate, etime)
);
我发现一个错误:
对于引用的表“festival”,没有与给定键匹配的唯一约束
如果我只尝试将标题作为外键传递,那么它就可以工作,但是,如果我只尝试将edate作为外键传递,那么它就失败了(这意味着问题出于某种原因出现在“edate”中)。
为什么会这样?
最佳答案
外键关系应该链接到另一个表的主键。因此,在定义中不应该有edate
:
FOREIGN KEY (title) REFERENCES festival (title),
如果两个表应该是相同的,则没有理由在这两个表中重复
edate
。把它放在festival
中,然后用join
查找它。我也建议你把节日改成:
CREATE TABLE festival (
festivalId serial primary key,
title text unique,
place text,
sdate date,
edate date
);
也就是说,引入一个可用于外键关系的合成密钥。声明
title
是唯一的。然后使用festivalId
表中的events
获取标题和日期。注意:这假设
festival
上的主键应该只在title上。如果它在(title, edate)
上,基本上相同的逻辑成立。实际上,只需引入festivalId
并使用它来查找有关festival
的所有信息。关于sql - 尝试传递date类型的FOREIGN KEY会引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40359495/