Автор работы: Пользователь скрыл имя, 20 Февраля 2011 в 12:52, контрольная работа
В начале 70-х годов для удобства работы с большими массивами данных сформулирована концепция баз данных. Ее основными положениями были:
1.Независимость прикладных программ от данных, размещенных во внешней памяти
2. Отсутствие избыточности в данных
3.Способность системы противостоять сбоям и отказам.
Пример.
Создать связанные таблицы, которые позволяют внешнему ключу EMPNO в таблице ABC создать ссылки на EMPNO в таблице EMP с правилом DELETE CASCADE.
CREATE TABLE EMP
(EMPNO INT NOT NULL,
LNAME VARCHAR (15),
FNAME CHAR (10),
DEPTNO SMALLINT,
HIREDATE DATE,
JOB VARCHAR (15)),
PRIMARY
KEY (EMPNO));
CREATE TABLE ABC
(EMPNO INT,
SALARY DECIMAL (9,2),
REVIEW LONG VARCHAR,
FOREIGN KEY (EMPNO) REFERENCES EMP
ON DELETE CASCADE);
Здесь первый оператор CREATE TABLE описывает таблицу ЕМР с полями
EMPNO, LNAME, FNAME, DEPTNO, HIREDATE, JOB. В качестве первичного ключа используется поле EMPNO (при этом указано, что оно не может содержать неопределенные значения).
Второй оператор CREATE TABLE описывает таблицу АВС с полями
EMPNO, SALARY, REVIEW. Первичный ключ не определен. Внешним ключом является поле EMPNO, значения которого ссылаются на соответствующие значения в таблице ЕМР. При удалении строк из родительской таблицы ЕМР осуществляется каскадное удаление строк из таблицы АВС.
Термин целостность используется для описания точности и корректности данных, хранящихся в БД. Иными словами, под целостностью подразумевается, что пользователям БД разрешается выполнять над ней некоторые действия и эти действия выполняются корректно [8].
Можно дать и другое определение: целостность означает защиту БД от некорректных действий санкционированного пользователя.
Для поддержки целостности СУБД должна содержать сведения о тех правилах, которые пользователю не следует нарушать при модификации БД (при выполнении операций UPDATE, DELETE, INSERT). Кроме того СУБД должна следить за выполнением заданных правил. Эти правила принято называть ограничениями целостности.
Кроме рассмотренных выше ограничений ссылочной целостности стандарт языка SQL поддерживает также ограничения домена, ограничения семантики и общие ограничения – «утверждения».
Ограничения домена
Домен – это набор допустимых значений для одного или нескольких атрибутов.
Каждый атрибут отношения
Фактически задание домена означает задание типа и размера, используемых данных, а также задание ограничений целостности этих данных.
Имя атрибута не обязательно должно совпадать с именем домена.
Пример домена представлен в
разделе 1.3. Домен определяется оператором
SQL CREATE DOMAIN.
Ограничения
семантики
В основе ограничений
Ограничения семантики для таблиц задаются с помощью предложения
CHECK (conditional-expression), вставляемого в оператор CREATE TABLE (где conditional-expression определяет логическое условие, которое не может быть нарушено при модификации данных).
Пример.
CREATE TABLE EMP
(EMPNO INT NOT NULL,
LNAME VARCHAR (15),
FNAME CHAR (10),
DEPTNO SMALLINT,
HIREDATE DATE,
JOB VARCHAR (15),
PRIMARY KEY (EMPNO),
CHECK
(HIREDATE <2009));
Здесь проверочное условие состоит в том, что столбец HIREDATE в таблице ЕМР (сотрудник) должен содержать значения меньшие, чем 2009 (текущий год).
Общие ограничения целостности
Общие ограничения целостности по своей сути во многом аналогичны ограничениям семантики. Однако они предполагают наложение любых ограничений на данные. В основе таких ограничений лежит проверка логического выражения, которое возвращает значение TRUE (истина) либо значение FALSE (ложь). Если возвращается значение TRUE, то ограничение целостности выполняется и операция модификации данных разрешается. Когда же возвращается значение FALSE, то операция модификации отменяется.
Общие ограничения целостности задаются с помощью оператора CREATE ASSERTION.
Синтаксис оператора:
CREATE ASSERTION имя CHECK (условное выражение);
Здесь в параметре имя задается имя правила, а в параметре условное выражение – соответствующее условие ограничения.
Пример .
CREATE ASSERTION ABC1 CHECK
(NOT EXISTS (SELECT * FROM P
WHERE NOT (P.WEIGHT>0)));
Здесь применительно к таблице
Р выполняется проверка, что каждый
товар имеет положительный вес.
Лекция 10
1.19. Проблема параллелизма
При одновременном исполнении нескольких транзакций (при параллельной работе) между ними могут возникать конфликты, приводящие к нарушению целостности БД.
Рассмотрим пример нарушения
целостности БД двумя
Время | Операции
транзакции А |
Операции
транзакции В |
Результат |
t1 | Читает запись i | 10 | |
t2 | Читает запись i | 10 | |
t3 | К записи i прибавляет число 10 | 20 | |
t4 | К записи i прибавляет число 15 | 25 |
В момент t1 транзакция А читает запись i, которая содержит число 10.
В момент t2 другая транзакция читает это же число. В момент t3 транзакция А модифицирует прочитанное число, прибавляя к нему число 10. В результате в БД оказывается число 20. Но в следующий момент транзакция В модифицирует прочитанное число, прибавляя к нему число 15. Таким образам, в записи i оказывается число 25. Это результат параллельной работы этих транзакций. Очевидно, что результат неправильный, т.к. две транзакции в сумме прибавили число 25. Значит, окончательным результатом должно было быть число 35, а не 25.
Фактически результат
модификации, выполненной транзакцией
А, пропал.
Все современные СУБД ориентированы на поддержку одновременной работы многих пользователей, а следовательно, на параллельную обработку транзакций. Для корректной обработки параллельных транзакций без возникновения конфликтных ситуаций необходимо использовать некоторый метод управления параллелизмом. Основным методом управления параллелизмом является блокирование (альтернативными являются метод временных меток и оптимистичные технологии).
Его основная идея очень проста: в случае, когда для выполнения некоторой транзакции необходимо, чтобы некоторый объект базы данных (например, отдельный кортеж таблицы или вся таблица) не изменялся непредсказуемо и без ведома этой транзакции, такой объект блокируется. Таким образом, эффект блокирования состоит в том, чтобы "заблокировать доступ к этому объекту со стороны других транзакций", а значит, предотвратить непредсказуемое изменение этого объекта. Следовательно, первая транзакция в состоянии выполнить всю необходимую обработку с учетом того, что обрабатываемый объект остается в стабильном состоянии настолько долго, насколько это нужно.
Реально
блокирование может быть выполнено
посредством установки
Для пояснения идеи
Рис.1.18. Пример блокирования таблиц БД
В данном примере
В момент времени 01 транзакция
А обновляет таблицу ТОВАР.
Таблица оказывается
В момент времени 03 выполняется вставка в таблицу ОТДЕЛЕНИЕ. В результате эта таблица также блокируется.
Затем делается вставка в таблицу ТОВАР. При этом таблица остается заблокированной.
В момент 09 транзакция А заканчивается выдачей оператора COMMIT и таблицы ТОВАР и ОТДЕЛЕНИЕ разблокируются.
Транзакция В в момент 02 обновляет таблицу ЗАКАЗ, вследствие чего эта таблица блокируется. В момент 04 делается попытка вставки в таблицу ОТДЕЛЕНИЕ, но ранее эта таблица заблокирована транзакцией А, поэтому транзакция В не получает к ней доступа и оказывается в состоянии ожидания . Транзакция В находится в состоянии ожидания до момента 09. когда транзакция А разблокирует таблицу ОТДЕЛЕНИЕ . Таблица разблокируется со стороны транзакции А но тут же блокируется со стороны транзакции В и транзакция В продлжает свою работу, т.е. исполняет оператор вставки. В момент 11 транзакция В завершается и разблокирует таблицы ОТДЕЛЕНИЕ и ЗАКАЗ.
Таким образом, захват таблицы одной из транзакций приводит к задержке другой (других) транзакции, если она обращается к той же таблице. Задержанная транзакция переходит в состояние ожидания. Причем она будет находиться в состоянии ожидания до тех пор, пока не будет снята блокировка, заданная другой транзакцией.
Полного параллелизма нет, однако, если транзакции работают с разными таблицами, то действительно работают в паралель. В нашем примере такая ситуация наблюдается до момента 04.
В начале данного раздела мы
сделали допущение, что
Теоретически могут