- •Глава 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-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Непосредственное управление данными во внешней памяти
Эта функция поддерживает структуры внешней памяти, используемые как для хранения данных, непосредственно входящих в базу данных, так и для служебных целей, например, для ускорения доступа к данным в некоторых случаях (обычно для этого используются индексы).
Управление буферами оперативной памяти
СУБД обычно работают с базами данных значительного размера, по крайней мере, этот размер может быть больше доступного объема оперативной памяти. Если при обращении к любому элементу данных будет производиться обмен с внешней памятью, то вся система будет работать со скоростью доступа к устройствам внешней памяти. Практически единственным способом реального увеличения скорости работы является буферизация данных в оперативной памяти. Поэтому в развитых СУБД поддерживается собственный набор буферов оперативной памяти с собственной дисциплиной замены буферов.
Управление транзакциями
Транзакция – это последовательность операций над базой данных, рассматриваемых СУБД как единое целое. Либо транзакция успешно выполняется и СУБД фиксирует во внешней памяти изменения базы данных, произведенные этой транзакцией, либо ни одно из этих изменений никак не отражается на состоянии базы данных. Понятие транзакции необходимо для поддержания логической целостности (или согласованности) баз данных, которая обеспечивается возможностью восстановления базы данных, если какой-либо сбой сделал текущее состояние неправильным или подозрительным.
Существуют простые транзакции, такие как создание, изменение или удаление одной записи в одном файле. Но, как правило, транзакции представляют собой более сложные операции. Предположим, что в базе данных существует два банковских счета и необходимо перевести средства с одного счета на другой. Для этого нужно уменьшить на заданную сумму баланс одного счета и увеличить на ту же сумму баланс второго. Чтобы это сделать, потребуется выполнить две отдельные операции. Сбой в базе данных в момент между выполнением этих двух операций может привести к несогласованности данных: баланс второго счета не будет увеличен, в то время как баланс первого счета уменьшится. Нарушится целостность транзакции как логически неделимого целого. В таком случае лучше, чтобы не был выполнен ни один из операторов. Принцип целостности транзакций требует, чтобы транзакция выполнялась полностью или не выполнялась вовсе.
Каждая транзакция начинается при согласованном состоянии базы данных и оставляет это состояние согласованным после своего завершения. Система, поддерживающая процесс транзакции, обеспечивает гарантию, что если во время выполнения неких обновлений произошла ошибка (по любой причине), то все эти обновления будут аннулированы. Таким образом, транзакция или выполняется полностью, или полностью отменяется (как будто она вообще не выполнялась). Это свойство транзакции обеспечивается операторами commit и rollback. Оператор commit выполняется, если обновления прошли успешно, изменения в базе данных выполнены и стали постоянными. Если что-то не так, если обновление прервано каким-либо условием ошибки, то выполняется оператор rollback и любые изменения отменяются.
Транзакции обладают четырьмя важными свойствами:
Атомарность (atomicity) – транзакция атомарна (либо выполняются все содержащиеся в трансакции команды, либо не выполняется ни одна из них).
Согласованность (consistency) – транзакции защищают базу данных согласованно. Это означает, что транзакции переводят одно согласованное состояние базы данных в другое без обязательной поддержки согласованности во всех промежуточных точках.
Изоляция (isolation) – транзакции отделены одна от другой. Это означает, что, если даже будет запущено множество конкурирующих друг с другом транзакций, любое обновление определенной транзакции будет скрыто от остальных до тех пор, пока эта транзакция выполняется. Другими словами, для любых двух отдаленных транзакций Т1 и Т2 справедливо следующее утверждение: Т1 сможет увидеть обновление Т2 только после выполнения Т2, а Т2 сможет увидеть обновление Т1 только после выполнения Т1.
Устойчивость (durability) – когда транзакция выполнена, ее обновления сохраняются, даже если в следующий момент произойдет сбой системы.
Обладающие такими свойствами трансакции имеют аббревиатуру ACID.