- •Содержание
- •Введение
- •1. Основные понятия
- •1.1 Терминология, базовые принципы
- •1.1.1 Понятие базы данных, субд и информационной системы
- •1.1.2 База данных и субд
- •1.1.3 Принципы построения информационных систем
- •1.2.2 Архитектура «файл-сервер»
- •1.2 Архитектуры информационных систем
- •1.2.1 Понятие архитектуры информационной системы
- •1.2.3. Архитектура «клиент-сервер»
- •1.2.4 Многозвенные архитектуры
- •1.2.5. Информационные системы на основе web-архитектуры
- •1.2.6 Информационные системы, функционирующие в терминальном режиме
- •1.3 Модели данных
- •1.3.1 Сравнительная характеристика моделей данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •4. Постреляционная модель данных
- •5. Объектно-ориентированная модель данных
- •1.3.2 Неформальное введение в реляционную модель
- •1. Таблицы и связи
- •2. Первичные, альтернативные и внешние ключи
- •3. Null-значения
- •4. Метаданные. Схема базы данных
- •5. Правила ссылочной целостности
- •2. Реляционная модель
- •2.1 Реляционная модель. Структурная и целостная части
- •2.1.1 Структурная часть
- •2.1.2 Атрибуты и домены. Схема отношения
- •2.1.3 Кортежи. Отношение
- •2.1.4 Потенциальные ключи. Первичный ключ
- •2.1.5 Внешние ключи
- •2.1.6 Целостная часть реляционной модели
- •2.2 Манипуляционная часть реляционной модели
- •2.2.1 Реляционная алгебра
- •2.2.2 Реляционное исчисление
- •3. Проектирование базы данных
- •3.1 Семантический анализ предметной области
- •3.1.1 Трехуровневая модель ansi/sparc
- •3.1.2 Диаграммы «сущность - связь»
- •3.1.3 Case-технологии и case-системы
- •3.1.4 Методология idef1
- •3.2 Нормализация базы данных
- •3.2.1 Определение функциональной зависимости
- •3.2.2 Математические свойства фз, теоремы
- •3.2.3 Процедура нормализации. Декомпозиция отношений
- •3.2.4 Нормальные формы
- •3.3 Денормализация. Хранилища данных
- •3.3.1 Недостатки нормализованной базы данных
- •3.3.2 Oltp и olap-системы. Data Mining
- •3.3.3 Хранилища данных
- •4. Язык sql
- •4.1 Язык ddl. Основные объекты базы данных
- •4.1.1 Общий вид команд ddl
- •4.1.2 Основные объекты бд
- •4.2 Команды ddl для работы с таблицами
- •4.2.1 Создание таблицы
- •Типы даты и времени
- •4.2.2 Удаление таблиц и изменение их структуры
- •4.2.3 Пример создания базы данных
- •4.2.4 Создание таблиц на основе других таблиц
- •4.3 Команды манипулирования данными
- •4.3.1 Команда insert
- •Insert into имя_таблицы [(список_имен_столбцов)]
- •Values (список значений)
- •Insert into имя таблицы [(список столбцов)]
- •4.3.2 Команда delete
- •4.3.3 Команда update
- •4.4 Команда выборки данных (select)
- •4.4.1 Запросы на выборку по одной таблице
- •4.4.2 Соединение таблиц в запросах
- •Декартово произведение
- •Внутреннее (естественное) соединение таблиц
- •4. Самосоединения
- •4.4.3 Вложенные запросы
- •4.4.4 Комбинированные запросы
- •4.5 Представления (view)
- •4.5.1 Понятие представления
- •4.5.2 Создание и удаление представлений
- •4.5.3 Обновление представлений
- •4.5.4 Стандартные представления словаря данных Oracle
- •4.6 Хранимый код. Триггеры
- •4.6.1 Процедурные расширения языка sql
- •1. Оператор присваивания
- •2. Условный оператор
- •3. Операторы цикла
- •4.6.2 Использование команд sql в хранимом коде
- •4.6.3 Хранимые процедуры и функции
- •4.6.4 Триггеры
- •1. Триггер на вставку нового студента
- •2. Триггеры на удаление студента
- •3. Триггер на изменение оценки
- •5. Управление доступом к данным
- •5.1 Система безопасности субд
- •Разграничение доступа пользователей.
- •5.1.1 Разграничение доступа пользователей
- •Identified by пароль
- •5.1.2 Привилегии и роли
- •5.1.3 Аудит действий пользователей
- •5.2 Поддержка транзакций
- •5.2.1 Свойства транзакции
- •5.2.2 Поддержка транзакций в языке sql
- •5.2.3 Механизмы субд для поддержки транзакций
- •5.3 Настройка производительности. Индексы
- •5.3.1 Понятие индекса
- •5.3.2 Обзор индексов Oracle
- •Заключение
- •Библиографический список
5.2 Поддержка транзакций
Транзакция – единица работы СУБД, которая может быть выполнена либо целиком, либо вообще не выполнена. Объем транзакции может варьироваться от одного SQL-оператора до всех действий с базой данных, выполняемых приложением. Для того, чтобы понять суть механизма транзакций, рассмотрим основные свойства, характеризующие транзакцию.
5.2.1 Свойства транзакции
Транзакция характеризуется четырьмя основными свойствами, часто называемыми свойствами АСИД – Атомарность, Согласованность, Изолированность, Долговечность. На английском языке эта аббревиатура также обозначается ACID - Atomicity, Consistency, Isolation, Durability. Поясним каждое из свойств по отдельности.
Атомарность
Транзакция является неделимой, она выполняется полностью или не выполняется вообще; если транзакция прерывается на середине, то база данных должна остаться в том состоянии, которое она имела до начала транзакции.
Согласованность (целостность)
Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое, также целостное. В ходе выполнения транзакции база данных может временно пребывать в нецелостном состоянии.
Очень многие правила целостности базы данных таковы, что их просто невозможно не нарушить, выполнив только одну команду SQL. Такие команды объединяют в единую транзакцию, результатом которой является новое целостное состояние БД. В крайнем случае, если транзакция не сумеет довести БД до конечного целостного состояния, она вернется к начальному, также целостному, состоянию.
Поясним это свойство на примере. Рассмотрим процесс удаления студента из нашей демонстрационной базы данных с перенесением данных о студенте и всех его оценках в архивную базу данных. В предыдущей лекции были рассмотрены триггеры для выполнения переноса в архив всех строк таблицы оценок marks, относящихся к данному студенту и строки с данными о самом студенте. Схематически процесс удаления строки из таблицы students со всеми сопутствующими действиями показан на рис.5.1.
Рис. 5.1 – Процесс удаления строки из таблицы students
Он состоит из четырех команд SQL, выполняемых последовательно, причем все промежуточные состояния базы данных после выполнения отдельных команд являются несогласованными. При возникновении любой внештатной ситуации (допустим, пользователь не имеет привилегий на выполнение какой-либо одной из операций или на архивные таблицы наложены какие-либо дополнительные ограничения) будет автоматически выполнен откат в иходное состояние.
Наконец, после выполнения последнего удаления система снова окажется в согласованном состоянии. Но и в этот момент еще возможен откат в исходное состояние, на этот раз по команде ROLLBACK, которая уже инициируется пользователем, а не сервером. Откат станет невозможным только после выполнения команды фиксации транзакции COMMIT. Любая из этих двух команд тем или иным образом, но завершает транзакцию.
Изоляция
До сих пор мы не рассматривали особенности работы СУБД в многопользовательской среде. Но в реальных информационных системах на основе сервера Oracle могут одновременно работать десятки тысяч пользователей, каждый из которых выполняет свои собственные транзакции. Свойство изоляции обозначает, что все транзакции выполняются изолированно друг от друга.
Несмотря на то, что в каждый момент времени сервер может выполнять параллельно несколько транзакций, общий результат их совместной работы гарантировнно будет таким же, каким он был бы при их последовательном выполнении; одновременно выполняющиеся транзакции не наложатся и не исказят результаты друг друга.
Такой режим работы сервера называется сериальным и является режимом по умолчанию для сервера Oracle.
Долговременность
После того, как транзакция завершена и зафиксирована, результат ее выполнения гарантированно сохраняется в базе данных. При любых аварийных ситуациях, используя возможности сервера, можно восстановить все зафиксированные транзакции. Восстановление незафиксированных транзакций сервер, разумеется, не гарантирует.
