Какова лучшая практика для извлечения дерева узлов из базы данных для дальнейшей визуализации?

Допустим, у нас есть таблица с комментариями пользователей. Комментарии первого уровня имеют ссылку на статью, к которой они прикреплены. Комментарии более глубокого уровня не имеют этой ссылки по конструкции, но они имеют ссылку на родительский комментарий.

Для этой структуры базы данных - какой будет наиболее эффективный способ получить все комментарии для данной статьи и затем отобразить ее в формате html? (Предположим, что у нас есть около 200 комментариев первого уровня и самый глубокий уровень 20)

2 ответа

Решение

Я обычно рекомендую дизайн под названием Closure Table.

См. Пример в моем ответе на вопрос " Какой самый эффективный / элегантный способ разбить плоский стол на дерево?".

Я также разработал эту презентацию: Модели для иерархических данных с SQL и PHP. Я разработал PHP-приложение, которое рендерит дерево за 0,3 секунды из коллекции иерархических данных с 490 тыс. Узлов.

Я писал о Closure Table здесь: Рендеринг деревьев с помощью Closure Table.

Я написал главу о различных стратегиях для иерархических данных в моей книге " Антипаттерны SQL: предотвращение ловушек программирования баз данных".

Для наиболее эффективного способа Quassnoi написал серию статей на эту тему.

Я предлагаю вам прочитать первую статью и адаптировать примеры для работы с вашей конкретной таблицей, но суть заключается в том, чтобы сделать функцию, которая может проходить по строкам, которые необходимо извлечь. Вы, вероятно, также хотите уровень (глубина в иерархии), поэтому вторая статья, вероятно, также актуальна.

Другие статьи могут быть полезны, если вам нужно выполнить другие типы запросов к вашим данным. У него также есть статья Список смежности против вложенных множеств: MySQL, в которой он сравнивает высокооптимизированные запросы как для модели смежности, так и для модели вложенных множеств.

Другие вопросы по тегам