Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
27.03.2016
Размер:
202.75 Кб
Скачать

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

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

Дочернее отношение – 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 требует уточнения: как должно выполняться удаление некоторого кортежа родительского отношения при условии, что в дочернем отношении существует кортеж, ссылающийся на удаляемый.

  • В СУБД MS SQL Server поддерживаются три вида реакции на удаление кортежа родительского отношения:

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

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

    • SET NULL – при удалении кортежа родительского отношения в поле внешнего ключа всех ссылающихся на него кортежей дочернего отношения устанавливается значение NULL (очевидно, что при создании дочерней таблицы поле внешнего ключа должно быть определено как NULL – допускает задание NULL значений).

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

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

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

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

Имя домена

Тип данных

Признак обязательности

Ограничения на домен

Заголовок таблицы описания доменов

Имя связи

Родительское отношение

Дочернее отношение

Правило удаления

Правило обновления

Заголовок таблицы описания ссылочной целостности

Заголовком каждой таблицы являются имя и номер множества сущностей, использованные в инфологической модели, и соответствующее им имя таблицы. Имя таблицы должно формироваться в соответствии с правилами построения имен отношений в используемой СУБД.

В графе "Имя атрибута" указывается имя атрибута, использованное в инфологической модели.

В графе "Имя колонки" указывается имя атрибута, построенное в соответствии с правилами построения имен атрибутов в данной СУБД.

В графе "Имя домена" указывается имя домена, на котором построен данный атрибут.

В графе "Ключи" указываются дополнительные сведения об атрибуте, если он относится к ключевым (первичный ключ, альтернативный ключ, внешний ключ).

В графе "Правило удаления" (только для атрибутов внешних ключей) указывается имя родительской таблицы и выбранная реакция на удаление связанной строки родительской таблицы (no action, cascade).

Для последующего анализа базы данных (например, с целью нормализации отношений) внутреннюю схему базы данных удобно представить в виде совокупности схем отношений. Каждая схема отношения оформляется как отдельное предложение следующим образом: имя отношения указывается перед круглыми скобками, а в скобках (через запятую) перечисляются все атрибуты данного отношения. Атрибут (атрибуты), выделенный в качестве первичного ключа, подчеркивается. Например:

Поставка (Номер поставщика, Номер детали, Дата поставки, Количество)

Соседние файлы в папке базы данных