Re: 'image' table with relationships to different objects
От | Richard Huxton |
---|---|
Тема | Re: 'image' table with relationships to different objects |
Дата | |
Msg-id | 4B714E12.1090207@archonet.com обсуждение исходный текст |
Ответ на | 'image' table with relationships to different objects (Louis-David Mitterrand <vindex+lists-pgsql-sql@apartia.org>) |
Ответы |
Re: 'image' table with relationships to different objects
Re: 'image' table with relationships to different objects Re: 'image' table with relationships to different objects |
Список | pgsql-sql |
On 09/02/10 07:49, Louis-David Mitterrand wrote: > Hello, > > In my database I have different object types (person, location, event, > etc.) all of which can have several images attached. > > What is the best way to manage a single 'image' table with relationships > to (potentially) many different object types while keeping referrential > integrity (foreign keys)? The "clean" way to do this would be with a number of joining tables: images (img_id, file_name, title ...) persons (psn_id, first_name, last_name, ...) locations (loc_id, loc_name, lat, lon, ...) events (evt_id, evt_name, starts_on, ends_on, ...) person_images (psn_id, img_id) location_images (loc_id, img_id) event_images (evt_id, img_id) You might then want a view over these joining tables to see what images go where... CREATE VIEW all_images AS SELECT i1.img_id, i1.file_name, 'PERSON'::text AS link_type, p.first_name || ' ' || p.last_name AS linked_name FROM images i1 JOIN person_images pi ON i1.img_id = pi.img_id JOIN persons p ON pi.psn_id = p.psn_id UNION ALL SELECT i2.img_id, i2.file_name, 'LOCATION'::text AS link_type, l.loc_name AS linked_name FROM images i2 JOIN location_images li ON i2.img_id = li.img_id JOIN locations l ON li.loc_id = l.loc_id ... You could do something clever with inheritance on the joining tables, but it's better to keep things simple imho. -- Richard Huxton Archonet Ltd
В списке pgsql-sql по дате отправления: