有效遍历作为关系数据库中的表存储的图形

时间:2014-09-28 14:59:05

标签: mysql sql algorithm graph graph-traversal

我有一个表格,表示边缘列表表示中的图形数据结构没有循环依赖

 ________________
| id | from | to |
 ________________
| 1  |  3   |  4 |
| 2  |  3   |  5 |
| 4  |  5   |  7 |
 ________________

是否可以执行SQL查询,以便对于特定顶点v,直接和间接检索由所有连接顶点组成的顶点集V

E.g。 retrieve_all_connected_vertices(3)将返回集(4, 5, 7)

我正在研究的方法是使用MySQL支持的纯SQL语句(存储过程和类似的选项),或者与某种伪编程语言结合使用。我不是在寻找特定于语言的实现,尽管我将使用Scala用于此特定目的。

我知道我们可以基本上按递归方式跟踪链接,直到它到达最后的顶点,但是,如果有某种优化可用于减少内存使用或算法复杂度,我将很高兴

1 个答案:

答案 0 :(得分:0)

普通查询将在代码中进行参数化。

SELECT vertices.to FROM vertices WHERE vertices.from = ?

你必须传递你想要的顶点作为输入,你需要一个可以传递参数的Scala SQL连接器。

顺便说一句,请注意也可能是MySQL关键字的列名。