Ограничение целостности


Согласованность базы данных есть формальное свойство БД. База данных «не понимает» смысла хранимых данных. Смыслом данных для СУБД является весь набор ограничений целостности. Если все ограничения выполнены, то СУБД считает, что данные корректны.

Ограничения целостности – это некоторые утверждения, которые могут быть истинными или ложными в зависимости от состояния БД. Примерами ограничений целостности могут служить следующие утверждения:

1. Каждый студент имеет уникальный номер студенческого билета

2. Студент обязан числиться в одной группе

3. Средний балл студента не может быть меньше 0 или больше 5

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

Пример 1 представляет ограничение, реализующее целостность на уровне сущности, которое говорит о том, что в пределах таблицы первичный ключ должен быть уникален, чтобы однозначно идентифицировать каждую строку. Для обеспечения целостности на уровне сущности в первичном ключе недопустимы пустые значения. Пример 2 представляет ограничение, реализующее ссылочную целостность(целостность на уровне ссылки). Контроль целостности связи обычно означает анализ содержимого двух таблиц на соблюдение следующих правил:

1. Каждой записи таблицы на стороне «1» соответствует 0 или более записей таблицы на стороне «многие».

2. В дополнительной таблице(дочерней или таблицы на стороне «многие») нет записей, которые не имеют соответствующих записей на стороне «1».

3. Каждая запись в таблице на стороне «многие» имеет только одну родительскую запись на стороне «1».

Таким образом, ссылочная целостность проявляется, если внешний ключ содержит значения, совпадающие с первичным ключом в таблице на стороне «1» или пустые значения.

Другие ограничения являются достаточно произвольными утверждениями.

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

Вместе с понятием целостности БД возникает понятие реакции системы на попытку нарушения целостности.

Попытка выполнить операцию по удалению/добавлению или модификации данных  
Пользователь или приложение

 


Проверка ограничений
Операция отвергается
Сообщение пользователю СУБД

Ограничения не нарушают

Операция выполняется
Ограничение нарушений

Операция выполняется, дополнительно выполняется компенсирующая операция

 


Классификация ограничений целостности

1. По способам реализации.

a. Декларативная поддержка, т.е. определение ограничений средствами языка определения данных DDL. Обычно средства декларативной поддержки целостности определяют ограничения на значения доменов и атрибутов, целостность сущностей и ссылочную целостность. Декларативное ограничение целостности можно использовать при создании и модификации таблиц средствами языка DDL или в виде отдельных утверждений(ASSERTION). Если используется декларативное ограничение целостности возможно два подхода:

i. При декларировании ограничения, текст ограничения хранится в виде некоторого объекта СУБД, а для реализации ограничения используются встроенные в СУБД функции(внутренние функции ядра СУБД).

ii. При декларировании ограничения СУБД автоматически генерируют триггеры, выполняющие необходимые действия по проверке ограничений.

b. Процедурная поддержка ограничений целостности. Заключается в использовании триггеров и хранимых процедур.

2. Классификация по времени проверки.

a. Немедленно проверяемые ограничения, т.е. ограничения, которые проверяются непосредственно в момент операции, могущей нарушить ограничение(например проверка уникальности ключа).

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

3. По области действия

a. Ограничение целостности домена. Фактически ограничение домена обязаны являться частью его определения. Ограничения домена сами по себе не проверяются, если на каком–либо домене основан атрибут, то ограничение соответствующего домена становятся ограничением этого атрибута.

b. Ограничение атрибута. В точности совпадают с ограничением соответствующего домена и отличаются от ограничений домена в том, что они проверяются. Ограничения атрибута являются немедленно проверяемыми ограничениями.

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

d. Ограничение отношения. К моменту проверки ограничения отношения должны быть проверены ограничения целостности картежей этого отношения. Ограничение отношения может быть как немедленно проверяемым ограничением, так и ограничением с отложенной проверкой. Пример: ограничение целостности, определяемое требованием, что некоторая таблица должна быть не пуста – это ограничение отношения.

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