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 схемы:
Структура NestedSets:
Структура parentId:
Структура path:
В общем:
Задался я вопросом, какие же схемы существуют для хранения древовидных структур с РСУБД, их преимущества и недостатки, задачи для которых примененией той или иной схемы оптимально (в контексте скорости ответа).
Написано не так уж мало (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 схемы:
- NestedSets
- parentId
- path
Структура NestedSets:
- id
- name
- left_key
- right_key
- level
Структура parentId:
- id
- parentId
- level
Структура path:
- id
- path
В общем:
- преимущества, какие?
- недостатки, какие?