У меня есть хранилище данных, содержащее типичные звездообразные схемы, и целую кучу кода, который делает подобные вещи (очевидно, намного больше, но это иллюстративно):
SELECT cdim.x
,SUM(fact.y) AS y
,dim.z
FROM fact
INNER JOIN conformed_dim AS cdim
ON cdim.cdim_dim_id = fact.cdim_dim_id
INNER JOIN nonconformed_dim AS dim
ON dim.ncdim_dim_id = fact.ncdim_dim_id
INNER JOIN date_dim AS ddim
ON ddim.date_id = fact.date_id
WHERE fact.date_id = @date_id
GROUP BY cdim.x
,dim.z
Я думаю заменить его представлением (скажем, MODEL_SYSTEM_1
), чтобы оно стало:
SELECT m.x
,SUM(m.y) AS y
,m.z
FROM MODEL_SYSTEM_1 AS m
WHERE m.date_id = @date_id
GROUP BY m.x
,m.z
Но представление MODEL_SYSTEM_1
должно содержать уникальные имена столбцов, и меня также беспокоит производительность оптимизатора, если я продолжу и сделаю это, потому что я обеспокоен тем, что все элементы в предложении WHERE для разных фактов и измерений получат оптимизирован, так как вид будет через всю звезду, а виды нельзя параметризовать (боже, как бы это было круто!)
Итак, мои вопросы -
Подходит ли этот подход, или это просто абстракция, которая снижает производительность и не дает мне ничего, кроме более приятного синтаксиса?
Каков наилучший способ сгенерировать код для этих представлений, устранив повторяющиеся имена столбцов (даже если представление позже нужно будет настроить вручную), учитывая, что все соответствующие PK и FK на месте? Должен ли я просто написать какой-нибудь SQL, чтобы вытащить его из
INFORMATION_SCHEMA
, или уже есть хороший пример.
Редактировать: я протестировал его, и производительность кажется такой же, даже в более крупных процессах — даже при объединении нескольких звездочек, каждая из которых использует эти представления.
Автоматизация в основном связана с тем, что в хранилище данных есть несколько таких звездочек, а FK/PK были выполнены дизайнерами должным образом, но я не хочу просматривать все таблицы или документацию. Я написал скрипт для создания представления (он также генерирует сокращения для таблиц), и он хорошо работает для автоматического создания скелета из INFORMATION_SCHEMA
, а затем его можно настроить перед фиксацией создания представления.
Если кому-то нужен код, я, вероятно, мог бы опубликовать его здесь.