Re: Problem with n to n relation - Mailing list pgsql-sql

From Stephan Szabo
Subject Re: Problem with n to n relation
Date
Msg-id Pine.BSF.4.21.0110080902170.77847-100000@megazone23.bigpanda.com
Whole thread Raw
In response to Re: Problem with n to n relation  (Janning Vygen <vygen@planwerk6.de>)
Responses Re: Problem with n to n relation  (Janning Vygen <vygen@planwerk6.de>)
List pgsql-sql
On Mon, 8 Oct 2001, Janning Vygen wrote:

> Am Freitag,  5. Oktober 2001 14:30 schrieb Morgan Curley:
> > just get rid of the serial_id in person2adress -- there is no
> > reason for it. Make the pk of that table a composite --> person_id,
> > address_id <-- that way you have added some additional integrity to
> > your structure. Only one record can exist ffor a given person at a
> > given address. However any person can have any number of address
> > and any address can have any number of people living at it.
> 
> ok fine, i understood it after i figured out what pk means :-)
> 
> but how do i reach my goal. It should not be allowed to have a person 
> without any address??

Hmm, do you always have at least one known address at the time you're
inserting the person?

I can think of a few somewhat complicated ways.  Person getting a column
that references person2adress with initially deferred, the problem
here is that you don't know one of the tables' serial values unless
you're selecting it yourself which would mean you'd have to change
how you were getting your incrementing numbers (getting currval of
some sequence presumably and using that to insert into person2adress).  

You could probably also make your own deferred constraint trigger
(although I'm not sure that it's documented since I don't think it was
really meant as a user feature) which does the check at the end of any
transaction in which rows were inserted into person.

> > At 12:39 PM 10/5/2001 +0200, Janning Vygen wrote:
> 
> > >create table person (
> > >  id    serial,
> > >  name  text
> > >);
> > >
> > >create table address (
> > >  id     serial,
> > >  street text
> > >  ...
> > >);
> > >
> > >create table person2adress (
> > >  id         serial,
> > >  person_id  integer not null references person(id),
> > >  address_id integer not null references address(id),
> > >);
> > >
> > >than i can select all adresses from one person with id =1 with
> > >select street
> > >from address
> > >where id =
> > >  (
> > >     select adress_id
> > >     from person2adress
> > >     where person_id = 1
> > >  );
> > >
> > >ok so far so good. but you can still insert persons without any
> > >adress. so its a 0..n relation. But how van i achieve that you
> > > can�t insert any person without adress???



pgsql-sql by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: temporary views
Next
From: Janning Vygen
Date:
Subject: Re: Problem with n to n relation