没有唯一约束匹配给定引用表的键

时间:2011-11-29 20:05:30

标签: sql postgresql

我有一个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 

我不知道如何解决这个问题。

3 个答案:

答案 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)
);