Главная » SQL, Базы данных » Реляционное исчисление

0

Реляционная алгебра и реляционное исчисление представляют  собой  два альтернативных  подхода.  Принципиальное  различие  между  ними  состоит  в следующем.  Реляционная  алгебра  определяет  в  явном  виде  набор  операций (соединение,  объединение,  проекция  и  т.д.),  которые  можно  использовать, чтобы  сообщить  системе,  как  в  базе  данных  из  определенных  отношений сформировать  некоторое   требуемое  отношение,  а  реляционное  исчисление просто задает  систему  обозначений для определения требуемого отношения в терминах существующих отношений. Например, рассмотрим запрос: "Выбрать номера  поставщиков  и  названия  городов,  в  которых  находятся  поставщики детали  с  номером  Р2".  Алгебраическая  версия  этого   запроса  может  быть составлена   примерно   так   (мы   умышленно   не   используем   формальный синтаксис, приведенный в главе7).

■     Выполнить соединение отношений поставщиков и поставок SР по атрибуту S#.

■     С помощью операции сокращения выделить из результатов этого соединения кор

тежи, которые относятся к детали с номером Р2.

■     Сформировать проекцию результатов этой операции сокращения по атрибутам s#

И CITY.

Этот же запрос в терминах реляционного исчисления формулируется приблизительно следующим образом.

■  Получить атрибуты s# и CITY для таких поставщиков, для которых в отношении SP существует запись о поставке с тем же значением атрибута s# и со значением атрибута Р#, равным Р2.

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

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

основано на разделе математической логики, который называется исчислением предикатов. Идея использования исчисления предикатов в качестве основы языка баз данных впервые была высказана в статье Кунса (Kuhns) [8.6]. Понятие реляционного исчисления, т.е. специального метода применения исчисления предикатов в реляционных базах данных, впервые было сформулировано Коддом в [6.1], а в [8.1] Кода представил язык, основанный непосредственно на реляционном исчислении и названный "подъязыком данных ALPHA". Сам язык ALPHA никогда не был реализован, однако язык QUEL [8.5], [8.10]—[8.12], который действительно был реализован и некоторое время серьезно конкурировал с языком SQL, очень походил на язык ALPHA, оказавший заметное влияние на построение языка QUEL.

Основным средством реляционного исчисления является понятие переменной области значений. Согласно краткому определению, переменная области значений — это переменная, принимающая значения из некоторого заданного  отношения,  т.е. переменная, допустимыми значениями которой являются  кортежи  заданного отношения. Другими словами, если переменная области значений v изменяется в пределах отношения г, то в любой конкретный момент выражение "v" представляет некоторый кортеж t отношения г. Например, запрос "Получить номера поставщиков, находящихся в Лондоне" может быть представлен на языке QUEL следующим образом.

RANGE OF SX IS S ;

RETRIEVE ( SX.S# ) WHERE SX.CITY = "London" ;

Единственной переменной области значений здесь является переменная SX, которая принимает значения из отношения, представляющего собой текущее значение переменной отношения S (оператор RANGE — оператор определения  этой переменной области значений). Оператор RETRIEVE означает следующее: "Для  каждого возможного значения переменной SX выбирать компонент S# этого значения тогда и только тогда, когда компонентом CITY этого значения является London".

В связи с тем, что первоначальная версия реляционного исчисления основана на переменных области значений (в отличие от исчисления доменов, речь о  котором пойдет ниже), ее называют также исчислением кортежей. Исчисление кортежей подробно описано в разделе 8.2.

Примечание. Для удобства примем следующее соглашение: далее в этой книге термины исчисление и реляционное исчисление, приведенные без такого уточнения, как кортежей или доменов, будут означать именно исчисление кортежей (там, где это играет какую-то роль).

Впоследствии Лакруа (Lacroix) и Пиротт (Pirotte) [8.7] предложили  альтернативную версию исчисления, называемую исчислением доменов, в которой  переменные области значений принимают значения из доменов, т.е. являются переменными, изменяемыми

на доменах, а не на отношениях. (Данный термин нелогичен, ведь если исчисление доменов называется так по указанной причине, то по той же причине исчисление кортежей следовало бы назвать исчислением отношений.) В  литературе предлагается множество языков исчисления доменов. Наиболее  известным из них, пожалуй, является QBE (Query-By-Example — язык  запросов  по образцу), который впервые описан в [8.14]; в действительности язык QBE является смешанным, поскольку в нем присутствуют и элементы исчисления кортежей. Существует несколько коммерческих реализаций  языка QBE, или "QBE-подобного" языка. В общих чертах исчисление доменов будет описано в разделе 8.7, а сам язык QBE вкратце рассматривается в разделе 8.8.

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

(см. главу 7). Мы также опускаем рассмотрение соответствующих версий реляционных операторов обновления. Все эти сведения представлены в [3.3].

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

По теме:

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