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

6.8. Группирование и разгруппирование

Поскольку значениями атрибутов отношений могут быть другие отношения, было бы желательным наличие дополнительных реляционных операторов, называемых операто- рами группирования и разгруппирования [3.3]. Рассмотрим сначала пример операции группирования.

SP GROUP ( PI, QTY ) AS PQ

Результат выполнения этого выражения будет выглядеть так, как показано на рис. 6.12.

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

S#

SI

S2

S3

S4

P#

QTY

PI P2

300 400

P#

QTY

P2

200

P#

QTY

P2 P4 P5

200 300 400

Рис. 6.12. Группирование отношения SPno атрибуту St Начнем с того, что исходное выражение SP GROUP ( PI, QTY ) AS PQ

можно прочесть как "сгруппировать отношение SP по атрибуту Si", поскольку атри- бут Si является единственным атрибутом отношения SP, не упомянутым в предложении GROUP. В результате получится отношение, заголовок которого выглядит так.

{ Si Si, PQ RELATION { Pi Pi, QTY QTY } }

Другими словами, он состоит из атрибута PQ, принимающего в качестве значений от- ношения (PQ, в свою очередь, имеет атрибуты Pi и QTY), а также из всех остальных атри- бутов отношения SP (в нашем случае "все остальные атрибуты" — это атрибут S#). Тело этого отношения содержит ровно по одному кортежу для всех различных значений атри- бута S# исходного отношения SP (и никаких других кортежей). Каждый кортеж в теле содержит соответствующее значение атрибута St (обозначим его через s), а также значе- ние атрибута PQ (обозначим его через pq), полученное следующим образом.

  • Каждый кортеж отношения SP концептуально заменяется кортежем (обозначим его через х), в котором компоненты Pt и QTY как бы "упакованы" в один компо- нент, принимающий в качестве значений кортежи (обозначим его через у).

  • Компоненты у всех кортежей х, значение St которых равно s, "группируются" в отношение pq, и таким образом получается результирующий кортеж, в котором значение St равно s, а значение PQ равно pq.

Окончательный результат будет выглядеть так, как показано на рис. 6.12. | Перейдем теперь к операции разгруппирования. Пусть SPQ— это отношение, пока- занное на рис. 6.12. Тогда выражение

SPQ UNGROUP PQ

возвращает нас к отношению SP (как и следовало ожидать). Точнее, оно выдает в ка- честве результата отношение, заголовок которого выглядит так.

{ St St, Pt Pt, QTY QTY }

Иными словами, его заголовок состоит из атрибутов Pt и QTY (полученных из атрибу- та PQ), а также из всех остальных атрибутов отношения SPQ нашем случае это только атрибут St). Тело полученного отношения содержит ровно по одному кортежу для каж- дой комбинации кортежа отношения SPQ с кортежем значения PQ, являющегося элемен- том кортежа SPQ (других кортежей в нем нет). Каждый такой кортеж содержит соответ- ствующее значение атрибута St (обозначим его через s), а также значения атрибутов Pt и QTY (обозначим их через р и q), которые получены следующим образом.

  • Каждый кортеж отношения SPQ мысленно заменяется множеством кортежей, ко- торое содержит по одному кортежу (обозначим его через х) для каждого кортежа из значения PQ. Каждый кортеж х содержит компонент St (обозначим его через s), равный компоненту St рассматриваемого кортежа SPQ, а также компонент (обозначим его через у), равный некоторому кортежу из компонента PQ рассмат- риваемого кортежа SPQ.

  • Компоненты у каждого такого кортежа х, значение St которых равно s, "разворачиваются" в отдельные компоненты Pt и QTY (обозначим их через р и q). В результате получается кортеж, значение компонента St которого равно s, значе- ние компонента Pt равно р и значение компонента QTY равно q.

Таким образом, в результате разгруппирования получилось отношение SP. |

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

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

TWO

THREE

ONE

А

RVX

1

X

а b

1

X

а с

А

X

1

а

1

b

1

с

А

RVX

1

X

а

b

с

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

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

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

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

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