я предоставлю ответ на основе файла readme моего собственного сборщика SQL ( диалект )
(простой текст следует, удалены ссылки на библиотеку)
Требования
- Поддержка нескольких поставщиков БД (например, MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Легко расширяется на новые БД (предпочтительно через независимую от реализации конфигурационную настройку)
- Модульность и независимая от реализации переносимость
- Гибкий и интуитивно понятный API
Характеристики
- основанные на грамматике шаблоны
- поддержка пользовательских программных представлений
- дБ абстракция, модульность и переносимость
- готовые шаблоны
- экранирование данных
я думаю, что вышеупомянутые функции и требования очерчивают причины, по которым можно использовать конструктор абстракций SQL
Большинство вышеперечисленных функций поддерживаются большинством сборщиков SQL (хотя я не думаю, что все перечисленное поддерживается, насколько мне известно)
Примеры использования:
- Платформа CMS, способная работать (без изменения базового кода) с несколькими поставщиками БД
- Пользовательский код приложения, в котором поставщик БД может изменяться и / или схемы дБ являются динамическими (это означает, что многие запросы не могут быть жестко закодированы, но все же должны быть достаточно абстрагированы, чтобы код был устойчив к изменениям)
- Прототипирование с использованием другой БД, отличной от используемой в производственной среде (по крайней мере, для некоторого кода потребуется дублирующая база кода)
- Код приложения не тесно связан с конкретным поставщиком и / или реализацией БД (даже внутри одного и того же поставщика БД, например, с разными версиями поставщика БД), поэтому является более надежным, гибким и модульным
- Многие обычные случаи запросов и экранирования данных обрабатываются самой платформой, и обычно это оптимально и быстрее
Наконец, пример варианта использования, который у меня был. я создавал приложение, в котором базовая схема БД (wordpress) не подходила для того типа запросов к данным, которые необходимо было выполнить, плюс некоторые таблицы WP (например, посты) должны были использоваться (поэтому имелись совершенно новые таблицы для всех данных приложения не было выбора).
В этом случае возможность создания MVC-подобного приложения, в котором модель может запрашиваться в соответствии с пользовательскими / динамическими условиями, делает жесткое кодирование запросов почти кошмаром. Представьте себе, что нужно поддерживать запросы к 2-3 таблицам с объединениями и фильтровать условия, чтобы увидеть, к какой таблице присоединиться, с какими, а также позаботиться о необходимых псевдонимах и так далее.
Ясно, что это был случай использования абстракции запроса, и, более того, он нуждался (или, по крайней мере, очень выиграл от этого) в возможности определения пользовательских мягких представлений (конгломерат объединенных таблиц, как если бы они были одной пользовательской таблицей, подходящей для модели) , Тогда это было намного проще, чище, модульнее и гибче. В другом аспекте приложение (код) также использовало уровень абстракции запроса в качестве инструмента нормализации (схема БД) . Как некоторые говорят, это было будущее .
Если завтра люди решат, что им нужны какие-то дополнительные параметры или данные, очень легко добавить это к модели в несколько строк и работать нормально. Кроме того, если завтра люди решат, что они больше не хотят использовать WordPress (поскольку приложение слабо связано с WordPress в качестве плагина), также относительно легко изменить ( просто определение ) модели в несколько строк кода для адаптации к новой схеме.
Видишь, что я имею в виду?