- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
insert into имя_таблицы default values
Значения по умолчанию задаются для каждого столбца при создании таблицы. В частности, в качестве значения по умолчанию можно задать и пустое значение. Поэтому единственная цель, с которой выше вводилось понятие пустого значения – это показать отличие понятия пустого значения от понятия неопределенного значения.
2.3. Неопределенные значения
Для маркировки неопределенных значений используется специальное зарезервированное ключевое слово null. Null-значение может быть присвоено переменной любого типа (числового, логического, строкового, даты, даты и времени и т.д.).
2.3.1. Интерпретации
Null-значения допускают следующие интерпретации:
1)значение неизвестно (пока),
2)значение неприменимо.
Рассмотрим пример (табл. 2.1).
Null-значение номера паспорта в 1-ом случае интерпретируется как неизвестное, поскольку речь идет о совершеннолетнем гражданине. Во 2-ом случае значение номера паспорта интерпретируется как неприменимое (до тех пор, пока текущая дата рассмотрения этих данных не будет соответствовать совершеннолетнему возрасту). В 3-ем случае неясно, какую можно дать интерпретацию
Таблица 2.1.: Интерпретации null-значения
Паспортные данные
№ п/п |
Фамилия |
. . . |
Д.р. |
№ паспорта |
Интерпретация |
1 |
Иванов |
|
01.01.1980 |
null |
неизвестно |
2 |
Петров |
|
02.01.2000 |
null |
неприменимо |
3 |
Сидоров |
|
null |
null |
??? |
null-значению номера паспорта, поскольку год рождения имеет null-значение (интерпретируемое как неизвестное). Кроме того, с течением времени интерпретация null-значения номера паспорта во 2-ом случае изменится.
Таким образом, интерпретация null-значений существенно зависит от семантики данных. Правила вычисления выражений с null-значениями, реализованные в СУБД, следует рассматривать лишь как правила, действующие в системе по умолчанию.
2.3.2. Правила вычисления выражений
Как формулируются правила вычисления выражений с null-значениями?
1. Как обычно, вычисление выражения заключается в последовательном выполнении отдельных операций согласно их приоритету и подстановке полученных значений в выражение. Например, при x, равном 3, имеем последовательно
(1 + 2) x2; (1 + 2) 32; 3 32; 3 9; 27
2. Как общее правило, результат выполнения отдельной операции с null-значением в качестве операнда считается null-значением. Например, при x, имеющим null-значение, имеем
(1 + 2) x2; (1 + 2) null2; 3 null2; 3 null; null
3. Исключением из общего правила являются правила выполнения операций конъюнкции (and) и дизъюнкции (or) в условиях действия законов поглощения:
false and x; x and false := false;
true or x; x or true := true
Здесь символ подстановки «:=» разделяет список выражений и значение, которым они могут быть заменены. Таким образом, законы поглощения имеют место при любых значениях операнда, в том числе и при значении null:
false and null; null and false := false;
true or null; null or true := true
Почему правила выполнения операций конъюнкции и дизъюнкции являются исключением из общего правила? Дело в том, что в современных языках программирования вместо обычных операций конъюнкции и дизъюнкции (обозначаемых как and и or) фактически используются (без изменения обозначений) операции условной конъюнкции и условной дизъюнкции (их следовало бы обозначать как cand и cor). В этих условных операциях вычисление операндов проводится слева направо. При этом если левый операнд оказывается поглощающим элементом для операции, то правый операнд не вычисляется и результат операции полагается равным поглощающему элементу.
Примечание. Это приводит, например, к корректности следующего оператора, в котором a[1. . . n] – массив из n элементов: if i < n cand a[i] > a[i + 1] then a[i], a[i + 1] := a[i + 1], a[i] (Здесь во фразе then использован оператор кратного присваивания, с помощью которого соседние элементы массива меняются значениями.)
Следовательно, в операциях условной конъюнкции и дизъюнкции false и true являются левыми поглощающими элементами соответственно. Но тогда они должны быть и правыми поглощающими элементами, поскольку иначе не выполнялся бы закон коммутативности в случае определенности обоих операндов.
Как можно кратко и в общем виде сформулировать правила интерпретации null-значений в контексте различных операций?
1.В контексте любых операций, за исключением логических операций отрицания, конъюнкции и дизъюнкции, null-значение в качестве операнда интерпретируется как неприменимое, и поэтому результатом операции также является null-значение.
2.В контексте логических операций отрицания, конъюнкции и дизъюнкции null-значение в качестве операнда интерпретируется как неизвестное. Тогда, если результат выполнения операции не зависит от подстановки вместо null-значения значения false или true, то этот независящий от подстановки результат и полагается в качестве результата операции. В противном случае результат не определен, и, следовательно, результатом является null-значение. Таким образом, имеем следующие правила работы с null-значениями в контексте логических операций (табл. 2.2).
Таблица 2.2.: Таблицы истинности
x |
not x |
false |
true |
|
|
null |
null |
|
|
true |
false |
|
|
x |
y |
x and y |
x or y |
false |
false |
false |
false |
false |
null |
false |
null |
false |
true |
false |
true |
|
|
|
|
null |
false |
false |
null |
null |
null |
null |
null |
null |
true |
null |
true |
true |
false |
false |
true |
true |
null |
null |
true |
true |
true |
true |
true |
|
|
|
|