Прямо сейчас у меня есть следующая схема таблицы:
Node_Id (INT)| NodeName (nvarchar(40)) | ParentNode(int, FK)
Я хочу получить иерархическое дерево из этой структуры: структура, близкая к этой: {NodeId, NodeName, IEnumerable<Node> Children, bool hasChildren}
Я вижу два решения этой проблемы: сначала обход дерева. Я хочу загрузить корневые узлы (где parent = null), а затем для каждого узла загрузить его дочерние элементы и рекурсивно сделать это для этих узлов. Но каждая загрузка для детей приводит к дополнительному запросу к БД, к которому относится производительность.
Другой вариант, который я вижу, - это загрузить плоскую структуру из базы данных (так же, как и схему таблицы), а затем из нее построить иерархическую структуру. Это поражает производительность сервера приложений.
Мне было интересно, есть ли другие решения?
Если вам не нужно сразу отображать все дочерние элементы дерева, вы можете загрузить на основе указанного родительского узла, а затем загрузить по требованию, когда пользователь расширяет дочерние элементы дерева. Это приведет к более легкой нагрузке на сервер приложений и БД.
В дополнение к решениям, о которых вы уже упоминали, у вас также есть возможность использовать соединение /start с помощью oracle sql.
См. Эту ссылку для получения дополнительной информации: http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm