II. Реляционное исчисление

I. Теоретические языки запросов

В реляционных СУБД для выполнения операций над отношениями используются две группы языков, имеющие в качестве своей математической основы теоретические языки запросов, предложенные Э. Коддом: реляционная алгебра и реляционное исчисление. Существуют не очень сложные правила преобразования запросов между ними.

В реляционной алгебре операнды и результаты всех действий являются отношениями. Языки реляционной алгебры являются процедурными, так как отношение, являющееся результатом запроса к реляционной БД, вычисляется при выполнении последовательности реляционных операторов, применяемых к отношениям.

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

II. Реляционное исчисление

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

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

Пример преобразования.

Преимуществом реляционного исчисления перед реляционной алгеброй можно считать то, что пользователю не требуется самому строить алгоритм выполнения запроса. СУБД сама строит эффективный алгоритм.

Математической основой реляционного исчисления является один из разделов математической логики - исчисление предикатов.

Существует два варианта исчислений: исчисление кортежей и исчисление доменов.

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

Описательную часть исчисления можно представить в виде:

RANGE OF <переменная> IS <список>.

Конструкция RANGE указывает идентификатор переменной и область ее допустимых значений.

Пример.

Общий смысл записи выражения состоит в перечислении атрибутов результирующего (целевого) отношения, атрибуты которого должны удовлетворять истинности формулы wff (well formulated formula – правильно построенная формула). Список атрибутов целевого отношения в терминах реляционной алгебры по существу определяет операцию проекции, а формула wff – выборку кортежей.

В паре <переменная>.<атрибут> первый компонент служит для указания переменной кортежа (определенной конструкцией RANGE), а вторая – для определения атрибута отношения, на котором изменяется переменная кортежа. Необязательная часть “ AS <атрибут>” используется для переименования целевого отношения.

Пример.

Исчисление доменов имеет много общего с исчислением кортежей. В отличие от исчисления кортежей, в исчислении доменов основой любого выражения запроса являются переменные доменов. Переменная домена – это скалярная переменная, значения которой охватывают элементы некоторого домена. Исчисление доменов поддерживает дополнительную форму условия, называемую условием принадлежности. В общем виде условие принадлежности записывается следующим образом:

R (A1:v1, A2:v2, …).

Ai –атрибут отношения R, а vi – переменная домена или литерал. Проверяемое условие истинно, если и только если существует кортеж в отношении R, имеющий атрибуты A, равные заданным в выражении соответствующим значениям v.

Пример.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: