"Tonal" ...
Разминался тут с деревами, и задумался о том, что положить дерево в таблички мы могём, выбрать теперь тоже запросто (СТЕ - рулит),
а вот гарантировать, что в нашем дереве нет циклов так просто не получится... :-(
Это смотря как дерево делать.
Надо при изменении или всю таблицу лочить (что жалко), или всё дерево - что
чревато дедлоками...
Да и код таких проверок не самый прямой и наглядный.
Выноси (или дублируй) все связи parent->child всех уровней в отдельную
таблицу
и делай там PK\UK. Перед вставкой {a, b} пробуй вставить {b, a} - если
получилось,
значит цикла нет и после вставки {a, b} можно удалять {b, a}.
Не знаю, насколько такая схема жизнеспособна :)
Вот бы было бы здорово, чтобы сервер можно попросить организовать подобные проверки так же, как он отслеживает уникальность в
индексах.
Что-то типа:
ALTER TABLE TABLE_NAME ADD CONSTRAINT FK_NAME FOREIGN KEY (PARENT_ID) SELF_REFERENCES (ID) NOT CYCLE_REFERENCE [ON DELETE
CASCADE];
И как ты себе представляешь реализацию подобного внутри сервера ?
Влад