Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
142
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

5.2.1. Операция реляционного дополнения

Пусть sобозначает результат операции<NOT> r. Тогда:

  • Hs = Hr(заголовок результата совпадает с заголовком операнда);

  • Bs = {ts : exists tr (tr Br and ts = tr) }(в тело результата входят все кортежи, соответствующие заголовку и не входящие в тело операнда).

Операция <NOT>производит дополнениеsзаданного отношенияr. Заголовкомsявляется заголовокr. Телоsвключает все кортежи, соответствующие этому заголовку и не входящие в телоr.

Видимо, следует пояснить, почему реляционный аналог операции логического отрицания называется здесь операцией реляционного дополнения. Во-первых, термин «дополнение» полностью соответствует сути операции <NOT>: тело результата операции<NOT> rявляется дополнениемBrдо полного множества кортежей, соответствующихHr. Во-вторых, это не противоречит природе булевской операцииNOT: у булевского типа имеются всего два значения –trueиfalse, иNOT true = false, аNOT false = true. (Кстати, обратите внимание, что операциюNOTв трехзначной логике (см. лекцию 1) уже нельзя считать операцией дополнения.)

Чтобы привести пример использования операции <NOT>, предположим, что в состав доменаДОПУСТИМЫЕ_НОМЕРА_ПРОЕКТОВ, на котором определен атрибутПРО_НОМотношенияНОМЕРА_ПРОЕКТОВсрис. 5.1слева, входит всего пять значений{1, 2, 3, 4, 5}. Тогда результат операции<NOT> НОМЕРА_ПРОЕКТОВбудет таким, как показано нарис. 5.1справа.

5.2.2. Операция удаления атрибута

Пусть sобозначает результат операцииr <REMOVE> A. Для обеспечения возможности выполнения операции требуется, чтобы существовал некоторый тип (или домен)Tтакой, что<A, T> Hr(т. е. в состав заголовка отношенияrдолжен входить атрибутA). Тогда:

Рис. 5.1.Результат операции<NOT> НОМЕРА_ПРОЕКТОВ

  • Hs = Hr minus {<A, T>}, т. е. заголовок результата получается из заголовка операнда изъятием атрибутаA;

  • Bs = {ts : exists tr exists v (tr Br and v T and <A,T,v> tr and ts = tr minus {<A,T,v>})}, т. е. в тело результата входят все кортежи операнда, из которых удалено значение атрибутаA.

Операция <REMOVE>производит отношениеs, формируемое путем удаления указанного атрибутаAиз заданного отношенияr. Операция эквивалентна взятию проекцииrна все атрибуты, кромеA. Заголовокsполучается теоретико-множественным вычитанием из заголовкаrмножества из одного элемента{<A, T>}. Телоsсостоит из таких кортежей, которые соответствуют заголовкуs, причем каждый из них является подмножеством некоторого кортежа тела отношенияr.

Примером операции REMOVE(конечно же, очень похожим на пример использования операцииPROJECTиз предыдущей лекции) являетсяСЛУЖАЩИЕ REMOVE ПРО_НОМ(получить данные о служащих, участвующих в проектах). Результат этой операции над отношениемСЛУЖАЩИЕ, тело которого приведено в верхней частирис. 5.2, показан нарис. 5.2внизу.

5.2.3. Операция переименования

Пусть sобозначает результат операцииr <RENAME> (A, B). Для обеспечения возможности выполнения операции требуется, чтобы существовал некоторый типT, такой, что<A, T> Hr, и чтобы не существовал такой типT, что<B, T> Hr. (Другими словами, в схеме отношенияrдолжен присутствовать атрибутAи не должен присутствовать атрибутB.) Тогда:

  • Hs = (Hr minus {<A, T>}) union {<B, T>}, т. е. в схеме результатаBзаменяетA;

  • Bs = {ts : exists tr exists v (tr Br and v T and <A, T, v> tr and ts = (tr minus {<A, T, v>}) union {<B, T, v>})}, т. е. в кортежах тела результата имя значений атрибутаAменяется наB.

Рис. 5.2.Результат операцииСЛУЖАЩИЕ REMOVE ПРО_НОМ

Операция<RENAME>производит отношениеs, которое отличается от заданного отношенияrтолько именем одного его атрибута, которое изменяется сAнаB. Заголовокsтакой же, как заголовокr, за исключением того, что пара<B, T>заменяет пару<A, T>. Телоsвключает все кортежи телаr, но в каждом из этих кортежей триплет<B, T, v>заменяет триплет<A, T, v>.

По причине очевидности пример использования этой операции мы приводить не будем.