Программирование >>  Хронологические базы данных 

1 ... 62 63 64 [ 65 ] 66 67 68 ... 348


Операторы GROUP и UNGROUP иначе называют средствами вложения и извлечения отношений. Однако мы предпочитаем использовать термины группирование и разгруппирование , поскольку термины вложение и извлечение тесно связаны с NF-отношениями - концепцией, которую мы считаем противоречивой и которая здесь не рассматривается.

Для полноты в завершение этого раздела сделаем несколько замечаний относительно обратимости операций группирования и разгруппирования (эти замечания, возможно, будут не совсем понятными при первом чтении). Итак, если определенным образом сгруппировать некоторое отношение г, то всегда будет сушествовать обратная операция разгруппирования, позволяющая вернуться к отношению г. Однако если сначала разгруппировать некоторое отношение г, то обратная операция группирования, возвращающая нас к отношению г, будет существовать не всегда. Приведем один пример (он основан на примере из статьи [5.4]). Предположим, что сначала выполняется разгруппирование отношения TWO (рис. 6.13) с получением в качестве результата отношения THREE. Теперь, если сгруппировать отношение THREE по атрибуту А, в результате получится не отношение TWO, а отношение ONE.

THREE

Рис. 6.13. Операции разгруппирования и группирования необязательно являются обратимыми

Обратите внимание на то, что в отношении ONE атрибут RVX (обязательно) функционально зависит от А, задавая тем самым потенциальный ключ (подробности приводятся в главах 8 и 9). Если теперь разгруппировать отношение ONE, можно снова вернуться к отношению THREE, а отношение THREE, очевидно, может быть сгруппировано так, чтобы в результате получилось отношение ONE. Таким образом, для этой пары отношений операции группирования и разгруппирования действительно являются обратными. В общем случае решающим моментом в вопросе обратимости операции разгруппирования является функциональная зависимость. В действительности для отношения г с атрибутом RVX, принимающим в качестве значений отношения, операция разгруппирования (относительно атрибута RVX) обратима тогда и только тогда, когда выполнены два следующих условия.

Ни один кортеж отношения г не принимает в качестве значения атрибута RVX пустое отношение.



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

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

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

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

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

= Равно

Ф Не равно

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

< Собственное подмножество > Супермножество

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

>

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

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

1. S { CITY } = Р { CITY }

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

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

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

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

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

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



Пояснение

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

( ( 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 = В

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

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

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

IS EMPTY ( <реляционное выражение> )

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

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

RELATION { t } < г

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

t IN г

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



1 ... 62 63 64 [ 65 ] 66 67 68 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика