Thread: Foreign Key Question

Foreign Key Question

From
Tuan Luu
Date:
Example:

Table 1:
Inventory, Productnr, Productserial
(PK Inventory, Prouctnr)

Table 2:
Pruductnr, Produktdesc, Productversion
(PK Productnr; FK Productnr)

This Construct gives me an error during the creation in Postgresql
(saying there is no unique constraint matching given keys for referenced
table xxxx). The Primary Key in table 1 consists of two columns. In the
second table there is a foreign key refencing to the first table.

A unique constraint doesn't make sense on table one. Am I missing
something here?
Thanks for any answer
Tuan

Re: Foreign Key Question

From
Stephan Szabo
Date:
On Mon, 9 Feb 2004, Tuan Luu wrote:

> Example:
>
> Table 1:
> Inventory, Productnr, Productserial
> (PK Inventory, Prouctnr)
>
> Table 2:
> Pruductnr, Produktdesc, Productversion
> (PK Productnr; FK Productnr)
>
> This Construct gives me an error during the creation in Postgresql
> (saying there is no unique constraint matching given keys for referenced
> table xxxx). The Primary Key in table 1 consists of two columns. In the
> second table there is a foreign key refencing to the first table.
>
> A unique constraint doesn't make sense on table one. Am I missing
> something here?

What are the semantics you are looking for?  Foreign keys only can refer
to unique things, because except for a few odd cases involving nulls and
match partial, it's intended that one particular row is being referenced.
If there are multiple rows in table1 with a particular productnr, how do
you want a reference to that to act (esp in the case of delete or update
to table 1).

Re: Foreign Key Question

From
Bruno Wolff III
Date:
On Mon, Feb 09, 2004 at 08:59:12 +0100,
  Tuan Luu <tuanluu@gmx.ch> wrote:
> Example:
>
> Table 1:
> Inventory, Productnr, Productserial
> (PK Inventory, Prouctnr)
>
> Table 2:
> Pruductnr, Produktdesc, Productversion
> (PK Productnr; FK Productnr)
>
> This Construct gives me an error during the creation in Postgresql
> (saying there is no unique constraint matching given keys for referenced
> table xxxx). The Primary Key in table 1 consists of two columns. In the
> second table there is a foreign key refencing to the first table.
>
> A unique constraint doesn't make sense on table one. Am I missing
> something here?

Having typos in what you show us doesn't help.

Inventory, Productnr being unique does not imply Productnr is unique.
If Productnr in table 1 is unique, you should make a unique constraint
on it. If it isn't unique you can't use a foreign key reference and you
will need to write your own trigger functions to do whatever makes sense
for your problem.