Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД в ИС / СБД_практ.doc
Скачиваний:
53
Добавлен:
16.02.2016
Размер:
641.54 Кб
Скачать

Тема 4) Действие ограничений целостности

Поддержание ограничений целостности требует некоторых ограничений на значения, которые могут быть представлены в полях, объявленных как внешний ключ и родительский ключ. Родительский ключ должен быть структурен, чтобы гарантировать, что каждое значение внешнего ключа будет соответствовать одной указанной строке. Это означает, что он (ключ) должен быть уникальным и не содержать никаких пустых значений (NULL). Следовательно, вы должны убедиться, что все поля, которые используются как родительские ключи, имеют или ограничение PRIMARY KEY или ограничение UNIQUE.

Ссылка ваших внешних ключей только на первичные ключи - хорошая стратегия. Когда вы используете внешние ключи, вы связываете их не просто с родительскими ключами на которые они ссылаются; вы связываете их с определенной строкой таблицы где этот родительский ключ будет найден. Внешний ключ может содержать только те значения которые фактически представлены в родительском ключе или пустые (NULL). Попытка ввести другие значения в этот ключ при выполнении операций вставки (INSERT) или модификации (UPDATE) будет отклонена. Можно удалять (DELETE) любые строки с внешними ключами не используя родительские ключи вообще. Вы можете объявить внешний ключ как NOT NULL, но это необязательно, и в большинстве случаев, нежелательно.

Если вы хотите изменить или удалить текущее ссылочное значение родительского ключа, на которые ссылаются внешние ключи, у вас имеется три возможности:

  • вы можете ограничить, или запретить, изменение (удаление), обозначив, что изменения в родительском ключе – ограниченные изменения (RESTRICTED).

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

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

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

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

Когда вы изменяете код улицы, вы хотите чтобы были сохранены все владельцы телефонов, проживающие на ней. Однако, если эта улица ликвидируется, вы можете не захотеть удалить владельцев, при удалении ее самой из базы данных. Взамен, вы захотите убедиться, что владельцы переехали на другие улицы. Чтобы сделать это вы должны указать UPDATE с Каскадируемым эффектом, и DELETE с Ограниченным эффектом.

CREATE TABLE Телефонный_справочник

( Номер_телефона integer NOT NULL PRIMARY KEY

ФИО char(20),

Код_улицы integer REFERENCES Справочник_улиц,

UPDATE OF Справочник_улиц CASCADES,

DELETE OF Справочник_улиц RESTRICTED);

Задание к теме 4:

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