Маниуляции с деревом, вставка и перемещение узлов обычно более сложны в конструкции Вложенных множеств, чем в других моделях. Когда вставляют новый узел, требуется пересчитать все левые и правые значения, которые больше, чем левое значение нового узла.
К ним относятся правые равноправные элементы и родительские объекты нового узла, а также правые равноправные элементы его предков. Сюда также входят потомки, если новый узел вставлен в качестве узла, не являющегося листом. В предположении, что новый узел является листом, необходимо следующее обновление:
Файл npviMepa:_Trees/soln/nested-sets/insert.sql
-- создание места для значений 8 и 9 вложенных множеств UPDATE Comment
SET nsleft = CASE WHEN nsleft >= 8 THEN nsleft+2 ELSE nsleft END,
nsright = nsright+2 WHERE nsright >= 7;
— создание нового дочернего элемента для комментария № 5, занимающего значения 8 и 9 вложенных множеств
INSERT INTO Comment (nsleft, nsright, author, comment)
VALUES (8, 9, 'Фран', 1Я тоже!');
Модель Вложенных множеств оптимальна, когда важно быстро и легко выполнять запросы для поддеревьев, а не операции над отдельными узлами. Вставка и перемещение узлов являются сложными операциями из-за необходимости перенумерации левых и правых значений. Если использование дерева связано с частыми вставками, модель Вложенных множеств не будет наилучшим выбором.
Опубликовал vovan666
June 18 2013 12:25:10 ·
0 Комментариев ·
3611 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.