Триггеры базы данных

Индексы

CHECK

Ограничение CHECK определяет логику дополнительной проверки, которая должна дать результат "истина" для оператора вставки, модификации или удаления из таблицы. Дополнительная логика возвращает результат Boolean. Ограничение CHECK гарантирует, что значения в изменяемой строке удовлетворяют заданному набору проверок правильности. Синтаксис ограничения CHECK подобен синтаксису предложения WHERE оператора SELECT, однако здесь нельзя использовать подзапросы или столбцы, которые изменяются с течением времени (такие как SYSDATE). Вы можете использовать триггеры базы данных, чтобы запрограммировать обработку, которую нельзя поместить в ограничения. Например, при использовании ограничения CHECK для таблицы заказов, можно указать, что объем заказа должен быть больше нуля и комиссия продавца не может превышать более, чем на 10 процентов сумму заказа.

 

Ограничения PRIMARY KEY и UNIQUE автоматически создают индекс на столбцах, для которых они определены, если ограничение активизируется при создании. Если индекс уже существует на столбцах, которые формируют ограничение PRIMARY KEY или UNIQUE, используется этот индекс, и Oracle не может создать новый. Oracle создает индексы, когда ограничение активизируется (что выполняется по умолчанию при добавлении ограничения к таблице). Oracle удаляет индексы таблицы, когда ограничение деактивизируется. Активизация и деактивизация ограничения может потребовать много временных затрат и ресурсов системы вследствие создания и удаления индексов.

Когда устанавливаются ограничения FOREIGN KEY, столбцы автоматически не индексируются. Так как столбцы внешнего ключа в операции соединения таблиц обычно участвуют вместе, на этих столбцах индексы создаются вручную.

ПРЕДОСТЕРЕЖЕНИЕ

Триггер базы данных — это блок PL/SQL, который предназначен для автоматического выполнения при отработке оператора вставки, модификации и удаления из таблицы. Можно определить триггеры двух типов: запускающийся один раз для всего оператора и запускающийся для каждой вставляемой, изменяемой или удаляемой строки. С таблицей можно связать 12 событий — для которых можно определить триггеры базы данных, а для каждого из 12 событий — несколько триггеров базы данных.

Триггер базы данных может вызывать процедуры базы данных, которые также написаны на PL/SQL. В отличие от триггеров базы данных, процедуры в базе данных сохраняются в компилированной форме. По этой причине целесообразно поместить наиболее длинные сегменты кода в процедуру и затем вызывать эту процедура из триггера базы данных.

В дополнение к реализации сложных бизнес-правил, проверок, ввода значений по умолчанию, можно,, использовать триггеры базы данных, чтобы вставлять, модифицировать и удалять строки других таблиц. Примером такого использования является средство протоколирования, где строка протокола автоматически создается в таблице протокола всякий раз, когда строка таблицы данных изменяется. Без триггеров базы данных эта функция могла быть реализована в программах внешнего интерфейса, которые проводят изменения в базе данных; однако тот, кто умеет обойти программы внешнего интерфейса (например, используя SQL*Plus), может обойти установленные проверки и обработку.

В триггерах базы данных можно использовать операторы SQL, а в ограничениях - нет.