У меня есть список смежности в базе данных с идентификатором и 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
Теперь мой вопрос: при вставке/обновлении есть ли способ проверить, произойдет ли циклическая ссылка?
Должен добавить, что я знаю все о модели вложенных множеств и т. д. Я выбрал метод смежности с сохраненными путями, потому что считаю его более интуитивным. Я заставил его работать с триггерами и отдельной таблицей путей, и он работает как шарм, за исключением возможных циклических ссылок.