Первым видом связи классов сущностей между собой, который мы рассмотрим, является так называемая иерархическая рекурсивная связь.
Вообще рекурсия (или рекурсивная связь) – это связь класса сущностей с самим собой.
Иногда по аналогии с жизненными ситуациями такую связь еще называют «рыболовный крючок».
Иерархической рекурсивной связью (или просто иерархической рекурсией) называется любая рекурсивная связь типа «не более одного ко многим».
Иерархическая рекурсия чаще всего используется для того, чтобы хранить данные древовидной структуры.
При задании иерархической рекурсивной связи первичный
ключ родительского класса сущностей (который в данном конкретном случае
одновременно выступает и в роли дочернего класса сущностей) должен
мигрировать в качестве внешнего ключа в состав обязательно неключевых
атрибутов того же класса сущностей. Все это необходимо для поддержания
логической целостности самого понятия «иерархическая рекурсия».
Таким образом, с учетом всего вышесказанного, можно сделать вывод, что иерархическая рекурсивная связь может быть только не обязательно не идентифицирующей
и никакой другой, потому что в случае использования любого другого вида
связи, Null-значения для внешнего ключа были бы недопустимы и рекурсия
была бы бесконечной.
Важно также помнить, что атрибуты не могут появляться
дважды в одном и том же классе сущностей под одним и тем же именем.
Поэтому атрибуты мигрировавшего ключа обязательно должны получить так
называемое имя роли.
Таким образом, в иерархической рекурсивной связи
атрибуты узла расширяются внешним ключом, представляющим необязательную
ссылку на первичный ключ узла, являющийся его непосредственным предком.
Построим презентационную и ключевую диаграммы,
реализующую иерархическую рекурсию в реляционной модели данных, и
приведем пример табличной формы.
Сначала составим презентационную диаграмму: Теперь построим более подробную – ключевую диаграмму: Рассмотрим
пример, наглядно иллюстрирующий такой вид связи, как иерархическая
рекурсивная связь. Пусть нам дан следующий класс сущностей, состоящий,
как и предыдущий пример, из атрибутов «Код Предка» и «Код Узла». Сначала
покажем табличную форму представления этого класса сущности: А
теперь построим диаграмму, представляющую этот класс сущностей. Для
этого выделим из таблицы все необходимые для этого сведения: предка у
узла с кодом «единица» не существует или не определен, из этого делаем
вывод, что узел «единица» является вершиной. Этот же самый узел
«единица» является предком для узлов с кодом «два» и «три». В свою
очередь, у узла с кодом «два» имеются два потомка: узел с кодом «четыре»
и узел с кодом «пять». А у узла с кодом «три» – только один потомок –
узел с кодом «шесть».
Итак, с учетом всего вышесказанного построим древовидную
структуру, отражающую информацию о данных, заложенную в предыдущей
таблице: Итак, мы увидели, что представлять древовидные структуры действительно удобно при помощи иерархической рекурсивной связи. |