В соответствии со стандартом, изменение или удаление значений родительского ключа не допускается. Это означает, что нельзя удалить данные о студенте из таблицы STUDENTS до тех пор, пока в таблице USP для него имеется какая-нибудь информация. Однако довольно часто возникают ситуации, когда необходимо удалить информацию о студенте, например, в случае его отчисления. В таких случаях рассматривается возможность каскадирования или ограничения действий.
При необходимости изменить или удалить текущее ссылочное значение родительского ключа существует три возможности:
1. Запретить изменения.
2. Сделав изменения в родительском ключе, произвести изменения во внешнем ключе автоматически (каскадное изменение).
3. Сделать изменение в родительском ключе и установить внешний ключ в NULL значение автоматически.
В пределах этих возможностей выполняются все команды модификации. (При использовании команды INSERT ситуация несколько отличается, так как при ее использовании помещаются новые значения родительского ключа в таблицу).
Итак, изменения в родительском ключе можно разделить на ограниченные (RESTRICTED), каскадируемые (CASCADES) и пустые (NULL) изменения. Рассмотрим примеры: предположим, что есть необходимость в изменении номера зачетной книжки, причем оценки должны сохраниться у этого же студента c новым номером. В этом случае следует указать команду UPDATE c каскадируемыми изменениями. То есть:
(NOM_ZACH INTEGER NOT NULL FOREIGN KEY REFERENCES STUDENTS,
UPDATE OF STUDENTS CASCADES);
Если данные о студенте удаляются, удаление их должно быть выполнено сначала в главной (STUDENTS), а затем в подчиненной таблице (USP). В этом случае используется ограничение
После этого при удалении данных о студенте из таблицы STUDENT команда не будет выполнена до тех пор, пока не будут удалены его данные из таблицы USP.
Для того чтобы при удалении номера зачетки из таблицы STUDENTS его оценки сохранились в таблице USP, а в поле NOM_ZACH таблицы USP, относящемся к данному студенту появились NULL значения, необходимо указать: