SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ANSI SQLを用いた階層型構造のリストラクチャリング

階層型XMLプロセッシング

データ間リレーションシップを用いたリストラクチャリング

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

図1 StoreViewビュー: StoreViewビューおよびそれを再編成したCustとEmpの2つのサブビューフラグメントの模式図
図1 StoreViewビュー: StoreViewビューおよびそれを再編成したCustとEmpの2つのサブビューフラグメントの模式図

 このサンプルで行う変換は、こうした連続構造を分離させて構造フラグメントの操作をするというものです。ただし論理的構造も物理的構造も、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 StoreViewの分解と変換: 2つのフラグメント(SV1およびSV2)から特定アイテムを選択して新規の構造に変換するプロセスの模式図
図2 StoreViewの分解と変換: 2つのフラグメント(SV1およびSV2)から特定アイテムを選択して新規の構造に変換するプロセスの模式図

 図2については、階層処理を識別するために各種のシンボルが使われている点に注意してください。これらは本稿を通して使用する記号ですが、それぞれ次の意味を持ちます。

  • 実線の四角い枠 ― 選択対象のノードを示す。
  • 破線の四角い枠 ― 選択対象外のノードを示し、当該クエリの実行結果からは除外される。
  • 実線のライン ― アクティブな構造に含まれるノードとの間をつなぐ。
  • 破線のライン ― アクティブな構造に含まれないノードとの間をつなぐ。
  • 破線の矢印 ― リレーションシップ結合のデータポイントを示す。これが使われていない場合、他の用途および結合(join)を制御するリレーションシップのデータポイントは、実線の矢印により示される。
  • 実線の矢印 ― 結合される構造間でのデータモデリング構造ノードのリンクを示す。これはクエリ処理を規定する構造セマンティクスを示すもので、結合した構造間でのデータ構造の統合はこれを基にして完成することになる。

 これらは本稿を通して使用される記号です。つまり実線の矢印は、結合される構造間でのデータ「モデリング」の構造リンクを示すと同時に、通常はON句によるデータ「リレーションシップ」のリンクポイントも示します。ただしON句によるデータリレーションシップのリンクポイントとデータモデリングを示す実線の矢印とが一致しない場合もあり(詳細は後述)、そうしたケースでのデータリレーションシップのリンクポイント表示に用いられるのが破線の矢印です。

 本稿で用いたリストラクチャリングのサンプルでは、ANSI SQL Transparent Hierarchical XML ProcessorプロトタイプがSQLステートメントの取得と実行をリアルタイムで行うためのSQL識別番号が付けられています。階層型プロセッサのプロトタイプおよびその使用法は各自でダウンロードできるので、必要に応じて、SQLサンプルの変更が処理に与える影響を実地に検証するようにしてください。

次のページ
基本的なリストラクチャリング

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Michael M. David(Michael M. David)

 Advanced Data Access Technologies, Incの創設者であり、それ以前はNCR/Teradataのスタッフ研究員および主任XML設計者として活動し、ANSI SQLX Groupの代表も務める。フラット、リレーショナル、階層型データを用いた非プロシージャ方式による異種データベ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3920 2009/06/04 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー