В связи с управлением одновременной работой СУБД по выполнению запросов от разных пользователей, рассматриваются понятия транзакции и расписания.
Транзакция - это разовый прогон программы, реализующей запрос (другими словами, такая единица работы), при котором БД остается в состоянии целостности до и после выполнения транзакции.
Замечание. В процессе выполнения транзакции целостность БД может нарушаться.
Расписанием совокупности транзакций будем называть порядок, в котором выполняются элементарные шаги этих транзакций.
Очевидно, что расписание при одновременной работе представляет порядок выполнения транзакций во времени.
Примеры расписаний. Введем следующие обозначения:
Т - транзакция,
R-A - элементарный шаг транзакции, представляющий чтение значения поля А,
W-A - элементарный шаг транзакции, представляющий запись значения в поле А.
Расписание 1.
Т1 : R-A
T1 : W-A
T2 : R-A
T2 : W-A
Нарушения целостности (рассогласования) БД возникнуть не может, так как транзакции Т1 и Т2 выполняются последовательно.
Расписание 2.
Т1 : R-A
T2 : R-A
T1 : W-A
T2 : W-A
Модификация транзакции Т1 затирается транзакцией Т2, следовательно, она теряется.
Расписание 3.
Т1 : W-A
T2 : W-A
T1 : отменить
Потеря модификации транзакции Т2, поскольку после ее окончания следует сигнал отмены модификации.
Расписание 4.
Т1 : W-A
T2 : R-A
T1 : прервать
Ситуация известна под названием «неправильное считывание», поскольку выбранное транзакцией Т2 значение впоследствии из БД удаляется.
Расписание 5
Т2: R-A
T1: W-A
T2 : R-A
Две выборки дадут различные значения.
Согласованные состояния БД обеспечивают последовательные или приводимые к последовательным расписания.
Расписание называется последовательным, если все транзакции выполняются строго друг за другом.
Расписание называется приводимым к последовательному, если результат применения этого расписания к БД эквивалентен результату последовательного расписания.
Для выявления расписаний, приводимых к последовательным и благодаря этому сохраняющих согласованное состояние БД, можно использовать метод, основанный на построении графа зависимостей.
В графе зависимостей транзакциям соответствуют узлы, а направленная дуга графа, связывающая узлы Ti и Tj , обозначает, что вход транзакции Tj зависит от выхода транзакции Ti , то есть Tj использует значение поля, определенное Ti. Если граф зависимостей содержит циклы, то это означает, что соответствующее расписание не приводится к последовательному.