Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции базы данных 1.doc
Скачиваний:
25
Добавлен:
12.11.2018
Размер:
1.73 Mб
Скачать

Операция расширения

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

EXTEND P ADD { WEIGHT * 454 ) AS GMWT

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

Рис. 11. Пример операции расширения.

Выражение EXTEND не изменяет содержимое базовой переменной-отношения деталей в базе данных. Это всего лишь выражение, такое же, как, например, S JOIN SP, и значит, оно создает определенный результат. В данном случае этот результат подобен текущему значению базовой переменной-отношения деталей. (Иначе говоря, операция расширения — это не реляционный аналог SQL-оператора ALTER TABLE.)

Операция обобщения

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

SUMMARIZE SP PER SP { P# } ADD SUM ( QTY ) AS TOTQTY

В результате его вычисления создается отношение с заголовком {Р#,TOTQTY}, содержащее один кортеж для каждого значения атрибута P# в проекции SP{P#}. Каждый из этих кортежей содержит значение атрибута P# и соответствующее общее количество деталей (Рис.11.). Другими словами, концептуально исходное отношение Р "перегруппировано" в множество групп кортежей (по одной группе для каждого уникального значения атрибута P#), после чего для каждой полученной группы сгенерирован один кортеж, помещаемый в окончательный результат.

Рис.12. Пример выполнения операции SUMMARIZE

В общем случае значение выражения

SUMMARIZE A PER В ADD <обобщение> AS Z

определяется следующим образом.

  • Отношение В должно иметь такой же тип, как и некоторая проекция отношения А, т.е. каждый атрибут отношения В должен одновременно присутствовать в отношении А. Примем, что атрибутами этой проекции (или, что эквивалентно, атрибутами отношения В) являются атрибуты А1, А2, ... , An.

  • Результатом вычисления данного выражения будет отношение с заголовком {А1,А2, ... , An, Z}, где Z является новым добавленным атрибутом.

■ Тело результата содержит все кортежи t, где t является кортежем отношения В, расширенным значением нового атрибута Z. Это значение нового атрибута Z подсчитывается посредством вычисления обобщающего выражения по всем кортежам отношения А, которое имеет те же значения для атрибутов А1, А2, ... , An, что и кортеж t. (Разумеется, если в отношении А нет кортежей, принимающих те же значения для атрибутов А1, А2,... , An, что и кортеж t, то обобщающее выражение будет вычислено для пустого множества.) Отношение В не должно содержать атрибут с именем Z, а обобщающее выражение не должно ссылаться на атрибут Z. Кардинальность результата равна кардинальности отношения В, а степень результата равна степени отношения В плюс единица. Типом переменной Z в этом случае будет тип обобщающего выражения.