2016-02-16 1 views
0

У меня есть схемы наследования, который следует таблица для каждого типа шаблона:Выбор подкласса атрибутов с классом Table Inheritance (таблица для каждого типа)

Harvesters 
harvester_id | description 

Harvester_A 
harvester_id | propertyA_1 | propertyA_2 

Harvester_B 
harvester_id | propertyB_1 | propertyB_2 

где Harvester_A.harvester_id и Harvester_B.harvester_id внешние ключи ссылка Harvesters.harvester_id.

У меня есть четвертый стол:

Equipment_Set 
equipment_set_id | ... | harvester_id 

Equipment_Set.harvester_id является внешним ключом к Harvesters.harvester_id.

Как получить атрибуты конкретного подкласса, не зная заранее, какой подкласс я хочу? То есть У меня есть Equipment_Set и вы хотите получить конкретные атрибуты Harvester_A или Harvester_B в отношении своего harvester_id в зависимости от того, какой из подклассов он есть, но заранее не знаю, какой он.

ответ

0

Либо поместить все таблицы вместе с внешними соединениями (в результате все «неправильные» столбцов будут NULL):

CREATE VIEW Harversters_A_or_B AS 
SELECT harvester_id, 
     description, 
     propertyA_1, 
     propertyA_2, 
     propertyB_1, 
     propertyB_2 
FROM Harvester 
LEFT JOIN Harvester_A USING (harvester_id) 
LEFT JOIN Harvester_B USING (harvester_id); 

Или поместить все свойства в же столбцов с помощью compound query (все «неправильные» соединения не возвращают никакие строки):

CREATE VIEW Harversters_A_or_B AS 
SELECT harvester_id, 
     description, 
     propertyA_1 AS property1, 
     propertyA_2 AS property2, 
     'A' AS type 
FROM Harvester 
JOIN Harvester_A USING (harvester_id) 
UNION ALL 
SELECT harvester_id, 
     description, 
     propertyB_1, 
     propertyB_2, 
     'B' 
FROM Harvester 
JOIN Harvester_B USING (harvester_id); 
+0

Благодарим за отзыв. В конечном итоге я решил пойти другим путем, чем TPT, но это обеспечило хорошее понимание. Мне нужно освежиться на стыках. – elead1

Смежные вопросы