Основы проектирования баз данных в САПР. Литовка Ю.В - 51 стр.

UptoLike

таблице. Для реализации автоматического выполнения каскадных обновлений и изменений необхо-
димо:
1) в определении базы данных удалить ссылочные целостности, блокирующие такие изменения;
2) определить триггеры для родительской таблицы.
Триггер, реализующий каскадное обновление в дочерней таблице, будет содержать оператор
IF (OLD.поле_связи_родителя <> NEW.поле_связи_родителя) then
UPDATE <дочерняя таблица>
SET <поле связи дочерней таблицы> = NEW.поле_связи_родителя
WHERE поле_связи_дочерней_таблицы=OLD.поле_связи_родителя;
Триггер, реализующий каскадное удаление в дочерней таблице, будет содержать оператор
DELETE FROM <дочерняя таблица>
WHERE <поле связи дочерней таблицы> = <поле связи родителя>;
Например, напишем триггеры, выполняющие каскадное обновление и удаление в дочерней таб-
лице prihod после соответствующего изменения записи в таблице detal:
CREATE TRIGGER ba_detal FOR detal
ACTIVE
BEFORE UPDATE
AS
BEGIN
IF (OLD.name_det <> NEW.name_det) THEN
UPDATE prihod
SET name_det = NEW.name_det
WHERE name_det = OLD.name_det;
END
CREATE TRIGGER ad_detal FOR detal
ACTIVE
AFTER DELETE
AS
BEGIN
DELETE FROM prihod
WHERE prihod.name_det = detal.name_det;
END
7.14 ВЕДЕНИЕ ЖУРНАЛА ИЗМЕНЕНИЙ
Журнал изменений в базе данных представляет собой таблицу базы, в которой фиксируются дей-
ствия над всей базой данных или отдельными ее таблицами. Журнал позволяет определить источ-
ник недостоверных или искаженных данных.
Определим в базе данных таблицу gurnal_det:
CREATE TABLE gurnal_det (
Dat_izm DATE, /*дата изменения*/
Old_name VARCHAR (20), /*старое имя*/
New_name VARCHAR (20)); /*новое имя*/
Действия ins, upd и del, дата изменения, старое и новое значения столбца name_det будут фикси-
роваться в таблице gurnal_det с помощью триггеров
CREATE TRIGGER gurnal_det_add FOR detal