Обеспечение целостности данных

Проблема целостности состоит в обеспечении правильности данных в базе в любой момент времени. Это касается защиты данных от непреднаме­ренных ошибок и их предотвращения. Этим проблема целостности отлича­ется от проблемы безопасности, в остальном эти два вопроса тесно соприка­саются.

Имеются два основных вида ограничения целостности, которые должны поддерживаться СУБД:

структурные ограничения. Эти ограничения во многих случаях зада­ются функциональными зависимостями и проверяются путем проверки ра­венства значений соответствующих данных в базе;

ограничения реальных значений данных, хранимых в базе. Обычно такие ограничения требуют, чтобы значения поля принадлежали некоторо­му диапазону значений, либо выражают некоторое арифметическое соот­ношение между значениями различных полей.

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

В общем случае целостность может быть нарушена при сбое оборудо­вания, программной ошибке, ошибке человека-оператора, ошибках в исход­ных данных и т.п.

Рассмотрим примеры различных типов ограничений целостности.

1. Значения первичного ключа любого отношения (файла) должны быть уникальны.

2. Отношение (файл), кроме первичного ключа, может содержать воз­можные ключи, значения которых должны быть также уникальными.

Эти два примера соответствуют структурным ограничениям.

3. В заданном отношении для каждого кортежа между значением поля А и значением поля В должно всегда выполняться условие, что первое больше второго. Ограничение специфицируется специальным выражением.

4. Значения, которые принимает некоторый атрибут, должны быть ог­раничены заданным диапазоном. Ограничение специфицируется специаль­ным выражением.

5. Для некоторого атрибута (или комбинации атрибутов) может суще­ствовать конечный (небольшой по размеру) набор допустимых значений (например, по атрибуту ОБРАЗОВАНИЕ могут быть только значения НАЧАЛЬНОЕ, НЕПОЛНОЕ СРЕДНЕЕ, СРЕДНЕЕ, НЕПОЛНОЕ ВЫСШЕЕ, ВЫСШЕЕ). Ограничение специфицируется специальным выражением при описании данных.

6. Значения некоторого атрибута должны удовлетворять определен­ному формату.

7. Множество значений одного из атрибутов отношения должно удов­летворять некоторому статистическому условию. Например, конкретное значение не должно превышать более чем в два раза среднее значение. Ог­раничение реализуется СУБД при контроле выполняемых операций.

8. Множество значений некоторого столбца отношения является под­множеством значений другого столбца этого отношения. Ограничение кон­тролируется при выполнении операций.

Рассмотренные примеры 3—8 соответствуют второму виду ограниче­ний — ограничений на значения данных.

9. Требуется ограничить обновление данных в заданном отношении таким образом, чтобы для указанного атрибута имело место в каждом кор­теже некоторое соотношение между старым и новым значениями.

Чтобы специфицировать подобное ограничение, в языках должны быть предусмотрены возможности реализации ссылки на старое и новое значения.

10. Если транзакция А (транзакция — это разовый прогон некоторой процедуры) и транзакция Ввыполняют изменения одних и тех же данных в базе, то в случае их параллельного выполнения может быть нарушена цело­стность данных в базе. В этом случае СУБД должна реализовать специаль­ный режим выполнения параллельных вычислений. Например, транзакция В не может обратиться к данным, пока с ними не закончится работа в тран­закции Л.

11. Если транзакция выполняет несколько изменений в БД которые связаны между собой ограничениями целостности, то в этом случае ограни­чения целостности можно проверять только после выполнения транзакции. Такие ограничения называют отложенными.

Рассмотренных примеров достаточно, чтобы создать представление о составе задач, подлежащих решению при проектировании средств обеспе­чения целостности данных в базе.

Основная идея обеспечения ограничений целостности данных заклю­чается в том, чтобы использовать язык ЯМД как средство выражения этих ограничений. Декларация ограничений целостности содержит две части. В первой из них должно быть выражено само ограничение, а во второй — описывается, когда, при каких условиях должна выполняться сама провер­ка. Языки манипулирования данными реальных систем позволяют в той или иной мере поддерживать если не все, то многие из рассмотренных ограни­чений целостности.