SQLでベイジアンネットワークまたはより一般的には有向重み付きグラフをモデル化する方法は?

StackOverflow https://stackoverflow.com/questions/323456

質問

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

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

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
) 

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

役に立ちましたか?

解決

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

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

ベイジアンネットワークは Directed Acyclic Graph (DAG)であり、純粋に再帰的な親です。 -子関係はネットワークをモデル化するには不十分です(つまり、ノードは複数の親を持つことができます)。したがって、記述したタイプのM:M関係が必要になります。

Joe Celko は、SQLで階層構造およびグラフ構造を実装およびクエリするための手法の概要を説明しています。これらは、私が知っている主題に関して断然最高のリソースです。 強くお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top