Re: Foreign keys on inherited attributes

From: Reece Hart <reece(at)in-machina(dot)com>
To: Shawn Harrison <harrison(at)tbc(dot)net>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Foreign keys on inherited attributes
Date: 2004-01-27 20:30:57
Message-ID: 1075235456.4062.29.camel@tallac
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, 2004-01-26 at 19:23, Shawn Harrison wrote:

> I'm using pg 7.3.5 and playing with table inheritance, and I've run into the
> fact that foreign keys cannot be defined on inherited attributes. (As much
> is stated in the documentation, but it didn't sink in until I ran into the
> fact.)

I have a similar problem and have two inelegant workarounds.

1) Use triggers which does the key check. I don't know of any simple way
to cascade deletes or updates.

2) Use inheritance to define the FK-containing tables as well, one for
each PK-containing table. The supertable of these is provides the
abstraction you sought.

Example:

I wanted a hierarchy of models of different types (each with
table-specific data) and heterogeneous sets of models, roughly like
this:
(if the word model is distracting, think instead of jobs and sets of
related job families, or some such analogy)

model modelA modelB modelC (model{A,B,C} ISA model)
mid(PK) mid(PK) mid(PK) mid(PK)
colA1 colB1 colC1

setmodel
mid(FK)
sid(FK)

set
sid(PK)
name

As you noted, making modelsetmodel.mid a FK of model.mid doesn't work
because the PK index is NOT inherited.
Instead, I have this:

model modelA modelB modelC (model{A,B,C} ISA model)
mid(PK) mid(PK) mid(PK) mid(PK)
colA1 colB1 colC1

setmodel setmodelA setmodelB setmodelC (setmodel{A,B,C} ISA setmodel)
mid(FK) mid(FK) mid(FK) mid(FK)
sid(FK) sid(FK) sid(FK) sid(FK)

set
sid(PK)
name

Of course, setmodelA.mid is now a FK of modelA.mid, and so on for B and
C. I can still select from setmodel to get the heterogeneous sets I
originally sought.

I hope that helps,
Reece

--
Reece Hart, http://www.in-machina.com/~reece/, GPG:0x25EC91A0

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Hadley Willan 2004-01-27 20:42:02 Re: Reloading Template1
Previous Message Marc G. Fournier 2004-01-27 20:20:15 Re: Looking for mail relays ...