Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
01.05.2014
Размер:
669.7 Кб
Скачать

4. Целостность данных

4.1. Контроль типов

Информация, хранящаяся в БД, должна быть в меру возможности правильной, точной и согласованной. Необходимо предусматривать средства, которые бы защищали базу от потенциально неверных действий, связанных с корректировкой данных и записью новой информации.

Одним из распространенных способов защиты является контроль типов. Простейший вариант - проверка принадлежности переменной выделяемому для нее диапазону величин. Если, например, установлено, чтобы содержимое атрибута НОМЕР_КЛИЕНТА находилось в пределах от 100000 до 999999, то система должна предотвратить попытку пользователя присвоить этому полю значение 403. Другой пример: торговые зоны, где располагаются фирмы-клиенты, сокращенно обозначаются Ю, ЮЗ, З, СЗ, С, СВ, В, ЮВ. Недопустимо, чтобы система позволила записать в атрибут ТОРГОВАЯ_ЗОНА значение «МОСКВА».

4.2. Контроль изменений

Если на фирме «Хелми» операции ведутся таким образом, что количество не распределенного со склада товара, указанного в таблице СОДЕРЖИМОЕ_НАРЯДОВ_НА_ПРО-ДАЖУ, не может увеличиваться, всякий прирост этого показателя должен фиксироваться, расцениваясь как возможная ошибка. СУБД оснащаются средствами, которые позволяют объявлять ограничения, накладываемые на характер изменения переменных.

Еще один пример ограничений такого типа. В «Хелми» считается недопустимым, чтобы содержимое атрибута КОЛИЧЕСТВО_НА_СКЛАДЕ в таблице ТОВАРНЫЕ_ЗАПАСЫ возрастало после единичной корректировки на величину, превышающую ЗАКАЗЫВАЕМОЕ КОЛИЧЕСТВО. Если это правило нарушается, СУБД должно известить пользователя об ошибке.

4.3. Целостность на уровне ссылок

При построении реляционных таблиц для связывания строк одной таблицы со строками другой таблицы используются внешние ключи. Например, ТИП_СПЕЦИАЛЬНОСТИ используется в таблице РАБОТНИК для того, чтобы сообщить нам основную специальность каждого работника, чтобы можно было подсчитать размер премиальных. Таким образом, важно, чтобы значение атрибута ТИП_СПЕЦИ-АЛЬНОСТИ каждой строки, обозначающей служащего, соответствовал некоторому значению атрибута ТИП_СПЕЦИ-АЛЬНОСТИ в таблице СПЕЦИАЛЬНОСТЬ. В противном случае ТИП_СПЕЦИАЛЬНОСТИ служащего ни на что не будет указывать. БД, в которой все непустые внешние ключи ссылаются на текущие значения ключей другой реляционной таблицы, обладает целостностью на уровне ссылок.

5. Параллельная работа с бд

5.1. Обработка транзакций

Транзакция - это блок программы, выполнение которого сохраняет непротиворечивость БД.Неделимая транзакция– транзакция, в которой либо все связанные с ней действия выполняются до конца, либо ни одно из них не выполняется.

Если БД непротиворечива до выполнения транзакции, то она должна оставаться непротиворечивой и после ее выполнения. Для того чтобы обеспечить выполнение этих условий, транзакции должны быть неделимыми, что означает, что либо все действия, связанные с транзакцией, выполняются до конца, либо ни одно из них не выполняется. Например, транзакция записи взноса клиента на сумму 500 $ включает следующие действия:

1. Изменение записи клиента: уменьшение суммы счета на 500 $.

2. Изменение кассовой записи: увеличение суммы на 500 $.

Предположим, что второй шаг не выполняется. Тогда баланс счетов не будет сходиться. На рис.5.1 показано, что происходит, когда эти действия выполняются как последовательность независимых шагов (а) и когда они выполняются как единая неделимая транзакция (б).

Для обработки транзакций требуется, чтобы СУБД поддерживала запись транзакции для каждого изменения, вносимого в БД. Один из способов – применение протокола. Когда клиент платит 500 $ по счету, транзакция включает 1) уменьшение счета клиента и 2) увеличение кассового счета. Во время выполнения транзакции все записанные операции задерживаются до тех пор, пока не будет выполнено последнее действие транзакции. Результаты обновления записываются в протокол транзакций. Когда все действия выполнены, информация об обновлении из протокола используется для переноса обновленной информации в соответствующие записи данных.

ДЕЙСТВИЯ РЕЗУЛЬТАТ

СЧЕТ КЛИЕНТА 1. Оплата СЧЕТ КЛИЕНТА

кредита

№ Клиента Баланс 500 $. № Клиента Баланс

123 ….. 1000 .…

123 …. . 500 …..

КАССОВЫЙ СЧЕТ 2. Отказ КАССОВЫЙ СЧЕТ

системы

Баланс Баланс

….…. 1500 .…

…. . 1500 …..

(а) Результат независимого выполнения действий

СЧЕТ КЛИЕНТА ТРАНЗАКЦИЯ РЕЗУЛЬТАТ

1. Оплата

кредита

500 $

2. Отказ

системы

Никаких изменений в

СЧЕТ КЛИЕНТА

Никаких изменений в КАССОВЫЙ

СЧЕТ

№Клиента Баланс

123 ….. 1000 .…

КАССОВЫЙ СЧЕТ

Баланс

….…. 1500 .…

Никакие изменения не сделаны, так как транзакция не была успешно выполнена

(б) Результат применения неделимой транзакции

Рис. 5.1. Независимые и неделимые транзакции

Соседние файлы в папке Базы данных1