Как было сказано, СУБД обрабатывают два типа ограничений целостности:
♦ декларативные ограничения целостности, определенные с помощью операторов create table и alter table;
♦ процедурные ограничения целостности (обрабатываемые триггерами).
Использование триггеров для поддержания ограничений целостности имеет одно значительное преимущество: триггеры являются более гибкими, чем декларативные ограничения, потому что каждое ограничение может быть реализовано при помощи триггеров. (То же утверждение не является верным для декларативных ограничений.)
В примере 14.3 показано, как вы можете поддерживать ссылочную целостность для таблиц employee и works_on.
Триггер workson_integrity в примере 14.3 проверяет ссылочную целостность для таблиц employee и works_on. Это означает, что проверяется каждое изменение значения в столбце emp_no таблицы workson, и любое нарушение этого ограничения отменяет операцию. (То же самое верно и для добавления нового значения в столбец emp_no.) Оператор rollback transaction во втором блоке begin отменяет оператор insert или update в случае нарушения ссылочного ограничения.
Триггер в примере 14.3 проверяет случай 1 и случай 2 для ссылочной целостности между таблицами employee и works_on (см. определение ссылочной целостности). В примере 14.4 создается триггер, который проверяет нарушение ссылочной целостности между теми же самыми таблицами в случае 3 и случае 4.