Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по ОБД.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
5.9 Mб
Скачать

1 Теоретические сведения

1.1 Генераторы (Generators)

Генераторы используются для генерации уникальных номеров, используемых в ключевых полях. То есть они реализуют те же функциональные возможности в таблицах InterBase, что поля с автоматическим приращением в других СУБД. Можно указать, чтобы числа генерировались, начиная с заданного начального значения.

Пример создания генератора:

CREATE GENERATOR MyGenerator;

SET GENERATOR MyGenerator TO 1000;

Генераторы непосредственно не привязываются к какому-либо полю. Они просто позволяют генерировать уникальные числа. Для этого используется функция Gen_ID(), встроенная в InterBase, которая генерирует целочисленные значения. Она берет генератор в качестве первого параметра и значение шага в качестве второго. Обычно приращение равно 1.

Обращаться к генератору можно только через функцию Gen_ID().

1.2 Бизнес-правила

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

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

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

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

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

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

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

1.3 Триггеры (Triggers)

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

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

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

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

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

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

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

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

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

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

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

CREATE TRIGGER Имя FOR Таблица

[ACTIVE | INACTIVE]

{BEFORE | AFTER}

<операция> [OR <операция> [OR <операция>]]

[POSITION Номер]

AS [<список переменных>] <блок>;

<операция> = {INSERT | UPDATE | DELETE}

<список переменных> =

DECLARE [VARIABLE] Переменная <тип данных>;

[DECLARE [VARIABLE] Переменная <тип данных>; ...]

<блок> =

BEGIN

<составной оператор>

[<составной оператор>...]

END

<составной оператор> = <блок> | Оператор;

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

Таблица 5.1 – Описание параметров оператора создания триггера

Параметр

Описание

Имя

Уникальное название триггера.

ACTIVE | INACTIVE

Указывает будет ли работать триггер

BEFORE | AFTER

Обязательный параметр, показывающий когда будет срабатывать триггер

INSERT | UPDATE | DELETE

Одной из событий, на которые будет срабатывать триггер

POSITION Номер

Определяет порядок срабатывания триггера, когда имеется несколько триггеров, реагирующих на одно и то же событие. Номер – целое число между 0 и 32767

DECLARE [VARIABLE] Переменная <тип данных>

Описание локальной переменной, которую можно будет использовать только в этом триггере

Оператор

Любой одиночный оператор языка хранимых процедур и триггеров InterBase

Внутри тела триггера доступны две контекстные переменные 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;