Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No unique constraint matching given keys for referenced table

Tags:

sql

postgresql

I have a date_dimension table definition:

CREATE TABLE date_dimension
(
  id integer primary key,
  date text,
  year double precision,
  year_for_week double precision,
  quarter double precision
);

I am trying to create a fact table that fails

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

The error is :

ERROR:  there is no unique constraint matching given keys for referenced 
table "date_dimension"

SQL state: 42830 

I am not sure how to fix this.

like image 641
daydreamer Avatar asked Nov 29 '11 20:11

daydreamer


2 Answers

The error tells you the problem: You don't have a unique constraint on date_dimension that matches your foreign key constraint.

However, this leads to the bigger design problem: Your foreign key relationship doesn't make any sense.

You could possibly solve your "problem" with:

CREATE UNIQUE INDEX date_dimension(id,id);

But that's dumb, because id is always the same. It could also be expressed as:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);

Then getting rid of the effective_date column, which would always be identical to evaluation_date in your example.

Or... you probably really want two FK relationships:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
FOREIGN KEY (effective_date) REFERENCES date_dimension(id);
like image 147
Flimzy Avatar answered Sep 16 '22 15:09

Flimzy


I think you are looking for two separate foreign keys:

foreign key (evaluation_date) references date_dimension(id),
foreign key (effective_date) references date_dimension(id)
like image 27
Mark Byers Avatar answered Sep 17 '22 15:09

Mark Byers