- •Е.И. Асташева сетевые базы данных
- •Введение
- •1. Введение в базы данных
- •1.1. Что такое база данных
- •1.2. Структура базы данных
- •2. Иерархическая и сетевая модели организации данных
- •3. Реляционная модель базы данных
- •3.1. Домены и отношения
- •3.2. Целостность данных
- •3.3. Реляционная алгебра
- •3.4. Реляционное исчисление
- •4. Проектирование логической структуры базы данных
- •4.1. Концепция функциональной зависимости
- •4.2. Нормализация базы данных
- •4.3. Объектное моделирование
- •5. Функции защиты базы данных
- •5.1. Транзакции и параллелизм
- •5.2. Безопасность и целостность баз данных
- •6. Дополнительные аспекты реляционной технологии
- •6.1. Представления
- •6.2. Повышение производительности с помощью оптимизации
- •6.3. Домены, отношения и типы данных
- •6.4. Неопределенные значения и трехзначная логика
- •6.5. Распределенные базы данных
- •7. Технология физического хранения и доступа к данным
- •7.1. Основные этапы доступа к базе данных
- •7.2. Управление страницами
- •7.3. Процедура индексирования и хеширования
- •7.4. Сжатие данных
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
6.4. Неопределенные значения и трехзначная логика
При работе с данными достаточно часто сталкиваются с проблемой недостатка информации, для решения которой в СУБД часто применяют неопределенные (NULL) значения и трехзначную логику. Такая ситуация, например, может возникнуть, если по предмету оценка неизвестна или не выставлена - в этом случае точное обоснованное значение соответствующего кортежа не указывается, хотя студент и предмет, который он сдает, существуют.
В связи с этим может возникнуть вопрос, связанный с тем, что в результате выполнения манипуляции над данными один или несколько операндов имеют значение NULL, а следовательно будет получено неизвестное значение в качестве результата. Поэтому, например, при сравнении X и Y, если значение X неопределенное, будет получено значение НЕИЗВЕСТНОЕ, а не ИСТИНА или ЛОЖЬ. Более того, если X и Y приняли неопределенное значение, то выполнение сравнения X и Y также даст в качестве результата значение НЕИЗВЕСТНОЕ, так как оба значения нельзя рассматривать как равные друг другу.
Для идентификации подобных значений требуются специальные средства СУБД, важнейшим из которых есть оператор ЕСЛИ НЕОПРЕДЕЛЕННОЕ, определяющий, является ли значение-операнд неопределенным. Кстати говоря, только выполнение этого оператора над неопределенными значениями дает значение ИСТИНА или ЛОЖЬ; в качестве результата выполнения других операторов будет получено значение НЕИЗВЕСТНОЕ.
Это свойство можно использовать, скажем, для контроля целостности данных, если значение атрибута не должно принимать неопределенных значений, например,
СОЗДАТЬ ОГРАНИЧЕНИЕ ЦЕЛОСТНОСТИ RULE6 ДЛЯ ВСЕХ SРР(ЕСЛИ_НЕОПРЕДЕЛЕННОЕ(SРР.Р"))
НЕ ВЫПОЛНЯТЬ ПРИ НАРУШЕНИИ ПРАВИЛА
позволяющее избежать неопределенных значений наименования предмета в отношении SPP. Приведем таблицы, содержащие возможные значения наиболее важных логических функций с учетом трехзначной логики (здесь неизвестное значение обозначено как "Н" - очевидно, что неопределенное значение NULL и неизвестное значение, как результат выполнения операции - это разные вещи).
Таблица 6.1
Возможные значения логической функций И
И |
ИСТИНА |
ЛОЖЬ |
NULL |
ИСТИНА |
ИСТИНА |
ЛОЖЬ |
И |
ЛОЖЬ |
ЛОЖЬ |
ЛОЖЬ |
ЛОЖЬ |
NULL |
И |
ЛОЖЬ |
И |
Таблица 6.2
Возможные значения логической функции ИЛИ
ИЛИ |
ИСТИНА |
ЛОЖЬ |
И |
ИСТИНА |
ИСТИНА |
ИСТИНА |
ИСТИНА |
ЛОЖЬ |
ИСТИНА |
ЛОЖЬ |
И |
NULL |
ИСТИНА |
И |
И |
Таблица 6.3
Возможные значения логической функции НЕ
Необходимо обратить внимание на то, что домены неопределенных значений содержать не могут, например по причине того, что в результате проверки вхождения выражения в домен будет всегда получаться значение ИСТИНА или НЕИЗВЕСТНОЕ.
Введение неопределенного значения, естественно, влияет на реляционные выражения. Например, операция выборки модифицируется таким образом, чтобы в качестве результата возвращались только те кортежи, для которых условие выборки принимает только значение ИСТИНА, а для значений ЛОЖЬ или НЕИЗВЕСТНОЕ не включаются.