данных, кажется, что они работают как бы в однопользовательской системе и не мешают друг другу. 2.1.1 Пример нарушения целостности базы Для иллюстрации возможного нарушения целостности базы данных рассмотрим следующий пример. Пример 1. Пусть имеется система, в которой хранятся данные о подразделениях и работающих в них сотрудниках. Список подразделений хранится в таблице DEPART (Dep_Id, Dep_Name, Dept_Kol), где Dept_Id идентификатор подразделения, DeptName наименование подразделения, Dept_Kol количество сотрудников в подразделении. Список сотрудников хранится в таблице PERSON(Pers_Id, Pers_Name, Dept_Id), где Pers_ld идентификатор сотрудника, Pers Name имя сотрудника, Dept Id идентификатор подразделения, в котором работает сотрудник: Таблица 5 DEPART D e p t l d D e p t N a m e DeptJKol 1 Кафедра ал гебры 3 г 2 Кафедра программирован ия 2 Таблица 6 PERSON Pers_Id P e r s N a m e Dept Id 1 Иванов 1 i 2 Петров 2 ; 3 Сидоров 1 4 Пушников 2 5 [ Шарипов 1 Ограничение целостности этой базы данных состоит в том, что поле Dept_Kol не может заполняться произвольными значениями это поле должно содержать количество сотрудников, реально числящихся в |
В данной главе, являющейся иллюстрацией к методам ER-моделирования, не рассмотрены более сложные аспекты построения диаграмм, такие как подтипы, роли, исключающие связи, непереносимые связи, идентифицирующие связи и т.п. Глава 9. Транзакции и целостность баз данных В данной и в последующих главах изучается фундаментальное понятие транзакции. Это понятие не входит в реляционную модель данных, т.к. транзакции рассматриваются не только в реляционных СУБД, но и в СУБД других типов, а также и в других типах информационных систем. Транзакция это неделимая, с точки зрения воздействия на СУБД, последовательность операций манипулирования данными. Для пользователя транзакция выполняется по принципу "все или ничего", т.е. либо транзакция выполняется целиком и переводит базу данных из одного целостного состояния в другое целостное состояние, либо, если по каким-либо причинам, одно из действий транзакции невыполнимо, или произошло какое-либо нарушение работы системы, база данных возвращается в исходное состояние, которое было до начала транзакции (происходит откат транзакции). С этой точки зрения, транзакции важны как в многопользовательских, так и в однопользовательских системах. В однопользовательских системах транзакции это логические единицы работы, после выполнения которых база данных остается в целостном состоянии. Транзакции также являются единицами восстановления данных после сбоев восстанавливаясь, система ликвидирует следы транзакций, не успевших успешно завершиться в результате программного или аппаратного сбоя. Эти два свойства транзакций определяют атомарность (неделимость) транзакции. В многопользовательских системах, кроме того, транзакции служат для обеспечения изолированной работы отдельных пользователей пользователям, одновременно работающим с одной базой данных, кажется, что они работают как бы в однопользовательской системе и не мешают друг другу. Пример нарушения целостности базы Для иллюстрации возможного нарушения целостности базы данных рассмотрим следующий пример: Пример 1. Пусть имеется система, в которой хранятся данные о подразделениях и работающих в них сотрудниках. Список подразделений хранится в таблице DEPART(Dep_Id, Dep_Name, Dept_Kol), где Dept_Id идентификатор подразделения, Dept_Name наименование подразделения, Dept_Kol количество сотрудников в подразделении. Список сотрудников хранится в таблице PERSON(Pers_Id, Pers_Name, Dept_Id), где Pers_Id идентификатор сотрудника, Pers_Name имя сотрудника, Dept_Id идентификатор подразделения, в котором работает сотрудник: Dept_Id Dept_Name Dept_Kol 1 Кафедра алгебры 3 2 Кафедра программирования 2 Таблица 1 DEPART Pers_Id Pers_Name Dept_Id 1 Иванов 1 2 Петров 2 3 Сидоров 1 4 Пушников 2 5 Шарипов 1 Таблица 2 PERSON Ограничение целостности этой базы данных состоит в том, что поле Dept_Kol не может заполняться произвольными значениями это поле должно содержать количество сотрудников, реально числящихся в подразделении. С учетом этого ограничения можно заключить, что вставка нового сотрудника в таблицу не может быть выполнена одной операцией. При вставке нового сотрудника необходимо одновременно увеличить значение поля Dept_Kol: Шаг 1. Вставить сотрудника в таблицу PERSON: INSERT INTO PERSON (6, Муфтахов, 1) Шаг 2. Увеличить значение поля Dept_Kol: UPDATE DEPART SET Dept=Dept+1 WHERE Dept_Id=1 Если после выполнения первой операции и до выполнения второй произойдет сбой системы, то реально будет выполнена только первая операция и база данных остается в нецелостном состоянии. Понятие транзакции Определение 1. Транзакция это последовательность операторов манипулирования данными, выполняющаяся как единое целое (все или ничего) и переводящая базу данных из одного целостного состояния в другое целостное состояние. Транзакция обладает четырьмя важными свойствами, известными как свойства АСИД: (А) Атомарность. Транзакция выполняется как атомарная операция либо выполняется вся транзакция целиком, либо она целиком не выполняется. (С) Согласованность. Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное) состояние. Внутри транзакции согласованность базы данных может нарушаться. (И) Изоляция. Транзакции разных пользователей не должны мешать друг другу (например, как если бы они выполнялись строго по очереди). |