Ограничения целостности. Реляционная модель данных и, следовательно, соответствующие СУБД поддерживают некоторые (внутренние) ограничения целостности

Реляционная модель данных и, следовательно, соответствующие СУБД поддерживают некоторые (внутренние) ограничения целостности:

· уникальность значений ключевых атрибутов,

· обязательность значений некоторых атрибутов,

· ссылочные ограничения.

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

Пусть имеются две схемы отношения (рис. 3.1). К каждому отношению могут быть применены операции манипулирования данными – вставить новый кортеж (INSERT), удалить (DELETE) или модифицировать (UPDATE) существующий кортеж. При этом мы рассматриваем модификацию существующего кортежа, затрагивающую ключевые атрибуты. Рассмотрим проблемы, которые могут возникнуть при выполнении каждой из указанных операций.

Рис. 3.1. Реализация ссылочных ограничений целостности

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

Дочернее отношение – Name2/E2

· Операция INSERT выполняется без каких-либо ограничений при условии, что в новом (вставляемом) кортеже значение атрибутов первичного ключа (Id2) уникально, и значение атрибутов внешнего ключа (Id1) имеется в каком-либо кортеже родительского отношения Name1. Например, может быть вставлен кортеж <4, 2, …>.

· Операция DELETE выполняется без каких-либо ограничений. Например, может быть удален кортеж <2, 2, …>.

· Операция UPDATE, затрагивающая значения атрибутов первичного и/или внешнего ключей, выполняется с такими же ограничениями, что и операция INSERT. Например, в кортеже <2, 2, …> может быть модифицировано значение первичного ключа и получен кортеж <4, 2, …> (при условии, что в отношении Name2 нет кортежа с таким значением первичного ключа) или может быть модифицировано значение внешнего ключа и получен кортеж <2, 1, …>.

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

Родительское отношение – Name1/E1

· Операция INSERT выполняется без каких-либо ограничений при условии, что соблюдается уникальность значений ключевых атрибутов (Id1). Так, например, может быть вставлен кортеж <4, …, …>;

· Операция DELETE требует уточнения: как должно выполняться удаление некоторого кортежа родительского отношения при условии, что в дочернем отношении существует кортеж, ссылающийся на удаляемый.

В реляционной модели данных поддерживаются три вида реакции на удаление кортежа родительского отношения:

§ CASCADE – при удалении кортежа родительского отношения удаляются все ссылающиеся на него кортежи дочернего отношения. Так, если в рассматриваемом примере из родительского отношения Name1 удаляется кортеж <1, …, …>, то из дочернего отношения Name2 автоматически будут удалены кортежи <1, 1, …> и <3, 1, …>.

§ RESTRICT – при удалении кортежа родительского отношения операция удаления не выполняется, если в дочернем отношении есть хотя бы один кортеж, ссылающийся на удаляемый. Так, при попытке удалить кортеж <2, …, …> родительского отношения Name1 операция удаления не будет выполнена.

§ SET NULL – если допускаются пустые значения атрибутов внешнего ключа, тогда при удалении кортежа родительского отношения в кортежах дочернего отношения, ссылающихся на удаляемый, будут установлены пустые (NULL) значения атрибутов внешнего ключа. Например, если удаляется кортеж <2, …, …> родительского отношения Name1, в дочернем отношении Name2 будет модифицирован кортеж <2, NULL, …>.

· Операция UPDATE, затрагивающая значение атрибутов первичного ключа, требует таких же уточнений, что и операция DELETE. Эта операция также допускает три вида реакции: CASCADE, RESTRICT, SET NULL, имеющие тот же смысл.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: