- •Глава 1. Базы данных и системы управления 9
- •Глава 2. Организация доступа к данным 45
- •Глава 3. Реляционная алгебра 60
- •Глава 4. Основы sql 67
- •Глава 5. Проектирование реляционных баз данных 89
- •Глава 6. Взаимодействие sql с приложениями 116
- •Глава 7. Некоторые проблемы администрирования баз данных 154
- •Базы данных и системы управления
- •Файловые системы
- •Концепция баз данных
- •Основные функции субд
- •Непосредственное управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация
- •Поддержка языков баз данных
- •Трехуровневая модель архитектуры систем баз данных
- •Модели данных
- •Характеристика связей
- •Компьютерно-ориентированные модели данных
- •Реляционный подход
- •Ключи и целостность реляционных данных
- •Моделирование концептуальной схемы базы данных
- •Организация доступа к данным
- •Страницы и файлы
- •Индексирование
- •Структуры типа б-дерева
- •Хеширование
- •Методы сжатия
- •Метод дифференциального сжатия
- •Иерархические методы сжатия
- •Кодирование по методу Хаффмена
- •Реляционная алгебра
- •Традиционные реляционные операции
- •Специальные реляционные операции
- •Дополнительные реляционные операции
- •Примеры использования реляционной алгебры для выражения словесных запросов в виде формул
- •Основы sql
- •Типы данных
- •Строковые типы данных
- •Битовые типы данных
- •Точные числовые типы данных
- •Вещественные числовые типы данных
- •Календарные типы данных
- •Значения null
- •Создание и обслуживание таблиц
- •Запрос на выборку
- •Статистические функции
- •Создание соединений
- •Вложенные запросы
- •Запрос на объединение
- •Запросы, выполняющие реляционные операции вычитания, пересечения и деления
- •Запросы на изменение
- •Перекрестные запросы
- •Проектирование реляционных баз данных
- •Нормализация отношений
- •Функциональные зависимости
- •Н ормальные формы, обоснованные функциональными зависимостями
- •Нормальная форма Бойса–Кодда
- •Нормальные формы, обоснованные более сложными зависимостями
- •Процедура нормализации и проектирования
- •Пример проектирования базы данных
- •Назначение и предметная область
- •Проектирование базы данных
- •Взаимодействие sql с приложениями
- •Встраивание sql-операторов в программный код
- •Тип курсора
- •Триггеры
- •Хранимые процедуры
- •Стандартные интерфейсы для доступа к данным
- •Информационное окружение веб-сервера
- •Стандарт odbc
- •Уровни соответствия
- •Уровень соответствия odbc
- •Задание имени источника данных odbc
- •Расширяемый язык разметки xml
- •Xml как язык разметки
- •Материализация хмl-документов с помощью xslt
- •Создание хмl-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Нормальная форма Бойса–Кодда
До сих пор мы предполагали для простоты, что каждое отношение имеет только один потенциальный ключ – первичный ключ. Данное выше определение 3НФ не совсем подходит, если
отношение имеет два или более потенциальных ключа;
два потенциальных ключа являются сложными и они перекрываются (имеют хотя бы один общий атрибут).
Поэтому определение 3НФ было дополнено нормальной формой Бойса-Кодда (Boyce-Codd) – НФБК. Его можно сформулировать так:
Отношение находится в нормальной форме Бойса-Кодда тогда и только тогда, когда детерминанты являются потенциальными ключами.
Другими словами, на диаграмме функциональных зависимостей стрелки должны начинаться только с потенциальных ключей.
Комбинация таких условий не часто встречается на практике, поэтому для отношений без таких условий 3НФ и НФБК эквиваленты.
Дадим еще одно определение: Таблица находится в нормальной форме Бойса-Кодда (НФБК), тогда и только тогда, когда любая функциональная зависимость между ее полями сводится к неприводимой функциональной зависимости от потенционального ключа.
Рассмотрим пример, включающий два неперекрывающихся потенциальных ключа:
Поставщик (П№, Имя_П, Статус, Город),
г де атрибуты П№ и Имя_П являются потенциальными ключами, а атрибуты Статус и Город совершенно независимы. Диаграмма функциональных зависимостей изображена на рис. 5.4.1. Это отношение находится в НФБК. Здесь все детерминанты являются потенциальными ключами, а все стрелки начинаются с потенциальных ключей.
Приведем примеры отношений, в которых потенциальные ключи перекрываются.
Первый пример: Отношение Поставки (П№, Имя_П, Д№, Кол-во).
В этом отношении содержится некоторая избыточность, которая обуславливает аномалии обновления. Потенциальными ключами здесь являются {П№, Д№} и {Имя_П, Д№}, а П№ и Имя_П взаимно определяют друг друга. Это отношение не находится во второй нормальной форме и может быть разделено на две проекции (П№, Имя_П) и (П№, Д№, Кол-во) для получения неприводимых функциональных зависимостей. Но такую же декомпозицию можно предложить исходя из того, что отношение не находится в НФБК, т.к. содержит два детерминанта, которые не являются потенциальными ключами (П№ и Имя_П – детерминанты, поскольку определяют друг друга):
Поставщик (П№, Имя_П) и Поставки1 (П№, Д№, Кол-во).
Второй пример: Отношение СДП (С, Д, П),
где атрибуты обозначают Студенты, Дисциплины и Преподаватели. Кортеж отношения СДП означает, что некоторый студент С обучается некоторой дисциплине Д у некоторого преподавателя П. При этом есть ограничения:
Каждый студент изучает данный предмет у одного преподавателя;
Каждый преподаватель ведет только один предмет (но каждый предмет может преподаваться несколькими преподавателями).
Из первого ограничения следует зависимость {С,Д}П, из второго – ПД. На рис. 5.4.2 показан пример таблицы и диаграммы функциональных зависимостей такого отношения. В рассматриваемом примере есть два перекрывающихся потенциальных ключа – {С,Д} и {С,П}. Отношение находится в 3НФ (присутствующая здесь транзитивная зависимость касается ключевого атрибута), но не находится в НФБК и характеризуется некоторыми аномалиями обновления. Например, если удалить информацию о том, что Олег изучает физику, то мы потеряем информацию о том, что Петров преподает физику. Эта проблема вызвана тем, что П является детерминантом, но не является потенциальным ключом. Для решения этой проблемы исходное отношение надо разбить на две проекции: СП и ПД.
Т аким образом, концепция НФБК позволяет избавиться от некоторых проблем, присущих отношениям в 3НФ. Определение НФБК проще определения 3НФ, т.к. в нем не используются понятия нормальных форм, первичного ключа и транзитивной зависимости. Кроме того, понятие потенциального ключа может быть заменено введением более фундаментального понятия функциональной зависимости. Но, с другой стороны, концепции первичного ключа, транзитивной зависимости и т.д. полезны на практике, поскольку позволяют представить идею постепенного процесса, выполняемого разработчиком для приведения произвольного отношения к эквивалентному набору отношений в НФБК.