代码之家  ›  专栏  ›  技术社区  ›  prosseek

用关系数据库表示图形

  •  17
  • prosseek  · 技术社区  · 14 年前

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

    假设a与b,c,d相连。

    a -- b
    |_ c
    |_ d
    

    对于其他实现,可能有一种将链接信息存储为(a、b、c、d)的方法,但是表中元素的数量是可变的。

    • 问题2:有没有用关系数据库表示图形结构的通用方法?
    4 回复  |  直到 12 年前
        1
  •  32
  •   Mark Byers    14 年前

    我想你是说这样的事吧?

     from | to_1 | to_2 | to_3 | to_4 | to_5 | etc...
     1    | 2    | 3    | 4    | NULL | NULL | etc...
    

    first normal form .

    edges 有两列:

    nodeid_from nodeid_to
    1           2
    1           3
    1           4
    

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

    • 存储两个方向(即存储1->2和2->1)
    • nodeid_from 必须小于 nodeid_to

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

        2
  •  3
  •   gregwhitaker    14 年前

    http://articles.sitepoint.com/article/hierarchical-data-database/2

    本文基本上对树中的元素进行预排序,分配左值和右值。然后,您可以使用一个select语句选择树的部分或全部。

    Node | lft | rght
    -----------------
      A  |  0  |  7
      B  |  1  |  2
      C  |  3  |  4
      D  |  5  |  6
    

    编辑:如果你要大量更新树,这不是一个最佳的解决方案,因为整个树必须重新编号

        3
  •  1
  •   gomad    14 年前

    我在图结构的关系表示中存储了多个“TO”节点。我之所以能这样做是因为我的图表是定向的。这意味着如果我想知道“A”连接到了什么节点,我只需要从连接表中选择一条记录。我将TO节点存储在一个易于解析的字符串中,使用一个可以管理从字符串到集合再到集合的转换的类,效果非常好。