【发布时间】:2018-04-23 00:36:42
【问题描述】:
我目前有一个程序,我想在网格中列出“支持票”。
票来自票务系统的 SQL 数据库。
一张票有一个活动,例如:
我有一个功能齐全的设计,但无法列出以下内容:
我想在我的程序中做的是列出父票,他们的子票作为子票(详细信息)。但是,由于增加了复杂性,我不得不递归地执行此操作。
例子:
我的问题是:
在这种情况下,是否要在 DB 级别进行递归查找?还是应用层?
我有义务做到这一点,循环遍历每张票的所有票吗?
这些查找对性能有何影响?
我做了一些研究并试图单独获得门票,但没有做到这一点。我使用以下方法在数据库级别上进行了尝试:
SELECT ticketID,
FROM dbo.Ticket
UNION ALL
SELECT a.ticketID,
FROM dbo.Ticket a
INNER JOIN dbo.ticket s ON a.ticketID = s.ticketID
SELECT * FROM Ticket
where ticketID = 1
当我测试这个时,我想到也许我做错了,因为也许递归搜索最好在我的应用程序级别完成(我只需要做一个简单的@987654327 @ 在我的数据库中。
这是真的吗?我需要在应用程序级别执行此操作吗?
【问题讨论】:
-
通常表示层框架提供处理分层数据的 ootb 控件。根据您的 RDBMS 版本,您可以考虑使用返回 Xml 或 Json 的查询,但这取决于您的实现。主观上,我建议选择一个平票结果。
-
不清楚您是要显示数据库中的所有票证,还是只显示属于同一父级的所有票证。如果是最合适的,请在应用程序中进行递归匹配。如果是第二个,recutive cte 可能是更好的选择,因为这样您就可以只选择您实际需要的数据。
-
我会在应用程序级别上这样做,在我看来更容易阅读。
Ticket有一个Ticket对象的集合 -
为什么这会被投票赞成关闭?
标签: c# sql database recursion recursive-query