簡體   English   中英

使用關系數據庫表示圖形

[英]representing graph using relational database

我需要用關系數據庫表示圖形信息。

比方說,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:有沒有使用關系數據庫表示圖結構的一般方法?

Q1:有沒有辦法在[數據庫]表中表示變量元素?

我猜你的意思是這樣的?

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

這不是一個好主意。 它違反了第一范式

Q2:有沒有通用的方法來表示使用數據庫的圖形結構?

對於有向圖,您可以使用具有兩列的表edges

nodeid_from nodeid_to
1           2
1           3
1           4

如果有關於每個節點的任何額外信息(例如節點名稱),則可以將其存儲在另一個表nodes

如果您的圖表是無向的,您有兩種選擇:

  • 存儲兩個方向(即存儲1-> 2和2-> 1)
  • 使用nodeid_from必須小於nodeid_to的約束(即存儲1-> 2但暗示2-> 1)。

前者需要兩倍的存儲空間,但可以使查詢更容易,更快。

除了馬克提到的兩個表路線,請看下面的鏈接:

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

編輯:如果您要重新更新樹,這不是一個最佳解決方案,因為整個樹必須重新編號

我在圖結構的關系表示中存儲了多個“TO”節點。 我能夠做到這一點,因為我的圖表是針對性的。 這意味着如果我想知道“A”連接到哪個節點,我只需要從我的連接表中選擇一條記錄。 我將TO節點存儲在一個易於解析的字符串中,它運行得很好,有一個類可以管理從字符串到集合和返回的轉換。

正如nawroth建議的那樣,我建議查看專用的圖形數據庫。 一個例子是“Trinity”數據庫,適用於非常大的數據集。 但還有其他人。

收聽Scott Hanselman關於Trinity的Hanselminutes播客 這是文本記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM