Существующие схемы хранения деревьев в РСУБД. Плюсы и минусы.

alekciy

Новичок
Существующие схемы хранения деревьев в РСУБД. Плюсы и минусы.

Задался я вопросом, какие же схемы существуют для хранения древовидных структур с РСУБД, их преимущества и недостатки, задачи для которых примененией той или иной схемы оптимально (в контексте скорости ответа).

Написано не так уж мало (http://phpclub.ru/detail/article/db_tree, http://phpclub.ru/detail/article/2002-06-03) и даже есть попытки расмотрения плюсов/минусов (http://xpoint.ru/forums/computers/dbms/mysql/thread/34068.xhtml), но все достаточно старое (например, в коментах к одной из статей рассуждают о степени оптимизированности запросов с AND/OR еще MySQL третьей версии).

Поэтому у меня большая просьба описать преимущества и недостатки существующих схем в свете скорости а) добавления данных; б) выборки данных. Быть может еще есть и отличия в скорости разных схем на разлиных РСУБД?

Оптимальные сферы применения: форум, ЖЖ, диска объявлений, прочее. Быть может более оптимально хранить одно дерево (к примеру, структуру форума, т.е. какие есть на нем ветки/подветки/темы) в виде одной схемы (NestedSets) и другое дерево (непосредственно сами сообщения) в виде другой (parentId) ?


В настоящее время я знаю 3 схемы:
  1. NestedSets
  2. parentId
  3. path

Структура NestedSets:
  • id
  • name
  • left_key
  • right_key
  • level

Структура parentId:
  • id
  • parentId
  • level

Структура path:
  • id
  • path

В общем:
  • преимущества, какие?
  • недостатки, какие?
 

Фанат

oncle terrible
Команда форума
path называется Materialized path
parentid называется Adjacency List. и level ему не нужен
про плюсы-минусы читать в разделе "вопрос-ответ"
 

alekciy

Новичок
*****
Спасибо! Кажется оно самое. Очень неплохой субстракт.
 
Сверху