我有一个date_dimension
表定义:
CREATE TABLE date_dimension
(
id integer primary key,
date text,
year double precision,
year_for_week double precision,
quarter double precision
);
我正在尝试创建一个失败的fact
表
create table fact (
id serial primary key,
contract integer,
component integer,
evaluation_date integer,
effective_date integer,
foreign key (evaluation_date, effective_date) references date_dimension(id, id)
);
错误是:
ERROR: there is no unique constraint matching given keys for referenced
table "date_dimension"
SQL state: 42830
我不知道如何解决这个问题。
答案 0 :(得分:15)
错误告诉您问题:您在date_dimension
上没有与您的外键约束匹配的唯一约束。
但是,这会导致更大的设计问题:您的外键关系没有任何意义。
你可以解决你的问题"用:
CREATE UNIQUE INDEX date_dimension(id,id);
但那是愚蠢的,因为id
总是一样的。它也可以表示为:
FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
然后删除effective_date
列,它在您的示例中始终与evaluation_date
相同。
或者......你可能真的想要两个FK关系:
FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
FOREIGN KEY (effective_date) REFERENCES date_dimension(id);
答案 1 :(得分:10)
我认为你正在寻找两个独立的外键:
foreign key (evaluation_date) references date_dimension(id),
foreign key (effective_date) references date_dimension(id)
答案 2 :(得分:2)
您不想创建两个对日期维度的单独外键引用,如下所示:
create table fact (
id serial primary key,
contract integer,
component integer,
evaluation_date integer,
effective_date integer,
foreign key (evaluation_date) references date_dimension(id),
foreign key (effective_date) references date_dimension(id)
);