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

Sql 没有与引用表的给定键匹配的唯一约束,sql,postgresql,Sql,Postgresql,我有一个date\u维度表定义: CREATE TABLE date_dimension ( id integer primary key, date text, year double precision, year_for_week double precision, quarter double precision ); 我试图创建一个失败的事实表 create table fact ( id serial primary key, contract int

我有一个
date\u维度
表定义:

CREATE TABLE date_dimension
(
  id integer primary key,
  date text,
  year double precision,
  year_for_week double precision,
  quarter double precision
);
我试图创建一个失败的
事实

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 

我不知道如何修复此问题。

我想您正在寻找两个单独的外键:

foreign key (evaluation_date) references date_dimension(id),
foreign key (effective_date) references date_dimension(id)

错误告诉您问题所在:在
date\u维度上没有与外键约束匹配的唯一约束

然而,这导致了更大的设计问题:外键关系没有任何意义

您可以通过以下方式解决您的“问题”:

但这很愚蠢,因为
id
总是一样的。也可以表示为:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
然后去掉
effective\u date
列,该列始终与示例中的
evaluation\u date
相同

或者。。。您可能真的需要两个FK关系:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
FOREIGN KEY (effective_date) REFERENCES date_dimension(id);

您是否只想创建两个单独的日期维度外键引用,如下所示:

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

我有这个错误,无法进行约束,因为该表中有重复的行。显然,外键不是我想要的,但我想要一个约束:“存在于这个表中”,这是可能的吗?@isaaclw:有很多方法可以做到这一点,但它们通常不是很漂亮。你应该问另一个问题(或者搜索——我相信这里已经有人问过了)。
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)
);