- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
С другими агрегирующими функциями (максимум, минимум, среднее значение и прочие) дело обстоит проще, так как они вычисляют результат на основе значений атрибутов, а значит, в аргументах этих операций никак не могут быть !-значения, т. к. непонятно, как с ними работать для выдачи ожидаемого результата, поэтому эти агрегирующие функции просто пропускают !-значения, словно
вотношении вовсе нет кортежей с таким значением рассматриваемого атрибута.
Ачто будет, если совместить функцию подсчета кортежей с другой агрегирующей функцией? Например, выражение SUM(a)/COUNT(*), где a — некоторый атрибут числового домена. Если в кортежах среди значений атрибута a есть !-значения, то значение этого выражения не будет совпадать, казалось бы, с эквивалентной формулой AVG(a), зато оно совпадает со значение выражения SUM(a)/COUNT(a), поэтому в плане совмещения функции подсчета кортежей с другими агрегатными
функциями нужно работать аккуратно.
5.5. Проблема интерпретации
Проблема интерпретации в том, что возможны ситуации, когда трехзначная логика не отражает состояние реального мира, т. е. можно считать, что трехзначная логика не является адекватным инструментом для интерпретации состояния реального мира.
Пример, иллюстрирующий эту проблему, приведен в [1] на стр. 746.
5.6. ω-значения и ограничения целостности
Ограничение целостности неформально можно рассматривать как логическое выражение, результат вычисления которого не должен быть равен F. Следовательно, ограничение целостности не будет нарушено, если результат его вычисления будет равен значению U. Безусловно, в этом случае точнее было бы сказать, что ничего неизвестно о том, будет ли нарушено данное ограничение целостности. Но с известной долей приближения вполне можно утверждать, что если в условии значение U рассматривается как F, то в ограничениях целостности оно рассматривается как T.
Первичные ключи
Согласно ограничению целостности сущностей ни в каком кортеже базовых отношений атрибуты первичного ключа не могут принимать !-значение.
Если бы !-значение вводилось как равноправный элемент множества значений (домена) атрибута, то ограничение целостности сущностей противоречило бы само себе. Действительно, если некоторый ключ K является альтернативным ключом, в котором допускаются !-значения, то он не может использоваться в качестве первичного ключа, поскольку для него нарушается требование ограничения целостности сущности. Тогда в каком смысле ключ является потенциальным? И наоборот, если выдвинуть требование, что альтернативные ключи также не могут содержать !-значения, то ограничение целостности сущности будет относиться ко всем потенциальным ключам, а не только к первичным ключам. В любом из этих двух вариантов указанное правило выглядит не вполне приемлемым.
Поэтому это еще один довод в пользу использования специального !-значения. Т. е. ограничение целостности сущностей можно переформулировать так: никакой компонент первичного ключа любой базового отношения не может содержать никакие специальные значения (в частности, !- значения).
Заметим, что ограничение целостности сущностей является рекомендацией, а не законом. Т. е. оно может не использоваться, если на то есть веские причины.
Внешние ключи
Напомним, что ограничение ссылочной целостности состоит в том, что база данных не должна содержать никаких несогласованных значений внешних ключей. Эту формулировку можно оставить
29