воскресенье, 11 апреля 2010 г.

Обеспечение ссылочной целостности с помощью ограничений

Если две таблицы содержат один или несколько общих стобцов, то их можно связать с помощью ограничения ссылочной целостности. Для столбца родительской таблицы (таблицы, содержащей полный набор значений, на которые может ссылаться другая таблица) должно быть определено ограничение PRIMARY KEY или UNIQUE. Для столбца дочерней таблицы (таблицы, значения которой должны ссылаться на существующие значения в другой таблице) должно быть определено ограничение FOREIGN KEY.



Определение отношений между родительской и дочерней таблицами

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

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

Эта модель устанавливает отношение "один-ко-многим" между родительским и внешним ключами, допуская неопределенные значения (NULL) во внешнем ключе.

Ограничение NOT NULL для внешнего ключа. Если во внешнем ключе значения NULL не разрешены, каждая строка в дочерней таблице должна явно ссылаться на какое-либо значение родительского ключа. Однако на одну и ту же строку родительской таблице может ссылаться любое число строк в дочерней таблице.

Такая модель реализцет отношение "один-ко-многим" между родительским и внешним ключом. Однако каждая строка дочерней таблицы обязательно должна ссылаться на какое-либо значение родительского ключа, поскольку значения NULL во внешнем ключе не разрешены.

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

Такая модель реализует отношение "один-к-одному" между родительским и внешними ключами, которое допускает неопределенные значения (NULL) во внешнем ключе.

Ограничение UNIQUE и NOT NULL на внешний ключ. Если для внешнего ключа определенны ограничения UNIQUE и NOT NULL, на любое значение родительского ключа может ссылаться только одна строка в дочерней таблице. Поскольку во внешнем ключе не разрешены неопределенные значения, каждая строка в дочерней таблице обязательно должна явно ссылаться на какое-либо значение родительского ключа.

Эта модель устанавливает отношение "один-к-одному" между родительской и дочерней таблицей, которое не допускает неопределенных значений (NULL) во внешнем ключе.


Отложенная проверка ограничений

При проверке ограничения целостности сервер Oracle выдает ошибку, если обнаруживается нарушения ограничения. С помощью оператора SET CONSTRAINTS можно отложить проверку ограничений до завершения транзакции.

Примечание: оператор SET CONSTRAINTS нельзя использовать в триггере.

Режим, установленный оператором SET CONSTRAINTS, действует на протяжении данной транзакции или до тех пор, пока он не будет изменен другим оператором SET CONSTRAINTS.


Отложенная проверка ограничений целостности

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

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

Комментариев нет:

Отправить комментарий