如何检查两个节点之间是否存在路径 - SQL

时间:2014-07-24 10:46:51

标签: sql postgresql

我有数据库:

Node(nno,color) 
edge(eno,head,tail,weight,gno)
graph(gno,gname)

enter image description here

粗体表示主键 并且graphh是直接的:head - >尾

我如何构建一个触发器来检查图表中每个插入节点是否已连接?意味着每两个节点之间有一条路径 我如何检查每两个节点之间是否有路径?

我正在使用postgreSQL

1 个答案:

答案 0 :(得分:0)

这是一个XY问题,并且很可能使用触发器无法工作:如果要使用外键保持参照完整性(绝对合乎需要),那么根据定义,插入节点将创建一个断开连接的图,并被拒绝。 / p>

解决方案是有一个存储过程,通过该过程传递所有三个表的所有插入,并且只接受连接的图形添加。

假设给定图已经连接,那么对于要接受的给定图的扩展,扩展中的每个节点都可以连接到现有图中的任何一个节点。