TL; DR
Можно ли применить объединение, охватывающее несколько таблиц в одной базе данных в Postgres?
Более длинная версия
Имеется база данных, содержащая одну transactions
таблицу фактов:
customer product amount
1 1 50
1 53 20
2 8 35
2 11 40
2 28 45
вместе с одной products
таблицей размеров:
id color shape material
1 blue round fabric
2 red square wood
3 blue oval wood
4 yellow square plastic
и одна customers
таблица размеров:
id income city
1 high london
2 low paris
3 high berlin
4 medium london
Если я денормализую базу данных, включив в нее всю информацию о продукте и клиенте для каждой строки транзакции, тогда очень легко применить индексы ко всем атрибутам продукта / клиента. Однако это происходит за счет того, что полученная денормализованная таблица становится потенциально очень большой (особенно, когда начинает добавляться множество таблиц измерений).
Можно ли применять аналогичные индексы, пока таблицы фактов и измерений остаются отдельными? Например, при выполнении следующего запроса будет использоваться индекс customer-city_product-shape
, чтобы избежать полного сканирования таблицы при transactions
:
SELECT
t.customer,
t.amount
FROM
transactions t
LEFT JOIN
products p on p.id = t.product
customers c on c.id = t.customer
WHERE
c.city = 'london' and p.shape = 'round'