- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
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]). В данной главе мы сосредоточимся только на одном виде неопределенных значений, а именно— на "значение неизвестно". На него мы достаточно часто, но не всегда, будем ссылаться с помощью аббревиатуры UNK (от "unknown" — "неизвестно").