Re: problem with parent/child table and FKs

From: Karsten Hilbert <Karsten(dot)Hilbert(at)gmx(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: problem with parent/child table and FKs
Date: 2011-04-21 18:03:55
Message-ID: 20110421180355.GH3294@hermes.hilbert.loc
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Thu, Apr 21, 2011 at 07:53:04AM -0700, Adrian Klaver wrote:

> On Thursday, April 21, 2011 4:36:51 am Karsten Hilbert wrote:
> > Does anyone have any suggestions regarding the below ?
>
> The only thing I can come up with is to eliminate the FK :
> fk_code integer not null
> references code_root(pk_code_root)
> on update restrict
> on delete restrict
> on lnk_codes2epi and replace it with a trigger that essentially does the same
> thing ; check for presence of pk_code_root.

I feared as much. I hoped to get around that somehow but
what you suggest doesn't sound half bad, actually.

I had been thinking to do the typical master-detail tables
for the coding systems instead of the inheritance:

table generic_code
pk serial primary key
code
term
system

table icd10
pk serial primary key
fk_generic_code
references generic_code(pk)
icd10_extra_field

table icd9
pk serial primary key
fk_generic_code
references generic_code(pk)
icd9_extra_field

table disease
pk serial primary key
description

table lnk_code2disease
pk serial primary key
fk_generic_code
references generic_code(pk)
fk_disease
references disease(pk)

But then I'd have to write even more triggers making sure
that rows in, say, the icd10 table don't link to rows in the
generic_code table whose .system <> 'icd10'.

I can't put the .system column into the icd10/icd9/...
tables either because I need that column in generic_code to
ensure:

unique(code, system)

Sheesh :-)

I suppose my underlying problem is that PostgreSQL's
inheritance is not intended to support polymorphism which is
what I seem to be trying to do - link diseases to
polymorphic code tables.

I can't easily think of a better relational solution,
though. The real world requirement for polymorphism is
surely there.

I guess I'll go with your solution unless someone comes up
with a better idea yet.

Karsten
--
GPG key ID E4071346 @ gpg-keyserver.de
E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Greg Smith 2011-04-21 18:07:24 Re: Poor performance of btrfs with Postgresql
Previous Message hubert depesz lubaczewski 2011-04-21 17:58:54 Re: How to realize ROW_NUMBER() in 8.3?