|
|
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
Уважаемые! Организовал иерархическую структуру в виде вложенных множеств, т.е. имею таблицу: id_key INT IDENTITY -- первичный ключ узла lft INT -- левая граница множества rgt INT -- правая граница множества, где lft<rgt name CHAR(40) -- имя узла Главный пункт | |---п.A | | | |---п.B | |---п.С | |---п.D Встала задача переподчинения п.A пункту D. А вот как написать изящный запрос (при этом же возможны блокировки), в каком направлении двигаться - сразу не соображу, а юзеры уже вот-вот требуют... Может, кто решал такую задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 14:25:40 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
Я сильно подозреваю, что при подобной структуре хранения дерева любая модификация структуры потребует выполнения нескольких запросов. В один UPDATE тут ника не уложишься. Тебе ведь надо сделать следующее: 1. Освободить место для вставки нужного количества элементов 2. Перенумеровать перемещаемые узлы (lft, rgt) 3. Удалить возникшую вследствии перемещения "дырку" Это, так сказать, общее направление. Более конкретно сказать не могу. Я организую хранение дерева по другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 15:42:24 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 16:08:20 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
2 N.Alex Поле с ссылкой "родителя" всё-таки лучше добавить. Хоть можно проверить будет то ли Вы сделали, что хотели. А вообще такое хранение создаёт столько сложностей при обновлении, что мне кажется что это не оправдывает получамых удобств. Сейчас мне кажется что лучше хранить структуру дерева в виде строчки наподобие имён файлов с директориями. Хотя и тут будут большие трудности с переподчинением. Не знаю, как ни крути - всё горбато получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2002, 06:20:21 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
http://sdm.viptop.ru/articles/sqltrees.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2002, 07:46:28 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
Отвечаю сам себе (нашёл ранее прикопанную ссылку). http://www.osp.ru/win2000/sql/967.htm Пожалуй, жаль, что на этапе проектирования стал использовать вложенные множества, хотя... предложения в http://sdm.viptop.ru/articles/sqltrees.html надо покрутить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2002, 09:20:42 |
|
||
|
Вложенные множества: переподчинение узлов дерева
|
|||
|---|---|---|---|
|
#18+
По поводу способа хранения, описанного в http://www.osp.ru/win2000/sql/967.htm Я бы сказал, что это называется "хрен редьки не слаще". Единственное преимущество в том, что код уже написан. Не надо самому что-то выдумывать. Если ты немного подумаешь, то сможешь организовать ту же функциональность и при своем способе хранения. Только придется все писать самому. Я уже кажется говорил, что способов хранения древовидных структур очень много. Но большинство из них имеют серьезные недостатки или в сопровождении или при выборке из них данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2002, 09:35:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32030873&tid=1822648]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
222ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 535ms |

| 0 / 0 |
