Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700276.doc
Скачиваний:
11
Добавлен:
01.05.2022
Размер:
1.94 Mб
Скачать

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

Допустим, что имеется БД, обладающая следующей структу­рой: отношение СТУДЕНТЫ (СТУД_НОМ, СТУД_ИМЯ, СТУД_СТИП, ГР_НОМ) и отношение ГРУППЫ (ГР_НОМ, ГР_КОЛ, ГР_СТАР). Предположим, что необходимо узнать име­на и номера студенческих билетов у студентов, являющихся ста­ростами групп с количеством студентов больше 25.

Если бы для формулировки такого запроса использовалась ре­ляционная алгебра, то мы получили бы алгебраическое выраже­ние, которое читалось бы. например, следующим образом:

- выполнить соединение отношений СТУДЕНТЫ и ГРУП­ПЫ по условию СТУД_НОМ = ГР_СТАР;

- ограничить полученное отношение по условию ГР_КОЛ>25;

- спроецировать результат предыдущей операции на атри­бут СТУД_ИМЯ и СТУД_НОМ.

Здесь пошагово сформулирована последовательность выпол­нения запроса к БД, каждый из которых соответствует одной ре­ляционной операции. Если же сформулировать тот же запрос с использованием реляционного исчисления, то мы получили бы формулу, которую можно было бы прочитать, например, сле­дующим образом: Выдать СТУД_ИМЯ и СТУД_НОМ для таких студентов, чтобы существовала группа с таким же значением ГР_СТАР и значением ГР_КОЛ большим 25.

Во второй формулировке мы указали лишь характеристики результирующего отношения, но ничего не сказали о способе его формирования. В этом случае СУБД должна сама решить, что за операции и в каком порядке нужно выполнить над отношениями СТУДЕНТЫ и ГРУППЫ. Оба рассмотренных в примере способа на самом деле эквивалентны, и существуют не очень сложные правила преобразования одного в другой.

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

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

Для определения кортежной переменной используется опера­тор RANGE. Например, для того, чтобы определить переменную СТУДЕНТ, областью определения которой является отношение СТУДЕНТЫ, нужно употребить конструкцию

RANGE СТУДЕНТ IS СТУДЕНТЫ

Из этого определения следует, что в любой момент времени переменная СТУДЕНТ представляет некоторый кортеж отноше­ния СТУДЕНТЫ. При использовании кортежных переменных в формулах можно ссылаться на значение атрибута переменной. Например, для того, чтобы сослаться на значение атрибута СТУД_ИМЯ переменной СТУДЕНТ, нужно употребить конст­рукцию СТУДЕНТ.СТУД_ИМЯ.

Правильно построенные формулы служат для выражения ус­ловий, накладываемых на кортежные переменные. В основе та­ких формул лежат простые сравнения, представляющие собой операции сравнения значений атрибутов переменных или литерально заданных констант. Например, конструкция "СТУДЕНТ.СТУД_НОМ=123456" является простым сравнением. Бо­лее сложные варианты правильно построенных формул реализу­ются с помощью логических связок NOT, AND, OR и IF ... THEN. Наконец, допускается построение правильно построенных фор­мул с помощью кванторов. Если F - это правильно построенная формула, в которой участвует переменная var, то конструкции EXISTS var (F) и FORALL var (F) являются правильными. Здесь квантор EXISTS обозначает "существование", a FORALL - "для всех кортежей".

Переменные, входящие в правильно построенные формулы, могут быть свободными или связанными. Все переменные, вхо­дящие в их состав, при построении которой не использовались кванторы, являются свободными. Фактически, это означает, что если для какого-то набора значений свободных кортежных пере­менных при вычислении формул получено значение "истина", то эти значения кортежных переменных могут входить в результи­рующее отношение. Если же имя переменной использовано сразу после квантора при построении формул вида EXISTS var (F) или FORALL var (F) то здесь, и во всех формулах, где она использо­вана, var - связанная переменная. При вычислении значения та­кой правильно построенной формулы используется не одно значение связанной переменной, а вся ее область определения.

Пусть СТУД1 и СТУД2 - две кортежные переменные, опреде­ленные на отношении СТУДЕНТЫ. Тогда, формула

EXISTS CТУД2(СТУД1.СТУ_СТИП>СТУД2.СТУД_СТИП)

для текущего кортежа переменной СТУД1 принимает значение "истина" только в том случае, если во всем отношении СТУДЕН­ТЫ найдется такой кортеж, связанный с переменной СТУД2, что значение его атрибута СТУД_СТИП удовлетворяет внутреннему условию сравнения.

Правильно построенная формула

FORALL СТУД2(СТУД1.СТУД_СТИП > СТУД2.СТУД_СТИП)

для текущего кортежа переменной СТУД1 принимает значение "истина" только в том случае, если для всех кортежей отношения СТУДЕНТЫ, связанных с переменной СТУД2, значения атрибута СТУД_СТИП удовлетворяют условию сравнения.

Таким образом, правильно построенные формулы обеспечи­вают средства выражения условия выборки из отношений БД.

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

Целевой список строится из целевых элементов, каждый из которых может иметь следующий вид:

- var.attr, где var - имя свободной переменной соответст­вующей формуле, a attr - имя атрибута отношения, на ко­тором определена переменная var;

- var, что эквивалентно наличию подсписка var.attr1, var.attr2, ... , var.attrn, где attr1, attr2, ... , attrn включает имена всех атрибутов определяющего отношения; newname = var.attr;

- newname - новое имя соответст­вующего атрибута результирующего отношения.

Последний вариант требуется в тех случаях, когда в формуле используются несколько свободных переменных с одинаковой областью определения. В исчислении доменов областью определения переменных яв­ляются не отношения, а домены. Применительно к БД СТУДЕНТЫ можно говорить, например, о доменных перемен­ных ИМЯ (значения домена - допустимые имена) или НОМ_СТУД (значения домена - допустимые номера студентов).

Основным отличием исчисления доменов от исчисления кортежей является наличие дополнительного набора предикатов (см. ниже); позволяющих выражать так называемые усло­вия членства.

Предикатом принято называть некую логическую функцию, которая для некоторого аргумента возвращает значение ИСТИНА или ЛОЖЬ. Отношение может быть рассмотрено как предикат с аргументами, являющимися атрибутами рассматриваемого отношения. Если заданный кон­кретный набор кортежей присутствует в отношении, то предикат выдаст истинный результат, в противном случае - ложный.

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