Общие > Базы данных

Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ

<< < (6/12) > >>

CLiI{er:
Статья на редкость интересная. Не в том смысле, что интересные фрагменты встречаются редко.

Порадовали конкретные SQL-запросы для выполнения конкретных задач.
Скажите, а кто-либо использует эту схему для своих сайтов?

Интересует, как nested sets можно сравнить со схемой, которая применяется для GForge (http://gforge.org/):

id_topic
    Номер узла, auto_increment, наш primary key.
sort_order
    Порядок сортировки, +/- 10.
id_parent
    Вышестоящий узел.
id_parent_root
    Вышестоящий узел второго уровня вложенности. Если для данного узла такого уровня нет - тогда 0.
cnt_subtopic
    Количество узлов внутри данного узла. Для вывода на экран "тема такая-то (10)"
ids_fullpath
    Полный путь узла, разделенный каким-нибудь простым способом. Например запись " 10 :: 23 :: 45 " означает "45-й узел внутри 23-го, 23-й внутри 10-го, 10-й - самый главный и он же в id_parent_root)

Выбор фрагмента ветки любого уровня производится с помощью запроса:

SELECT ids_fullpath FROM table
WHERE ids_fullpath LIKE "% 23 %"

Пример полученного списка:

10 :: 23
10 :: 23 :: 45
10 :: 23 :: 45 :: 50

Выбор всей ветки:

SELECT ids_fullpath FROM table
WHERE id_parent_root = "10"

Обновление и добавление несложное - одна php-функция просто добавляет строку
без ids_fullpath, другая - рекурсивная, пересчитывает ids_fullpath
для только что вставленного id_topic и, если потребуется, для всей ветки, начиная c последнего узла (45),
заканчивая первым, root (10).

Содержимое таблицы:

--- Код: ---
id_topic id_parent id_parent_root cnt_subtopic ids_fullpath
10       0         0              3            10
23       10        10             2            10 :: 23
45       23        10             1            10 :: 23 :: 45
50       45        10             0            10 :: 23 :: 45 :: 50

--- Конец кода ---

Примерно такая схема применяется сегодня на sourceforge.net, freshmeat.net.
Только там базы PostgreSQL, поэтому значение для поля cnt_subtopic
вычисляется автоматически при обновлении дерева с помощью хранимой процедуры.

Phoinix:
CLiI{er

--- Цитировать ---Скажите, а кто-либо использует эту схему для своих сайтов?
--- Конец цитаты ---


Странный вопрос, тем более что я внизу написал даже на каких... ;)

А по сравнению:

--- Цитировать ---Обновление и добавление несложное - одна php-функция просто добавляет строку
без ids_fullpath, другая - рекурсивная, пересчитывает ids_fullpath
для только что вставленного id_topic и, если потребуется, для всей ветки, начиная c последнего узла (45),
заканчивая первым, root (10).
--- Конец цитаты ---


При использовании Nested Set - достаточно одного запроса при обновлении (перемещении), и трех, при добавлении:
UPDATE дерева
INSERT узла

Впрочем это все написано и так в статье...

То же самое с выбором фрагмента ветки, хотя, у тебя это тоже один запрос, но использовать LIKE - несколько медленно

А если хочется выбрать и родительскую ветку и подчиненные узлы сразу?

CLiI{er:

--- Цитировать ---Phoinix:
я внизу написал даже на каких...
--- Конец цитаты ---


Это сайты автора статьи. Разница между рекламными ссылками и применением предложенной схемы другими разработчиками в производстве сайтов всё же существует. О применении я и хотел услышать. И, если возможно, узнать, какие коммерческие продукты используют nested sets (я просто не в курсе).

Гость:
Может я че-то не понимаю .. но что-то мне кажеться что этf система постороение дерева не быстрее обычной .. где ID и Parent_ID ...

Phoinix:
Гость

--- Цитировать ---что эта система постороение дерева не быстрее обычной
--- Конец цитаты ---

Может я тоже что-то не понимаю, но при чем тут построение дерева и скорость?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии