Определение ограничений ссылочной целостности

Помимо очевидной функции создания таблиц, CREATE TABLE используется для установления декларативной ссылочной целостности между таблицами.

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

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

Ограничение FOREIGN KEY в разделе ограничений оператора CREATE TABLE создает связь между двумя таблицами. Оно гарантирует, что ключевое значение, вставляемое или изменяемое в подчиненной таблице, существует в главной таблице, и что ключевое значение в главной таблице не может быть удалено, пока в подчиненной таблице есть на него ссылки.

Cуществует четыре возможные реакции на попытку удалить или модифицировать первичный ключ, на который указывает внешний ключ.

  • Ограничить — операция удаления или модификации в отношении первичного ключа отвергается, если имеются соответствующие ему значения внешних ключей
  • Каскадировать — операция удаления или модификации автоматически применяется к внешним ключам, значения которых соответствовали "старому"значению удаленного или модифицированного первичного ключа.
  • Обнулить — до выполнения операции удаления или модификации в отношении первичного ключа значения (значение) соответствующих внешних ключей (ключа) устанавливаются в NULL.
  • Установить в значение по умолчанию - до выполнения операции удаления или модификации в отношении первичного ключа, значения, составляющие внешний ключ, устанавливаются в значение по умолчанию.

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