Здравствуйте, Au1, Вы писали:
Au1>Здравствуйте, ha_sash, Вы писали:
_>>Хочу узнать мнение людей с опытом,
_>>на сколько недостатки подобного способа хранения, перевешивают его достоинства
_>>
)) (вот сказнул)
_>>и вообще хранят ли деревья таким образом?
Au1>С точки зрения удобства работы с деревьями, хранящимися как куча элементов с ссылкой на родителя, все зависит от СУБД (ИМХО).
Au1>По крайней мере в Oracle можно написать вот такую штуку и она выберет все поддерево вершины с id = Param:
Au1>select *
Au1> from table_name
Au1> start with id = Param
Au1> connect by prior id = parent_id
Au1>Учите матчасть
.
Au1>Транзитивное замыкание вместе с уровнем вложенности хранить тоже можно. В некоторых случаях полезно (например, когда надо быстро узнавать ответ на вопрос "Содержится ли А в поддереве Б") и дает выигрыш по скорости, если правильно построить потом индексы. Проблемы с ним, действительно, такие, что надо очень аккуратно следить за поддержкой этой структуры, например, с помощью триггера на основной таблице.
Au1>Короче, хорошо-плохо (приемлимо-неприемлимо) еще очень зависит от конкретной задачи, что потом надо будет делать с данными.
А если у дерева такая структура
У1
- У2_1
+ У3_2
- У2_2
- У3_1
- У3_2
И по знакам надо посчитать суммы (я уж не говорю если там будут не знаки, а например коэффициенты) — такая матчасть даже для Oracle не помогает...
Т.е. мы конечно попытались решить этим способом нашу задачу — не сильно помогло — тормоза и невозможность по нижнему уровню найти всех предков с соответсвующими коэф с которыми они попадут к этому предку