Назначение декомпозиции запросов состоит в преобразовании запросов на языке высокого уровня в выражения реляционной алгебры, с последующей проверкой его синтаксической и семантической корректности. Обычно декомпозиция включает в себя стадии анализа, нормализации, семантического анализа, упрощения и реструктурирования запроса.
Анализ.
На этой стадии выполняется лексический и синтаксический анализ запросов с использованием методов, применяемых в компиляторах языков высокого уровня (Ахо и Ульман). Уточняется присутствуют ли в системном каталоге определения для указанных в запросе отношений и атрибутов. Кроме того контролируется могут ли затребованные операции над различными операторами БД быть применимыми к объектам соответствующего типа.
После завершения данной стадии декомпозиции запрос на языке высокого уровня преобразуется к некоторому внутреннему представлению, более удобному для последующей обработки. Как правило, для внутреннего представления запроса вбирается та или иная форма дерева запроса. Дерево запроса конструируется следующим образом:
1. Листовые узлы задаются для каждого используемого в запросе базового отношения.
2. Нелистовые узлы задаются для каждого промежуточного отношения, создаваемого в результате выполнения некоторой операции реляционной алгебры.
3. Корень дерева представляет результирующий набор данных запроса.
4. Запросы выполняются от листовых узлов к корню дерева.
Пример реализации запроса в РА. Определить Ф.И.О. студентов и группы, в которых они учатся, имеющих задолженности по курсу «Базы данных».
Выполним запрос в несколько этапов:
1.Определим коды предметов, имеющих наименование «Базы данных».
.
2.Найдем ведомости по этим предметам.
3.Найдем результаты экзамена в этих ведомостях.
4.Определим результаты, соответствующие задолженностям.
5.Определим, имеющих эти результаты.
6.Окончательный результат.