2013-12-20 3 views
0

У меня есть таблица услуг:Как это сделать с помощью Postgres?

Column |   Type   |       Modifiers       
--------------+-----------------------+--------------------------------------------------------------- 
service_id | integer    | not null default nextval('services_service_id_seq'::regclass) 
service_name | character varying(40) | not null 

У меня также есть таблица подсервисы:

 Column  |   Type   |        Modifiers        
-----------------+-----------------------+--------------------------------------------------------------------- 
subservice_id | integer    | not null default nextval('subservices_subservice_id_seq'::regclass) 
subservice_name | character varying(40) | not null 

И, наконец, у меня есть присоединиться стол для 2, service_subservices:

Column  | Type | Modifiers 
---------------+---------+----------- 
service_id | integer | 
subservice_id | integer | 

Таким образом, каждая служба может иметь несколько подсервисов. Как создать запрос, который покажет мне все службы для определенной службы? Или я ошибаюсь в таблицах и нуждаюсь в реструктуризации моих данных?

ответ

0

У вас есть структура таблицы, типичная для отношений «многие ко многим». Вы можете получить список подсервисы с:

SELECT ssvc.subservice_name FROM service svc, service_subservice ss, subservice ssvc 
WHERE svc.id = ss.service_id AND ssvc.id = ss.subservice_id AND svc.id = ? 

Однако, если вы моделируете отношение один-ко-многим, следует использовать более простую схему:

Service (как у вас было такое)

востановить:

CREATE TABLE subservice (
    subservice_id serial not null primary key, 
    name varchar(40), 
    service_id integer not null references service(service_id) 
) 

Затем вы можете выбрать свои подуслуги с:

SELECT name from subservice WHERE service_id = ? 
Смежные вопросы