(57)【要約】【課題】  変化する要求に適応するために十分な速さで修正することができる、データベースシステムの分野における部分マテリアライズドビューを提供する。【解決手段】  ビュー定義を生成する。このために、クエリ式は、ビューの最大コンテンツ、すなわち、マテリアライズすることができるレコードの完全セットを規定する。１つまたは複数のコントロール述語、および、１つまたは複数のコントロールテーブルのコンテンツは、何のレコードが実際にビュー内でマテリアライズおよび格納されるかを制限する。これは、単に１つまたは複数のコントロールテーブルをアップデートすることによって、部分マテリアライズドビューのコンテンツが調整されることを可能にする。【選択図】  図３
2006065846.tif 000002
【特許請求の範囲】
【請求項１】
データベースレコードのビューを部分的にマテリアライズする方法であって、
ａ）１つまたは複数のソーステーブルにおけるレコードのビューを定義するステップと、
ｂ）マテリアライズされるべき前記ビューのレコードのサブセットを識別するステップと、
ｃ）前記レコードのサブセットを格納して、前記ビューを部分的にマテリアライズするステップと
を備えることを特徴とする方法。
【請求項２】
マテリアライズされる前記レコードのサブセットを識別するステップは、コントロール述語が１つまたは複数のコントロールテーブルを参照するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
１つまたは複数のコントロールテーブルを変更するステップ、および、変更された１つまたは複数のコントロールテーブルに応答して、前記レコードのサブセットをアップデートするステップをさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記１つまたは複数のコントロールテーブルを変更するステップは、前記コントロールテーブルの列およびフィールドのうち少なくとも１つの値を変更するステップを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記１つまたは複数のコントロールテーブルを変更するステップは、データレコードを少なくとも１つのコントロールテーブルに追加するステップを含むことを特徴とする請求項３に記載の方法。
【請求項６】
前記１つまたは複数のコントロールテーブルを変更するステップは、データレコードを少なくとも１つのコントロールテーブルから除去するステップを含むことを特徴とする請求項３に記載の方法。
【請求項７】
前記１つまたは複数のソーステーブルの少なくとも１つのレコードをアップデートするステップ、および、応答して、格納されたレコードのサブセットを自動的にアップデートするステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項８】
自動的にアップデートするステップは、ビューメンテナンスアルゴリズムを利用するステップを含むことを特徴とする請求項７に記載の方法。
【請求項９】
１つまたは複数のコントロールテーブルを変更する前に、クエリを受信するステップ、および、応答してクエリプランをコンパイルするステップ、および、１つまたは複数のコントロールテーブルを変更した後、コンパイルされたクエリプランを使用して、前記クエリを実行するステップをさらに備えることを特徴とする請求項２に記載の方法。
【請求項１０】
前記クエリの実行時間で、クエリが部分マテリアライズドビューをクエリ実行プランの一部として利用することができるかどうかを判定するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
クエリが前記部分マテリアライズドビューを利用することができるかどうかを判定するステップは、前記クエリのランタイム定数が少なくとも１つのコントロールテーブルレコード内に含まれるかどうかを判定するステップを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記クエリの複数のランタイム定数が複数のコントロールテーブルレコード内に含まれるかどうかを判定するステップをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
ａ）クエリ式および少なくとも１つのコントロール述語を含むビュー定義式を備え、前記クエリ式は１つまたは複数のソーステーブルを参照し、前記コントロール述語は１つまたは複数のコントロールテーブルを参照し、前記ビュー定義式は、部分マテリアライズドビュー内に含まれるべき、前記クエリ式の結果内のレコードのサブセットを識別することを特徴とするデータ構造。
【請求項１４】
前記レコードのサブセットを格納するように構成および適合された、部分マテリアライズドビューをさらに備えることを特徴とする請求項１３に記載のデータ構造。
【請求項１５】
前記コントロール述語によって参照された、前記１つまたは複数のコントロールテーブルをさらに備えることを特徴とする請求項１３に記載のデータ構造。
【請求項１６】
前記コントロールテーブルは、前記レコードのサブセットを識別する複数のコントロールテーブルを含むことを特徴とする請求項１３に記載のデータ構造。
【請求項１７】
前記コントロールテーブルは、リレーショナルデータストア内に格納されたテーブルを含むことを特徴とする請求項１３に記載のデータ構造。
【請求項１８】
前記コントロール述語の式はユーザー定義関数を含むことを特徴とする請求項１３に記載のデータ構造。
【請求項１９】
前記コントロール述語は第２の部分マテリアライズドビューを参照することを特徴とする請求項１３に記載のデータ構造。
【請求項２０】
前記コントロール述語は少なくとも１つの等価制約を規定することを特徴とする請求項１３に記載のデータ構造。
【請求項２１】
前記コントロール述語は上限および下限のうち少なくとも１つを規定することを特徴とする請求項１３に記載のデータ構造。
【請求項２２】
前記コントロール述語は、マテリアライズされる前記レコードのサブセットを識別するために使用される、上限および下限のうち少なくとも１つを規定することを特徴とする請求項１３に記載のデータ構造。
【請求項２３】
前記コントロール述語は、前記部分マテリアライズドビューから除外されるべきレコードのインジケータを規定することを特徴とする請求項１３に記載のデータ構造。
【請求項２４】
実行される場合、方法を実施する実行可能命令を含む、１つまたは複数のコンピュータ可読メディアであって、前記方法は、
ａ）少なくとも１つのレコードを格納して、クエリ結果のビューを、ビュー定義式および少なくとも１つのソーステーブルに基づいて、部分的にマテリアライズするステップと、
ｂ）クエリ述語を含むクエリを受信するステップと、
ｃ）部分マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含むかどうかを判定するステップと、
ｄ）前記部分マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含む場合、前記クエリを前記部分マテリアライズドビューから計算するステップと
を備えることを特徴とする１つまたは複数のコンピュータ可読メディア。
【請求項２５】
前記方法は、前記部分マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含まない場合、前記クエリの少なくとも一部を少なくとも１つのソーステーブル上で計算するステップをさらに備えることを特徴とする請求項２４に記載の１つまたは複数のコンピュータ可読メディア。
【請求項２６】
前記部分マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含むかどうかを判定するステップは、コンパイル時間テストを評価するステップ、および、前記クエリの実行時間テストを評価するステップを含むことを特徴とする請求項２４に記載の１つまたは複数のコンピュータ可読メディア。
【請求項２７】
前記コンパイル時間テストは、コントロール述語を前記ビュー定義式から除去することによって、完全マテリアライズドビュー式を形成するステップ、および、前記完全マテリアライズドビュー式の結果生じる完全マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含むようになるかどうかを判定するステップを含むことを特徴とする請求項２６に記載の１つまたは複数のコンピュータ可読メディア。
【請求項２８】
前記部分マテリアライズドビューが、前記クエリ述語によって要求されたすべてのレコードを含むかどうかを判定するステップは、前記クエリ述語の実行時間定数、および、少なくとも１つのコントロールテーブルの少なくとも一部を参照する、少なくとも１つの条件を含む、ガード述語を作成するステップを含むことを特徴とする請求項２７に記載の１つまたは複数のコンピュータ可読メディア。
【請求項２９】
前記ガード述語を作成するステップは、前記少なくとも１つのコントロールテーブルのランタイム定数とパラメータ値の間の等価を評価する、クエリ述語を生成するステップを含むことを特徴とする請求項２８に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３０】
前記ガード述語を作成するステップは、前記少なくとも１つのコントロールテーブルのランタイム定数および範囲パラメータ値を比較する、クエリ述語を生成するステップを含むことを特徴とする請求項２８に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３１】
前記ガード述語を含む動的クエリプラン、前記部分マテリアライズドビューを参照するプライマリプランフラグメント、および、１つまたは複数のソーステーブルを参照するフォールバックプランフラグメントを生成するステップをさらに備えることを特徴とする請求項２８に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３２】
前記実行時間テストを評価するステップは、前記ガード述語を評価するステップを含むことを特徴とする請求項２８に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３３】
前記ガード述語が真であると評価する場合、前記クエリを前記プライマリプランフラグメントに基づいて計算するステップをさらに備えることを特徴とする請求項３２に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３４】
前記ガード述語が偽であると評価する場合、前記クエリを前記フォールバックプランフラグメントに基づいて計算するステップをさらに備えることを特徴とする請求項３２に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３５】
前記実行時間テストは前記クエリの実行時間で評価されることを特徴とする請求項２６に記載の１つまたは複数のコンピュータ可読メディア。
【請求項３６】
実行可能コンポーネントを含む１つまたは複数のコンピュータ可読メディアであって、
ａ）部分マテリアライズドビュー、コントロールテーブル、および１つまたは複数のソーステーブルを格納する手段と、
ｂ）クエリを受信する手段と、
ｃ）前記クエリをコンパイルする手段であって、前記部分マテリアライズドビューが、完全にマテリアライズされる場合、前記クエリ述語によって要求されたすべてのレコードを含むようになるかどうかを判定する手段、ガード述語を作成する手段、および、前記ガード述語を含む動的クエリプランを作成する手段を含む、前記クエリをコンパイルする手段と、
ｄ）前記クエリを、前記動的クエリプラン、および、前記ガード述語の評価に基づいて、前記クエリの実行時間で実行する手段と
を備えることを特徴とする１つまたは複数のコンピュータ可読メディア。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般にデータベースの分野に関し、より詳細には、本開示は部分マテリアライズドビューに関する。
【背景技術】
【０００２】
本出願は、参照により本明細書に組み込まれている、２００４年８月２４日に出願した米国特許仮出願第６０／６０４４０１号の権利を主張するものである。
【０００３】
ユーザーがデータベースからの情報を望む場合、ユーザーは、必要とされた情報をデータベース内のデータから計算（ｃｏｍｐｕｔｅ、情報処理により取得するの意）するクエリを発行する。クエリは通常、データベースの１つまたは複数のベーステーブルまたはビューを参照する。マテリアライズドビューは、それをベーステーブルから計算するのではなく、クエリの一部または全部を計算するために使用することができる、事前計算された結果である。完全マテリアライズドビューがベーステーブルよりはるかに小さいか、または、置換された式を計算することが高価である場合、クエリを評価するための時間を大幅に短縮することができる。ビューのソーステーブルのいずれのアップデートも、通常、ビューメンテナンス技術を使用して完全マテリアライズドビューに伝搬され、マテリアライズドビューがソーステーブルと整合性があるようにされる。
【０００４】
【非特許文献１】Gupta et. al, "Maintenance Views Incrementally," SIGMOD, 1993
【非特許文献２】Goldstein and Larson, "Optimizing Queries Using Materialized Views: A Practical Scalable Solution," SIGMOD, 2001
【発明の開示】
【発明が解決しようとする課題】
【０００５】
以下は、基本的な理解を読者に提供するために、本開示の簡単な概要を提示する。この概要は、本開示の網羅的または限定的な概観ではない。この概要は決して、本発明の主要および／または重要な要素を識別するため、本発明の範囲を線引きするため、または、本発明の範囲を限定するために提供するものではない。その唯一の目的は、開示された概念のいくつかを簡単な形態で、後に提示されるより詳細な説明への導入として提示することにある。
【０００６】
リレーショナルデータベースシステムは、ユーザーが、ベーステーブルと同じ方法で、ビューを作成することおよびビューをクエリにおいて参照する。ビューはクエリ式によって定義される。現在のデータベースシステムでは、ビューは完全にマテリアライズされるか、あるいはまったくマテリアライズされない。仮想ビューは、ビュー結果におけるレコードのいずれもがマテリアライズされないビューである。完全マテリアライズドビューでは、クエリ式（クエリの式）の結果におけるあらゆるレコードがマテリアライズされる。すなわち、あらゆる行またはレコードは、ソーステーブルのアップデート中に、計算、格納およびメンテナンスされる。
【０００７】
完全マテリアライズドビューは、ソーステーブルサイズおよびアップデートの速度の増加に伴い、すべてのそのレコードを計算、格納およびメンテナンスすることがますます高価になる可能性があるという、欠点を有する場合がある。メンテナンスは、完全マテリアライズドビューが大型で頻繁にアップデートされる場合、高価である可能性がある。完全マテリアライズドビューの小さいサブセットのみがある期間に渡って使用される場合、決して使用されない多数のレコードは不必要に最新に保たれる場合があり、それによりアップデートのための処理時間が増す。また、完全マテリアライズドビューは、いくつかの場合、変化する要求に適応するために十分な速さで修正することができない。完全マテリアライズドビューの修正には、現在のビューを削除すること、および、新しいビューを作成することが必要となり、新しいビューを「最初から」マテリアライズすることが含まれる。さらに、これには、完全マテリアライズドビューを参照するすべてのクエリプランを再コンパイルすることが必要となる場合がある。
【０００８】
部分マテリアライズドビューは、クエリ結果内の行またはレコードのサブセットのみをマテリアライズすることができるビューである。例えば、クエリ結果内のすべてのレコードをマテリアライズするのではなく、最も頻繁に要求されるレコードなど、これらのレコードの一部をマテリアライズすることができる。
【課題を解決するための手段】
【０００９】
ビュー内のどのレコードがマテリアライズされるかを、ビューに関連付けられた１つまたは複数のコントロールテーブルのコンテンツを参照するビュー定義式によって、規定することができる。コントロールテーブルは、離散パラメータ値、パラメータ間隔、パラメータ上限および／または下限を規定することができ、および／または、マテリアライズされないレコードを規定して、部分マテリアライズドビュー内に含まれるレコードのサブセットを識別することができる。例えば、顧客注文を含むビューは、１つまたは複数の顧客ＩＤを含むコントロールテーブルを有する場合があり、顧客ＩＤは、どの顧客の注文がビュー内で現在マテリアライズされるかを特定する。
【００１０】
どのレコードが部分マテリアライズドビュー内に含まれるかを、その関連付けられたコントロールテーブル内のエントリを変更することによって、変更することができる。この例では、単に顧客ＩＤをコントロールテーブル内で追加または削除することにより、顧客の注文をビューからそれぞれ追加または削除させる。どのレコードが部分マテリアライズドビュー内に含まれるかを変更することは、部分マテリアライズドビューを参照するクエリプランの再コンパイルを必要としない場合がある。完全マテリアライズドビューのように、部分マテリアライズドビューを、修正されたマテリアライズドビューで置き換えるのではなく、部分マテリアライズドビューを、知られているビューメンテナンスおよびアップデートアルゴリズムを使用して、アップデートすることができる。
【００１１】
入力クエリが部分マテリアライズドビューを使用することができるようになる前に、このビューが現在、クエリによって要求されたレコードを含むことを、検証することができる。通常、これは、ある行がコントロールテーブル内に存在するかどうかをチェックすることを含む可能性がある。例のビューに戻ると、特定の顧客のためのすべての注文を検索するクエリは、このビューを使用することができる可能性がある。しかし、このビューを使用する前に、顧客ＩＤの存在をコントロールテーブル内でチェックすることができる。入力クエリが部分マテリアライズドビューを使用することができないと判定される場合、ソーステーブル内のデータを使用して、クエリを評価することができる。
【００１２】
本発明の例示的実施形態により構成されたシステムの、これらおよび他の目的および利点を、添付の図面と共により十分に説明する。
【発明を実施するための最良の形態】
【００１３】
例示的オペレーティング環境
図１および以下の考察は、本発明を実施することができる適切なコンピューティング環境の、簡単な全体的説明を提供するように意図される。図１のオペレーティング環境は、適切なオペレーティング環境の一例でしかなく、オペレーティング環境の使用または機能性の範囲についてのいかなる限定をも示唆するように意図されない。本明細書で説明する部分マテリアライズドビューと共に使用するために適切である可能性のある、他の周知のコンピューティングシステム、環境および／または構成には、それだけに限定されないが、パーソナルコンピュータ、サーバーコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラマブルなコンシューマエレクトロニクス、ネットワークパーソナルコンピュータ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００１４】
必要ではないが、部分マテリアライズドビューを一般に、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令に関連して説明する。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データタイプを実装する。通常、プログラムモジュールの機能性を、様々な環境において望まれるように結合または分散させることができる。
【００１５】
図１を参照すると、部分マテリアライズドビューを実施するための例示的システムには、コンピュータデバイス１００など、コンピューティングデバイスが含まれる。その最も基本的な構成では、コンピューティングデバイス１００には通常、少なくとも１つの処理装置１０２およびメモリ１０４が含まれる。コンピューティングデバイスの厳密な構成およびタイプに応じて、メモリ１０４を、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、またはこれら２つのある組み合わせにすることができる。この最も基本的な構成を図１において、破線１０６によって例示する。加えて、デバイス１００はまた、追加の特徴および／または機能性を有することもできる。例えば、デバイス１００にはまた、それだけに限定されないが、磁気または光ディスクまたはテープを含む、追加のストレージ（例えば、リムーバブルおよび／または非リムーバブル）が含まれる場合もある。このような追加のストレージを図１において、リムーバブルストレージ１０８および非リムーバブルストレージ１１０によって例示する。コンピュータストレージメディアには、揮発性および不揮発性、リムーバブルおよび非リムーバブルのメディアが含まれ、これらのメディアは、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなど、情報の格納のためのいずれかの方法または技術において実装される。メモリ１０４、リムーバブルストレージ１０８および非リムーバブルストレージ１１０はすべて、コンピュータストレージメディアの例である。コンピュータストレージメディアには、それだけに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、所望の情報を格納するために使用することができ、デバイス１００によってアクセスすることができる他のいかなるメディアもが含まれる。
【００１６】
デバイス１００はまた、デバイス１００が他のデバイスと通信することを可能にする、通信接続１１２をも含むことができる。通信接続１１２は通信メディアの一例である。通信メディアは通常、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを、搬送波などの変調データ信号または他の移送メカニズムにおいて実施し、いかなる情報配信メディアをも含む。「変調データ信号」という用語は、信号内の情報を符号化するような方法でその特性の１つまたは複数が設定または変更されている信号を意味する。例として、限定ではなく、通信メディアには、有線ネットワークまたは直接有線接続などの有線メディア、ならびに、音響、無線周波数、赤外線および他の無線メディアなどの無線メディアが含まれる。本明細書で使用される場合、コンピュータ可読メディアという用語には、ストレージメディアおよび通信メディアの両方が含まれる。
【００１７】
デバイス１００はまた、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、および／または、他の入力デバイスなど、入力デバイス１１４をも有することができる。ディスプレイ、スピーカ、プリンタ、および／または、他のいずれかの出力デバイスなど、出力デバイス１１６もまた含まれる場合がある。
【００１８】
図２は、部分マテリアライズドビューをサポートするためのコンピュータデータベースシステム２００の一実施例を例示する。データベースシステム２００は、データベース２１０、データベースサーバー２２０およびクライアントツール２３０を備える。データベースシステム２００は、データベース２１０内のデータの格納および検索を、例えば、データベースサーバー２２０へクライアントツール２３０によって提示されたデータ操作ステートメントまたはクエリに従って、管理する。クライアントツール２３０は、例えば、データベースアプリケーション、ユーザーインターフェイスツール、オンライン分析処理（ＯＬＡＰ）もしくはデータマイニングミドルウェア、ＯＬＡＰもしくはデータマイニングアプリケーションサーバー、または、他のいかなる適切なデータベースインターフェイスコンポーネントであってもよい。
【００１９】
データベース２１０は、データに渡る関係を表現するデータの少なくとも１つのソーステーブルを備える。各ソーステーブルは、１つまたは複数のデータフィールド内に格納されたデータのレコードまたはタプルのセットを備える。テーブルのレコードは行とも呼ばれ、テーブル内のレコードのデータフィールドは列とも呼ばれる。ソーステーブルはいかなる種類のデータストアであってもよく、これらのデータストアには、リレーショナルデータベース、オブジェクト指向データベース、非構造化データベース、インメモリデータベースまたは他のデータストアが含まれる。ソーステーブルを、ＡＳＣＩＩテキストなどのフラットファイルシステム、バイナリファイル、通信ネットワークを介して送信されたデータ、または他のいかなるファイルシステムを使用して構築することもできる。前述のソーステーブルのこれらの可能な実施態様にもかかわらず、ソーステーブルという用語は、本明細書で使用される場合、コンピュータによってアクセス可能ないかなる方法でも収集および格納されるいかなるデータをも指す。
【００２０】
データベースサーバー２２０はクエリを処理して、例えば、データベース２１０内でデータを検索、挿入、削除および／またはアップデートする。データベースシステム２００は、構造化照会言語（ＳＱＬ）など、いかなる適切な照会言語をもサポートして、データベースサーバー２２０によって処理することができるクエリを定義することができる。適切なＳＱＬクエリには、例えば、Ｓｅｌｅｃｔ、Ｉｎｓｅｒｔ、ＤｅｌｅｔｅおよびＵｐｄａｔｅステートメントが含まれる場合がある。データベースサーバー２２０は、一実施形態では、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＭｉｃｒｏｓｏｆｔ（登録商標）ＳＱＬ  Ｓｅｒｖｅｒ、カリフォルニア州レッドウッドショアズのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＯｒａｃｌｅデータベースサーバー、および、ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓから入手可能なＤＢ２  Ｕｎｉｖｅｒｓａｌ  Ｄａｔａｂａｓｅ  Ｓｙｓｔｅｍｓを含む。データベースサーバー２２０は、クエリのための効率的な実行プランを生成することができ、特定のクエリ式を最適化することができる。
【００２１】
データベースサーバー２２０およびクライアントツール２３０を、プログラムモジュールまたはコンピュータ実行可能命令として実施することができ、例えば図１のコンピューティング環境など、適切なオペレーティング環境内で実行するためのいかなる適切なコンピュータ可読メディア上に格納することもできる。データベース２１０のデータを、１つまたは複数の適切なデータ構造の形態において実施することができ、また、いかなる適切なコンピュータ可読メディア上に格納することもできる。
【００２２】
部分マテリアライズドビュー
図３〜１２を、図２のデータベース２１０における部分マテリアライズドビューを参照して説明する。図３を参照すると、完全マテリアライズドビュー結果３１８は、ビュー式３０６を１つまたは複数のソーステーブル３０４に対して評価した結果である。完全マテリアライズドビューでは、クエリ式３０６によって作成されたクエリ結果のすべてのレコードが計算および格納される。完全マテリアライズドビュー結果は非常に大きくなる場合がある。例えば、ビューが部品テーブルおよびサプライヤテーブルの結合として定義され、５００，０００個の部品があり、各部品が平均して２つのサプライヤを有すると仮定する。次いで、完全マテリアライズドビューは、約１，０００，０００件のレコードを含むようになる。また、完全マテリアライズドビューでは、マテリアライズドビュー内のすべてのレコードは、いかなるクエリによっても決して使用されないレコードであっても、最新に保たれなければならない。
【００２３】
対照的に、部分マテリアライズドビュー３００は、ビュー式３０６からの結果の行のサブセットがマテリアライズされ、すなわち、計算および格納される、ビューである。部分マテリアライズドビュー定義式３２０の定義には、ビュー式３０６、および、ビューを１つまたは複数のコントロールテーブル３１４のコンテンツに基づいてさらに制限する追加のコントロール述語３１６が含まれる。結果として、部分マテリアライズドビューが使用される場合、特定のビュー式に基づいた結果のレコードのすべてが部分マテリアライズドビューに含まれるとは限らない。部分マテリアライズドビューを容易に変更することができ、いくつかの場合、クエリは、再コンパイルを必要とすることなく、変更された部分マテリアライズドビューに対して実行し続けることができる。
【００２４】
コントロールテーブル
部分マテリアライズドビュー３００内でマテリアライズされるレコードのサブセットを、いかなる適切な方法によって識別することもできる。図３を参照すると、ビュー定義式３２０は、完全マテリアライズドビュー３１８の結果を定義するビュー式３０６を含むが、これらの結果を、１つまたは複数のコントロールテーブル３１４を参照するコントロール述語によって、さらに制限する。このように、クエリ式３０６およびコントロール述語３１６を含むビュー定義式３２０は、ソーステーブル３０４およびコントロールテーブル３１４に対して適用される場合、どのレコードが部分マテリアライズドビュー結果３００内で発生するようになるかを定義する。
【００２５】
コントロール述語は、マテリアライズされるべきレコードのサブセットを、コントロールテーブル内の値とビューのソーステーブル内の値の間の望ましい制限を規定することによって、識別する。コントロールテーブル、ビュー、および／またはソーステーブル内のデータのいかなる表現も、パラメータ、それらの属性およびそれらの値のいかなる適切な表現をも有することができることを理解されたい。コントロール述語は、パラメータ化されたブール関数に類似しており、コントロールテーブルは、それに対してこの関数が真であると評価する実際のパラメータ値を規定する。図３を参照すると、コントロール述語は、コントロールテーブル３１４の行またはレコードの列の値を、ビューのソーステーブル３０４のレコード内の列の値に関係付け、これらの列の値の間の所望の制限を指示する。これらの列の値の間の所望の関係は、等価、非等価、範囲、シンボルのパターン（文字列マッチングによるなど）などであり、いかなる適切な方法で指示されてもよい。例えば、部分マテリアライズドビュー内に含まれるレコードのサブセットを識別するために、コントロールテーブル３１４内の列の値に配置された値または他のインジケータは、等価の値、マテリアライズされるべきでないレコード、および／または、上および／または下限を規定することができる。コントロール述語は、いくつかのより単純なコントロール述語を、「ＡＮＤ」および「ＯＲ」などの論理連結語により、共に接続することができる。
【００２６】
コントロールテーブルを本明細書で、複数の行および列を有するとして論じるが、コントロールテーブルおよびコントロール述語は、部分マテリアライズドビュー内でマテリアライズされるべきソーステーブルのレコードにおける制限を通信するための、いかなる適切なフォーマットおよび／または構文を有することもできる。図２を参照して論じたソーステーブル３０４のように、コントロールテーブル３１４は、コンピュータによってアクセス可能ないかなる方法でも収集および格納されたいかなるデータをも指す、いかなる種類のデータストアであってもよい。また、本明細書で説明するコントロールテーブルは、コントロールテーブルのレコード内の述語を、列内で指示されたパラメータ値と共に指示するが、いかなるパラメータ、フォーマットおよび／または論理演算子も、コントロールテーブルの行および列によって指示することができることを理解されたい。例えば、コントロールテーブルの列は複数の述語を指示することができ、コントロールテーブルの行はパラメータ制限を指示することができる。
【００２７】
部分マテリアライズドビューを作成する方法
図４は、図３の部分マテリアライズドビュー３００など、部分マテリアライズドビューを作成する一実施例の方法４００を例示する。図３を参照すると、４０２で、少なくとも１つのコントロールテーブルを作成することができる。コントロールテーブル内に格納されたレコードを、図２のクライアントコンポーネント２３０および／またはデータベースサーバー２２０からの入力に基づいて生成することができる。４０４で、部分マテリアライズドビューを定義するビュー定義式を、図２のクライアントコンポーネント２３０などから受信することができる。次いで４０６で、ビュー定義式を解析し、正確さをチェックすることができる。４０８で、図２のデータベースサーバー２２０のクエリオプティマイザなどによって、ビュー定義式を最適化することができる。クエリオプティマイザ、または、他の適切なコンポーネントは、いかなるコントロール述語をも含む、ビュー定義式のための最適化されたクエリプランを生成することができる。次いで４１０で、データベースシステムはクエリプランを実行し、それにより、部分マテリアライズドビューの結果を備えるレコードのセットを作成する。４１２で、識別されたレコードのサブセットが格納されて、ビューが部分的にマテリアライズされ、これでビューの作成が完了する。上述のように、部分マテリアライズドビューを、完全マテリアライズドビューの方法に類似の方法で格納することができる。
【００２８】
図４はまた、作成された部分マテリアライズドビューを修正する一実施例の方法をも例示する。いくつかの場合、４１６でソーステーブルを修正することができ、または、４１４でコントロールテーブルを修正することができ、データベースに格納されたデータフィールドをアップデートする。これらの修正を対応する部分マテリアライズドビューに伝搬させるために、４１８で、結果として生じる部分マテリアライズドビューへの変更を、いずれかの適切な方法を使用して決定することができ、次いで４２０で、部分マテリアライズドビューをそれに応じてアップデートする。例えば、データベースサーバーが完全マテリアライズドビューを、ビューメンテナンスポリシーまたは他のいずれかのキャッシュメンテナンスポリシーを使用してメンテナンスする方法に類似の方法で、部分マテリアライズドビューをメンテナンスすることができる。完全マテリアライズドビューを増分的にメンテナンスするための一般的な技術は、参照により本明細書に組み込まれる文献に説明されている（例えば、非特許文献１参照。）。図２を参照すると、データベースサーバー２２０は、図３の部分マテリアライズドビュー３００に格納されたレコードを、ソーステーブル３０４からのアップデートされたデータにより、増分的にアップデートすることができる。
【００２９】
図２を参照すると、コントロールテーブルを修正するために、ユーザーはクライアントツール２３０を使用して、手動でコントロールテーブルを変更することができ、または、データベースサーバー２２０は自動的にコントロールテーブルを修正することができる。例えば、コントロールテーブル内のレコードの手動および／または自動修正を、例えばイベントまたは他の入力に応答して、動的にすることができる。図２のデータベースサーバー２２０は、どのレコードが、ユーザーによってサブミットされたクエリによって使用されるかを追跡し、ある期間において最もよくあるクエリ、最も高価なクエリ、最新のクエリ、使用頻度が最も低いレコードなどを含む、所定の選択基準に従って、コントロールテーブルを動的に修正することができる。これらの基準を、システムカタログまたはメタデータなど、いかなる適切な方法で格納することもできる。
【００３０】
図３を参照して、コントロールテーブル３１４が修正される場合、図２のデータベースサーバー２２０の標準キャッシュメンテナンスポリシーは、部分マテリアライズドビュー３００を自動的にアップデートすることができる。例えば、コントロール述語における上限および下限として使用される、コントロールテーブル内に含まれた値を、部分マテリアライズドビューに含まれるレコードを定義するビュー定義式のＳＥＬＥＣＴ式を変更することなく、変更することができる。結果として、部分マテリアライズドビューを、完全に再計算、例えば置換するのではなく、増分ビューメンテナンスを使用してコントロールテーブルの関連部分のみにより、アップデートすることができる。
【００３１】
部分マテリアライズドビューに含まれるレコードを変更することは、クエリプランの再コンパイルをランタイムで必要としない場合がある。より詳細には、増分ビューメンテナンスは通常、部分マテリアライズドビューがアップデートされる場合に常に再コンパイルを必要とするのではなく、既存のクエリプランが有効および動作可能なままであることを可能にする。例えば、以下でさらに論じるように、クエリを部分マテリアライズドビュー上で実行させることができるかどうかの判定は、クエリの実行またはランタイムで発生することが可能である。このように、クエリを部分マテリアライズドビューに対して実行させることができるかどうかを評価する、ランタイムでのテストを、アップデートされた部分マテリアライズドビューに対して評価することができ、結果として、クエリプランを再コンパイルする必要性が減る。
【００３２】
部分マテリアライズドビューのための命名法
図２を参照すると、データベース管理システム２００は、図３に示すクエリ式３０６および１つまたは複数のコントロールテーブル３１４を含む、ビュー定義式３１６などを通じて、クライアント２３０が部分マテリアライズドビューを定義することを可能にする命名法をサポートすることができる。
【００３３】
本明細書で説明するクエリ定義式を、いかなる適切なデータベース言語においていかなる適切なデータベースサーバーまたは他のコンピュータシステム上でも実施することができ、これらの適切なデータベースサーバーまたは他のコンピュータシステムは、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＳＱＬ  Ｓｅｒｖｅｒ（登録商標）システム、Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎのデータベースサーバー、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｓｙｓｔｅｍｓ  ＤＢ２などである。ＳＱＬ言語における以下の実施例は、図５〜１２のビュー定義式および部分マテリアライズドビューを実施するために使用することができる命名法を例示する。これらの実施例では、図５のソーステーブル５０４を「Ｔ」と称する。
【００３４】
図３を参照すると、完全マテリアライズドビュー３１８を、ソーステーブル３０４に対する基本ビュー式Ｖｂ３０６の実行から決定することができる。基本ビュー式Ｖｂの結合および選択述語を、Ｐｖと指示することができる。部分マテリアライズドビューを作成するために、基本ビュー式Ｖｂを基本として使用することができ、マテリアライズをコントロール述語Ｐｃ（ｐ１，ｐ２，．．．，ｐｎ）によってコントロールすることができ、ただし、ｐ１，ｐ２，．．．，ｐｎはパラメータである。コントロール述語Ｐｃを、Ｖｂの非集合出力列を含む述語、およびパラメータｐ１，ｐ２，．．．，ｐｎにすることができる。コントロール述語Ｐｃ内に現れるＶｂの各列について、その列等価クラスを計算することができる。Ｃは、これらの列等価クラスの合併を示す。Ｃは、コントロールされた列のグループをコールされ、これは、Ｃにおける列がコントロール述語ＰＣによって、いろいろな点でコントロールされるからである。
【００３５】
有限数の行を有するコントロールテーブルＣｔを生成することができる。各行はｎ列を有し、各パラメータｐ１，ｐ２，．．．，ｐｎにつき１列である。コントロールテーブルＣｔおよび部分マテリアライズドビューｐｍｖの一実施例の宣言を、以下に示す。
【００３６】
【表１】
2006065846.tif 000003
【００３７】
部分マテリアライズドビューの宣言には、部分マテリアライズドビューに含まれるために、レコードが何の条件を満たすべきであるかを定義する、ＥＸＩＳＴＳ演算子が含まれる場合がある。上記の宣言におけるＥＸＩＳＴＳ節は、部分マテリアライズドビューｐｍｖ内でマテリアライズされるべきタプルまたはレコードを、コントロールテーブルＣｔ内に現在格納されたあるパラメータの組み合わせについてコントロール述語ＰＣを満たすタプルまたはレコードに制限する。よって、タプルをコントロールテーブルＣｔから追加および削除することによって、部分マテリアライズドビューｐｍｖのコンテンツをコントロールすることができる。上述のように、Ｖｂは、下にある基本ビューへの省略参照であり、ソーステーブルおよび／または他のビューを参照するクエリ式によって定義することができる。しかし、適切なコントロール述語を追加し、必要なコントロールテーブルを作成することによって、いかなるビューも部分マテリアライズドビューにすることができることを理解されたい。ｔｙｐｅｏｆ（ｐｉ）は、「パラメータｐｉのタイプにマッチするタイプの」のための省略である。
【００３８】
最初に、コントロールテーブルは、ＣＲＥＡＴＥ  ＴＡＢＬＥ式によって開始されたフィールド内の値によりポピュレートされるまで、空である。したがって、結果として生じる部分マテリアライズドビューもまた空である。情報をマテリアライズするために、ユーザーは、図２のクライアントツール２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＣｔの少なくとも１行をある値によりポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖを、ここで部分マテリアライズドビューのコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００３９】
いくつかの場合、汎用ビューメンテナンスアルゴリズムは、ビュー定義式におけるＥＸＩＳＴサブクエリを直接サポートすることができない。しかし、部分マテリアライズドビューのビュー定義式を、ＥＸＩＳＴサブクエリを含まない、例えば、ｓｅｌｅｃｔ−ｐｒｏｊｅｃｔ−ｊｏｉｎである、ビュー定義式に変換することができる。このように、基本ビューＶｂが増分的にメンテナンス可能であるならば、部分マテリアライズドビューを汎用ビューメンテナンスアルゴリズムにより部分的にメンテナンスすることができる。
【００４０】
上記の実施例の定義ビューｐｍｖを、以下に示す等価表現に変換することができる。
【００４１】
【表２】
2006065846.tif 000004
【００４２】
部分マテリアライズドビューｐｍｖ’は、ＥＸＩＳＴＳサブクエリを有する、上記で示した最初の実施例のビュー定義によって作成されたビューｐｍｖと、同じ数の行を含む。ビューｐｍｖ’を、通常のｓｅｌｅｃｔ−ｐｒｏｊｅｃｔ−ｊｏｉｎ−ｇｒｏｕｐビューにすることができ、汎用ビューメンテナンスアルゴリズムによって増分的にメンテナンスすることができる。
【００４３】
基本ビューＶｂおよびコントロールテーブルＣｔに対する述語Ｐｃの評価は、複数のタプルを戻す場合がある。したがって、部分ビューｐｍｖ’内の行は重複を含む場合がある。重複行を除去するために、ＧＲＯＵＰ  ＢＹ演算を、上記で示したような部分マテリアライズドビュー宣言に追加することができる。ＥＸＩＳＴサブクエリが１行しか戻さないことがわかっている場合（例えば、以下の図６〜１２に示す、部分マテリアライズドビュー６００、７００、８００、９００、１０００、１１００、１２００）、ビュー定義はＧＲＯＵＰ  ＢＹ演算子を除去することができる。
【００４４】
上述のように、複数のコントロールテーブルを使用して、部分マテリアライズドビューおよび／またはクエリ式の実行を定義することができ、コントロールテーブル述語は、ソーステーブルからの重複行を戻すことができる。ビューメンテナンスを支援するために、例えば、コントロールテーブルおよび／またはソーステーブルのアップデートを部分マテリアライズドビューに伝搬させるために、ＣＯＵＮＴ列を部分マテリアライズドビューに追加すること、部分マテリアライズドビューのそのレコードによって満たされるコントロールテーブルができ、ＣＯＵＮＴ列はおよび／または述語の数および／または識別を指示する。例えば、２つのコントロールテーブルＣ１ｔおよびＣ２ｔならびに部分マテリアライズドビューｐｍｖ”の一実施例の宣言を、以下のように示すことができる。
【００４５】
【表３】
2006065846.tif 000005
【００４６】
ＣＯＵＮＴ列を使用して、クエリ式またはコントロールテーブル述語がアップデートされる場合に部分マテリアライズドビューのどのレコードが削除されるべきであるかを、決定することができ、これを以下でさらに論じる。ＣＯＵＮＴ値がいかなるレコードについても０になる場合、この行を部分マテリアライズドビューから除去することができる。
【００４７】
部分マテリアライズドビューの実施例
図５は、異なるタイプのコントロール述語およびコントロールテーブルを例示するために使用されるようになる、一実施例のソーステーブル５０４および一実施例のクエリ式５０６を示す。コントロール述語５０８の異なるインスタンス、および、コントロールテーブル５１４を、部分マテリアライズドビュー５００の結果として生じるインスタンスと共に示す。図５によって例示するクエリ式５０６は、ビューを定義する可能なクエリ式の一実施例でしかない。クエリ式５０６は、１つまたは複数のソーステーブル５０４および／またはいかなるマテリアライズドビューにおいても使用可能なデータのいかなる組み合わせの検索要求をも指示する、いかなるクエリ式であってもよい。
【００４８】
図５の実施例では、クエリ式５０６は、ソーステーブル５０４に対して、コントロール述語なしで実行された場合、列ＩＤ５２４、ＡＧＥ５２６、ＳＴＡＴＥ５２８およびＩＮＣＯＭＥ５３０を有し、ソーステーブル５０４のすべての行を含むクエリ結果を定義する。このクエリ結果がマテリアライズされた場合、ソーステーブル５０４のすべてのレコードを含むが、ＩＤ５２４、ＡＧＥ５２６、ＳＴＡＴＥ５２８およびＩＮＣＯＭＥ５３０の指示されたデータフィールドのみを格納する、完全マテリアライズドビューの結果となる。
【００４９】
コントロール述語およびコントロールテーブルの実施例
図６〜１２は、コントロール述語およびコントロールテーブルの実施例、ならびに、図５に例示したクエリ式５０６およびソーステーブル５０４に適用された場合に得られる、結果として生じる部分マテリアライズドビューを例示する。図６〜１２によって例示されたコントロールテーブルのタイプおよび組み合わせは、使用することができる様々なコントロールテーブルの少数の例でしかない。クエリ結果のマテリアライズを制限することができる、いかなるタイプまたは組み合わせのクエリ述語をも収容する、コントロールテーブルまたは他のいかなる適切なデータ構造、または、命令もしくはオペレーションのセットも使用することができることを、容易に理解されたい。図６〜１２において例示されたコントロールテーブルおよび結果として生じる部分マテリアライズドビューを、列見出しと共に示すが、列見出しは必要とされず、本明細書で説明を明確にするために含まれる。
【００５０】
図６
図６および７はそれぞれ、同等制限を規定するコントロール述語において使用されるべき、不連続の列の値を含む、コントロールテーブルを例示する。図６の実施例では、コントロールテーブル６１４は単一の列６２８ＳＴＡＴＥを含む。コントロール述語６０８は、コントロールテーブル６１４が、図５に示すソーステーブル５０４のＳＴＡＴＥ列５２８のＳＴＡＴＥ値に等しいＳＴＡＴＥ値を有する行を含む場合にのみ、ビューレコードがマテリアライズされるべきであることを示す。コントロールテーブル６１４は、値「ＭＤ」を有する単一の行を含み、したがって、ＳＴＡＴＥ列において値「ＭＤ」を有するビューレコードのみが、部分マテリアライズドビュー結果６００内に発生するようになる。
【００５１】
図６のコントロールテーブル６１４、部分マテリアライズドビュー６００、およびクエリ式５０６のための一実施例の宣言を以下で、Ｍｉｃｒｏｓｏｆｔ  ＳＱＬ  Ｓｅｒｖｅｒに適切な構文を使用して示す。
【００５２】
【表４】
2006065846.tif 000006
【００５３】
上記のＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図６のコントロールテーブル６１４を、パラメータ列ＳＴＡＴＥにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー６００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。コントロールテーブルＴＡＢＬＥ＿６１４を参照するＥＸＩＳＴＳ演算子は、部分マテリアライズドビューｐｍｖ６００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルＴＡＢＬＥ＿６１４のある行における値と等しいＳＴＡＴＥ値（Ｔ．ＳＴＡＴＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ６００の実際の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿６１４および部分マテリアライズドビューｐｍｖ６００には、最初はいかなるレコードもない。部分マテリアライズドビューｐｍｖ６００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＴＡＢＬＥ＿６１４の少なくとも１行をある値によりポピュレートすることができる。標準の増分ビューメンテナンスは、部分マテリアライズドビューｐｍｖ６００を、図６に例示したコントロールテーブルＴＡＢＬＥ＿６１４に対して評価される場合にコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００５４】
ＥＸＩＳＴＳ演算子を内部結合に変換して、ビュー定義の等価宣言を作成することができる。例えば、ＳＴＡＴＥパラメータもまた主キーであるので、ＥＸＩＳＴＳ式のサブクエリを内部ｓｅｌｅｃｔ−ｐｒｏｊｅｃｔ−ｊｏｉｎ式に変換することができる。例えば、上記で与えられたｐｍｖ６００の宣言を以下に変換することができる。
【００５５】
【表５】
2006065846.tif 000007
【００５６】
ｓｅｌｅｃｔ−ｐｒｏｊｅｃｔ−ｊｏｉｎ式によって定義される、結果として生じる部分マテリアライズドビューｐｍｖ６００を、完全マテリアライズドビューをメンテナンスするために使用された技術など、標準ビューメンテナンス技術を使用してメンテナンスすることができる。
【００５７】
図７
図７の実施例では、コントロールテーブル７１４はＩＤ列７２４を含み、値「１」、「９」および「１０」を有する行を含む。いかなる数の等価の値もコントロールテーブル内に含めることができることを、容易に理解されたい。コントロール述語７０８は、図５のソーステーブル５０４のＩＤ列５２４のビューレコードが、そのＩＤ値がコントロールテーブル７１４における行の１つにおけるＩＤ値にマッチする場合にのみ、マテリアライズされるべきであることを示す。図７の、結果として生じる部分マテリアライズドビュー７００には、クエリ式５０６によって規定されるような、ＩＤ、ＡＧＥ、ＳＴＡＴＥおよびＩＮＣＯＭＥ列が含まれ、部分マテリアライズドビュー７００のレコードには、コントロールテーブル７１４に対して評価される場合にコントロール述語によって規定されたレコードのみが含まれる（すなわち、ＩＤ＝１、ＩＤ＝９またはＩＤ＝１０）。この実施例では、ＳＱＬ言語の命名法は、コントロールテーブル内で指示された複数の値の間の「ｏｒ」を暗黙指定する。他の所望の論理演算、例えば、「ａｎｄ」などを、コントロール述語のタイプによって実施することができることを理解されたい。加えて、他のクエリ言語は、コントロールテーブルの複数のレコードの間の他の論理演算子を暗黙指定することができ、他のいかなる適切な演算子も適切である可能性があることを理解されたい。
【００５８】
図７のコントロールテーブル７１４、部分マテリアライズドビュー７００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００５９】
【表６】
2006065846.tif 000008
【００６０】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図７のコントロールテーブル７１４を、パラメータ列ＩＤにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー７００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＷＨＥＲＥステートメント、または、図６の命名法を参照して上述した代替ＥＸＩＳＴＳ式は、コントロールテーブルＴＡＢＬＥ＿７１４を参照し、部分マテリアライズドビューｐｍｖ７００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルｃｔ７１４のある行における値と等しいＩＤ値（Ｔ．ＩＤ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ７００の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿７１４、および、結果として生じる部分マテリアライズドビューｐｍｖ７００には、いかなるレコードもない。部分マテリアライズドビューｐｍｖ７００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＴＡＢＬＥ＿７１４の少なくとも１行をある値（例えば、１、９および１０）によりポピュレートすることができる。次いで、標準の増分ビューメンテナンスは、部分マテリアライズドビューｐｍｖ７００を、コントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００６１】
図８
図８によって例示されたコントロールテーブル８１４には、２つの列（ＡＧＥ８２６、ＳＴＡＴＥ８２８）が含まれるが、いかなる数の列もコントロールテーブルに含めることができることは、容易に明らかになるべきである。コントロール述語８０８は、ＡＧＥおよびＳＴＡＴＥ上でマッチする値を有する行がコントロールテーブル８１４に存在する場合にのみ、ビューレコードが適格となることを示す。コントロール述語は、それだけに限定されないが、論理式（例えば、ＡＮＤ、ＯＲ、ＮＯＴ）、記号区切り文字（例えば、「＆」、「，」）、列または行区切り文字などを含む、多数の異なる方法において、コントロールテーブル内のレコードから得られた値を結合することができることを理解されたい。このように、図５のソーステーブル５０４からの、コントロール述語によって定義されたすべての制限を満たすレコードは、部分マテリアライズドビュー８００に含まれるようになる。図８の実施例では、図５のソーステーブル５０４において、述語（ＡＧＥ＝１８およびＳＴＡＴＥ＝ＰＡ）または述語（ＡＧＥ＝１８およびＳＴＡＴＥ＝ＭＤ）を満たす唯一のレコードは、ソーステーブル５０４の第３の行である。結果として、部分マテリアライズドビュー８００には、ただ１行のみが含まれる。
【００６２】
図８のコントロールテーブル８１４、部分マテリアライズドビュー８００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００６３】
【表７】
2006065846.tif 000009
【００６４】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図８のコントロールテーブル８１４を、パラメータ列ＡＧＥおよびＳＴＡＴＥにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー８００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＷＨＥＲＥステートメント、または、代替ＥＸＩＳＴＳ式は、コントロールテーブルＴＡＢＬＥ＿８１４を参照し、部分マテリアライズドビューｐｍｖ８００に含まれるレコード、すなわち、コントロールテーブルｃｔ８１４のある行における値と等しいＡＧＥ値（Ｔ．ＡＧＥ）、および、コントロールテーブルＴＡＢＬＥ＿８１４の同じ行における値と等しいＳＴＡＴＥ値（Ｔ．ＳＴＡＴＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ８００の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿８１４、および、結果として生じる部分マテリアライズドビューｐｍｖ８００には、最初はいかなるレコードもない。部分マテリアライズドビューｐｍｖ８００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＴＡＢＬＥ＿８１４の行を値（１８および「ＰＡ」）により、別の行を（１８および「ＭＤ」）により、ポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖ８００を、図８に例示したコントロールテーブルＴＡＢＬＥ＿８１４に対して評価される場合にコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００６５】
図９
図９は、限界がＩＮＣＯＭＥ＿Ｌ０Ｗ列９３０およびＩＮＣＯＭＥ＿ＨＩＧＨ列９３１からなるコントロールテーブル９１４によって提供される、範囲制限を規定するコントロール述語９０８を例示する。値の範囲のいかなる適切な指示も適切である場合があり、これらの指示には、数学演算子または記号（例えば、＞、＜、≧など）、テキストのコマンド（例えば、ＧＲＥＡＴＥＲ  ＴＨＡＮ、ＬＥＳＳ  ＴＨＡＮなど）などが含まれる。ＩＮＣＯＭＥ  ＨＩＧＨおよびＩＮＣＯＭＥ  Ｌ０Ｗ列９３０、９３１は、列ＩＮＣＯＭＥの所望の範囲の制限を指示する。図９に示すように、コントロールテーブル９１４の第１の行９４６は、「０〜１０Ｋ」のＩＮＣＯＭＥ範囲を指示し、コントロールテーブル９１４の第２の行９４８は、「≧１００Ｋ」のＩＮＣＯＭＥ範囲を指示する。ＩＮＣＯＭＥ  ＨＩＧＨ値を指示する値をいずれかの適切な値に設定して、無限など、適切な上限を指示して、≧１００Ｋを規定することができる。図９に示すように、ＩＮＣＯＭＥ  ＨＩＧＨ値を、ソーステーブル５０４内のすべての入手可能なＩＮＣＯＭＥ値よりも高くなるように選択することができる。他のいかなる適切なＩＮＣＯＭＥ  ＨＩＧＨ値も適切である場合があり、これらの値には、値なし（例えば、ＩＮＣＯＭＥ  ＨＩＧＨフィールドが空またはヌルインジケータである）、ゼロの値、ＩＮＣＯＭＥ  ＬＯＷ値より低いいずれかの値、無限インジケータ、ＩＮＣＯＭＥ  ＨＩＧＨフィールドの欠如などが含まれる。同様に、下限のない範囲、例えば、≦１００を指示するために、０の値、空のフィールド、負の数など、いかなる適切なインジケータもＩＮＣＯＭＥ  ＬＯＷフィールドのために使用することができる。結果として生じる部分マテリアライズドビュー９００は、図５のクエリ式５０６によって規定されるような、ＩＤ５２４、ＡＧＥ５２６、ＳＴＡＴＥ５２８およびＩＮＣＯＭＥ５３０列、ならびに、コントロールテーブル９１４によって規定されるような「０〜１０Ｋ」および「≧１００Ｋ」の範囲内に含まれるＩＮＣＯＭＥ値を有するソーステーブル５０４のすべての行および／またはクエリ結果が含まれる。
【００６６】
図９のコントロールテーブル９１４、部分マテリアライズドビュー９００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００６７】
【表８】
2006065846.tif 000010
【００６８】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図９のコントロールテーブル９１４を、列ＩＮＣＯＭＥ  ＬＯＷおよびＩＮＣＯＭＥ  ＨＩＧＨにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー９００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＥＸＩＳＴＳステートメントはコントロールテーブルＴＡＢＬＥ＿９１４を参照し、部分マテリアライズドビューｐｍｖ９００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルＴＡＢＬＥ＿９１４のある行におけるＩＮＣＯＭＥ  ＬＯＷおよびＩＮＣＯＭＥ  ＨＩＧＨ値の間のＩＮＣＯＭＥ値（Ｔ．ＩＮＣＯＭＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ９００の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿９１４、および、結果として生じる部分マテリアライズドビューｐｍｖ９００には、いかなるレコードもない。部分マテリアライズドビューｐｍｖ９００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルｃｔ９１４の少なくとも１行をある値（例えば、０および１０Ｋ、ならびに、１００Ｋおよび９９９９９９Ｋ）によりポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖ９００を、図９に例示したコントロールテーブルＴＡＢＬＥ＿９１４に対して評価される場合にコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００６９】
図１０
図１０によって例示するコントロール述語１００８の実施例は、ＳＴＡＴＥ列１０５０における同等制約、および、コントロールテーブル１０１４のＩＮＣＯＭＥ＿ＬＯＷ列１０３０およびＩＮＣＯＭＥ＿ＨＩＧＨ列１０３２を使用する範囲制約を規定する。両方の制約を満たす、図５のソーステーブル５０４からのレコードは、部分マテリアライズドビュー１０００に含まれる。図１０の実施例では、１つのレコードは、ＳＴＡＴＥ＝ＰＡ、および、０および１０Ｋ述語の間のＩＮＣＯＭＥを満たし、１つのレコードは、ＳＴＡＴＥ＝ＭＤ、および、０および１０Ｋ述語の間のＩＮＣＯＭＥを満たす。結果として、この実施例では、部分マテリアライズドビュー１０００には、図５のクエリ式５０６によって定義されるような列を有する２つのレコードが含まれる。
【００７０】
図１０のコントロールテーブル１０１４、部分マテリアライズドビュー１０００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００７１】
【表９】
2006065846.tif 000011
【００７２】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図１０のコントロールテーブル１０１４を、列ＳＴＡＴＥ、ＩＮＣＯＭＥ  ＬＯＷおよびＩＮＣＯＭＥ  ＨＩＧＨにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー１０００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＥＸＩＳＴＳステートメントはコントロールテーブルｃｔ１０１４を参照し、部分マテリアライズドビューｐｍｖ１０００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルＴＡＢＬＥ＿１０１４のある行におけるＳＴＡＴＥ値に等しいＳＴＡＴＥ値（Ｔ．ＳＴＡＴＥ）、および、コントロールテーブルＴＡＢＬＥ＿１０１４の同じ行におけるＩＮＣＯＭＥ  ＬＯＷおよびＩＮＣＯＭＥ  ＨＩＧＨ値の間であるＩＮＣＯＭＥ値（Ｔ．ＩＮＣＯＭＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ１０００の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿１０１４、および、結果として生じる部分マテリアライズドビューｐｍｖ１０００には、最初はいかなるレコードもない。部分マテリアライズドビューｐｍｖ１０００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルｃｔ１０１４の行を値（ＰＡ、０および１０Ｋ）により、別の行を値（ＭＤ、０および１０Ｋ）により、ポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖ１０００を、コントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００７３】
図１１
図１１のコントロール述語１１０８およびコントロールテーブル１１１４の実施例は、制約を、比較演算子以外の他の演算子に基づかせることができることを例示する。この場合、ＬＩＫＥ演算子が、コントロールテーブル１１１４内の行によって提供されたその文字列ＰＡＴＴＥＲＮパラメータと共に使用される。ＬＩＫＥ以外の演算子を、コントロールテーブルによって供給された適用可能なパラメータ値と共に等しく十分に使用することができることを理解されたい。図１１の実施例では、コントロールテーブル１１１４の第１のレコード１１４６は、部分マテリアライズドビュー１１００内に含めるために、「Ｎ」で終了するＳＴＡＴＥ省略語、および、文字列「ＲＥＴ」を含むＣＯＭＭＥＮＴ値を含む、レコードを選択する。図１１のコントロールテーブル１１１４の第２のレコード１１４８は、部分マテリアライズドビュー１１００内に含めるために、「Ｐ」で開始するＳＴＡＴＥ省略語、および、語「ＣＨＩＬＤ」に等しいＣＯＭＭＥＮＴ属性を含む、レコードを選択する。図１１に示すように、「％」記号は、いかなる文字のシーケンスにもマッチし、「＿」記号は、いかなる単一の文字にもマッチする。しかし、記号、テキスト文字列、列ラベルなどを含む、論理演算および／またはワイルドカード値のいかなる適切なインジケータも適切である可能性がある。結果として生じる部分マテリアライズドビュー１１００には、クエリ式５０６によって規定されるような、ＩＤ、ＡＧＥ、ＳＴＡＴＥおよびＩＮＣＯＭＥ列、ならびに、コントロール述語１１０８およびコントロールテーブル１１１４によって規定された制限を満たすレコードが含まれる。
【００７４】
図１１のコントロールテーブル１１１４、部分マテリアライズドビュー１１００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００７５】
【表１０】
2006065846.tif 000012
【００７６】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図１１のコントロールテーブル１１１４を、列ＳＴＡＴＥおよびＰＡＴＴＥＲＮにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー１１００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＥＸＩＳＴＳステートメントはコントロールテーブルＴＡＢＬＥ＿１１１４を参照し、部分マテリアライズドビューｐｍｖ１１００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルＴＡＢＬＥ＿１１１４のある行におけるＳＴＡＴＥ値に等しいＳＴＡＴＥ値（Ｔ．ＳＴＡＴＥ）、および、コントロールテーブルＴＡＢＬＥ＿１１１４の同じ行のＰＡＴＴＥＲＮ列におけるＬＩＫＥパターンにマッチするＣＯＭＭＥＮＴ値（Ｔ．ＩＮＣＯＭＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ１１００の作成をトリガする。上述のように、コントロールテーブルｃｔ１１１４、および、結果として生じる部分マテリアライズドビューｐｍｖ１１００には、最初はいかなるレコードもない。部分マテリアライズドビューｐｍｖ１１００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＴＡＢＬＥ＿１１１４の１行をある値（「＿Ｎ」および「％ＲＥＴ」）により、別の行を値（「Ｐ＿」および「ＣＨＩＬＤ」）により、ポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖ１１００を、ビューのコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００７７】
図１２
図１２は、複数のコントロール述語およびコントロールテーブルを、どのレコードが部分マテリアライズドビューに含まれるべきであるかを識別するために、使用することができることを例示する。例えば、複数のコントロール述語を「ＯＲ」演算子により結合し、レコードがコントロール述語のいずれか１つを満たす場合に部分マテリアライズドビューに含まれるようにすることができる。図１２によって例示する実施例では、全体のコントロール述語１２０８は、「ＯＲ」によって接続された２つの個々のコントロール述語（１２１０および１２１２）からなり、各述語は、別々のコントロールテーブル（それぞれ１２６０および１２６２）を参照する。結果として生じる部分マテリアライズドビュー１２００には、図１２に示すように、ＡＧＥ＝１８、ＡＧＥ＝２１またはＳＴＡＴＥ＝「ＭＤ」である４つのビューレコードが、図５のクエリ式５０６によって規定された列と共に含まれる。もう１つの実施例では、全体のコントロール述語１２０８においてコントロール述語１２１０および１２１２が「ＡＮＤ」演算子によって結合された場合、結果として生じる部分マテリアライズドビューには、（ＡＧＥ＝１８  ＡＮＤ  ＳＴＡＴＥ＝「ＭＤ」）または（ＡＧＥ＝２１  ＡＮＤ  ＳＴＡＴＥ＝「ＭＤ」）である、すべてのレコードが含まれるようになる。
【００７８】
図１２のコントロールテーブル１２６０、コントロールテーブル１２６２、部分マテリアライズドビュー１２００、およびクエリ式５０６のための一実施例の宣言を、以下に示す。
【００７９】
【表１１】
2006065846.tif 000013
【００８０】
ＣＲＥＡＴＥ  ＴＡＢＬＥ式は、図１２のコントロールテーブル１２６０、１２６２を、それぞれ列ＡＧＥおよびＳＴＡＴＥにより作成する。ＳＥＬＥＣＴ  Ｔ．ＩＤ，Ｔ．ＡＧＥ，Ｔ．ＳＴＡＴＥ，Ｔ．ＩＮＣＯＭＥのクエリ式は、部分マテリアライズドビュー１２００に含まれる、図５のソーステーブル５０４（Ｔ）からの列を決定する。ＥＸＩＳＴＳステートメントは、コントロールテーブルＴＡＢＬＥ＿１２６０およびテーブルＴＡＢＬＥ＿１２６２を参照し、部分マテリアライズドビューｐｍｖ１２００に含まれるレコード、すなわち、図５のソーステーブル５０４（Ｔ）からの、コントロールテーブルＴＡＢＬＥ＿１２６０のある行におけるＡＧＥ値に等しいＡＧＥ値（Ｔ．ＡＧＥ）、または、コントロールテーブルＴＡＢＬＥ＿１２６２のある行におけるＳＴＡＴＥ値に等しいＳＴＡＴＥ値（Ｔ．ＳＴＡＴＥ）を有するレコードを決定する。ＣＬＵＳＴＥＲＥＤ  ＩＮＤＥＸ式は、部分マテリアライズドビューｐｍｖ１２００の作成をトリガする。上述のように、コントロールテーブルＴＡＢＬＥ＿１２６０およびＴＡＢＬＥ＿１２６２、および、結果として生じる部分マテリアライズドビューｐｍｖ１２００には、いかなるレコードもない。部分マテリアライズドビューｐｍｖ１２００内の情報をマテリアライズするために、ユーザーは、図２のクライアント２３０またはデータベースサーバー２２０のあるコンポーネントを通じて、コントロールテーブルＴＡＢＬＥ＿１２６０、ＴＡＢＬＥ＿１２６２のうち少なくとも１行を、値（１８、２１または「ＭＤ」）によりポピュレートすることができる。次いで、標準の増分ビューメンテナンスを使用して、部分マテリアライズドビューｐｍｖ１２００を、ビューのコントロール述語を満たすレコードを含むように、正確にアップデートすることができる。
【００８１】
複数のコントロール述語が、部分マテリアライズドビューに含まれるレコードを定義する場合には、１つまたは複数の列を部分マテリアライズドビューに追加して、その下で各レコードが部分マテリアライズドビューに含まれるために適格となる、コントロール述語およびコントロールテーブル行の数および／または識別を指示することができる。図１２に示す実施例では、部分マテリアライズドビュー１２００の各レコードについて、ＣＯＵＮＴ列１２６４の値は、ソーステーブル５０４からの対応するレコードによって満たされるコントロール述語の数に等しい。
【００８２】
このような追加の列を使用して、コントロールテーブルが修正または除去される場合に部分マテリアライズドビューのどのレコードが削除されるべきであるかを決定することができる。例えば、図１２に示すように、ＣＯＵＮＴ値がゼロより大きい場合にのみ、部分マテリアライズドビューのレコードは部分マテリアライズドビュー１２００内に残ることができる。カウント値がゼロである場合、レコードを部分マテリアライズドビューから除去しなければならず、これは、このレコードがコントロール述語のいずれも満たさないからである。図１２の実施例では、値「２１」が第１のコントロールテーブル１２６０から除去された場合、第２および第３の行１２６８および１２７０は部分マテリアライズドビュー１２００から除去されるようになり、これは、これらの行のためのＣＯＵＮＴがゼロに減らされるようになるからである。値「１８」が第１のコントロールテーブル１２６０から除去された場合、部分マテリアライズドビュー１２００からどの行も削除されない。具体的には、部分マテリアライズドビュー１２００の第１の行１２６６は、ＡＧＥ＝１８が除去されるので、修正された第１のコントロール述語１２１０をもはや満たさなくなる。しかし、第１の行１２６６はなお、第２のコントロール述語１２１２を満たすようになり、これはＳＴＡＴＥ＝ＭＤであるからである。結果として、第１の行１２６６のＣＯＵＮＴ値は「２」から「１」に減らされるようになり、このレコードが、修正されたコントロールテーブルによって部分マテリアライズドビュー１２００内の有効なエントリであることが指示される。代替構成では、ある方法で、どのように、および／または、何の、コントロール述語およびコントロールテーブル行が、部分マテリアライズドビューに含まれるために適格となるかを指示する、複数のカウント列、コントロールテーブル内の行を識別する列、追加の補助テーブルなど、いかなる適切なインジケータをも含めることができる。
【００８３】
動的コントロールテーブル
コントロールテーブルを使用して、様々な方法で、部分マテリアライズドビューに含まれるレコードを操作または制限することができる。例えば、図５を参照すると、コントロールテーブルを使用して、直前にアクセスされたビューのレコードが部分マテリアライズドビュー５００内でメンテナンスされるようにすることができる。アクセスパターンが変化する場合、コントロールテーブルを自動または手動で調整して、直前にアクセスされたビューの行を部分マテリアライズドビュー内に保つことができる。例えば、部分マテリアライズドビュー、ソーステーブル、または他のビューには、ビューのレコードがアクセスされる回数を指示する列が含まれる場合がある。コントロールテーブルには、所定の期間またはアクセスの回数における最小しきい値を指示する範囲制限など、述語におけるそのＡＣＣＥＳＳカウントパラメータが含まれる場合がある。ＡＣＣＥＳＳカウントパラメータ値は経時的に修正されるので、部分マテリアライズドビューを自動的にビューメンテナンスによりアップデートして、未使用またはそれほど多く出ていないレコードを部分マテリアライズドビューから選び取ること、および／または、新たに多く出ているレコードをソーステーブルから含めることができる。
【００８４】
共通コントロールテーブル
複数の部分マテリアライズドビューは、共通のコントロールテーブルを参照することができ、あるいは共通のコントロールテーブルに依存することができる。より詳細には、異なる部分マテリアライズドビューは共通コントロールテーブルを共有することができる。例えば、図６に示すように、コントロールテーブル６１４は、部分マテリアライズドビュー６００および他の部分マテリアライズドビューもコントロールすることができる。具体的には、もう１つのマテリアライズドビューは、ソーステーブル、異なる述語制限、および／または、異なるパラメータ包含／排他を参照する、ビュー定義式を有することができる。
【００８５】
コントロールテーブルとしての部分マテリアライズドビュー
部分マテリアライズドビューをそれ自体で、別の部分マテリアライズドビューのためのコントロールテーブルとして使用することができる。図９を参照すると、コントロールテーブル９１４は部分マテリアライズドビュー９００をコントロールして、定義された範囲内のＩＮＣＯＭＥを有するレコードを含める。いくつかの場合、データベースへのクエリは、部分マテリアライズドビュー９００内に含まれた顧客が存在する状態におけるサプライヤを要求することができる。したがって、第２の部分マテリアライズドビューを、サプライやソーステーブル（図示せず）、および、図９の部分マテリアライズドビュー９００のＳＴＡＴＥ列に依存するコントロール述語を参照する、クエリ式により作成することができる。この第２の部分マテリアライズドビューには、したがって、ＰＡ、ＭＤ、ＯＨ、ＮＹ、ＣＡおよびＷＡ内のサプライヤのレコードが含まれるようになる。したがって、コントロールテーブル９１４は部分マテリアライズドビュー９００をコントロールし、部分マテリアライズドビュー９００は、サプライヤの第２の部分マテリアライズドビューをコントロールする。
【００８６】
ユーザー定義関数
コントロールテーブルは、列の実際の値ではなく、ユーザー定義関数、または、列に適用された他の式の値を規定することができる。このように、コントロール述語はユーザー定義関数を参照することができ、コントロールテーブルは入力値をそのユーザー定義関数に提供することができる。一実施例では、ユーザーは、所与の所得水準に基づいて税率区分を決定した、関数ＢＲＡＣＫＥＴを定義することができる。このように、図３のクエリ式３０６およびソーステーブル３０４を参照すると、識別された税率区分内のレコードの部分マテリアライズドビューを作成することができる。より詳細には、ビュー定義式３１８は、ユーザー定義関数ＢＲＡＣＫＥＴをコントロール述語内に含めることができ、コントロールテーブルは関心のある税率区分を規定する。以下でさらに論じる、以下の実施例の定義は、部分マテリアライズドビューを、ユーザー定義関数ＢＲＡＣＫＥＴを含み、図５のソーステーブル５０４をＴとして参照する、コントロール述語に基づいてマテリアライズすることができる。
【００８７】
【表１２】
2006065846.tif 000014
【００８８】
部分ビューグループ
部分ビューグループという用語は、関係付けられた部分ビューのセット、および、そのコンテンツが１つまたは複数のコントロールテーブルの値によって直接的または間接的にコントロールされるコントロールテーブルを識別することができる。部分ビューグループ内のこれらのビューは「リンク部分ビュー」と呼ばれる場合がある。例えば、部分ビューグループは、部分マテリアライズドビューｐｍｖを備える場合があり、コントロールテーブルにはコントロールテーブルＣｔが含まれる場合がある。
【００８９】
部分ビューグループを有向グラフとして例示することができ、ノードはコントロールテーブルまたは部分ビューのいずれかを示し、エッジはコントロール制約（コントロール述語によって定義された）を示す。コントロール制約のためのエッジの方向は、部分ビューからそのコントロールテーブルへの方向である。
【００９０】
図１４〜１７は、部分ビューグラフの実施例を示す。図１４は、部分ビュー（Ｃ）がもう１つの部分ビュー（Ｂ）をコントロールテーブルとして使用する場合を表す。図１５では、２つの部分ビュー（ＢおよびＣ）は共通コントロールテーブル（Ａ）を共有する。ビューＢおよびＣは、必ずしも同じコントロール述語を使用するとは限らないことを理解されたい。図１６は、部分ビュー（Ｃ）が２つのコントロールテーブル（ＡおよびＢ）を有する場合を示す。図１７は、異なる部分ビューの組み合わせを示す。
【００９１】
Ｍｉｃｒｏｓｏｆｔ  ＳＱＬ  Ｓｅｒｖｅｒを含む、現在のデータベースシステムにおけるビューは、それら自体を直接的または間接的に参照することができず、これは、このような循環がビュー拡張およびビューメンテナンスを複雑にするからである。結果として、部分マテリアライズドビューもまたこのプロパティを継承する。したがって、部分ビューグループの有向グラフにおいて循環が存在することはできない。このように、トポロジー的な順序は常に部分ビューグラフ内に存在するようになる。したがって、部分ビューのいかなるスタックをも適切にメンテナンスすることができる。
【００９２】
クエリ評価のための部分マテリアライズドビューの使用
Ｍｉｃｒｏｓｏｆｔ  ＳＱＬ  Ｓｅｒｖｅｒなど、現代のリレーショナルデータベースシステムでは、クエリＱの評価には以下の２つのステップが含まれる。
【００９３】
１．クエリコンパイル（クエリ最適化とも呼ばれる）。このステップは、クエリを実行するための最も効率的な方法を決定することができ、クエリ実行プランを生成する。実行プランがすでに入力クエリに対して存在する場合、このステップは通常スキップされる。
【００９４】
２．クエリ実行。このステップはクエリをプランに従って実行し、それによりクエリ結果を作成する。
【００９５】
新たに受信されたクエリ式Ｑを部分マテリアライズドビューから計算することができるかどうかを判定するために、ビューマッチングアルゴリズムを使用することができる。完全マテリアライズドビューのためのビューマッチングアルゴリズムの一実施例は、参照により本明細書に組み込まれる文献に説明されている（例えば、非特許文献２参照。）。ＧｏｌｄｓｔｅｉｎおよびＬａｒｓｏｎによるアルゴリズムは、クエリ式Ｑを完全マテリアライズドビューＶから計算することができるかどうかを評価し、このアルゴリズムを、図１８の方法１８００において例示する。データベースサーバーは１８０２で、ビューＶがクエリＱによって要求されたすべての行を含むかどうかを判定する。そうである場合、データベースサーバーは１８０４で、要求された行をビューＶから選択することができるかどうかを判定し、１８０６で、クエリＱのすべての出力行をビューＶの出力列から計算することができるかどうかを判定し、１８０８で、集約が要求されるかどうかを判定し、そうである場合、１８１０で、要求された列がビューＶ内で入手可能であるかどうかを判定する。
【００９６】
ビューが完全にマテリアライズされる場合、図１８の方法１８００を、コンパイル時間ですべて完了することができる。しかし、ビューが部分的にマテリアライズされる場合、部分マテリアライズドビューの実際のコンテンツは、コントロール述語、および、そのコントロールテーブルのコンテンツによって制限される。すなわち、部分マテリアライズドビュー内で現在マテリアライズされた行は、実行時間まで知られない。したがって、図１８のビューマッチングアルゴリズムにおいて、ビューＶがクエリＱによって要求されたすべての行を含む判定１８０２は、部分マテリアライズドビューをサポートするように修正されるべきである。すなわち、判定１８０２を、コンパイル時間テストおよび実行時間テストに分割することができる。他のステップは同じまま残ることができ、すべてをコンパイル時間に完了することができる。
【００９７】
部分マテリアライズドビューをサポートするビューマッチング方法の一実施例１３００を、図１３の流れ図において示す。最初に１３０２で、クエリまたはクエリの一部を受信することができる。例えば、図２のデータベースサーバー２２０はクエリをクライアントツール２３０から受信し、このクエリを、ビューマッチングを担うデータベースコンポーネントに転送することができる。１２０３で、ビューマッチングコンポーネントは次いで、入手可能なビューの中で検討すべきビューを選択し、このビューは、後続の説明では部分マテリアライズドビューになると仮定される。いかなる適切なビューマッチングアルゴリズムも、検討すべきビューを選択するために使用することができる。クエリは１つまたは複数のソーステーブルを参照することができ、その値がクエリの実行の時間で供給されるようになる、１つまたは複数のパラメータを含むことができる。以下に示す実施例のクエリＱを、このセクションの説明を例示するために使用するが、このクエリは一実施例でしかなく、いかなる適切なクエリも使用することができることを理解されたい。
【００９８】
クエリＱ：
【００９９】
【表１３】
2006065846.tif 000015
【０１００】
この実施例では、図２のデータベース２１０は、以前に定義され、図６に例示した部分マテリアライズドビューｐｍｖ６００を含むことができる。クエリＱの最適化中に、図２のデータベースサーバー２２０のオプティマイザは、クエリを部分マテリアライズドビューｐｍｖ６００から計算することができるかどうかを判定しようと試みることができる。クエリＱのランタイムまで、どのレコードが部分マテリアライズドビューｐｍｖ６００内に存在するかが知られないので、部分マテリアライズドビューがすべての要求されたレコードを含むかどうかを判定する部分は、クエリＱのランタイム、例えば実行時間テストまで、遅延される。しかし、部分マテリアライズドビューがすべての要求されたレコードを含むかどうかの判定の部分を、クエリのコンパイル時間に、例えばコンパイル時間テストで実施することができる。
【０１０１】
コンパイル時間中に、オプティマイザまたは他の適切なコンポーネントを含むデータベースサーバーは、１３０４で、部分マテリアライズドビューが完全にマテリアライズされた場合、クエリによって要求されたすべてのレコードを含むようになるかどうかを判定することによって、コンパイル時間テストを実行することができる。完全マテリアライズドビューの定義を、すべてのコントロール述語をビュー定義式から除去することによって得ることができ、コンパイル時間テストを、適切なビューマッチングアルゴリズムを使用して判定することができ、これは、１８０２で、図１８を参照して説明したクエリＱによって要求されたすべての行をビューが含むかどうかを判定することなどである。このテストが否定的である場合、１３０６で、ベーステーブルから、および場合によっては、現在検討されているビュー以外のマテリアライズドビューからも、クエリ結果をから計算するクエリ実行プランを作成することができる。いくつかの場合、ソーステーブルを使用してクエリを計算することができ、他の場合、クエリの少なくとも一部を部分マテリアライズドビューから計算し、次いで他のソースから計算されたデータと結合して、要求されたレコードを提供することができる。
【０１０２】
実施例のクエリＱおよびビューｐｍｖ６００に対して、コンパイル時間テストは真であると評価し、これは、部分マテリアライズドビューの完全マテリアライズドバージョンがテーブル５０４（Ｔ）のすべての行を含むようになるからである。コンパイル時間テストが真であると評価する場合、図１８を参照して上述したビューマッチング手順における残りのテスト１８０４、１８０６、１８０８および１８１０を、次いで１３０８で評価することができる。１３０８のこれらのテストのいずれかが失敗した場合、現在の部分マテリアライズドビューをこのクエリによって使用することはできない。したがって、１３０６で、クエリ実行プランを、ベーステーブルまたは他の適切なビューに基づいて作成することができる。
【０１０３】
１３０８でテストが成功する場合、１３１２で、部分マテリアライズドビューがクエリによって要求されたレコードを含むことを検証する、ガード述語を構築することができる。ガード述語は実行時間テストを実施する。上述の実施例のクエリＱおよび部分マテリアライズドビューｐｍｖ６００に対して、データベースシステム２００のオプティマイザまたは他の適切なコンポーネントは、クエリＱの実行時間に評価されるべきである、クエリによって要求された行のｐｍｖ６００における存在を検証する、ガード述語を構築しようと試みることができる。しかし、ガード述語の形態は、使用されるコントロール述語およびコントロールテーブルのタイプによって決まり、必ずしも正しいガード述語を構築することが可能であるとは限らない。例えば、上記の実施例のクエリＱにおけるＴ．ＳＴＡＴＥにおける述語がＴ．ＳＴＡＴＥ＜＞‘ＭＤ’に修正された場合、有効なガード述語を構築することができず、これは、部分マテリアライズドビューがＳＴＡＴＥ≠‘ＭＤ’であるすべての行を含んだかどうかを、判定することが不可能となるからである。
【０１０４】
ガード述語テストを構築することができない場合、部分マテリアライズドビューを拒否することができ、１３０６で、クエリをベーステーブルおよび／または他のビューから計算するクエリ実行プランを作成することができる。有効なガード述語が決定される場合、１３２０で、動的クエリプランを、クエリのコンパイル時間に構築することができる。動的クエリプランを３つのコンポーネント、すなわち、ガード述語、プライマリプランフラグメント、およびフォールバックプランフラグメントから構築することができる。１３１６で、プライマリプランフラグメントを構築して、ガード述語が真であると評価する場合に部分マテリアライズドビューを使用することができる。１３１８で、フォールバックプランを構築して、ガード述語が偽であると評価する場合に使用するために、クエリをベーステーブルおよび／または他のビューから計算することができる。次いで１３２０で、動的クエリ実行プランを構築することができ、これは、通常はＳｗｉｔｃｈＵｎｉｏｎまたはＣｈｏｏｓｅＰｌａｎ演算子と呼ばれるプラン選択演算子により、３つのコンポーネントを結合することによって行う。ガード述語が真であると評価する場合、実行時間テストはプライマリプランを選択することができ、ガード述語が偽であると評価する場合、実行時間テストはフォールバックプランを選択してクエリを計算することができる。
【０１０５】
異なる種類のコントロール述語およびコントロールテーブルのためのガード述語の構築を、以下でさらに論じる。
【０１０６】
同等コントロールテーブルのためのガード述語
同等コントロールテーブルを、同等コントロール述語をサポートするテーブルにすることができる。それぞれ図６、７、８および１２のコントロールテーブル６１４、７１４、８１４、１２６０および１２６２、ならびに、それらの各部分マテリアライズドビュー６００、７００、８００および１２００は、このタイプである。同等コントロールテーブルのためのガード述語を、コントロールテーブル内でマッチする値を有する行が存在することを検証する、コントロールテーブルに対するルックアップクエリとして表現することができる。例えば、図７を参照して、以下のクエリが受信されると仮定する。
【０１０７】
【表１４】
2006065846.tif 000016
【０１０８】
＠ＩＤは、その値がランタイムで知られるパラメータである。コントロールテーブルＴＡＢＬＥ＿７１４が、パラメータ＠ＩＤの値に等しいＩＤを有する行を含むならば、上記の実施例のクエリを部分マテリアライズドビューｐｍｖ７００から計算することができる。したがって、ガード述語を以下のように表現することができる（ＳＱＬを使用）。
【０１０９】
ＥＸＩＳＴＳ（ＳＥＬＥＣＴ＊ＦＲＯＭ  ＴＡＢＬＥ＿７１４  ＷＨＥＲＥ  ＩＤ＝＠ＩＤ）
このガード述語は、実行時間テストとして評価される場合、厳密なマッチを必要とする。より詳細には、ガード述語は、＠ＩＤの実際の値がコントロールテーブルＴＡＢＬＥ＿７１４内で発生する場合にのみ、真である。
【０１１０】
もう１つの実施例では、以下に示すように、クエリはＩＮ述語を含むことができる。
【０１１１】
【表１５】
2006065846.tif 000017
【０１１２】
ここでも、コントロールテーブルＴＡＢＬＥ＿７１４が値１、５、８および１２を含む場合、クエリをｐｍｖ７００から計算することができる。よって、ガード述語は以下のようになる（一実施例としてＳＱＬを使用）。
【０１１３】
【表１６】
2006065846.tif 000018
【０１１４】
条件Ｔ．ＳＴＡＴＥ＝‘ＭＤ’はガード述語に含まれず、これは、Ｔ．ＳＴＡＴＥがｐｍｖ７００のコントロール述語において参照されないからであり、例えば、レコードがマテリアライズされるかどうかにかかわらず、そのＳＴＡＴＥ値に依存しない。
【０１１５】
これらの２つのクエリは、同等コントロールテーブルを有する部分マテリアライズドビューから計算することができるクエリの主なタイプを包含し、すなわち、クエリは、コントロール述語によって参照された列を、ランタイムで知られる有限数の値に制約しなければならない。ガード述語は、実行時間テストとして評価される場合、次いで、これらの値がコントロールテーブル内で発生することを検証する。
【０１１６】
範囲コントロールテーブルのためのガード述語
範囲コントロールテーブルを有する部分マテリアライズドビューは、範囲述語を有するクエリをサポートすることができる。図９のコントロールテーブル９１４およびその部分マテリアライズドビュー９００はこのタイプである。範囲コントロールテーブルのためのガード述語を、クエリ内で規定された範囲がコントロールテーブル内で規定された少なくとも１つの範囲内に含まれるかどうかを評価するクエリとして、表現することができる。
【０１１７】
例えば、図９を参照して、以下のクエリを考察する。
【０１１８】
【表１７】
2006065846.tif 000019
【０１１９】
このクエリは１２Ｋから２４Ｋの所得範囲を規定し、コントロールテーブルＴＡＢＬＥ＿９１４内に、クエリ範囲を含む行が存在する場合、部分マテリアライズドビューｐｍｖ９００から計算することができる。よって、ガード述語は以下のように構築される（ＳＱＬを使用）。
【０１２０】
【表１８】
2006065846.tif 000020
【０１２１】
実施例のガード述語は、所望の範囲がコントロールテーブルの単一のレコード内に含まれることを必要とする。しかし、いくつかの場合、コントロールテーブルの複数のレコードが共に所望の範囲を包含することができるかどうかを評価することが適切である場合があることを、理解されたい。同様に、範囲コントロールテーブルを有する部分マテリアライズドビューをまた、同等またはＩＮ制約を規定するクエリのために使用することもでき、これは、このような制約を範囲制約として書き換えることができるからであることを理解されたい。
【０１２２】
同等および範囲制約を有するコントロールテーブルのためのガード述語
図１０に例示したマテリアライズドビューｐｍｖ１０００は、ＳＴＡＴＥにおける同等制約およびＩＮＣＯＭＥにおける範囲制約を規定する、コントロール述語およびコントロールテーブルを有する。ＳＴＡＴＥおよびＩＮＣＯＭＥ列の両方で適切な制限を規定しない限り、クエリをビューｐｍｖ１０００から計算することはできない。例として、以下のクエリを考察する。
【０１２３】
【表１９】
2006065846.tif 000021
【０１２４】
コントロールテーブルＴＡＢＬＥ＿１０１４内に、「ＰＡ」に等しいＳＴＡＴＥ値およびクエリの範囲を包含する範囲を有する行が存在する場合、このクエリを部分マテリアライズドビューｐｍｖ１０００から計算することができる。これに基づいて、以下のガード述語を構築することができる（ＳＱＬによる）。
【０１２５】
【表２０】
2006065846.tif 000022
【０１２６】
図１０を参照すると、コントロールテーブルＴＡＢＬＥ＿１０１４内の第１の行はガード述語を満たし、よって、このクエリをビューｐｍｖ１０００から計算することができる。この実施例は、同等制約および範囲制約を結合するコントロールテーブルの場合のみを考慮するが、類似の推論を、複数のタイプの条件を結合するコントロールテーブルに適用することができることを、理解されたい。
【０１２７】
複数のコントロールテーブル
部分マテリアライズドビューは、複数のコントロールテーブルを有することができる。対応する部分マテリアライズドビューから計算することができる、ガード述語およびクエリのタイプは、コントロールテーブルがコントロール述語によってどのように使用されるかによって決まる。図１２に例示した部分マテリアライズドビューｐｍｖ１２００は、２つのコントロールテーブルを有し、各々が、ＯＲによって接続された別々のコントロール述語において使用される。したがって、このビューを２つの別々の部分マテリアライズドビューとして扱うことができ、一方がコントロールテーブルＴＡＢＬＥ＿１２６０によってコントロールされ、他方がコントロールテーブルＴＡＢＬＥ＿１２６２によってコントロールされる。このように、部分マテリアライズドビュー１２００を、Ｔ．ＡＧＥにおける同等制約を有するクエリのために、また、Ｔ．ＳＴＡＴＥにおける同等制約を有するクエリのために使用することもできる。この実施例のためのガード述語を、同等コントロールテーブルのための前述の方法で構築することができる。この場合、２つのコントロールテーブル１２６０、１２６２は共に同等コントロールテーブルであるが、他のタイプのコントロールテーブルを類似の方法で処理することができることを理解されたい。
【０１２８】
ここで本発明のいくつかの例示的実施形態を説明したが、前述は例示的でしかなく、限定的ではなく、例としてのみ提示されていることは、当業者には明らかになるであろう。多数の修正および他の例示的実施形態は、当業者の範囲内であり、本発明の範囲内に入るとして企図される。具体的には、本明細書で提示した実施例の多数は、方法オペレーションまたはシステム要素の特定の組み合わせを含むが、これらのオペレーションおよびこれらの要素を他の方法で結合して、同じ目的を達成することができることを理解されたい。一実施形態に関連してのみ論じたオペレーション、要素および特徴は、他の実施形態における類似の役割から排除されるように意図されない。また、特許請求の範囲において、「第１」および「第２」など、序数の語を使用してクレーム要素を修飾することは、それだけで、別のクレーム要素に勝るあるクレーム要素のいかなる優先度、優位、または順序も、または、方法のオペレーションが実行される時間的順序も暗示しないが、ある名前を有する１つのクレーム要素を、（序数の語の使用を除いて）同じ名前を有する別の要素と区別して、これらのクレーム要素を区別するためのラベルとしてのみ、使用される。
【０１２９】
独占的所有権または権利が主張される本発明の実施形態は、以下のように定義される。
【図面の簡単な説明】
【０１３０】
【図１】部分マテリアライズドビューの例示的実施形態の実施において使用される、一実施例のコンピュータシステムの概略図である。
【図２】部分マテリアライズドビューの例示的実施形態の実施において使用される、一実施例のデータベースシステムの概略図である。
【図３】図２のデータベースシステムの一実施例のデータ構造およびデータベースの概略図である。
【図４】図３の部分マテリアライズドビューを作成する一実施例の方法を例示する流れ図である。
【図５】一実施形態における、部分マテリアライズドビューを作成するための、ソーステーブルへのクエリ式およびコントロールテーブルの一実施例の適用を例示する図である。
【図６】一実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図７】もう１つの実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図８】さらにもう１つの実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図９】一実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図１０】もう１つの実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図１１】さらにもう１つの実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの一実施例のコントロールテーブルの適用を例示する図である。
【図１２】もう１つの実施形態における、部分マテリアライズドビューを定義するための、図５に例示したソーステーブルへの複数のコントロールテーブルの実施例の適用を例示する図である。
【図１３】一実施形態における、部分マテリアライズドビューのビューマッチングの一実施例の方法を例示する流れ図である。
【図１４】一実施例の部分ビューグラフである。
【図１５】一実施例の部分ビューグラフである。
【図１６】一実施例の部分ビューグラフである。
【図１７】一実施例の部分ビューグラフである。
【図１８】従来技術のビューマッチングの一実施例の方法を例示する流れ図である。
【符号の説明】
【０１３１】
１０２  処理装置
１０４  システムメモリ
１０８  リムーバブルストレージ
１１０  非リムーバブルストレージ
１１２  通信接続
１１４  入力デバイス
１１６  出力デバイス
【図１】
2006065846.tif 000023
【図２】
2006065846.tif 000024
【図３】
2006065846.tif 000025
【図４】
2006065846.tif 000026
【図５】
2006065846.tif 000027
【図６】
2006065846.tif 000028
【図７】
2006065846.tif 000029
【図８】
2006065846.tif 000030
【図９】
2006065846.tif 000031
【図１０】
2006065846.tif 000032
【図１１】
2006065846.tif 000033
【図１２】
2006065846.tif 000034
【図１３】
2006065846.tif 000035
【図１４】
2006065846.tif 000036
【図１５】
2006065846.tif 000037
【図１６】
2006065846.tif 000038
【図１７】
2006065846.tif 000039
【図１８】
2006065846.tif 000040