【发布时间】:2013-06-15 15:24:57
【问题描述】:
我像这样存储简单的社交图信息:
People ( PersonId bigint, Name nvarchar )
Relationships ( From bigint, To bigint, Title nvarchar )
所以数据看起来像这样:
People
1, John Smith
2, Joan Smith
3, Jack Smith
Relationships
1, 2, Spouse
1, 3, Parent
2, 3, Parent
注意关系的标题是规范化的:所以没有“丈夫”和“妻子”,只有“配偶”,这也避免了需要创建两个单独的关系形成相同的链接,同样适用于“父母” " 而不是“儿子”或“女儿”。
问题是如何遍历整个连通图(即仅返回一个家庭),例如,无需创建显式的兄弟关系条目即可找到兄弟姐妹。节点不一定需要以任何特定顺序返回。我可能还想只返回距给定起始节点最多 N 度的节点。
我知道你可以在最近的 SQL 语言版本中使用一些新技巧来执行递归 SQL SELECT 语句,但这不一定是递归操作,因为这些关系可以表示一个循环无向图(想想如果添加了“朋友”作为关系)。你会如何在 SQL 中做到这一点?
【问题讨论】:
-
您使用的是哪个数据库?
-
MS SQL Server 2012,谢谢!
-
非常有趣的问题。你能详细说明你的确切问题吗?您的问题可以是“从
People和Relationships查找兄弟姐妹”。如果可能,您能否向我们展示您期望的示例结果集? -
你知道neo4j.org吗?它声称在计算这些关系方面速度非常快。
标签: sql recursion graph sql-server-2012