Проблемы, связанные с ссылочной целостностью


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

1. Добавление новой строки в подчиненную таблицу
2. Обновление внешнего ключа в подчиненной таблице.
3. Обновление первичного ключа в главной таблице.
4. Удаление строки из главной таблицы

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

Для решения 4-ой проблемы могут существовать следующие правила удаления (для подчиненной таблицы):
— При удалении строки в главной таблице есть несколько подходов к действиям в подчиненной таблице:
1. запретить удаление строки в главной таблице, если есть подчиненная (restrict)
2. каскадно удалить и ссылочную запись в подчиненной таблице (cascade)
3. set null – установить в пусто — если удаляется строка в главной таблице, то в подчиненной таблице установить предыдущее значение ссылки (вместо 1 установить 0) для неидентифицирующих связей.
Для идентифицирующих связей возможны только 3 действия: restrict, cascade и null (ничего не делать)
4. set default – -установить значение по умолчанию (для неидентифицирующих связей) — установить заранее предопределенное значение, которое может отличаться от любых других значений.


Комментарии запрещены.




Статистика