У меня есть список смежности в базе данных с ID и ParentID для представления древовидной структуры:
-a
--b
---c
-d
--e
Конечно, в записи ParentID никогда не должен совпадать с ID, но я также должен запретить циклические ссылки, чтобы предотвратить бесконечный цикл. Эти циклические ссылки могут в теории включать более двух записей. (a-> b, b-> c, c-> a и т. д.)
Для каждой записи я храню пути в строковом столбце следующим образом:
a a
b a/b
c a/b/c
d d
e d/e
Мой вопрос сейчас:
при вставке / обновлении есть ли способ проверить наличие круговой ссылки?
Я должен добавить, что я знаю все о модели вложенных множеств и т. Д. Я выбрал метод смежности с сохраненными путями, потому что я считаю его гораздо более интуитивным. Я получил его, работающий с триггерами и отдельной таблицей путей, и он работает как шарм, за исключением возможных циклических ссылок.