データ間リレーションシップを用いたリストラクチャリング
図1のサンプルではStoreViewビューを使用しています。これは、丸い枠線で囲まれたCustとEmpのサブビューを結合した1つの複合的な階層型構造を形成していますが、これは論理的なリレーションシップまたは物理的なXML構造と見なすこともでき、あるいは異種間の組み合わせとすることも可能です。

このサンプルで行う変換は、こうした連続構造を分離させて構造フラグメントの操作をするというものです。ただし論理的構造も物理的構造も、SQLワーキングセットでは同じ形態を取ります。またここで言う「フラグメント」とは、ルートまたはその下層に位置する特定の階層型構造(複数のパスを設定可能)におけるノード群をまとめた1つのサブセットを意味します。SQLでは、これらの要素を自然かつ自動的に処理することができます。言い換えると、SELECTリストを使ったデータフィールド選択により、このクエリからの出力として選択すべきノードを非プロシージャ的に指定できます。その他の必要なデータフィールドは必要に応じて自動的に参照されます。例えばこの場合のSV1フラグメントは、次のSQLを用いてSV2セグメントに対する階層型なLEFT JOINを実行できます。
SELECT SV1.EmpID, SV1.DpndID, SV2.CustID,
SV2.InvID, SV2.AddrID
FROM StoreView SV1
LEFT JOIN StoreView SV2 ON SV1.EmpCustID=SV2.CustID
標準的な階層オペレーションの1つであるノードのプロモーション(promotion:昇格)では、構造フラグメント群を連続した存在として扱うことにより、既存のリレーションシップ値を用いた構造再編時の結合操作を簡単化しますが、そのすべてはSQL/XML処理に新たに導入された概念的な高レベル階層にて実行されます。こうしたノードプロモーションはSQLのリレーショナル処理において自動的に処理されますが、それはデータ選択(リレーショナルプロジェクション)の過程にて同様の操作が行われるためです。
図1には、SQL処理における概念的な高レベル階層も示されています。次のSQLサンプルにて、2つのフラグメントSV1およびSV2(破線の円囲み)をプレフィックス表記する際に用いているのは、相関名「SV1」と「SV2」です。こうしたプレフィックスのJOINステートメントにおける定義法および、SELECTリストでの使用法は、他のサンプルでも共通している点に注意してください。ここではSQLによる名前変更とエイリアス作成をテーブルおよびサブビューレベルにて用いることで、同一構造中のフラグメント群の分離と参照を各自のプレフィックス指定により個別的に実行できるようにしています。図2はその選択プロセスと得られる構造を示した模式図です。

図2については、階層処理を識別するために各種のシンボルが使われている点に注意してください。これらは本稿を通して使用する記号ですが、それぞれ次の意味を持ちます。
- 実線の四角い枠 ― 選択対象のノードを示す。
- 破線の四角い枠 ― 選択対象外のノードを示し、当該クエリの実行結果からは除外される。
- 実線のライン ― アクティブな構造に含まれるノードとの間をつなぐ。
- 破線のライン ― アクティブな構造に含まれないノードとの間をつなぐ。
- 破線の矢印 ― リレーションシップ結合のデータポイントを示す。これが使われていない場合、他の用途および結合(join)を制御するリレーションシップのデータポイントは、実線の矢印により示される。
- 実線の矢印 ― 結合される構造間でのデータモデリング構造ノードのリンクを示す。これはクエリ処理を規定する構造セマンティクスを示すもので、結合した構造間でのデータ構造の統合はこれを基にして完成することになる。
これらは本稿を通して使用される記号です。つまり実線の矢印は、結合される構造間でのデータ「モデリング」の構造リンクを示すと同時に、通常はON句によるデータ「リレーションシップ」のリンクポイントも示します。ただしON句によるデータリレーションシップのリンクポイントとデータモデリングを示す実線の矢印とが一致しない場合もあり(詳細は後述)、そうしたケースでのデータリレーションシップのリンクポイント表示に用いられるのが破線の矢印です。
本稿で用いたリストラクチャリングのサンプルでは、ANSI SQL Transparent Hierarchical XML ProcessorプロトタイプがSQLステートメントの取得と実行をリアルタイムで行うためのSQL識別番号が付けられています。階層型プロセッサのプロトタイプおよびその使用法は各自でダウンロードできるので、必要に応じて、SQLサンプルの変更が処理に与える影響を実地に検証するようにしてください。
