Разминался тут с деревами, и задумался о том, что положить дерево в таблички мы могём, выбрать теперь тоже запросто (СТЕ - рулит), а вот гарантировать, что в нашем дереве нет циклов так просто не получится... :-( Надо при изменении или всю таблицу лочить (что жалко), или всё дерево - что чревато дедлоками...
Да и код таких проверок не самый прямой и наглядный.

Вот бы было бы здорово, чтобы сервер можно попросить организовать подобные проверки так же, как он отслеживает уникальность в индексах.
Что-то типа:
ALTER TABLE TABLE_NAME ADD CONSTRAINT FK_NAME FOREIGN KEY (PARENT_ID) SELF_REFERENCES (ID) NOT CYCLE_REFERENCE [ON DELETE CASCADE];

P.S. Надо же как-то разнообразить понедельник! :-)
--
Александр Замараев

Ответить