| From: | Gary Stainburn <gary(dot)stainburn(at)ringways(dot)co(dot)uk> |
|---|---|
| To: | pgsql-sql(at)postgresql(dot)org |
| Subject: | foreign keys and lots of tables |
| Date: | 2011-05-18 19:10:19 |
| Message-ID: | 201105182010.19753.gary.stainburn@ringways.co.uk |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
I have the following tables (individual seat allocation removed to make it
simpler)
create table coaches ( -- carriages
c_id serial primary key,
c_name varchar(20) not null
);
create table trains ( -- one for each train
t_id serial primary key
);
create table train_coaches ( -- which carriages are on what trains
t_id int4 not null references trains(t_id),
c_id int4 not null references coaches(c_id)
);
I now want to create bookings and allocate seats, but the seat must exist on
the coach_seats table *AND* only for a carriage included in the train, i.e.
an entry in train_coaches.
create table bookings (
b_id serial primary key,
t_id int4 not null references trains(t_id)
);
create table booking_seats (
b_id int4 not null references bookings(b_id),
c_id int4, -- carriage ID
c_seat varchar(10) -- seat label
);
The following ensures the seat exists on the coach. (not shown)
alter table booking_seats add constraint seat_exists
foreign key (c_id, c_seat) references coach_seats (c_id,c_seat);
How would I ensure that the coach exists on the train. I would need to convert
the b_id to a t_id using the bookings table and I don't know how.
To complicate things, when the initial booking is made, bot c_id and c_seat
are NULL. Will this make any difference?
Gary
--
Gary Stainburn
Group I.T. Manager
Ringways Garages
http://www.ringways.co.uk
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Emi Lu | 2011-05-18 20:20:44 | column type for pdf file |
| Previous Message | Seb | 2011-05-18 04:23:38 | enum data type vs table |