我需要将树状结构数据插入我的数据库。让我们现在举个例子,树有 n 个级别,我有一个名为 T_Node 的节点表,其中有一列名为“名称”(列的数量可能稍后会增加)和一个名为 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 中创建更多关系还是创建另一个表来改进它?