
- •Базы данных, знаний и экспертные системы
- •1 . Элементы реляционной алгебры
- •1.1 . Обзор реляционной алгебры
- •1.2 . Замкнутость реляционной алгебры
- •1.3 . Отношения, совместимые по типу
- •1.3.1 Оператор переименования атрибутов
- •1.4.1 Объединение
- •1.4.2 Пересечение
- •1.4.3 Вычитание
- •1.4.4 Декартово произведение
- •1.5 . Специальные реляционные операторы
- •1.5.1 Выборка (ограничение, селекция)
- •1.5.2 Проекция
- •1.5.3 Соединение
- •1.5.3.1 Общая операция соединения
- •1.5.3.2 Тэта-соединение
- •1.5.3.3 Экви-соединение
- •1.5.3.4 Естественное соединение
- •1.5.3.5 Деление
- •1.6 . Примеры использования реляционных операторов
- •1.6.1 Зависимые реляционные операторы
- •1.6.2 Оператор соединения
- •1.6.3 Оператор пересечения
- •1.6.4 Оператор деления
- •1.6.5 Примитивные реляционные операторы
- •1.6.6 Оператор декартового произведения
- •1.6.7 Оператор проекции
- •1.6.8 Оператор выборки
- •1.6.9 Операторы объединения и вычитания
- •1.6.10 Запросы, невыразимые средствами реляционной алгебры
- •1.7 . Выводы
- •2 Нормальные формы отношений
- •2.1 Этапы разработки базы данных
- •2.2 . Критерии оценки качества логической модели данных
- •2.2.1 Адекватность базы данных предметной области
- •2.2.2 Легкость разработки и сопровождения базы данных
- •2.2.4 Скорость операций выборки данных
- •2.3 . Основной пример
- •2.3.1 . 1НФ (Первая Нормальная Форма)
- •2.3.1.1 Аномалии обновления
- •2.3.1.2 Аномалии вставки (INSERT)
- •2.3.1.3 Аномалии обновления (UPDATE)
- •2.3.1.4 Аномалии удаления (DELETE)
- •2.4 . Функциональные зависимости
- •2.4.1 Определение функциональной зависимости
- •2.4.2 Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •2.4.3 2НФ (Вторая Нормальная Форма)
- •2.5 . Анализ декомпозированных отношений
- •2.5.1 Оставшиеся аномалии вставки (INSERT)
- •2.5.2 Оставшиеся аномалии обновления (UPDATE)
- •2.5.3 Оставшиеся аномалии удаления (DELETE)
- •2.5.4 3НФ (Третья Нормальная Форма)
- •2.6 . Алгоритм нормализации (приведение к 3НФ)
- •2.7 . Анализ критериев для нормализованных и ненормализованных моделей данных
- •2.7.1 Сравнение нормализованных и ненормализованных моделей
- •2.9 . Выводы
- •3 . Нормальные формы более высоких порядков
- •3.2 . 4НФ (Четвертая Нормальная Форма)
- •3.3 . 5НФ (Пятая Нормальная Форма)
- •3.4 . Продолжение алгоритма нормализации (приведение к 5НФ)
- •3.5 . Выводы
- •4 . ПОДЪЯЗЫК ДАННЫХ, ОСНОВАННЫЙ НА РЕЛЯЦИОННОЙ АЛГЕБРЕ
- •4.1 1. Введение
- •4.2 . Традиционный набор операций
- •4.2.1 Специальные операции над отношениями
- •4.2.2 4. Примеры выборки
- •4.2.3 Примеры операций запоминания
- •4.2.4 Заключение
- •5 . ПОДЪЯЗЫК ДАННЫХ, ОСНОВАННЫЙ НА РЕЛЯЦИОННОМ ИСЧИСЛЕНИИ
- •5.1 . Введение
- •5.2 . Допущения и определения
- •5.3 . Операции выборки
- •5.4 . Операции запоминания
- •5.5 . Библиотечные функции
- •5.6 . Заключение
- •6 . Query-by-Example: язык запросов по образцу
- •6.1 . Выборка
- •6.2 . Вставки, удаления, модификации
- •6.3 . Создание таблицы
- •6.4 . Заключение
- •6.5 . Приложение
- •7 . Элементы языка SQL
- •7.1 . Операторы SQL
- •Операторы защиты и управления данными
- •7.2 . Примеры использования операторов манипулирования данными
- •INSERT - вставка строк в таблицу
- •UPDATE - обновление строк в таблице
- •DELETE - удаление строк в таблице
- •7.3 . Примеры использования оператора SELECT
- •7.3.1 Отбор данных из одной таблицы
- •7.3.2 Отбор данных из нескольких таблиц
- •7.3.3 Использование имен корреляции (алиасов, псевдонимов)
- •7.3.4 Использование агрегатных функций в запросах
- •7.3.5 Использование агрегатных функций с группировками
- •7.3.6 Использование подзапросов
- •7.3.7 Использование объединения, пересечения и разности
- •7.3.9 Синтаксис оператора выборки
- •7.3.10 . Синтаксис соединенных таблиц
- •7.3.11 . Синтаксис условных выражений раздела WHERE
- •7.4 . Порядок выполнения оператора SELECT
- •7.4.1 Стадия 1. Выполнение одиночного оператора SELECT
- •7.4.2 Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT
- •7.4.3 Стадия 3. Упорядочение результата
- •7.5 . Как на самом деле выполняется оператор SELECT
- •7.6 . Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL)
- •7.6.1 Оператор декартового произведения
- •7.6.2 Оператор проекции
- •7.6.3 Оператор выборки
- •7.6.4 Оператор объединения
- •7.6.5 Оператор вычитания
- •7.6.6 Оператор соединения
- •7.6.7 Оператор пересечения
- •7.6.8 Оператор деления
- •7.7 . Выводы
- •8 . Транзакции и целостность баз данных
- •8.1 . Пример нарушения целостности базы
- •8.2 . Понятие транзакции
- •8.2.1 Ограничения целостности
- •8.2.2 Классификация ограничений целостности
- •8.2.2.1 Классификация ограничений целостности по способам реализации
- •8.2.2.2 Классификация ограничений целостности по времени проверки
- •8.2.2.3 Классификация ограничений целостности по области действия
- •8.2.2.3.1 Ограничения домена
- •8.2.2.3.2 Ограничения атрибута
- •8.2.2.3.3 Ограничения кортежа
- •8.2.2.3.4 Ограничения отношения
- •8.2.2.3.5 Ограничения базы данных
- •8.3 . Реализация декларативных ограничений целостности средствами SQL
- •8.3.1 Общие принципы реализации ограничений средствами SQL
- •8.3.2 Синтаксис ограничений стандарта SQL
- •8.3.3 Синтаксис операторов SQL, использующих ограничения
- •8.4 . Выводы
- •9 . Транзакции и параллелизм
- •9.1 . Работа транзакций в смеси
- •9.2 . Проблемы параллельной работы транзакций
- •9.2.1 Проблема потери результатов обновления
- •9.2.3 Проблема несовместимого анализа
- •9.2.3.1 Неповторяемое считывание
- •9.2.3.2 Фиктивные элементы (фантомы)
- •9.2.3.3 Собственно несовместимый анализ
- •9.3 . Конфликты между транзакциями
- •9.4 . Блокировки
- •9.4.1 Решение проблем параллелизма при помощи блокировок
- •9.4.1.1 Проблема потери результатов обновления
- •9.4.1.2 Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)
- •9.4.1.3 Проблема несовместимого анализа
- •9.4.1.3.1 Неповторяемое считывание
- •9.4.1.3.2 Фиктивные элементы (фантомы)
- •9.4.1.3.3 Собственно несовместимый анализ
- •9.5 . Разрешение тупиковых ситуаций
- •9.5.1 Преднамеренные блокировки
- •9.5.3 Метод временных меток
- •9.5.4 Механизм выделения версий данных
- •9.6 . Теорема Есварана о сериализуемости
- •9.7.1 Уровни изоляции
- •9.7.2 Синтаксис операторов SQL, определяющих уровни изоляции
- •9.8 . Выводы
- •10 . Транзакции и восстановление данных
- •10.1.1 Индивидуальный откат транзакции
- •10.1.2 Восстановление после мягкого сбоя
- •10.1.3 Восстановление после жесткого сбоя
- •11 . Представление знаний в интеллектуальных системах
- •11.1 . Введение
- •11.2 . Данные и знания. Основные определения
- •11.3.1 Особенности знаний:
- •11.6.1 Компоненты продукционных систем
- •11.6.2 Классификация ядер продукции.
- •11.6.3 Стратегии решений организации поиска
59
нетривиальная), то, согласно теореме Фейджина, отношение можно было бы декомпозировать без потерь на две проекции. Но пример 3 показывает, что таких декомпозиций нет (здесь мы воспользовались тем, что для доказательства возможности декомпозиции необходимо доказать ее для всех возможных состояний отношения, а для доказательства невозможности достаточно привести один контрпример). Поэтому в отношении нет никаких многозначных зависимостей.
Покажем, что отношение не находится в 5НФ. Для этого нужно привести пример нетривиальной зависимости соединения. Естественным кандидатом на
нее является . Если это действительно зависимость соединения, то она нетривиальна. Действительно, ни одно из множеств атрибутов
,
и
не совпадает с множеством всех атрибутов отношения
и не содержит потенциального ключа.
Но является ли такая декомпозиция именно зависимостью соединения? Для этого нужно показать, что декомпозиция на три проекции ,
и
является декомпозицией без потерь для любого состояния отношения
(именно здесь содержится ключевая тонкость, обычно пропускаемая при анализе конкретного состояния отношения
в примере 3, и именно здесь нам понадобятся знания о предметной области, выраженные в утверждении (ii)).
Как и в предыдущих доказательствах, нужно доказать, что для любого состояния отношения
.
Включение доказывается как в теореме Хеза. Такое включение выполняется всегда для любой декомпозиции отношения
.
Докажем включение .
Пусть кортеж . Это означает, что в проекции
содержится кортеж
, в проекции
содержится кортеж
, а в проекции
содержится кортеж
. По определению проекции, найдутся такие значения
,
,
атрибутов
,
и
соответственно, что отношение
содержит кортежи
,
и
. Но тогда по условию (ii) в отношении
содержится также и кортеж
. Этим доказано необходимое включение. Утверждение доказано.
3.4. Продолжение алгоритма нормализации (приведение к 5НФ)
Впредыдущей главе был описан алгоритм нормализации как алгоритм приведения отношений к 3НФ. Теперь мы можем продолжить этот алгоритм, доведя его до алгоритма приведения к 5НФ.
Шаг 4 (Приведение к НФБК). Если имеются отношения, содержащие несколько потенциальных ключей, то необходимо проверить, имеются ли функциональные зависимости, детерминанты которых не являются
60
потенциальными ключами. Если такие функциональные зависимости имеются, то необходимо провести дальнейшую декомпозицию отношений. Те атрибуты, которые зависят от детерминантов, не являющихся потенциальными ключами выносятся в отдельное отношение вместе с детерминантами.
Шаг 5 (Приведение к 4НФ). Если в отношениях обнаружены нетривиальные многозначные зависимости, то необходимо провести декомпозицию для исключения таких зависимостей.
Шаг 5 (Приведение к 5НФ). Если в отношениях обнаружены нетривиальные зависимости соединения, то необходимо провести декомпозицию для исключения и таких зависимостей.
3.5 . Выводы
Обобщением 3НФ на случай, когда отношение имеет более одного потенциального ключа, является нормальная форма Бойса-Кодда.
Отношение находится в нормальной форме Бойса-Кодда (НФБК) тогда и только тогда, когда детерминанты всех функциональных зависимостей являются потенциальными ключами.
Нормализация отношений вплоть до нормальной формы Бойса-Кодда основывалась на понятии функциональной зависимости и теореме Хеза, гарантировавшей, что декомпозиция будет происходить без потерь информации.
Дальнейшая нормализация связана уже с обобщением понятия функциональной зависимости.
Атрибуты (множества атрибутов) и
многозначно зависят от
, (
), тогда и только тогда, когда из того, что в отношении
содержатся кортежи
и
следует, что в отношении
содержится также и
кортеж к.
Корректность дальнейшей декомпозиции основывается на теореме Фейджина, которая говорит о том, что декомпозиция отношения на две проекции является декомпозицией без потерь тогда и только тогда, когда в отношении имеется некоторая многозначная зависимость.
Если в отношении имеется функциональная зависимость, то автоматически имеется и тривиальная многозначная зависимость, определяемая этой функциональной зависимостью.
Многозначная зависимость называется нетривиальной многозначной зависимостью, если не существует функциональных зависимостей
и
.
Отношение находится в четвертой нормальной форме (4НФ) тогда и только тогда, когда отношение находится в НФБК и не содержит нетривиальных многозначных зависимостей.
Имеют место зависимости специального вида, когда отношение не может быть подвергнуто декомпозиции без потерь на две проекции, но может быть декомпозировано на большее число проекций. Такие зависимости называются