Субд лекции

Темы:

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

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

·        запись в основной таблице можно удалять только в том случае, если нет связанных с ней записей в подчиненной таблице;

·        при удалении записи основной таблицы удаляются все связанные с ней записи в зависимой таблице (так называемое каскадное удаление);

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

Удаление записей зависимой таблицы не может привести к нарушению ограничения целостности по связи или существованию.

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

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

Если изменение касается поля связи в зависимом файле, то при изменении нужно смотреть, есть ли новое значение в соответствующем поле основного файла. Иногда изменения поля связи в зависимом файле должны быть запрещены. Например, если имеется пара связанных таблиц «Отдел»-«Сотрудник», то изменение значения поля «Код отдела» в таблице «Сотрудник» будет означать перевод сотрудника в другой отдел (при изменении значения поля нужно проверять, что скорректированное значение не нарушает целостность по связи). Если же имеется пара связанных таблиц «Студент»-«Успеваемость», то изменение значение поля «Код_студента» в таблице «Успеваемость» следует запретить, поскольку такая корректировка означала бы, что результаты экзамена одного студента будут приписаны другому студенту, что бессмысленно.

предыдущаяследующая