2011-06-18 10 views
2

私は、有効なDAG(同形的に)である多重リンクリストに整理された一連のオブジェクトからなるデータ構造を持っています。これは、1つの単一の多重リンクリスト、またはメンバーを共有するかもしれない一連のn二重リンクリストとして見ることができます。 (これはAlgorithm for quickly obtaining a partial ordering over multiple linked listsのデータ構造と同じですが、私の質問に従ってください)SQLで多重リンクリストを表現する

このような多重リンクリスト/ DAGをSQLで表現するために、特定のSQLダイアレクトでは一般的な手法を探しています。

  • DAG内の前と次のリンク、DAG
  • のトポロジカル秩序与え
  • 各二重リンクリスト内の前と次のリンクこの先の:それは与えられたノードを取得し、取得するのは簡単だというノードが属するノード

他の質問からサンプルデータの使用:

first = [a, b, d, f, h, i]; 
second = [a, b, c,  f, g, i]; 
third = [a,   e, f, g, h, i]; 

を私は、ノードf与えられ、全体的なDAGのトポロジから[(c|d|e), g]を得ることができ、また、{first: [d, h], second: [c, g], third: [e, g]}リストの順序のそれぞれからになりたいと思います。

ここに楽しい部分があります:n、二重リンクリストの数は固定されておらず、いつでも大きくなる可能性があります。それが起こるたびにスキーマをやり直すのではないでしょうか。

私はこれまで、(a)大きなピクルをDBに入れて、順序を計算するためにそれを取り出すか、(b)リストを明示的に列挙して再帰的DB内の関係。

もっと良いものが見つからない場合は、(b)のオプションを使用しますが、これを簡単にするために魔法のものがあることを期待しています。

答えて

0

Pre: これは質問と回答のフォーラムで、「座って、グループが少し考えて、問題全体を解決する」フォーラムではありません。

私が知っている「修正済みの順序付けられたツリートラバーサル」というテクニックで調査したいものは、フラットなデータベースと個々のエンティティに階層型データを格納することができます。残念ながら、挿入時に書き直しを行う必要がありますが、選択は1回のクエリで行うことができるので、ウェブサイトのような多くのビュー/少数の変更の状況に最適です。幸いなことに、データセット全体を書き換える必要はほとんどありません(変更した部分とその後の階層部分のみ)

これは基本的に良い記事を数か月前に覚えていますが、ので、ちょうどGoogle検索で始まる

EDIT/UPDATEを:。

リンク:http://www.sitepoint.com/hierarchical-data-database/

どんなに、広範囲にこの問題に対処するから、あなたが選択する必要があります何の矛先を入れてなかった

あなたは、私のように、あなたが自分の欲しいものを選ぶことができます。 oツリーを分割してツリーにし、更新コストを抑えます。

+0

複数のセンチネルノードを持つ多重リンクリストを使用すると、着信リンク、発信リンク、トポロジ的に並べ替えられた隣接ノードの取得が比較的高速であるように効率的にどのように格納できますか?私は大きな画像が支援を提供しようとする人々の正確さと関連性を緩和し、XY問題を早期に検出するのを助けるときには、Q&Aが役に立たないことを知ります。リンクをありがとう、今読んでください。 :3 – Corbin

関連する問題