Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dbbook(2010.04.15).pdf
Скачиваний:
52
Добавлен:
09.06.2015
Размер:
2.14 Mб
Скачать

3.5.3. Удаление строк

Оператор delete удаляет несколько строк таблицы:

delete from имя_таблицы [where условие]

Необязательная фраза where дает возможность отбирать удаляемые строки. Если эта фраза опущена, то будут удалены все строки в указанной таблице.

Все строки таблицы могут быть удалены одновременно с помощью оператора

truncate table имя_таблицы

Это оператор отличается от оператора delete без фразы where тем, что не записывается в журнал транзакций и, как следствие, выполняется существенно быстрее. Кроме того, оператор truncate table сбрасывает значение счетчика для идентификационного столбца.

3.6. Целостность

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

базу данных (хотя каждое значение можно проверить на правдоподобность). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно

быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7).

Поддержание целостности базы данных может рассматриваться как защита данных от ошибочных изменений.

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

Современные СУБД имеют ряд средств для обеспечения поддержания целостности (как, впрочем, и средств обеспечения поддержания безопасности).

3.6.1. Декларативная поддержка

В общем случае классификация ограничений целостности по уровням иерархии реляционных объектов данных (атрибут – кортеж – отношение – база данных) означает зависимость ограничений

1)на уровне атрибута – от значения атрибута,

2)на уровне кортежа – от значения кортежа, то есть от значений нескольких атрибутов,

3)на уровне отношения – от отношения, то есть от нескольких кортежей,

4)на уровне базы данных – от нескольких отношений.

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

Ограничение уровня атрибута включает

1)ограничение типа значений атрибута, например, integer для атрибута Курс;

2)ограничение значений атрибута, записываемое как условие, зависящее от имени атрибута, например, check(1 <= Курс and Курс <= 5);

3)ограничение null-значений, определяемое флажком допустимости (null) или недопустимости (not null) null-значений.

Первые два ограничения определяют ограничение домена атрибута.

Ограничение уровня кортежа сводится к ограничению кортежа и записывается как условие, зависящее от имен нескольких базовых атрибутов схемы отношения, например, check(0 < minВесКг and minВесКг < maxВесКг).

Ограничение уровня отношения включает ограничения уникальности значений первичного (primary key) и кандидатных (candidate key) ключей.

Ограничение уровня базы данных включает ограничения ссылочной целостности внешних ключей (foreign key). Внешний ключ объявляемого базового отношения ссылается на первичный или кандидатный ключ того же или другого базового отношения.

Отношение, на которое ссылается внешний ключ, называется ссылочным, или родительским. Отношение, содержащее внешний ключ, называется дочерним.

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

1. restrict правило ограничения. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения не выполняется, если на этот кортеж родительского отношения ссылается хотя бы один кортеж дочернего отношения. В примере на рис. 3.2 кортежи родительского отношения лишь со значением первичного ключа 1 и 4 допускают обновление ключа PK-РодОтн или удаление кортежа.

Рис. 3.2.: Декларативная поддержка ссылочной целостности

2. cascade правило каскадной модификации. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения вызывает автоматическое обновление или удаление соответствующих кортежей дочернего отношения. Если в выше рассмотренном примере (рис. 3.2) заменить правило restrict на cascade, то при обновлении PK-РодОтн с 2 на 20 зна-

чение FK-ДочОтн в двух кортежах также обновится с 2 на 20, а при удалении кортежа со значением PK-РодОтн, равным 2, из дочернего отношения автоматически удалятся кортежи со значением FK-ДочОтн, равным 2.

3. set null правило присвоения null-значений. Обновление ключа в родительском отношении или удаление кортежа из родительского отношения вызывает автоматическое присвоение null- значений тем атрибутам внешнего ключа, которые null-значения допускают. Правило применимо, если такие атрибуты имеются.

Правила поддержания ссылочной целостности во фразах on update и on delete могут быть различными.

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

Примечание. Заметим, что в реляционной модели с помощью механизма внешних ключей реализуется принцип «дочерние сущности знают о родительских, но не наоборот». В объектно-ориентированных моделях часто применяется обратный принцип, при котором родительские классы объектов содержат в себе данные о дочерних объектах

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]