階層データのロード

階層の深さが一定でないnレベルの階層は、地理的もしくは組織的次元をデータで表す場合などによく使用されます。これらの種類の階層は、通常隣接するノード テーブルに保存されます。つまり、テーブルでは、それぞれのレコードはノードと一致し、親ノードへの参照を含む項目を持っています。

ノード テーブル
NodeID ParentNodeID タイトル
1 - General manager
2 1 Region manager
3 2 Branch manager
4 3 Department manager

このようなテーブルでは、ノードは 1 つのレコードにのみ保存されますが、子供をいくつでも持つことができます。当然のことながら、テーブルには、ノードの属性が記述された追加項目が含まれている可能性があります。

隣接するノード テーブルは、メンテナンスには役立ちますが、毎日の業務には適していません。そこでクエリと分析では、他の表現を使用します。展開されたノード テーブルは一般的な表現の 1 つで、階層の各レベルは別個の項目に保存されます。展開されたノード テーブルのレベルは、ツリー構造などで容易に使用できます。hierarchy のキーワードをデータ ロード スクリプトで使用すると、隣接するノード テーブルを展開ノード テーブルに変換できます。

Example:  

Hierarchy (NodeID, ParentNodeID, Title, 'Manager') LOAD NodeID, ParentNodeID, Title FROM 'lib://data/hierarchy.txt' (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
展開されたノード テーブル
NodeID ParentNodeID タイトル Title1 Title2 Title4 Title4
1 - General manager General manager - - -
2 1 Region manager General manager Region manager - -
3 2 Branch manager General manager Region manager Branch manager -
4 3 Department manager General manager Region manager Branch manager Department manager

展開ノード テーブルの問題は、検索や選択を行う際に対象となるレベルを知っておく必要があり、レベル項目を簡単に使用できないという点にあります。この問題を解決する 1 つの表現が先祖テーブルで、ブリッジ テーブルとも呼ばれます。

先祖テーブルには、データで見つかった子供と先祖の関係をすべて記録するレコードが 1 つあり、子供と先祖のキーと名前を含みます。つまり、すべてのレコードは特定のノードがどのノードに属するかを示します。hierarchybelongsto キーワードをデータ ロード スクリプトで使用すると、隣接するノード テーブルを先祖テーブルに変換できます。

See also: