Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

18.1. Введение

В повседневной жизни часто приходится сталкиваться с проблемой отсутствия некото- рой информации. Весьма типичны ситуации, когда, например, "дата рождения неизвестна", "имя докладчика будет объявлено дополнительно", "местонахождение объекта в данный момент неизвестно" и т.д. Поэтому в системах баз данных должен существовать механизм обработки подобных ситуаций. На практике наиболее типичный подход к решению этой проблемы (используемый, в частности, в языке SQL и, следовательно, во многих коммер- ческих продуктах) основан на применении неопределенных значений (NULL-значений) и трехзначной логики. Например, вес детали, скажем, с номером 'Р7', может быть неизвес- тен, поэтому упрощенно можно сказать, что ее вес "является неопределенным". В более точном смысле это выражение означает следующее: а) известно, что деталь существует; б) несомненно, деталь имеет вес; в) чему равен вес, нам неизвестно.

Давайте рассмотрим этот пример более внимательно. Ясно, что мы не можем поместить истинное значение веса детали в атрибут WEIGHT кортежа, описывающего деталь с номером 'Р7'. Следовательно, все, что остается, — пометить или как-то обозначить, что значение атрибута WEIGHT этого кортежа является неопределенным. В дальнейшем наличие подоб- ной метки будет интерпретироваться как указание, что истинное значение атрибута неиз- вестно. Для удобства можно неформально сказать, что атрибут WEIGHT "содержит неопре- деленное значение" или что значение этого атрибута "равно NULL". На практике подобные выражения действительно широко используются. Однако следует четко понимать, что по- добные выражения неформальны и несколько неточны, поскольку, говоря, что значение атрибута WEIGHT в кортеже является неопределенным или равно NULL, мы на самом деле имеем в виду, что кортеж вообще не содержит никакого значения атрибута WEIGHT. По- этому широко распространенные выражения "неопределенное значение" и "значение NULL" использовать не рекомендуется, так как это "неопределенное значение (NULL)" на самом де- ле не значение, а всего лишь некая отметка или обозначение.

В следующем разделе будет показано, что при вычислении любого скалярного срав- нения, в котором какой-либо из операндов не определен (содержит NULL), вместо значе- ния true (истина) или false (ложь) будет получено логическое значение unknown (неизвестно). Причиной такого состояния дел является принятая нами интерпретация обозначения NULL как указателя "значение неизвестно". Если значение переменной А не- известно, то неизвестен и результат любого ее сравнения, например вида А > В, причем независимо от значения В (даже если предположить, что значение переменной В также неизвестно). В частности, следует отметить, что два неопределенных значения (NULL) нельзя считать равными одно другому, поэтому, если обе переменные, А и В, содержат неопределенные значения (NULL), результатом сравнения А = В всегда будет значение

unknown, а не true. Однако эти переменные не считаются и неравными, т.е. результатом сравнения А Ф В также будет значение unknown. Концепция неопределенных значений, по крайней мере в общепринятом смысле, неизбежно приводит нас к необходимости ис- пользования логики с тремя логическими значениями: true (истина), false (ложь) и unknown (неизвестно).

Прежде чем продолжить обсуждение, автор данной книги считает необходимым еще раз заявить, что он полностью разделяет мнение многих авторов о том, что неопределенные значения (NULL) и трехзначная логика являются ошибочными понятиями и им нет места в четких формальных системах, подобных реляционной модели1. Однако, оставляя все на своих местах, ему не хотелось бы лишать читателя возможности обсудить неопределенные значения и трехзначную логику, поэтому в настоящее издание и включена данная глава.

План главы таков. Непосредственно после введения в разделе 18.2 без излишнего не- доверия и критики описываются основные идеи, на которых базируется концепция неоп- ределенных значений и трехзначной логики. (Суть в том, что невозможно строго и спра- ведливо критиковать любые идеи без их предварительного описания.) Затем в разде- ле 18.3 обсуждаются некоторые более важные следствия изложенных идей и предприни- мается попытка обосновать мнение автора о том, что понятие неопределенных значений является ошибочным. В разделе 18.4 рассматриваются следствия наличия неопределен- ных значений в первичных и внешних ключах. Далее, в разделе 18.5, будет сделано от- ступление от основной темы с целью описания чаще всего встречающихся операций в контексте неопределенных значений и трехзначной логики — операций внешнего соеди- нения. В разделе 18.6 в очень сжатой форме описывается альтернативный способ обра- ботки отсутствующей информации с использованием специальных значений. В разде- ле 18.7 кратко рассматриваются аспекты языка SQL, имеющие отношение к обсуждае- мой проблеме. И наконец в разделе 18.8 приводится краткое резюме.

Например, утверждение о том, что кортеж с описанием некоторой детали не содержит значения атрибута WEIGHT, эквивалентно — по определению! — утверждению, что данный кор- теж вообще не является кортежем описания детали. Иначе говоря, можно утверждать, что этот кортеж не является реализацией соответствующего предиката. Суть заключается в том, что самой по себе попытки точно сформулировать назначение схемы с использованием неопре- деленных значений вполне достаточно, чтобы показать, почему эта идея не является логически последовательной. Одно из следствий этого факта состоит в том, что данную схему очень трудно последовательно объяснить. "Имеет смысл лишь украдкой взглянуть на эту проблему и особо не ломать над ней голову " [18.19].

- Однако следует особо отметить, что в любом из перечисленных выше случаев как таковой "отсутствующей информации" нет. Например, если для сотрудника 'Joe' значение комиссионно- го вознаграждения "неприменимо", значит, для него неприменима сама концепция выплаты комис- сионных и, таким образом, здесь нет никакой отсутствующей информации. (Тем не менее, если кортеж с описание.^ сотрудника 'Joe' содержит "неприменимое неопределенное значение" в ат- рибуте комиссионного вознаграждения, этот кортеж вообще не является кортежем с описанием сотрудника, поскольку он не является корректной реализацией предиката "Описание сотрудника".)

Еще одно предварительное замечание. Существует множество причин, не позволяю- щих поместить истинное значение в тот или иной атрибут кортежа, и неизвестность это- го значения — только одна из возможных причин. Среди других причин следует назвать такие, как "значение неприменимо", "значения не существует" и т.д. [18.5]2. Действи- тельно, в [5.2] Кодд предложил использовать в реляционной модели не одно, а два вида

неопределенных значений: одно из них — "значение неизвестно", а второе — "значение неприменимо". В результате в предложенной Коддом реляционной модели используется уже не трех-, а четырехзначная логика. Автор данной книги возражает против подобных предложений в этой и во всех других своих работах (например, в [18.5]). В данной главе мы сосредоточимся только на одном виде неопределенных значений, а именно— на "значение неизвестно". На него мы достаточно часто, но не всегда, будем ссылаться с помощью аббревиатуры UNK (от "unknown" — "неизвестно").

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]