ネットワーク図のデータベース設計
データベースのテーブル設計を考えています。
多数の「ノード」があり、「エッジ」(そのノード同士の関係)をデータベースに記録したいと思っています。
例えば、A, B, C, D, E という5つのノードがあり、
「AとBは関係がある(関係の分類:X)」
「BとCは関係がある(関係の分類:X)」
「CとDは関係がある(関係の分類:X)」
「DとAは関係がある(関係の分類:X)」
「AとEは関係がある(関係の分類:Y)」
「BとDは関係がある(関係の分類:Z)」
という事を表現したいのです。
図:等幅フォントでないと崩れてしまうと思いますが、一応…。
E +---+
| | |
A-B-C-D
| |
+-----+
ここで私が考えたのは、テーブル「node」と「edge」を用意します。nodeには、"ノードID", "ノード名"(A~E等) フィールドを作り、edgeには "ノードID1", "ノードID2", "関係" フィールドを作ります。
node :
1, A
2, B
3, C
4, D
5, E
edge :
1, 2, X
2, 3, X
3, 4, X
4, 1, X
1, 5, Y
2, 3, Z
このように記録しておけば、ネットワーク図をデータベース化することができると思います。
ただ、この場合、edgeテーブルで 1,2,X と 2,1,X は、同じ関係を違う表現で表記してしまうので、混乱の元になってしまいそうです。また、edgeテーブルから「Aと関係があるノードをリストアップしたい」場合も、何だかスマートではない気がするのです。
こういった事例では、どのようにデータベースを設計すると良いのでしょうか?
# MySQLカテゴリで質問させて頂きましたが、Postgresの独自機能により解決できるパターンもありましたらご指摘頂ければ幸いです。
お礼
ありがとうございますっ ・・・意味が良くわからないのですが、わざわざ「量」である注記するということは、「量ではない電圧」もあるということでしょうか?? それとも、「キャパシタCはノードNを接続して(電圧の量を)基準電圧にする」という文意になるのでしょうか???
補足
どうも、massとは量ではなく「接地」のことのようです。「earthen mass(大地の塊?)」のようなニュアンスみたいです。どの辞典にも載ってないのですが、海外のWebページで「Mass means ground」と解説されたページもありました。まだ確証がないので、引き続き回答をお待ちします。