使用关系数据库表示图形

pro*_*eek 18 database graph

我需要用关系数据库表示图形信息.

比方说,a连接到b,c和d.

a -- b
|_ c
|_ d

我可以有a,b,c和d的节点表,我也可以有一个链接表(FROM,TO) - >(a,b),(a,c),(a,d).对于其他实现,可能有一种方法将链接信息存储为(a,b,c,d),但表中的元素数量是可变的.

  • Q1:有没有办法在表中表示变量元素?
  • Q2:有没有使用关系数据库表示图结构的一般方法?

Mar*_*ers 32

Q1:有没有办法在[数据库]表中表示变量元素?

我猜你的意思是这样的?

 from | to_1 | to_2 | to_3 | to_4 | to_5 | etc...
 1    | 2    | 3    | 4    | NULL | NULL | etc...
Run Code Online (Sandbox Code Playgroud)

这不是一个好主意.它违反了第一范式.

Q2:有没有通用的方法来表示使用数据库的图形结构?

对于有向图,您可以使用edges包含两列的表:

nodeid_from nodeid_to
1           2
1           3
1           4
Run Code Online (Sandbox Code Playgroud)

如果有关于每个节点的任何额外信息(例如节点名称),则可以将其存储在另一个表中nodes.

如果您的图表是无向的,您有两种选择:

  • 存储两个方向(即存储1-> 2和2-> 1)
  • 使用nodeid_from必须小于的约束nodeid_to(即存储1-> 2但暗示2-> 1).

前者需要两倍的存储空间,但可以使查询更容易,更快.