Jeer
@Jeer
уверенный пользователь

Существует ли конструктор sql запросов?

Существует несколько таблиц: Заказ, События к заказу, Документы к заказу, Счет, Накладная и т.д. Они все как-то связаны.
Появилась идея, дать пользователю некий конструктор, чтобы он мог выбрать поля из интересующих его таблиц, например, выбирает из Заказа поля Номер, Дата, Описание и выбирает из таблицы Событий несколько событий: Оформлен, Поступил, Отправлен.
Получится вот такой отчёт
№ | Дата | Описание | Оформлен | Поступил | Отправлен
1 | 17.08 | Ок | 01.09 | 05.09 | 06.09

В данном случае мне на беке необходимо сделать запрос на таблицу Заказ и сделать один джоин на таблицу События.
Другой клиент может выбрать некоторые поля из таблицы Заказ и Документы, в таком случае, под его "отчёт" необходимо будет сделать джоин между таблицами Заказ и Документы. Третий захочет из трёх таблиц и нужны будут свои джоины

Чисто технически я могу сделать здоровенную вьюху, в которой переджоиню все таблицы-участники. Чтобы был один источник данных. Но мне не нравится такой вариант, так как просто джоин на таблицу документов занимает 3-5 секунд. И если поля по документам не будут использоваться в отчёте, соответственно лишнее время на получение данных. Ну и если учесть все джоины, то время увеличивается до 20-25 секунд на запрос, что нереально много.
Быть может это нормальный вариант, если сделать какую-то предрассчётную вьюху, либо, даже, целую таблицу выделить под это дело с уже готовыми данными (пускай дублируются), подскажите, есть что-то такое в MS SQL сервере?
Если пойти дальше, можно даже задействовать сервис аналитики (BI которые), например, заливать все данные в табулярную модель, тогда итоговые запросы будут просто летать. Тут так же появится дополнительная перекачка данных, это лаг и неясная нагрузка, я с такими вещами только с краю стоял, когда кто-то делал.

На ум приходит еще такой вариант, я беру просто StringBuilder и на if-ах на бекенде строю запрос для sql.
Типа, если выбрано хоть одно поле из документов, то добавляю джоин на документы. Но писать sql запрос в стрингу, тоже такой себе вариант.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Перед тем как начинать такое дело чтоит задать вопрос целевой аудитории. И окажется что. Это нафиг не надо по примерно миллиону причин
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы