Получить иерархическое дерево из базы данных с минимальным количеством запросов

1

Прямо сейчас у меня есть следующая схема таблицы:

Node_Id (INT)| NodeName (nvarchar(40)) | ParentNode(int, FK)

Я хочу получить иерархическое дерево из этой структуры: структура, близкая к этой: {NodeId, NodeName, IEnumerable<Node> Children, bool hasChildren}

Я вижу два решения этой проблемы: сначала обход дерева. Я хочу загрузить корневые узлы (где parent = null), а затем для каждого узла загрузить его дочерние элементы и рекурсивно сделать это для этих узлов. Но каждая загрузка для детей приводит к дополнительному запросу к БД, к которому относится производительность.

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

Мне было интересно, есть ли другие решения?

Теги:
tree

2 ответа

1

Если вам не нужно сразу отображать все дочерние элементы дерева, вы можете загрузить на основе указанного родительского узла, а затем загрузить по требованию, когда пользователь расширяет дочерние элементы дерева. Это приведет к более легкой нагрузке на сервер приложений и БД.

  • 0
    Да, я в курсе ленивой загрузки, это вариант. Однако, если возможно, я бы хотел избежать этого и сразу загрузить дерево - это почти 15000 узлов - не так уж и много.
0

В дополнение к решениям, о которых вы уже упоминали, у вас также есть возможность использовать соединение /start с помощью oracle sql.

См. Эту ссылку для получения дополнительной информации: http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню