7

SQLでさまざまな種類のグラフ(特にDAG)をモデル化する方法の例を提供する記事をオンラインでいくつか見つけましたが、モデル化するものが比較的単純であることを考えると、それらはすべて非常に複雑に見えました。

これを行うための最良/標準的な方法はありますか?私の現在の考え方は次のようなものです。

create table node (
  id int not null auto_increment,
  name TEXT
)

create table edge (
  from_node int not null,
  to_node int not null,  
  weight float
) 

何か問題がありますか?より良い(おそらくより堅牢な)方法を知っている人はいますか?

4

1 に答える 1

8

これは非常に合理的なアプローチです。OracleやSQLServerなどの一部のシステムには再帰クエリ機能がありますが、SQLは実際には再帰構造をうまく実行しません。

特定の検索タイプに適した構造が見つかる場合もありますが、一般的なケースではそれほど優れた構造は見つからないと思います。アプリケーションの要件がこのように制限されている場合、そのような最適化はあなたに利益をもたらすかもしれません。

ベイジアンネットワークは有向非巡回グラフ(DAG)であるため、純粋に再帰的な親子関係はネットワークをモデル化するのに十分ではありません(つまり、ノードは複数の親を持つことができます)。したがって、タイプのM:M関係は次のようになります。説明したveが必要になります。

JoeCelkoによるさまざまな「SQLforSmarties」の本は、SQLで階層構造とグラフ構造を実装およびクエリするための手法の概要を示しています。これらは、私が知っている主題に関する最高のリソースです。 強くお勧めします。

于 2008-11-27T11:03:48.747 に答える