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

 

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

 

НОМЕРА_ПРОЕКТОВ <NOT> НОМЕРА_ПРОЕКТОВ

 

 
 
ПРО_НОМ


ПРО_НОМ
3

4

 

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