Операция реляционного дополнения
Пусть 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> НОМЕРА_ПРОЕКТОВ
|
ПРО_НОМ | ||
| ||
| ||
Рис. 4.1. Результат операции <NOT> НОМЕРА_ПРОЕКТОВ