From: | Janning Vygen <vygen(at)planwerk6(dot)de> |
---|---|
To: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Problem with n to n relation |
Date: | 2001-10-08 17:17:05 |
Message-ID: | 0110081917050A.21592@janning |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Am Montag, 8. Oktober 2001 18:09 schrieb Stephan Szabo:
> On Mon, 8 Oct 2001, Janning Vygen wrote:
>
> > 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).
yeah, thats a way which works. dont know if its cool to do it like
this, but you cant insert a person without any address. so you are
forced to use a transaction.
create table person (
id serial,
name text
);
create table address (
id serial,
street text NOT NULL
);
create table person2address (
id int4,
address_id int4 NOT NULL REFERENCES address (id),
person_id int4 NOT NULL REFERENCES person (id)
);
ALTER TABLE person ADD CONSTRAINT person_has_adress FOREIGN KEY (id)
REFERENCES person2address(id) DEFERRABLE INITIALLY DEFERRED;
begin;
insert into person (name) values ('janning');
insert into address (street) values ('Sesamestreet');
insert into person2address values(1,1,1);
commit;
> 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),
> > > >);
> > > >
--
Planwerk 6 /websolutions
Herzogstrae 86
40215 Dsseldorf
fon 0211-6015919
fax 0211-6015917
http://www.planwerk6.de
From | Date | Subject | |
---|---|---|---|
Next Message | Stephan Szabo | 2001-10-08 17:33:01 | Re: Problem with n to n relation |
Previous Message | Haller Christoph | 2001-10-08 16:45:36 | Re: How to Return Unique Elements From An Array? |