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