
- •Базы данных, знаний и экспертные системы
- •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 Стратегии решений организации поиска
34
Н_СОТР |
ФАМ |
Н_ОТД |
ТЕЛ |
1 |
Иванов |
1 |
11-22-33 |
|
|
|
|
2 |
Петров |
1 |
11-22-33 |
3 |
Сидоров |
2 |
33-22-11 |
|
|
|
|
Таблица 15.2 Отношение СОТРУДНИКИ_ОТДЕЛЫ Отношение ПРОЕКТЫ (Н_ПРО, ПРОЕКТ): Функциональные зависимости:
Н_ПРО ПРОЕКТ
Н_ПРО |
ПРОЕКТ |
|
|
1 |
Космос |
|
|
2 |
Климат |
|
|
Таблица 15.3 Отношение ПРОЕКТЫ Отношение ЗАДАНИЯ (Н_СОТР, Н_ПРО, Н_ЗАДАН): Функциональные зависимости:
{Н_СОТР, Н_ПРО} Н_ЗАДАН
Н_СОТР |
Н_ПРО |
Н_ЗАДАН |
1 |
1 |
1 |
|
|
|
1 |
2 |
1 |
2 |
1 |
2 |
|
|
|
3 |
1 |
3 |
3 |
2 |
2 |
|
|
|
Таблица 15.4 Отношения ЗАДАНИЯ
2.5 . Анализ декомпозированных отношений
Отношения, полученные в результате декомпозиции, находятся в 2НФ. Действительно, отношения СОТРУДНИКИ_ОТДЕЛЫ и ПРОЕКТЫ имеют простые ключи, следовательно автоматически находятся в 2НФ, отношение ЗАДАНИЯ имеет сложный ключ, но единственный неключевой атрибут Н_ЗАДАН функционально зависит от всего ключа {Н_СОТР, Н_ПРО}.
Часть аномалий обновления устранена. Так, данные о сотрудниках и проектах теперь хранятся в различных отношениях, поэтому при появлении сотрудников, не участвующих ни в одном проекте просто добавляются кортежи в отношение СОТРУДНИКИ_ОТДЕЛЫ. Точно также, при появлении проекта, над которым не работает ни один сотрудник, просто вставляется кортеж в отношение ПРОЕКТЫ.
Фамилии сотрудников и наименования проектов теперь хранятся без избыточности. Если сотрудник сменит фамилию или проект сменит наименование, то такое обновление будет произведено в одном месте.
35
Если по проекту временно прекращены работы, но требуется, чтобы сам проект сохранился, то для этого проекта удаляются соответствующие кортежи в отношении ЗАДАНИЯ, а данные о самом проекте и данные о сотрудниках, участвовавших в проекте, остаются в отношениях ПРОЕКТЫ и СОТРУДНИКИ_ОТДЕЛЫ.
Тем не менее, часть аномалий разрешить не удалось.
2.5.1Оставшиеся аномалии вставки (INSERT)
Вотношение СОТРУДНИКИ_ОТДЕЛЫ нельзя вставить кортеж (4, Пушников, 1, 33-22-11), т.к. при этом получится, что два сотрудника из 1-го отдела (Иванов и Пушников) имеют разные номера телефонов, а это противоречит модели предметной области. В этой ситуации можно предложить два решения, в зависимости от того, что реально произошло в предметной области. Другой номер телефона может быть введен по двум причинам - по ошибке человека, вводящего данные о новом сотруднике, или потому что номер в отделе действительно изменился. Тогда можно написать триггер, который при вставке записи о сотруднике проверяет, совпадает ли телефон с уже имеющимся телефоном у другого сотрудника этого же отдела. Если номера отличаются, то система должна задать вопрос, оставить ли старый номер в отделе или заменить его новым. Если нужно оставить старый номер (новый номер введен ошибочно), то кортеж с данными о новом сотруднике будет вставлен, но номер телефона будет у него будет тот, который уже есть в отделе (в данном случае, 11-22-33). Если же номер в отделе действительно изменился, то кортеж будет вставлен с новым номером, и одновременно будут изменены номера телефонов у всех сотрудников этого же отдела. И в том и в другом случае не обойтись без разработки громоздкого триггера.
Причина аномалии - избыточность данных, порожденная тем, что в одном отношении хранится разнородная информация (о сотрудниках и об отделах).
Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода в виде триггеров.
2.5.2Оставшиеся аномалии обновления (UPDATE)
Одни и те же номера телефонов повторяются во многих кортежах отношения. Поэтому если в отделе меняется номер телефона, то такие изменения необходимо одновременно выполнить во всех местах, где этот номер телефона встречаются, иначе отношение станет некорректным. Таким образом, обновление базы данных одним действием реализовать невозможно. Необходимо написать триггер, который при обновлении одной записи корректно исправляет номера телефонов в других местах.
Причина аномалии - избыточность данных, также порожденная тем, что в одном отношении хранится разнородная информация.
36
Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода в виде триггеров.
2.5.3Оставшиеся аномалии удаления (DELETE)
При удалении некоторых данных по-прежнему может произойти потеря другой информации. Например, если удалить сотрудника Сидорова, то будет потеряна информация о том, что в отделе номер 2 находится телефон 33-22-11.
Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и об отделах).
Вывод - логическая модель данных неадекватна модели предметной области. База данных, основанная на такой модели, будет работать неправильно.
Заметим, что при переходе ко второй нормальной форме отношения стали почти адекватными предметной области. Остались также трудности в разработке базы данных, связанные с необходимостью написания триггеров, поддерживающих целостность базы данных. Эти трудности теперь связаны только с одним отношением СОТРУДНИКИ_ОТДЕЛЫ.
2.5.43НФ (Третья Нормальная Форма)
Определение 15.4. Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.
Определение 15.5. Отношение находится в третьей нормальной форме (3НФ) тогда и только тогда, когда отношение находится в 2НФ и все неключевые атрибуты взаимно независимы.
Отношение СОТРУДНИКИ_ОТДЕЛЫ не находится в 3НФ, т.к. имеется функциональная зависимость неключевых атрибутов (зависимость номера телефона от номера отдела):
Н_ОТД ТЕЛ Для того, чтобы устранить зависимость неключевых атрибутов, нужно
произвести декомпозицию отношения на несколько отношений. При этом те неключевые атрибуты, которые являются зависимыми, выносятся в отдельное отношение.
Отношение СОТРУДНИКИ_ОТДЕЛЫ декомпозируем на два отношения - СОТРУДНИКИ, ОТДЕЛЫ.
Отношение СОТРУДНИКИ (Н_СОТР, ФАМ, Н_ОТД): Функциональные зависимости:
Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника:
Н_СОТР ФАМ Н_СОТР
Н_ОТД Н_СОТР
ТЕЛ
Н_СОТР |
ФАМ |
Н_ОТД |
|
|
|