Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы и банки данных / Базы и банки данных (5 сем).doc
Скачиваний:
76
Добавлен:
01.05.2014
Размер:
705.54 Кб
Скачать

Задание

  1. Поясните, в каком смысле последнее выражение, возможно, более рационально?

  2. Почему только «возможно»?

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

Операция расширения и подведения итогов

Описанные выше основные операции реляционной алгебры не предоставляли средств для скалярных вычислений. Например, может понадобиться запросить из базы данных арифметическое выражение, такое как Вес*454 (переводит вес в фунтах в граммы). Для обеспечения таких возможностей и предназначена операция расширения.Точнее, с помощью этой операции из определенного отношения создается новое отношение, которое содержит дополнительный атрибут, значения которого получены посредством некоторых скалярных вычислений (например, вMSAccessоперации расширения соответствует вычисляемое поле в запросе). Так, можно написать

EXTENDPADD(ВЕС*454)ASВЕС_ГР

С помощью этого выражения создается новое отношение с таким же заголовком, как и у отношения Р, за исключением дополнительного атрибута ВЕС_ГР. Каждый кортеж этого отношения совпадает с соответствующим кортежем отношения Р, но содержит еще дополнительное значение ВЕС_ГР, вычисляемое в соответствии с указанным выражением.

Теперь можно использовать атрибут ВЕС_ГР в операциях проекции, выборки и т.д. Например,

(EXTEND P ADD (ВЕС*454) AS ВЕС_ГР) WHERE ВЕС_ГР>1000

Заметим, что расширяемое отношение (Р) не должно иметь атрибута с именем нового атрибута (ВЕС_ГР), а выражение не должно ссылаться на этот новый атрибут. Заметим, что кардинальное число результата равно кардинальному числу исходного отношения, а степень результата на единицу больше степени исходного отношения.

В связи с операцией расширения заметим, что оператор переименования не примитивен. Он может быть выражен через оператор EXTEND. Например, операция

( EXTENDSADDCITYASSCITY) [S#,SNAME,STATUS,SCITY]

эквивалентна следующей

S RENAME CITY AS SCITY

Рассмотрим еще один пример

EXTEND S ADD COUNT ((SP RENAME S# AS X) WHERE X=S#) AS NP

Здесь ((SPRENAMES#ASX)WHEREX=S#) дает множество поставок, соответствующих этому поставщику. Затем «итоговая функция»Countприменяется для этого множества поставок и возвращает соответствующее кардинальное число (скалярное значение).

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

Другими примерами итоговых функций (т.е. функций, берущих в качестве аргумента множество значений и возвращающих одно значение) являютсяSUM(сумма),AVG(среднее значение),MAX(максимальное значение)MIN(минимальное значение).

Операция подведения итогов

Как было показано выше, операция расширения обеспечивает возможность «горизонтального» или «построчного» вычисления в алгебре. Операция SUMMARIZE(подведение итогов) выполняет аналогичную функцию для вертикальных вычислений. Например, выражение

SUMMARIZE SP BY (P#) ADD SUM(QTY) AS TOTQTY

вычисляет отношение с заголовком {P#,TOTQTY}, в котором существует один кортеж для каждого значения P# в отношении SP; в этом кортеже содержится значениеP# и соответствующее общее количество деталей. Другими словами, отношение Р «перегруппировано» в множество кортежей (по одному для каждого значенияP#), и из каждой группы в общий результат сгенерирован один кортеж. Группировку можно выполнить по любому количеству атрибутов:

SUMMARIZEABY(A1,A2,…An)ADDexpASZ

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

Для функции Count, в отличие от других итоговых функций, не требуется никаких аргументов. Заметим, что в конкретных реализациях использование аргумента для функцииCountимеет вполне понятный смысл. Так, вMSAccessфункцияCountподсчитывает число кортежей, у которых значения атрибута, являющегося аргументом функции, не являютсяNull-значениями.