Соответствующая реализация структуры Graph Tables для эффективного запроса деревьев под заданным узлом в SQL Server

Мне нужно вставить в мою базу данных древовидные данные. Скажем сейчас в качестве примера, что дерево имеет n уровней, и у меня есть таблица узлов с именем T_Node со столбцом с именем 'name' (количество столбцов может увеличиться позже) и таблица Edge с именем T_Edge.

В T_Node у меня есть несколько узлов, а в T_Edge у меня есть только одно отношение на узел, где from_id будет дочерним узлом, а to_id будет родительским узлом этого дочернего узла.

Чтобы получить дерево под заданным 'NodeName', я бы использовал рекурсивный запрос, подобный этому:

WITH cte as (   
    
    Select 1 xlevel, fromName.name child, toName.name parent
    from  dbo.T_Node fromName, dbo.T_Node toName, dbo.T_Edge r 
    WHERE MATCH(fromName-(r)->toName) 
    and fromName.name = 'NodeName'
    UNION ALL
    Select xlevel + 1, fromName.name, toName.name
    from cte c, dbo.T_Node fromName, dbo.T_Node toName, dbo.T_Edge r 
    WHERE MATCH(fromName-(r)->toName) and c.parent = fromName.name
    )

    SELECT *
    FROM cte
    ORDER BY xlevel, parent, child

Мой вопрос: это лучший подход для эффективного использования и запроса таблиц графиков, чтобы получить дерево под ними? Должен ли я улучшить его, создав больше отношений в T_Edge или создав другую таблицу?

0 ответов

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