Лекция 15. Триггеры в рекурсивных структурах
Дается определение рекурсивной структуры в реляционной базе данных.
Приводится пример создания таблицы, реализующей рекурсивную иерархию.
Определяются правила целостности, непротиворечивости и достоверности
данных в таблицах с рекурсивными связями. Описывается программирование
триггеров, поддерживающих целостность данных в рекурсивных структурах.
Ключевые слова: рекурсивная иерархия, отношение подчиненности,
рекурсивная связь, целостность информации, триггер для добавления
записи, триггер для изменения записи, триггер для удаления записи.
Введение в рекурсивные структуры
Рассмотрим создание таблицы, реализующей рекурсивную иерархию,
на примере данных, описывающих отношения подчиненности между сот-
рудниками. В таблице emp_mgr необходимо задать как имя сотрудника
(emp), так и имя его начальника (mgr). Для рекурсивной связи одна и та
же сущность является и родительской, и дочерней. При задании рекур-
сивной связи атрибут первичного ключа мигрирует в качестве внешнего
ключа в состав неключевых атрибутов той же сущности (атрибуты emp –
сотрудник и mgr – начальник таблицы emp_mgr). Информация о руко-
водителе содержится в той же сущности, поскольку руководитель – со-
трудник той же организации. Связь руководит/подчиняется (fk_emp)
позволяет хранить древовидную иерархию подчиненности. Такой вид ре-
курсивной связи называется иерархической рекурсией и задает связь, ко-
гда руководитель (экземпляр родительской сущности) может иметь мно-
жество подчиненных (экземпляров дочерней сущности), но подчиненный
– только одного руководителя. В среде MS SQL Server создадим таблицу
emp_mgr:
CREATE TABLE emp_mgr
(emp CHAR(2) PRIMARY KEY,
mgr CHAR(2) NULL,
NoOfReports INT DEFAULT 0,
CONSTRAINT fk_emp FOREIGN KEY (mgr)
REFERENCES emp_mgr (emp) )
В таблицу введено поле NoOfReports, в котором для каждого сот-
рудника определено количество его подчиненных.
343
Лекция 15 Триггеры в рекурсивных структурах