Главная » SQL, Базы данных » ЯЗЫК ЗАПРОСОВ ПО ОБРАЗЦУ

0

Одним из наиболее широко известных примеров языка, основанного на исчислении доменов, является язык запросов по образцу (Query-By-Example — QBE) [8.14]. (Фактически QBE одновременно воплощает в себе средства исчисления доменов и исчисления кортежей, но первое в нем доминирует.) Его синтаксис  является очень привлекательным и простым для интуитивного восприятия; он основан на идее внесения записей в пустые таблицы. Например, формулировка на языке QBE запроса: "Определить имена поставщиков,

которые поставляют по меньшей мере одну деталь, поставляемую поставщиком S2" может выглядеть примерно следующим образом.

8.8.17.                       Для всех поставщиков, находящихся в Лондоне,

изменить объем поставки на пять

8.9. РЕЗЮМЕ

В этой главе кратко рассматривалось реляционное исчисление, альтернативное реляционной алгебре. Внешне два подхода очень отличаются: исчисление имеет характер описания,  а  алгебра  —  характер  предписания,  но  на  более   низком  уровне  они представляют собой одно и то же, поскольку любые выражения исчисления могут быть преобразованы в семантически эквивалентные выражения алгебры и наоборот.

Реляционное исчисление существует в двух версиях: исчисление кортежей и исчисление  доменов.  Основное  различие  между  ними  состоит  в  том,   что   переменные исчисления кортежей определяются на отношениях, а переменные исчисления доменов определяются на доменах.

Выражение исчисления кортежей состоит из кортежа-прототипа и  необязательной

конструкции WHERE, содержащей логическое выражение или правильно  построенную формулу (Well-Formed Formula — WFF). Подобная правильно построенная формула может включать кванторы (EXISTS И FORALL), свободные и связанные ссылки на переменные, логические (булевы) операторы (AND, OR, NOT и др.) и т.д. Каждая свободная переменная, которая встречается в  правильно  построенной формуле, должна быть также

упомянута в кортеже-прототипе.

Примечание. В настоящей главе явно этот вопрос не затрагивался, но выражения реляционного исчисления предназначены по существу для тех же целей, что и выражения реляционной алгебры (см. раздел 7.6 главы 7).

На примере было показано, как можно использовать алгоритм редукции Кодда для преобразования произвольного выражения реляционного исчисления в эквивалентное

выражение  реляционной  алгебры,  подготавливая  тем  самым  почву  для   выбора

возможной    стратегии    реализации    исчисления.    Вновь    обратившись    к    вопросу реляционной  полноты,  мы  кратко  обсудили,  каким  образом  можно  доказать,  что некоторый язык является в этом смысле полным.

Кроме того, здесь обсуждалось, как можно расширить исчисление кортежей в целях поддержки определенных вычислительных возможностей (аналогичные возможности в

реляционной  алгебре  обеспечиваются  операциями  EXTEND  и  SUMMARIZE).   Затем

читателям  был  представлен  обзор  соответствующих  средств  языка  SQL.  Язык  SQL является   своеобразной   смесью   реляционной   алгебры   и   исчисления   (кортежей). Например, в нем есть прямая поддержка таких операций  реляционной алгебры, как соединение  и  объединение,  но  одновременно  с   этим  используются  переменные области значений и квантор существования из реляционного исчисления.

Запрос SQL представляет собой табличное выражение. Обычно такая конструкция содержит единственное выражение выборки, однако поддерживаются и различные типы явных выражений операций соединения, причем выражения соединения и выборки могут комбинироваться произвольным образом с помощью операторов UNION, INTERSECT и EXCEPT. Также упоминалось о возможности использования конструкция ORDER BY ДЛЯ определения  упорядоченности строк в таблице, являющейся результатом вычисления данного табличного выражения (любого вида).

В частности, были описаны следующие компоненты выражений выборки.

■     Базовая   конструкция  SELECT, в  том  числе  использование  ключевого  слова DISTINCT, скалярных выражений, введение имен результирующих столбцов и ис пользование сокращения SELECT *.

■     Конструкция FROM, включая использование переменных области значений.

■     Конструкция WHERE, включая использование оператора EXISTS.

■     Конструкция GROUP BY и HAVING, включая использование агрегирующих функций

COUNT, SUM, AVG И Т.Д.

■     Использование подзапросов (например) в конструкциях12 SELECT, FROM И WHERE.

Кроме того, здесь был описан концептуальный алгоритм вычисления выражений выборки языка SQL (основа для формального определения этих выражений). Кратко можно отметить, что этот алгоритм предусматривает формирование декартова произведения таблиц, указанных в конструкции FROM, применение операции сокращения к этому произведению  в  соответствии  с   логическим  выражением,  указанным  в  конструкции WHERE,   и   наконец,   применение   операции   проекции   к   результатам   операции сокращения  по  столбцам,  указанным  в  конструкции  SELECT.  НО  следует  сразу  же сделать   оговорку,  что  это  краткое  описание  является  далеко  не  полным;  более подробные сведения приведены в [4.20].

Затем было представлено краткое введение в исчисление доменов и указано, без попытки доказать это утверждение, что это исчисление также является реляционно полным. Таким образом, исчисление кортежей, исчисление доменов и реляционная алгебра эквивалентны друг другу. Наконец, кратко описаны средства языка запросов по образцу, который является, по-видимому, наиболее широко известной коммерческой реализацией идеи исчисления доменов.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии