Введение в системы БД (542480), страница 52
Текст из файла (страница 52)
данных, для которых осуществляется тот или иной тип контроля доступа (глава 16). В целом, выражения реляционной алгебры служат для символического высокоуровневого представления намерений пользователя (например, в отношении некоторого определенного запроса). И именно потому, что подобные выражения являются символическими и высокоуровневыми, ими можно манипулировать в соответствии с различными Поскозьку произведение является специальным видалч соединения, в этолч перечне принитивных операторов его можно заменить соединением. Более того, в перечень необходимо также добавить оператор ЯЕУййЕ, поскольку наша алгебра (в отличие от алгебры, определенной в (б. (З',( отраепзся на ииена атрибутот а не на ит порядковые номера. 21г Часть 11 Ре(злг(ионная модель символическими высокоуровневыми правилами преобразования. Например, рассмотрим следующее выражение (" Получить имена поставщиков детали с номером 'Р2'"; пример 6.5.1).
( ( ЯР 101Н Я ) ЯНЕКЕ Р() = Р)) ( 'Р2' ) ) ( БМАМЕ ) Его можно преобразовать в логически эквивалентное, но, вероятно, более рациональное выражение следующего вида. ( ( БР ИНЕКЕ Р() = Р() ( 'Р2' ) ) 301М Б ) ( ЯМАМЕ (Упражнение. В каком смысле последнее выражение можно считать более рациональным? Почему только "вероятно"?) Таким образом, реляционная алгебра может служить хорошим основанием для выполнения оптимизации (чтобы вспомнить, что такое оптимизация, обратитесь к разделу 3.5 главы 3). Следовательно, если пользователь выразил свой запрос с помощью первого из двух приведенных выше выражений, то перел выполнением оптимизатор должен преобразовать его во второе выражение (в идеальном случае производительность не должно зависеть от формы, в которой пользователь выражает свой запрос).
К этой теме мы еще вернемся в главе 17. В заключение отметим, что благодаря своей фундаментальной природе реляционная алгебра часто используется в качестве критерия возможностей выражения пользовательских намерений для некоторого определенного реляционного языка (например, такого, как язык Б1гь). В общем случае язык называют реляционно полным (6.1), если его возможности, по крайней мере, соответствуют возможностям, обеспечиваемым алгебраическими операциями; иначе говоря, если выражения э~ого языка позволяют определить каждое отношение, которое может быть определено с помощью алгебраических выражений (первоначальной алгебры, т.е.
выражений, описанных в предыдущих разделах). Понятие реляционной полноты подробнее обсуждается в следующей главе. 6.7. Дополнительные операторы Многие авторы предлагали новые алгебраические операторы после определения Коддом первоначальных восьми. В этом разделе детально рассматривается несколько таких операторов — ЯЕМ1101Н (полусоединенне), ЯЕМ1М1НРБ (полувычитание), ЕХТЕНР (расширение), ЯРМЕ))К1ЕЕ (обобщение) и ?СЕРБЕ (транзитивное замыкание). В терминах языка Тпгог(а! 0 синтаксис этих операторов выглядит следующим образом.
<лолусоецинение> <реляционное выражение> ЯЕМ1301Н <реляционное выражение> <полувычитанне> ::= <реляционное выражение> ЯЕМ1М1КНБ <реляционное выражение> <расширение> ::= ЕХТЕНР <реляционное выражение> АРР <списох цобавляеыых расширений> г1З Глава б. Реляционная алгебра <добавляемое расинрение> ::= <выраженне> АЯ <имя атрибута> <обобщение> ::= ЯВИИАК1ЕЕ <реляционное выражение> РЕК <реляционное выражение> АВВ <список добавляемых обобщенищ> <добавляемое обобщение> ::= <тнп обобщения> [ ( <скалярное выражение> ) ) АЯ <ныя атрибута> <тнп обобщения> СОЛТ ! ЯВИ / АРЯ / ИАХ ( ИТН ) ИЕ ! АНТ ) СОЕНТВ ) ЯВИВ ) АЧЯВ <транзитивное замыкание> ::= ТСЬОБЕ <реляционное выражение> Значения различных параметров <реляционное выражение>, упомянутые в этом синтаксисе Вг(Г, не должны иметь тип <не проекция>.
Полусоединение Пусть обозначения А, В, Х, Х и Е будут иметь тот же смысл, который был нм присвоен прн определении оператора А01Н в разделе 6.4. Тогда полусоединением отношения А с отношением В (что записывается как А ЯЕИ1301Н В, причем именно в таком порядке) по определению называется операция, эквивалентная следующей, (А101НВ) (Х, У) Другими словами, полусоединением отношения А с отношением В называется результат соединения отношений А и В, для которого дополнительно выполнена операция проекции по атрибутам отношения А.
Тело полученного в результате выполнения этой операции отношения, неформально говоря, состоит из тех кортежей отношения А, которые имеют соответствие в отношении В. Пример. Получить значения атрибутов Я(), ЯНАИЕ, БТАТОБ и 01ТУ для всех поставщиков детали с номером 'Р2'. Б БЕИ1В01Н ( ЯР ННЕКЕ Р() = Р$ ( 'Р2' ) ) Полувычитание Снова пусть обозначения А, В, Х, 1 и Е имеют тот же смысл, что и при определении оператора В01Н в разделе 6.4. Тогда полувычитаннем отношений А и В (что записывается как А ЯЕИ1И1НВЯ В, причем именно в таком порядке) называется операция, эквивалентная следующему оператору. А И1НВЯ ( А ЯЕИ1Б01Н В ) 214 Часть !1. Реляционная модель Неформально говоря, тело полученного в результате выполнения этой операпии отношения состоит из тех кортежей отношения А, которые не нашли соответствия в отношении В.
Пример. Получить значения атрибутов Я4, БИАМЕ, ЯТАТНЯ и С1ТУ для всех поставщиков, не поставляющих деталь с номером 'Р2'. Б ЯЕМ1М1ИНЯ ( БР ИНЕКЕ Р4 = Р$ ( 'Р2' ) ) Операция расширения Читатель, возможно, заметил, что в описанной нами алгебре нет средств для скалярных вычислений. Конечно, на практике такие возможности просто необходимы. Например, может понадобиться запросить из базы данных результат вычисления некоторого арифметического выражения, полобного выражению ИЕ16НТ*454, или сослаться на ~акое значение в выражении ИНЕКЕ при выборке.
(Вспомним, что в нашем примере вес деталей приведен в фунтах; тогда выражение ИЕ16НТь454 переводит этот вес в граммы~.) Для обеспечения таких возможностей и предназначена операция расширения. Точнее, с ее помощью из определенного отношения (по крайней мере, концептуально) создается новое отношение.
Оно похоже на начальное, но содержит дополнительный атрибут, значения которого получены посредством некоторых скалярных вычислений. Например, можно написать следующее. ЕХТЕМВ Р АВВ ( ИЕ16НТ е 454 ) АЯ СМИТ С помощью этого выражения (заметьте, именно выражения, а не команды или оператора, что разрешает вложение подобных выражений в другие выражения) создается новое отношение с таким же заголовком, как и у отношения Р, за исключением дополнительного атрибута БМИТ. Каждый кортеж это~о отношения совпадает с соответствующим кортежем отношения Р, но содержит еше одно дополнительное значение атрибута БМИТ, вычисляемое в соответствии с указанным выражением, как показано на рис.
6.9. Рис. б.9. Причер выполнения операции расигирения Обратите вничание, что это выражение ЕХТЕИР не изменяет содержимое базовой переменной-отношения деталей в базе данных. Это всего лишь выражение, такое же, как, например„Я Л)1И ЯР, и значит, оно создает определенный результат. В нашем случае этот результат подобен текущему значению базовой переменной-отношения деталей. (Иначе говоря, операция расширения — это не реляционный аналог Б(.й.-оператора А1 ТЕК ТАВЬЕ.) З В этом примере предполагается корректность операции уленожения """ веса детали на целое число.
А каков тип результата этой операции? гы Глава 6. Реляционная алгебра Теперь можно использовать вновь созданный атрибут 6ИИТ в любых операциях проекции„выборки и т.д., как, например, показано ниже. ( ( ЕХТЕИ0 Р А00 ( ИЕ16НТ * 454 ) АЯ 6ИИТ ) ИНЕКЕ 6НИТ > ИЕ16НТ ( 10000.0 ) ) ( А00 ВНТ 6МИТ ) Замечание.
Конечно, более дружественный пользователю язык должен позволять вставлять подобные выражения непосредственно в предложение ИНЕКЕ, например, слелующим образом. Р ИНЕКЕ ( ИЕ16НТ " 454 ) > ИЕ16НТ ( 10000.0 ) Однако такая возможность — это всего лишь синтаксическое усовершенствование. Обратимся к обобщенному представлению данного выражения. ЕХТЕИН А А00 ехр АЯ 2 В общем случае результатом вычисления подобного выражения будет отношение с заголовком, эквивалентным заголовку исходного отношения А, но с расширенным новым атрибутом 2. Тело результирующего отношения будет состоять из всех кортежей 2, где 2 является кортежем отношения А, дополненного значением нового атрибута 2, который определяется посредством вычисления скалярного выражения ехр для данного кортежа отношения А.
При этом отношение й не должно иметь атрибута 2 и выражение ехр не должно ссылаться на атрибут 2. Заметьте, что кардинальность результата равна кардинальности отношения й, а степень результата равна степени отношения А плюс единица. Типом переменной 2 в этом случае будет тип выражения ехр, Приведем еше несколько примеров. ).
ЕХТЕН0 Я А00 'Яцрр)1вг' АЯ ТА6 Это выражение эффективно дополняет каждый кортеж отношения Я символьным значением 'Яцрр11ег' (очевидно, что скалярный литерал (символьное значение) является простейшим случаем скалярного выражения). 2. ЕХТЕИ0 ( Р 101И ЯР ) А00 ( ИЕ16НТ ь 0ТУ ) АЯ ЯН1РИТ Этот пример иллюстрирует применение оператора ЕХТЕКН к результату реляционного выражения, более сложного, чем просто имя переменной-отношения.
З.( ЕХТЕИ0 Я А00 С1ТХ АЯ ЯС1ТТ ) ( АЬЬ Яцт С1ТХ Имя атрибута, такое как С1ТХ, — также допустимое скалярное выражение. Заметьте, что этот пример равносилен следующему выражению. Я КЕИАНЕ С1ТТ АЯ ЯС1ТУ Иными словами, оператор КЕИАМЕ не примитивен! Он может быть определен через оператор ЕХТЕИ0 (и проекцию). Разумеется, мы не собираемся отвергать уже знакомый оператор КЕИАНЕ, поскольку он действительно полезен. Однако тот факт, что оператор КЕИАНŠ— в действительности просто сокращение, является, по крайней мере, интересным.
4. ЕХТЕИ0 Р А00 ИЕ16НТ * 454 АЯ 6НИТ, ИЕ16НТ * 16 АЯ 02ИТ Этот пример служит иллюстрацией "множественного" расширения. г16 Часть П. Реляционная модель 5. ЕХТЕИП Я АПП СОПИТ ( ( ЯР КЕИАИЕ Я$ йЯ Х ) ЯНЕКЕ Х = Б$ ) АЯ ИР Результат вычисления этого выражения показан на рис. 6.10. Рис. 6.!О. Еще один пример операции расширения Пояснения ° Для данного поставщика в текущем значении переменной-отношения Я выражение ( ( ЯР КЕИАИЕ Я$ йБ Х ) ННЕКЕ Х = Б$ ) позволяет возвратить множество кортежей поставок, соответствуюших кортежу поставшика в текущем значении переменной-отношения БР. ° Затем для этого множества поставок применяется обобшаюшая функция СОПИТ, возврашаюшая соответствующее значение кардинальности (которое является, конечно же, скалярным значением).