Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по ОБД ИТП 2 сем.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
6.48 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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]