Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Обход ненаправленного графа с циклическими связями

$
0
0
Есть граф, характеризующий связи между организациями на основании взаимоотношений владения.

При этом возможно:
- как перекрестное владение (А владеет Б и Б владеет А),
- так и кольцевое владение (А владеет Б, Б владеет С, С владеет А).

Требуется: для конкретной организации А узнать всех её прямых и косвенных владельцев.


Рассматривал следующие варианты реализации:

Вариант 1: При помощи конструкции WITH Recursive - не подошел (или я не смог) из-за наличия петель;

Вариант 2: Есть вариантный организации дерева при помощи типа данных HierarchyID,
но для меня это пока сложно (не являюсь специализированным программистом MS SQL), нет времени на детальное изучение (конкретная задача - короткие сроки), не уверен, что мне подойдет (на основании поверхностного изучения сложилось мнение, что данный тип подходит для деревьев).

Вариант 3: Создать рекурсивную функцию в которую передавать список уже пройденных узлов
и проверять их на каждой итерации для исключения возможности зацикливания. Идентификаторы организаций передавать в виде строки, разделенной запятыми (потом разбирать строку - парсить).

Пока остановился на Варианте №3, но может кто-нибудь подскажет более оптимальное решение, если есть ?

Спасибо.

Viewing all articles
Browse latest Browse all 7251

Trending Articles