Проверяемый текст
Пушников А.Ю. Введение в системы управления базами данных. Учебное пособие / Изд-е Башкирского ун-та. - Уфа, 1999.
[стр. 99]

(PRIMARY KEY (Имя столбца.,..)} (UNIQUE (Имя столбца.,..)} (FOREIGN KEY (Имя с т о л б ц а REFERENCES Имя таблицы [(Имя столбца.,..)] [Ссылочная спецификация}} { Ограничение check } } [Атрибуты ограничения] Ограничения столбца::= [CONSTRAINT Имя ограничения] { (NOT NULL} (PRIMARY KEY} {UNIQUE} (REFERENCES Имя таблицы [(Имя столбца)] [Ссылочная спецификация]} { Ограничение check } } [Атрибуты ограничения] Ссылочная спецификация::= [MATCH (FULL PARTIAL}] [ON UPDATE (CASCADE SET NULL SET DEFAULT NO ACTION}] [ON DELETE (CASCADE SET NULL SET DEFAULT NO ACTION}] Атрибуты ограничения::= (DEFERRABLE [INITIALLY DEFERRED INITIALLY IMMEDIATEJ} (NOT DEFERRABLE} Ограничение типа CHECK.
Ограничение типа CHECK содержит предикат, могущий принимать значения TRUE, FALSE и UNKNOWN (NULL).

Ограничение типа CHECK может быть использовано как часть описания домена, таблицы, столбца таблицы или отдельного ограничения
99
[стр. 142]

1.
После исполнения каждого оператора, изменяющего содержимое таблицы, к которой относится данное ограничение.
2.
При завершении каждой транзакции, включающей операторы, изменяющие содержимое таблиц, к которым относятся данное ограничение.
3.
В любой промежуточный момент, если пользователь инициирует проверку.
При определении ограничения указывается тип проверки ограничения является ли это ограничение неоткладываемым (NOT DEFERRED) или может быть откладываемым (DEFERRED).
Во втором случае можно задать процедуру по умолчанию: проверять немедленно или проверять по завершении транзакции.
Таким образом, можно определить потенциально откладываемое ограничение, которое по умолчанию проверяется немедленно.
В любой момент режим проверки такого ограничения можно изменить на отложенный и наоборот.
Режим проверки может быть изменен для одного ограничения или сразу для всех потенциально откладываемых ограничений.
Если ограничение определено как неоткладываемое, то тип такого ограничения изменить нельзя и ограничение всегда проверяется немедленно.
Элементы процедурности все же присутствуют в стандарте SQL в виде так называемых действий, исполняемых по ссылке (referential triggered actions).
Эти действия определяют, что будет происходить при изменении значения родительского ключа, на который ссылается некоторый внешний ключ.
Эти действия можно задавать независимо для операций обновления (ON UPDATE) или для операций удаления (ON DELETE) записей в родительском отношении.
Стандартом SQL определяется 4 типа действий, исполняемых по ссылке:  CASCADE.
Изменения значения родительского ключа автоматически приводят к таким же изменениям связанного с ним значения внешнего ключа.
Удаление кортежа в родительском отношении приводит к удалению связанных с ним кортежей в дочернем отношении.
 SET NULL.
Все внешние ключи, которые ссылаются на обновленный или удаленный родительский ключ получают значения NULL.
 SET DEFAULT.
Все внешние ключи, которые ссылаются на обновленный или удаленный родительский ключ получают значения, принятые по умолчанию для этих ключей.
 NO ACTION.
Значения внешнего ключа не изменяются.
Если операция приводит к нарушению ссылочной целостности (появляются "висящие" ссылки), то такая операция не выполняется.
Как видно, действия, исполняемые по ссылке, фактически являются встроенными в СУБД триггерами.
Действия типа CASCADE, SET NULL и SET DEFAULT являются компенсирующими операциями, вызывающимися при попытке нарушить ссылочную целостность.
Синтаксис ограничений стандарта SQL Понятие ограничения используется во многих операторах определения данных (DDL).
Ограничение check::= CHECK Предикат Ограничения таблицы ::= [CONSTRAINT Имя ограничения] { {PRIMARY KEY (Имя столбца.,..)} {UNIQUE (Имя столбца.,..)} {FOREIGN KEY (Имя столбца.,..) REFERENCES Имя таблицы [(Имя столбца.,..)] [Ссылочная спецификация]} { Ограничение check }

[стр.,143]

} [Атрибуты ограничения] Ограничения столбца::= [CONSTRAINT Имя ограничения] { {NOT NULL} {PRIMARY KEY} {UNIQUE} {REFERENCES Имя таблицы [(Имя столбца)] [Ссылочная спецификация]} { Ограничение check } } [Атрибуты ограничения] Ссылочная спецификация::= [MATCH {FULL PARTIAL}] [ON UPDATE {CASCADE SET NULL SET DEFAULT NO ACTION}] [ON DELETE {CASCADE SET NULL SET DEFAULT NO ACTION}] Атрибуты ограничения::= {DEFERRABLE [INITIALLY DEFERRED INITIALLY IMMEDIATE]} {NOT DEFERRABLE} Ограничение типа CHECK.
Ограничение типа CHECK содержит предикат, могущий принимать значения TRUE, FALSE и UNKNOWN (NULL).

Примеры предикатов различного вида приведены в главе 5.
Ограничение типа CHECK может быть использовано как часть описания домена, таблицы, столбца таблицы или отдельного ограничения
целостности ASSERTION.
Ограничение считается нарушенным, если предикат ограничения принимает значение FALSE.
Пример 15.
Пример ограничения типа CHECK: CHECK (Salespeaple.Salary IS NOT NULL) OR (Salespeaple.Commission IS NOT NULL) Данное ограничение утверждает, что каждый продавец должен иметь либо ненулевую зарплату, либо ненулевые комиссионные.
Пример 16.
Еще пример ограничения типа CHECK: CHECK EXIST(SELECT * FROM Salespeaple) Данное ограничение утверждает, что список продавцов не может быть пустым.
Ограничения таблицы и ограничения столбца.
Ограничения таблицы и ограничения столбца таблицы входят как часть описания соответственно таблицы или столбца таблицы.
Ограничение таблицы может относиться к нескольким столбцам таблицы.
Ограничение столбца относится только к одному столбцу таблицы.
Любое ограничение столбца можно описать как ограничение таблицы, но не наоборот.
Ограничения таблицы или столбца могут иметь наименования, при помощи которого в дальнейшем можно отменять это ограничение или менять время его проверки.
Ограничение PRIMARY KEY.
Ограничение PRIMARY KEY для таблицы или столбца означает, что группа из одного или нескольких столбцов образуют потенциальный ключ таблицы.
Это означает, что комбинация значений в PRIMARY KEY должна быть уникальной для каждой строки

[Back]