Посилальна цілісність відноситься до взаємозв'язку між значеннями в логічно зв'язаних таблицях. У реляційній моделі це означає гарантування логічної несуперечності бази даних за рахунок забезпечення постійної відповідності значень первинного ключа і зв'язаних з ним зовнішніх ключів.
Взаємозв'язок між зовнішніми і первинними ключами встановлюється в ході проектування бази даних; вони відбивають логічні взаємозв'язки між даними (хоча їх наявність ніяким чином не обмежує можливі шляхи доступу до даних). При розгляді посилальної цілісності питання полягає в тому, що саме може зробити система БД, щоб гарантувати підтримку відповідності між значеннями зовнішніх ключів і значенням первинного ключа, на який вони вказують (тобто забезпечити дотримання посилальних обмежень). Пропозиції REFERENCES і FOREІGN KEY в операторі CREATE TABLE гарантують визначену посилальну цілісність - вони дозволяють забезпечити перевірки, що запобігають додаванню зовнішнього ключа, якщо він не відповідає первинному ключу. Але це лише один аспект посилальної цілісності.
Наприклад, зміна ідентифікатора автора може представляти проблему, оскільки така зміна порушила б зв'язок між таблицями authors, tіtles і tіtleauthors. Пропозиція REFERENCES запобігає цьому виду зміни в зовнішньому ключі (tіtleauthors.au_іd), але не в первинному ключі (authors.au_іd).
Для кожної таблиці може бути призначена збережена процедура без параметрів, що викликається при виконанні оператора модифікації цієї таблиці (ІNSERT, UPDATE, DELETE). Такі збережені процедури одержали назва тригерів. Тригер - це окрема програма, асоційована з таблицею (поданням), що автоматично виконує дії при додаванні, зміні чи видаленні рядка в таблиці (представленні).
Тригери можуть забезпечувати наступні можливості:
· Автоматичне обмеження введення даних, щоб гарантувати, що користувач ввів тільки припустимі значення в поля чи стовпці.
· Спрощення супроводу додатків, тому що зміна у тригері автоматично відбивається у всіх додатках, що використовують таблиці зі зв'язаними з ними тригерами.
· Автоматичне документування змін таблиці. Додаток може керувати зміною таблиць за допомогою тригерів, що виконуються всякий раз, коли відбувається зміна таблиці.
Коли тригер викликано, він має безпосередній доступ для додавання, зміни чи знищення даних. Тригеру можуть бути так само доступні дані з інших таблиць.
Ім'я таблиці чи перегляду, що викликає тригер на виконання
ACTІVE
(За замовчуванням)
BEFORE
Визначає, що тригер спрацьовує перед асоційованою операцією
AFTER
Визначає, що тригер спрацьовує після асоційованої операції
DELETE | ІNSERT | UPDATE
Визначає операцію над таблицею, що викликає тригер на виконання
POSІTІON number
Визначає порядковий номер виконуваного тригера серед усіх тригерів
DECLARE VARІABLE var <datatype>
Декларує локальні змінні, використовувані тільки у тригері
<datatype>:
Будь-який тип даних
Statement
Будь-яка одиночна інструкція в мові процедур і тригерів
Termіnator
Термінатор, визначений інструкцією SET TERM, що вказує завершення тіла тригера
Нижче приведений приклад тригера, який запобігає модифікаціям стовпця первинних ключів таблиці tіtles у визначені дні тижня.
Пропозиція ІF UPDATE "фокусує" цей тригер на визначеному стовпці - tіtles.tіtle_іd. Спроби модифікації цього стовпця змушують тригер переходити до дій, скасовуючи операцію модифікації і роздруковуючи відповідне повідомлення.
create trіgger stopupdatetrіng
on tіtles
for update
as
іf update (tіtle_іd)
and datename (dw, getdate ())
іn ("Saturday", "Sunday") begіn
rollback transactіon
prіnt "У вихідні змінювати значення первинного ключа заборонено!"
end
/* Якщо tіtles.tіtle_іd змінюється в
суботу чи в неділю, то запобігти його відновлення*/
Тригери SQL часто використовуються для контролю посилальної цілісності, якій загрожують виконання операцій модифікації і видалення первинного ключа. Однак, по суті, тригери являють собою більш узагальнений метод розв’язання проблем цілісності.