Скачиваний:
147
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

6.9. Реляционные сравнения

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

реляционное выражениё> в <реляционное выражение>

Здесь параметр <реляционное выражение> — это в обоих случаях выражения реляци- онной алгебры, представляющие совместимые по типу отношения, а символ 0— это один из следующих операторов сравнения.

= Равно

Ф Не равно

  • Подмножество

  • Собственное подмножество

  • Супермножество

  • Собственное супермножество

Замечание. Возможно, выбор обозначений операторов не совсем удачен, так как от- рицание утверждения "А— собственное подмножество В" не является утверждением "А — супермножество В" (т.е. условия "<" и ">" не противоположны). Однако по техни- ческим причинам в этой книге используются именно такие обозначения.

Приведем примеры.

1. S { CITY } = Р { CITY }

Смысл выражения. Совпадает ли проекция отношения поставщиков S по атрибуту CITY с проекцией отношения деталей Р по атрибуту CITY?

2. S { St } > SP { S# }

Смысл выражения (несколько перефразировано). Есть ли поставщики, вообще не поставляющие деталей?

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

S WHERE ( ( SP RENAME St AS X ) WHERE X = Si ) { Pi } = P { Pi }

При вычислении этого выражения получаем отношение, содержащее кортежи для по- ставщиков всех типов деталей.

Пояснение

■ Для заданного поставщика выражение

( ( SP RENAME S# AS X ) WHERE X = Si ) { P# } дает множество номеров деталей, поставляемых этим поставщиком.

■ Затем это множество номеров деталей сравнивается с множеством всех номеров деталей. Если эти два множества совпадают, то соответствующий кортеж постав- щика заносится в результат.

Этот запрос можно также сформулировать по-другому.

S JOIN ( S { Si } DIVIDEBY Р { Pi } PER SP { Si, Pi } )

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

WITH ( EXTEND S

ADD ( ( SP RENAME Si AS X ) WHERE X = Si ) { Pi } AS A ) AS Tl, ( EXTEND Tl ADD P { Pi } AS В ) AS T2 : T2 WHERE A = В

Здесь А и В — атрибуты, принимающие в качестве значений отношения, а последнее выражение Т2 WHERE А=В теперь является типичным условием выборки.

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

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

IS_EMPTY ( реляционное выражение> )

Этот оператор возвращает значение истина, если вычисленное значение параметра <реляционное выражение> оказывается пустым, и значение ложь в противном случае.

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

RELATION { t } < г

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

t IN г

Здесь ключевое слово IN заменяет оператор принадлежности множеству, обычно обозначаемый символом е.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]