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

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


функция вычисляется только один раз и для всего отношения sp в целом. Следовательно, вычисление представленного выше выражения SUMMARIZE даст в результате отношение с одним атрибутом (с именем GRANDTOTAL) и одним кортежем, причем единственное скалярное значение в единственном результирующем кортеже является общим итогом по всем значениям атрибута QTY в исходном отношении sp.

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

SUMMARIZE SP PER RELATION { TUPLE { } }

ADD SUM ( QTY ) AS GRANDTOTAL

Точнее, это выражение будет возвращать отношение с одним лишь атрибутом GRANDTOTAL и одним кортежем, в котором значение GRANDTOTAL будет равно нулю. Поэтому автор предлагает разрешить опускать предложение PER в выражении SUMMARIZE, как это сделано в следующем примере.

SUMMARIZE SP ADD SUM ( QTY ) AS GRANDTOTAL

Подразумевается, что пропуск предложения PER эквивалентен определению этого предложения в следующей форме.

PER RELATION { TUPLE { } }

Транзитивное замыкание

Операция транзитивного замыкания упоминается здесь, в основном, для полноты изложения. Ее детальное обсуждение выходит за рамки данной главы. Тем не менее мы дадим здесь определение этой операции. Пусть А - произвольное бинарное отношение с атрибутами X и Y, принадлежащими одному типу Т. Тогда транзитивным замыканием отношения А (что записывается как TCLOSE А) называется отношение А, заголовок которого такой же, как заголовок отношения А, а тело является супермножеством отношения А.

Супермножество отношения А определяется следующим образом. Кортеж { Х:х, Y:y } принадлежит отношению А тогда и только тогда, когда он принадлежит отношению А или когда существует последовательность значений zl, z2, ... , zn (принадлежащих типу Т), такая, что все кортежи { Х:х, Y:zl }, { X:zl, Y:z2 }, ... , { X:zn, Y:y } принадлежат отношению A. Иначе говоря, кортеж (х,у) принадлежит отношению А только тогда, когда (нестрого говоря) в представляющем отношение А графе есть линия, соединяющая точку х с точкой у. Обратите внимание на то, что тело отнощения А всегда содержится в теле отношения А как подмножество.

Обсуждение этого вопроса будет продолжено в главе 23.

Выражение RELATION { TUPLE { } } в предложении PER этого примера обозначает отношение (в действителыюсти единственное в своем роде отношение), которое не имеет атрибутов, но имеет один кортеж (а именно - 0-кортеж). Это выражение можно сокращенно называть TABLE DEE[3.3], [5.5], [6.2].



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

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

SP GROUP ( Pi, QTY ) AS PQ

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

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

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

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

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



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

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

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

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

SPQ UNGROUP PQ

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

{ S# S#, Р# Р#, QTY QTY }

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

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

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

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



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

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