Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
управление данными 2.doc
Скачиваний:
13
Добавлен:
07.11.2018
Размер:
2.08 Mб
Скачать
    1. 5.4.2. Бизнес-правила

В реальной жизни вопрос целостности базы данных связан с правилами, установленными у пользователя информационной системы. Например, в компании могут быть установлены такие правила:

    • клиентам не разрешается размещать заказы на сумму, превышающую их лимит кредита;

    • сведения о выполненных заказах хранятся в течение шести месяцев, а затем удаляются;

    • нельзя выдавать читателю новых книг, пока он не вернет взятых ранее;

    • каждый раз, когда продается какой-нибудь товар, для служащего, оформившего продажу, и для отдела, в котором этот служащий работает, на стоимость проданного товара увеличивается значение определенного поля, используемого для вычисления премии; в случае возврата всего или части проданного товара, значение этого поля соответствующим образом должно уменьшиться;

    • каждый раз, когда приходит новая поставка, количество поставленного товара на складе увеличивается на количество товара в поставке.

Такие правила называются бизнес-правилами. В первом стандарте SQL считалось, что эти правила выходят за рамки ответственности СУБД и за их реализацию отвечает прикладная программа, осуществляющая доступ к базе данных. Впервые в 1986 году в СУБД Sybase было введено понятие триггер, что позволило включить реализацию бизнес-правил в базу данных.

    1. 5.4.3. Триггеры (Triggers)

С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка SQL, которые автоматически выполняется при вставке, модификации или удалении записи.

В СУБД InterBase можно создавать триггеры, работающие при следующих шести условиях:

    1. • до вставки записи (BEFORE INSERT);

    2. • после вставки записи (AFTER INSERT);

    3. • до удаления записи (BEFORE DELETE);

    4. • после удаления записи (AFTER DELETE);

    5. • до модификации записи (BEFORE UPDATE);

    6. • после модификации записи (AFTER UPDATE).

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

Недостатком триггеров является их влияние на производительность операций с базой данных.

Синтаксис оператора создания триггера:

  1. CREATE TRIGGER Имя FOR Таблица [ACTIVE | INACTIVE] {BEFORE | AFTER} <операция> [OR <операция> [OR <операция>]] [POSITION Номер] AS [<список переменных>] <блок>; <операция> = {INSERT | UPDATE | DELETE} <список переменных> = DECLARE [VARIABLE] Переменная <тип данных>; [DECLARE [VARIABLE] Переменная <тип данных>; ...] <блок> = BEGIN <составной оператор> [<составной оператор>...] END <составной оператор> = <блок> | Оператор;

Параметры, входящие в этот оператор, пояснены в табл. 2.

Таблица 2

Описание параметров оператора создания триггера

Внутри тела триггера доступны две контекстные переменные NEW и OLD, которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер.

Пример генератора и триггера:

CREATE GENERATOR EMP_NO_GEN; CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.EMP_NO IS NULL) THEN NEW.EMP_NO = GEN_ID(EMP_NO_GEN, 1); END;