Целостность ссылок (ссылочная целостность)
Сложные объекты реального мира представляются в реляционной базе данных в виде кортежей нескольких отношений, связанных между собой с помощью внешних ключей.
Требование целостности по ссылкам состоит в следующем:
все значения внешних ключей должны быть согласованы.
Выполнение этого требования любая СУБД контролирует автоматически, при этом для каждой из операций манипулирования данными выполняются свои специфические действия. Безусловно, поддержка целостности отнимает много ресурсов, при этом существенно замедляется выполнение операций манипулирования данными, однако гарантированное обеспечение целостности ссылок стоит всех этих затрат.
Правила поддержки ссылочной целостности зависят от выполняемой операции манипулирования данными.
При выполнении операции вставки ссылочная целостность контролируется только в случае наличия внешних ключей, ссылающихся на другие отношения. В этом случае проверяется существование соответствующих значений первичных ключей, в случае их отсутствия операция вставки отменяется.
Наиболее остро стоит проблема обеспечения ссылочной целостности при выполнении операции удаления кортежей родительского отношения, на которые есть ссылки в дочерних отношениях (возможно, сразу в нескольких). В этом случае простое удаление кортежа приведет к наличию несогласованных значений внешних ключей во всех дочерних отношениях. Обеспечить ссылочную целостность при удалении можно несколькими способами:
1. Запретить удаление кортежей в родительском отношении при наличии хотя бы одного ссылающегося кортежа (restrict - ограничить удаления)
2. При удалении кортежа родительского отношения каскадом удалять все ссылающиеся на него кортежи дочернего отношения (cascade – каскадное удаление)
3. При удалении кортежа родительского отношения установить во всех ссылающихся кортежах NULL-значения во внешних ключах (set null). Этот способ можно применять только в случае, если NULL-значения в соответствующем внешнем ключе разрешены.
4. При удалении кортежа родительского отношения установить во всех ссылающихся кортежах значения по умолчанию во внешних ключах (set default). Значения по умолчанию задаются при создании базы данных.
Из предложенных способов наиболее безопасным является первый – запрет удаления, он применяется чаще всего. Способ каскадного удаления следует применять очень осторожно.
При выполнении операций обновления во внешних ключах ссылочная целостность обеспечивается так же, как и добавлении нового кортежа. Обновление первичных ключей при наличии ссылающихся внешних ключей категорически не рекомендуется. Вообще выполнять обновление первичных ключей нет никакой необходимости, даже если СУБД разрешает такую возможность.
Дата добавления: 2015-08-26; просмотров: 1233;