Основные поля, которые вы всегда фильтруете/объединяете → реальные столбцы
Требуется строгая целостность FK для вложенных объектов.
Гибрид: реляционное ядро + JSONB для гибких атрибутов.
Пример
SELECT u.name,
COUNT(*) FILTER (WHERE o.status ='completed') AS completed_orders,
COALESCE(SUM(o.amount) FILTER (WHERE o.status ='completed'), 0) AS revenue
FROM users u
LEFTJOIN orders o ON o.user_id = u.id
GROUPBY u.id, u.name
ORDERBY revenue DESC;
Итог
– Основные поля, которые вы всегда фильтруете/объединяете → реальные столбцы. – Требуется строгая целостность FK для вложенных сущностей. Гибрид: реляционное ядро + JSONB для гибких атрибутов.