
- •Введение. Структура предмета. Основные понятия
- •1.История развития баз данных
- •2. История развития субд
- •4.Основные понятия и определения
- •Контрольные вопросы
- •Раздел 1. Структура и технологии субд. Модели данных
- •Тема1.1 Архитектура и технико-экономические характеристики субд. Архитектура бд.
- •1. Основные функции субд
- •2. Обобщенная архитектура субд
- •3. Процесс прохождения пользовательского запроса
- •4. Архитектура бд
- •Контрольные вопросы
- •Тема 1.2 Модели данных. Основные понятия и классификация
- •1. Классификация моделей данных
- •3 Пример разработки простой er-модели
- •Контрольные вопросы
- •Тема 1.3 Иерархическая, сетевая и реляционная модели данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •Базовые понятия реляционных баз данных
- •Контрольные вопросы
- •Тема 1.4 Физические модели данных
- •1. Файловые структуры, используемые для хранения информации в базах данных
- •2. Индексные файлы
- •3. Моделирование отношения 1:м с использованием однонаправленных указателей
- •Контрольные вопросы
- •Тема 1.5 Целостность бд. Нормальные формы
- •1. Основные понятия
- •Null-значения
- •Трехзначная логика (3vl)
- •Потенциальные ключи
- •2.Целостность сущностей
- •2 . Основные нормальные формы
- •Аномалии обновления
- •Определение функциональной зависимости
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Контрольные вопросы
- •Тема 1.6 Операции и основные понятия реляционной алгебры и реляционного исчисления
- •1. Реляционная алгебра
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •2. Теоретико-множественные операторы
- •3. Специальные реляционные операторы
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение. Определение 10. Пусть даны отношения и , имеющие одинаковые атрибуты (т.Е. Атрибуты с одинаковыми именами и определенные на одинаковых доменах).
- •Контрольные вопросы
- •Тема 1.7 Проектирование реляционной базы данных
- •1. Методология проектирования базы данных
- •2. Этапы проектирования базы данных
- •Контрольные вопросы
- •Раздел 2. Язык sql и его возможности
- •Тема 2.1 История языка sql. Создание и редактирование схемы бд
- •1. Развитие языка sql
- •Что такое пользователь?
- •Числовые константы
- •2 Создание базы данных и структуры таблицы
- •3. Модификация структуры таблицы и удаление таблицы
- •4. Индексы
- •5. Добавление новых данных
- •Однострочный оператор insert
- •Многострочный оператор insert
- •Утилиты пакетной загрузки
- •6. Удаление существующих данных
- •Оператор delete с вложенным запросом
- •7. Обновление существующих данных
- •Обновление всех строк
- •Контрольные вопросы
- •Тема 2.2 Организация запросов к базе данных.
- •1. Формирование запросов к одной таблице
- •2. Статистические функции
- •3. Группировка и агрегатные функции в запросах
- •4. Объединение таблиц
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •5. Объединение таблицы с собой
- •6. Теоретико-множественные операции с таблицами
- •7. Выполнение сложных запросов с вложенными подзапросами
- •Использование выражений в подзапросах
- •Контрольные вопросы
- •Тема 2.3 Виртуальные таблицы Цель: рассмотреть понятие «виртуальная таблица»; назначение виртуальных таблиц и область их использования
- •1. Команда create view
- •2. Групповые представления
- •3. Представления и объединения
- •4. Представления и подзапросы
- •5. Удаление и модификация представлений
- •Контрольные вопросы
- •1.Определение триггера и его назначение
- •2. Типы триггеров
- •Создание триггеров dml
- •Создание триггеров замещения
- •Создание системных триггеров
- •Другие аспекты использования триггеров
- •3. Хранимые процедуры
- •Хранимые функции
- •Контрольные вопросы
- •Тема 2.5 Защита информации в бд
- •1. Общие понятия привилегий
- •Стандартные привилегии
- •2. Предоставление привилегий с использованием представлений
- •3. Другие типы привилегий
- •Контрольные вопросы
- •Тема 2.6 Транзакции и управлении ими
- •1. Что такое транзакция
- •2 . Операторы commit и rollback
- •3. Журнал транзакций
- •5. Транзакции и работа в многопользовательском режиме
- •Проблема пропавшего обновления
- •Проблема промежуточных данных
- •Проблема несогласованных данных
- •Проблема строк-призраков
- •6. Параллельные транзакции
- •Уровни блокировки
- •Жесткая и нежесткая блокировки
- •Тупиковые ситуации
- •Усовершенствованные методы блокировки
- •Контрольные вопросы
- •Тема 2.7 Распределенные базы данных. Модели серверов
- •1.Распределенная обработка данных
- •2. Модели «клиент—сервер» в технологии баз данных
- •Двухуровневые модели
- •Модель сервера приложений
- •3. Модели серверов баз данных
Проблема строк-призраков
На рис. 6.8 еще раз изображена программа для обработки заказов. На этот раз менеджер по продажам запустил программу генераций отчетов, которая просматривает таблицу orders и печатает список заказов от клиентов Билла Адамса, подсчитывая их итоговую сумму. Тем временем Биллу звонит клиент и размещает дополнительный заказ на $5000. Заказ добавляется в базу данных, и транзакция завершается. Вскоре после этого программа менеджера по продажам снова просматривает таблицу orders, выполняя тот же запрос, что и прежде. На этот раз в таблице имеется дополнительный заказ, а итоговая сумма заказов на $5000 больше, чем сумма заказов в результате первого запроса.
Здесь, как и в предыдущем примере, проблема заключается в несогласованных данных. Состояние базы данных соответствует ситуации в реальной жизни, и целостность данных не нарушена, но один и тот же запрос, выполненный дважды в течение одной транзакции, возвращает два различных результата. В предыдущем примере запрос считывал одну строку, и противоречивость данных была вызвана выполнением оператора update. Выполнение оператора delete могло бы вызвать ту же проблему. В примере, представленном на рис. 6.8, проблема возникла в результате выполнения оператора insert. В первом запросе дополнительной строки не было, и после выполнения второго запроса сложилось такое впечатление, что она появилась из ниоткуда, как призрак. Проблема строк-призраков, как и проблема несогласованных данных, может привести к противоречивым и неправильным расчетам.
Рисунок 6.8 - Проблема строк-призраков
6. Параллельные транзакции
Как видно из приведенных примеров, при обновлении базы данных в многопользовательском режиме существует возможность нарушения ее целостности. Чтобы исключить такую возможность, в SQL используется механизм транзакций. Помимо того, что реляционная СУБД обязана выполнять транзакции по принципу "либо все, либо ничего", она имеет и другое обязательство по отношению к транзакциям.
В ходе выполнения транзакции пользователь видит полностью непротиворечивую базу данных. Он не должен видеть промежуточные результаты транзакций других пользователей и даже завершение таких транзакций не должно отражаться на данных, которые пользователь видит в течение транзакций.
Таким образом, в реляционной базе данных транзакции играют ключевую роль как при восстановлении после сбоя, так и при параллельной работе нескольких пользователей. Правило, приведенное выше, можно сформулировать иначе с помощью термина "параллельная транзакция": когда две транзакции А и В выполняются параллельно, СУБД гарантирует, что результаты их выполнения будут точно такими же, как и в случае, если: а – сначала выполняется транзакция А, а затем транзакция В; или сначала выполняется транзакция В, а затем транзакция А.
Данная концепция называется сериализацией транзакций. На практике это означает, что каждый пользователь может работать с базой данных так, как если бы не было других пользователей, работающих параллельно.
Однако тот факт, что SQL изолирует пользователя от действий других пользователей, не означает, что о них можно забыть. Совсем наоборот. Поскольку другим пользователям также требуется обновлять базу данных параллельно с Вами, Ваши транзакции должны быть как можно проще и короче, чтобы объем работы, выполняемой всеми, был больше.
Обеспечить параллельное выполнение транзакций можно по-разному, но во всех коммерческих СУБД используется методика, получившая название блокировка. СУБД осуществляет блокировку автоматически без вмешательства пользователя, поэтому для выполнения транзакций пользователю не обязательно знать все тонкости механизма блокировки. Однако знание основных принципов работы этого механизма поможет пользователю применять транзакции с большей отдачей.
Основные принципы блокировки транзакций довольно просты. На рис. 6.9 изображена схема простой блокировки, устраняющей конфликты между двумя параллельными транзакциями.
Когда транзакция А обращается к базе данных, СУБД автоматически блокирует все части базы данных, в которых транзакция осуществляет чтение или изменение. Транзакция В выполняется параллельно, и СУБД также блокирует те части базы данных, к которым она обращается. Если транзакция В обращается к той части базы данных, которая заблокирована транзакцией А, то СУБД приостанавливает выполнение транзакции В, заставляя ее ждать до тех пор, пока данные не будут разблокированы. СУБД снимает блокировку, вызванную транзакцией А, только после того, как в этой транзакции встретится оператор commit или rollback. Затем СУБД позволяет продолжить выполнение транзакции В. Теперь транзакция В блокирует эту же часть базы данных, защищая ее от других транзакций.
Как видно из рисунка, при блокировке транзакция временно получает монопольный доступ к некоторой части базы данных, причем другим транзакциям запрещается изменять заблокированные данные. Таким образом, блокировка решает все три проблемы, возникающие при параллельном выполнении транзакций. Она не допускает разрушения базы данных в результате потери обновлений и использования промежуточных или несогласованных данных. Однако блокировка создает новую проблему: период времени, в течение которого транзакция ожидает освобождения части базы данных, заблокированной другой транзакцией, может быть достаточно большим.
Рисунок 6.9 - Блокировка при одновременном выполнении двух транзакций