Re[2]: дерево в базе
От: Mckey Россия  
Дата: 01.11.06 06:48
Оценка:
Здравствуйте, 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 не помогает...
Т.е. мы конечно попытались решить этим способом нашу задачу — не сильно помогло — тормоза и невозможность по нижнему уровню найти всех предков с соответсвующими коэф с которыми они попадут к этому предку
Делай добро и бросай его в воду...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.