- •1. Условия достоверности, хранимые процедуры, триггеры
- •Хранимые процедуры
- •Условия достоверности ввода данных на уровне поля таблицы
- •Условия достоверности ввода данных на уровне записей
- •Триггеры
- •Использование триггеров и хранимых процедур
- •Определение значения поля при добавлении новой записи
- •Проверка удовлетворения введенных значений заданному условию
Использование триггеров и хранимых процедур
Рассмотрим несколько примеров использования триггеров и хранимых процедур для определения условия достоверности ввода данных и начальных значений полей таблицы.
Использование триггеров при определении ссылочной целостности
В простых случаях Visual FoxPro может самостоятельно создать триггер. Для этого необходимо воспользоваться опцией Edit Referential Integrity определения связи в окне конструктора БД.
Ссылочная целостность предназначена для автоматической генерации выражения и функции триггера для пары связанных таблиц, т.е. она следит за тем, чтобы значение внешнего ключа дочерней таблицы всегда соответствовало значению ключевого поля родительской таблицы. Никакие другие поля в этом случае значения не имеют.
Для указания построителю, какое поле считать ключевым, а какое внешним ключом, необходимо установить, необходимо установить между двумя таблицами «постоянную связь». Затем необходимо выбрать один из трех возможных типов отношений между этими таблицами (табл.2).
Таблица 2
Формирование правил для различных типов отношений
Триггер |
Тип отношения |
Правило |
UPDATE |
Cascade |
При изменении ключевого поля родительской таблицы изменить значение внешнего ключа во всех соответствующих записях подчиненной таблицы |
Restrict |
Запретить модификацию ключевого поля родительской таблицы, если существует хотя бы одна соответствующая ей запись в подчиненной таблице |
|
Ignore |
Не настраивать никаких отношений между таблицами. Модификация в одной таблице никак не влияет на модификацию в другой |
|
DELETE |
Cascade |
При удалении записи в родительской таблице удалить все соответствующие записи подчиненной таблицы |
Restrict |
Запретить удаление записи в родительской таблице, если существует хотя бы одна соответствующая ей неудаленная запись в подчиненной таблице |
|
Ignore |
Не настраивать никаких отношений между таблицами. Модификация в одной таблице никак не влияет на модификацию в другой |
|
INSERT |
Cascade |
Не существует |
Restrict |
Запретить создание новой записи в подчиненной таблице, если в родительской таблице не существует записи с указанным значением ключевого поля |
|
Ignore |
Не настраивать никаких отношений между таблицами. Модификация в одной таблице никак не влияет на модификацию в другой |
Эти правила относятся исключительно к содержимому ключевого поля родительской таблицы и внешнего ключа дочерней.
После выбора типа взаимоотношений между таблицами происходит следующее:
в хранимых процедурах базы данных создаются функции, обеспечивающие указанный тип взаимоотношений вводимых данных;
в свойствах таблиц добавляются в выражения триггеров вызов соответствующих функций (см. рис.3).
Контрольные вопросы:
Перечислите правила, которые формируются при установлении типа связи для соответствующих операций в таблице.
В каких случаях срабатывают триггеры, созданные с помощью Referential Integrity Builder?
Практическое задание:
Для двух связанных таблиц БД (согласно индивидуальному заданию) определить различные правила для контроля ссылочной целостности с использованием триггеров UPDATE, DELETE и INSERT. Выполнить действия по вставке, модификации и удалению записей, отслеживая срабатывание триггеров при корректных и некорректных действиях с записями таблицы.