
292
 Глава
 14.
 Обобщенная
 архитектура
 СУБД
Поэтому
 данный запрос будет эквивалентен следующей последовательности
операций
 реляционной
 алгебры:
R3
 =
 R1CR1.A
 ОС а]
R4
 «
 R2ER2.B
 С
 Ь]
R5
 =
 R3*[ ]*R4
Хотя
 немногие реляционные системы имеют языки запросов, основанные
в
 чистом виде
 на
 реляционной
 алгебре,
 правила
 преобразований
 алгебраиче-
ских выражений
 могут
 быть полезны
 и в
 других
 случаях.
 Довольно
 часто
реляционная
 алгебра используется
 в
 качестве основы
 внутреннего'представ-
ления
 запроса. Естественно,
 что
 после этого можно выполнять
 и
 алгебраиче-
ские
 преобразования.
В
 частности, существуют подходы, связанные
 с
 преобразованием запросов
 на
языке
 SQL к
 алгебраической
 форме.
 Особенно
 важно
 то, что
 реляционная
алгебра более проста,
 чем
 язык SQL. Преобразование запроса
 к
 алгебраиче-
ской
 форме упрощает
 дальнейшие
 действия оптимизатора
 по
 выборке опти-
мальных
 планов.
 Вообще говоря, развитый оптимизатор запросов
 системы,
ориентированной
 на
 SQL,
 должен
 выявить
 все
 возможные планы
 йыполне-
ния
 любого запроса,
 но
 «пространство поиска» этих планов
 в
 общем случае
очень
 велико;
 в
 каждом конкретном оптимизаторе используются свои эври-
стики
 для
 сокращения пространства
 поиска.
 Некоторые, возможно, наиболее
оптимальные планы никогда
 не
 будут
 рассматриваться. Разумное
 преобра-
зование
 запроса
 на SQL к
 алгебраическому представлению сокращает
 про-
странство поиска планов выполнения запроса
 с
 гарантией
 того,
 что
 опти-
мальные
 планы потеряны
 не
 будут.
Q
 Приведение
 запросов
 с
 вложенными
 подзапросами
 к
 запросам
 с
 соедине-
ниями.
 Основным отличием языка
 SQL от
 языка
 реляционной
 алгебры
 явля-
ется возможность использовать
 в
 логическом
 условии
 выборки
 предикаты»
содержащие
 вложенные подзапросы. Глубина вложенности
 не
 ограничива-
ется
 языком,
 то
 есть,
 вообще
 говоря,
 может
 быть
 произвольной. Предикаты
с
 вложенными подзапросами
 при
 наличии общего синтаксиса могут обладать
весьма различной семантикой.
 Единственным
 общим
 для
 всех
 возможных
 се-
мантик
 вложенных подзапросов алгоритмом
 выполнения
 запроса является
вычисление
 вложенного
 подзапроса всякий
 раз при
 вычислении значения пре-
диката. Поэтому
 естественно
 стремиться
 к
 такому
 преобразованию
 запроса,
содержащего предикаты
 со
 вложенными подзапросами, которое сделает
 се-
мантику
 подзапроса более
 явной,
 предоставив
 тем
 самым
 в
 дальнейшем
 оп-
тимизатору возможность выбрать способ выполнения
 запроса,
 наиболее точ-
но
 соответствующий семантике подзапроса.
Каноническим
 представлением
 запроса
 на
 п-отношениях
 называется запрос,
содержащий
 п-1
 предикат соединения
 и не
 содержащий предикатов
 о
 вло-
женными
 подзапросами.
 Фактически каноническая форма
 - это
 алгебраиче-
ское представление запроса.
Например, запрос
 с
 вложенным
 подзапросом: