(57)【要約】  ＵＰＤＡＴＥステートメントのネスト化された拡張を用いて、ネスト化されたテーブル内の集合値化された列および他の複雑に構造化された列を更新するための技術を提供する。この拡張は、テーブルのスカラ値化された列を修正するために使用される（外側のＵＰＤＡＴＥと呼ばれる）ＵＰＤＡＴＥステートメントのシンタックスおよびセマンティクスに類似した方法で、集合値化された列を修正するためのシンタックスおよびセマンティクスを使用する。外側のレベルにおけるテーブルと同じシンタックスおよびセマンティクスの構成を使用することによって、リレーショナルテーブルに対する修正を処理する既存の実施態様は、外側の更新を処理するためのその実施態様の技術を再利用して、集合値化された列も修正することができる。このＵＰＤＡＴＥの拡張によって、オブジェクトモデル内の任意のレベルの深さに埋め込まれているネスト化された集合に対する更新を指定することができる。新しいシンタックスは、データ自体の構造と平行する形で外側のＵＰＤＡＴＥステートメントの内側に埋め込まれ、したがってユーザによるデータの概念モデルに対してより直接的にマップする。ＵＰＤＡＴＥの拡張を実施するための方法は変更記述子を使用し、これは、スカラ値化された変更と集合値化された変更の両方をほぼすべて、変更される集合値化された列に適用できる単一の値に集約するデータ構造である。この技術は、オブジェクトやＸＭＬなど、他の種類の複雑に構造化された列に対する修正用に使用することもできる。変更記述子はセル用の階層的な情報を含み、これによって、単一の演算において様々な細分度のレベルで複数の更新を効率よく適用することができ、ＵＰＤＡＴＥ演算によって影響を受けるインデックスのみを更新することによって、またＵＰＤＡＴＥ演算によって影響を受けたインデックスの行のみを更新することによって、効率のよいインデックスメンテナンスアルゴリズムを実施することができる。
2007509422.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースシステムにおける複雑に構造化されたタイプの列内の値を更新する方法であって、
前記複雑に構造化された列の任意のレベルの階層における値に対する変更を集約するデータ構造を用いて、前記複雑に構造化されたタイプの列内の前記値に対する修正を表すステップと、
前記データベース上のデータ修正ステートメントに応答して前記データ構造を計算して、前記複雑に構造化されたタイプの列内のどの値を前記集約された変更によって更新するかを決定するステップと
を備えたことを特徴とする方法。
【請求項２】
前記複雑に構造化されたタイプの列の前記階層内の異なるレベルで複数のスカラ値を同時に更新するさらなるステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記リレーショナルデータベースシステムの複雑に構造化されたタイプの列内の複雑に構造化されたタイプの値と共にテーブル内のスカラ値を同時に更新するさらなるステップを含むことを特徴とする請求項１に記載の方法。
【請求項４】
ＵＰＤＡＴＥステートメントのＳＥＴ節の内側にＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥステートメントを埋め込むさらなるステップを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記複雑に構造化されたタイプの列の前記階層内の各層に対応する最も外側のＵＰＤＡＴＥステートメントの内側に複数のネスト化されたＳＥＴ節を埋め込むさらなるステップを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記計算するステップは、前記ＵＰＤＡＴＥステートメント内の前記ＳＥＴ節によって様々なネスティングレベルで修正された特定のスカラフィールドによって影響を受けるインデックスのみを更新するステップと、前記ＵＰＤＡＴＥステートメントによって修正される実際の値に対応する前記インデックスの行のみを更新するステップとを含むことを特徴とする請求項４に記載の方法。
【請求項７】
前記集約された変更を前記複雑に構造化されたタイプの列に適用するさらなるステップであって、ハローウィンプロテクションを提供するために前記計算するステップから分離されているステップを含むことを特徴とする請求項１に記載の方法。
【請求項８】
データベース修正ステートメントに応答して、少なくとも１つの複雑に構造化されたタイプの列内の値を保存および更新するためのリレーショナルデータベースシステムにおいて、
データベース修正ステートメントを解析して、前記データベース修正ステートメントによって提示される前記データベースに対する変更の記述を作成するパーサと、
前記データベース修正ステートメントを実施するための実行アルゴリズムを作成するクエリオプティマイザと、
前記実行アルゴリズムを用いて前記データベース修正ステートメントのデータ構造を計算して、複雑に構造化されたタイプの列内のどの値を更新するかを決定するクエリ実行エンジンであって、前記データ構造は、前記複雑に構造化されたタイプの列内の値を、前記複雑に構造化されたタイプの列の任意のレベルの階層における前記値に対する変更を集約したものとして表し、前記クエリ実行エンジンは、更新される前記複雑に構造化されたタイプの列内の前記値に前記変更を適用するクエリ実行エンジンと
を備えたことを特徴とするシステム。
【請求項９】
前記クエリ実行エンジンは、前記複雑に構造化されたタイプの列の前記階層内の異なるレベルで複数のスカラ値を同時に更新することを特徴とする請求項８に記載のシステム。
【請求項１０】
前記クエリ実行エンジンは、前記リレーショナルデータベースシステムの複雑に構造化されたタイプの列内の複雑に構造化されたタイプの値と共にテーブル内のスカラ値を同時に更新することを特徴とする請求項８に記載のシステム。
【請求項１１】
前記パーサは、データベースＵＰＤＡＴＥステートメントのＳＥＴ節を解析することを特徴とする請求項８に記載のシステム。
【請求項１２】
前記パーサは、前記複雑に構造化されたタイプの列の前記階層内の各レベルに対応する最も外側のＵＰＤＡＴＥステートメントの内側の複数のネスト化されたＳＥＴ節内の前記ＵＰＤＡＴＥステートメントを解析することを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記クエリ実行エンジンは、前記ＵＰＤＡＴＥステートメント内の前記ＳＥＴ節によって様々なネスティングレベルで修正された特定のスカラフィールドによって影響を受けるインデックスのみを更新し、前記ＵＰＤＡＴＥステートメントによって修正される前記実際の値に対応する前記インデックスの行のみを更新することを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記クエリ実行エンジンは、ハローウィンプロテクションを提供するために前記データ構造の前記計算から分離されている前記複雑に構造化されたタイプの列に前記集約された変更を適用することを特徴とする請求項８に記載のシステム。
【請求項１５】
リレーショナルデータベースシステムにおける集合値化された列内の値を更新する方法であって、
前記集合値化された列の内側の値に対する変更を集約するデータ構造を用いて、前記集合値化された列内の前記値に対する修正を表すステップと、
前記データベース上のデータ修正ステートメントに応答して前記データ構造を計算して、前記集合値化された列内のどの値を前記集約された変更によって更新するかを決定するステップと
を備えたことを特徴とする方法。
【請求項１６】
前記集合値化された列内の異なるレベルで複数のスカラ値を同時に更新するさらなるステップを含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記リレーショナルデータベースシステムの集合値化された列内の値と共にテーブル内のスカラ値を同時に更新するさらなるステップを含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
データベース修正ステートメントに応答して、少なくとも１つの集合値化された列内の値を保存および更新するためのリレーショナルデータベースシステムにおいて、
データベース修正ステートメントを解析して、前記データベース修正ステートメントによって提示される前記データベースに対する変更の記述を作成するパーサと、
前記データベース修正ステートメントを実施するための実行アルゴリズムを作成するクエリオプティマイザと、
前記実行アルゴリズムを用いて前記データベース修正ステートメントのデータ構造を計算して、集合値化された列内のどの値を更新するかを決定するクエリ実行エンジンであって、前記データ構造は、前記集合値化された列内の値を、前記集合値化された列の内側の前記値に対する変更を集約したものとして表し、前記クエリ実行エンジンは、更新される前記集合値化された列内の前記値に前記変更を適用するクエリ実行エンジンと
を備えたことを特徴とするシステム。
【請求項１９】
前記パーサは、データベースＵＰＤＡＴＥステートメントのＳＥＴ節を解析することを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記パーサは、前記集合値化された列内の各レベルに対応する最も外側のＵＰＤＡＴＥステートメントの内側の複数のネスト化されたＳＥＴ節内の前記ＵＰＤＡＴＥステートメントを解析することを特徴とする請求項１９に記載のシステム。
【請求項２１】
前記クエリ実行エンジンは、前記ＵＰＤＡＴＥステートメント内の前記ＳＥＴ節によって様々なネスティングレベルで修正された特定のスカラフィールドによって影響を受けるインデックスのみを更新し、前記ＵＰＤＡＴＥステートメントによって修正される前記実際の値に対応する前記インデックスの行のみを更新することを特徴とする請求項１８に記載のシステム。
【請求項２２】
前記クエリ実行エンジンは、ハローウィンプロテクションを提供するために前記データ構造の前記計算から分離されている前記集合値化された列に前記集約された変更を適用することを特徴とする請求項１８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００３年１０月２４日に出願された米国出願番号第１０／６９３，３０２号に対する優先権を主張するものであり、その開示の全体を参照により本明細書に組み込む。
【０００２】
本発明はデータベースシステムに関し、より詳細には、（ネスト化されたテーブルや、複雑に構造化されたオブジェクトまたはＸＭＬを保存するテーブルなどの）階層構造を有するテーブルを１つのステップにおいて任意の方法で修正するために、ネスト化されたリレーショナルＳＱＬ言語の拡張を使用し、複雑で部分的な更新を効率よく実行するための（変更記述子や、クエリ最適化技術およびクエリ実行技術の活用などの）メカニズムを提供するためのシステムおよび方法に関する。
【背景技術】
【０００３】
ＳＱＬ照会言語によって、ユーザは、リレーショナルデータモデルを用いて保存されたテーブル形式のデータに対してクエリ（および修正）を行うことができる。リレーショナルデータモデルは、テーブル内の各セル（１つの行の中の１つの列の部分）は単一のスカラ（またはアトミック）値であると指示する。構造化照会言語（ＳＱＬ）は、リレーショナルデータベースとやり取りするために使用される米国規格協会（ＡＮＳＩ）の標準規格である。ＳＱＬステートメントは、リレーショナルデータベースに対してデータの更新やデータの検索などのタスクを実行するために使用される。多くのデータベースシステムがＳＱＬを使用しているが、その多くはまた、通常はそのシステム上でのみ使用される自分自身の独自の拡張をさらに有している。しかし「Ｓｅｌｅｃｔ」、「Ｉｎｓｅｒｔ」、「Ｕｐｄａｔｅ」、「Ｄｅｌｅｔｅ」、「Ｃｒｅａｔｅ」、および「Ｄｒｏｐ」などの標準的なＳＱＬコマンドは、リレーショナルデータベースに対して実行したいと望む多くのことを達成するために使用することができ、データベース分野の技術者にはよく知られていると思われる。
【０００４】
リレーショナルデータモデルに対する最近の拡張によって、単一のスカラ値を１つのセルに保存するという制約が緩和され、テーブル内の各セルは値の集合そのものになることができる。この集合の内側の各要素は集合そのものを含むことができ、すなわち集合は任意のレベルの深さにネスト化することができる。複数の値を備えたこのような集合値化されたセルを有するテーブルを総称して、ネスト化されたテーブルと呼ぶことができる。この発展によって、このようなネスト化されたテーブル内の集合値を修正するにはＳＱＬ言語をどのように拡張すればよいかという問題が提示されている。例えば任意のネスティングレベルでスカラ値を同時に変更できるように集合値化されたセルを修正するための技術が求められている。
【０００５】
ネスト化されたテーブルの現在の実施態様および関連する標準は、ネスト化されたテーブル内の集合に対してクエリおよび更新を行うための拡張を提供する。しかし従来のネスト化されたテーブルシステムでは、ネスト化されたスカラ値は、集合値化されたセル内のスカラ値の各レベルに関して一度に１レベル更新されるため、複数の更新を行うには、複数のレベルのセルにおいて保存された値を変更する必要がある。例えば、米国特許第６５６４２０３号明細書は、ネスト化された集合の列内における１つまたは複数のネスト化された集合内に論理的に常駐するデータを更新するための技術について記載している。ネスト化された集合の１つまたは複数上で動作するデータ操作言語（ＤＭＬ）ステートメントが検出され、ＤＭＬステートメントによってターゲットとされるネスト化された集合内の各要素に対してトリガコードが１回実行される。トリガコードは親値への参照を含むことができるが、トリガは、データベーステーブルまたはテーブルビューの行が更新、挿入、または削除されたときに起動するように設計されている。すなわち、一度に１つの行しか更新されない。このプロセスは遅々として冗長であり、指定した任意のネスト化されたレベルで更新を行うことができない。
【０００６】
米国特許第６４９３７０８号明細書は、階層のレベルを識別するための様々なＬＥＶＥＬステートメントを含むＣＲＥＡＴＥ  ＤＩＭＥＮＳＩＯＮステートメントを使用して、階層的な次元、その様々なレベル、およびレベル間の関係を定義するためのメカニズムを開示している。次元テーブルは、細分度の高いレベルから細分度の低いレベルへとレベルが移行するという前提で、次元の様々なレベルにおける細分度の間の階層的な関係を埋め込む。しかし、同じデータの細分度の高い／細分度の低い表示として必ずしも相互に関連付けられていないそれぞれの行における値に関してネスト化されたテーブルを更新するための一般的なメカニズムについては教示していない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ＳＱＬ２００３の標準は、アレイおよびマルチセットという２種類の集合を指定する。テーブルの列は、これら２つのタイプの一方とすることができる。アレイおよびマルチセットを実装する既存のデータベースシステムでは、標準は、集合値化された列の全体を修正するためのシンタックスおよびセマンティクスを指定し、そこではまったく新しい値が古い値に取って代わる。従来技術は、集合値化された列を増分的に修正するための方法を何ら指定していない。大きな集合のわずかな部分を修正するだけでよい場合に、大きな集合全体を新しい集合と取り替えることは非常に高くつくおそれがあるため、そうした集合に対して増分的な修正を実行できるようにする技術が求められている。本発明は、当技術分野におけるこれらのニーズに対処するものである。
【課題を解決するための手段】
【０００８】
本発明は、ＳＱＬのＵＰＤＡＴＥステートメントのネスト化された拡張を使用して、ネスト化されたテーブル内の集合値化された列を更新する新たな方法を提供することによって、当技術分野における前述のニーズを満たす。提案する拡張は、テーブルのスカラ値化された列を修正するために使用される（外側のＵＰＤＡＴＥと呼ばれる）従来のＵＰＤＡＴＥステートメントのシンタックスおよびセマンティクスに類似した、集合値化された列を修正するためのシンタックスおよびセマンティクスを使用する。外側のレベルにおけるテーブルと同じシンタックスおよびセマンティクスの構成を使用することによって、リレーショナルテーブルに対する修正を処理する既存の実施態様は、更新を処理するためのその実施態様の技術を再利用して、集合値化された列も修正することができるため、これは望ましい。また本発明によるこうしたＵＰＤＡＴＥの拡張によって、階層内の任意のレベルの深さに埋め込まれているネスト化された集合に対する更新を指定することができる。
【０００９】
新しいシンタックスは、データ自体の構造と平行する形で外側のＵＰＤＡＴＥステートメントの内側に埋め込まれる。したがってシンタックスはユーザによるデータの概念モデルに対してより直接的にマップするため、より理解しやすい。提案しているＵＰＤＡＴＥステートメントに対する拡張によって、同じステートメントを使用して、集合値化された列と他のスカラ値化された列の双方に対して同時に更新を行うことができ、これによって修正を効率よく処理することができる。
【００１０】
本発明による変更記述子を用いてＵＰＤＡＴＥステートメントを実施するリレーショナルデータベースシステムは、データベース修正（クエリ）ステートメントを解析して、ＵＰＤＡＴＥステートメントによって指定されるようにテーブルに対する変更の論理的な記述を作成するパーサと、修正を実行する実行アルゴリズムを作成するクエリオプティマイザと、最後に実行アルゴリズムを実施するクエリ実行エンジンとを含む。実行アルゴリズムは、次のステップから構成される。すなわち（ｉ）更新する必要のある複雑に構造化されたタイプの列（例えばネスト化されたテーブル）内の行を決定し、更新される複雑に構造化されたタイプの列内における列用の新たな値を計算するステップと、（ｉｉ）計算された新たな値を複雑に構造化されたタイプの列に適用するステップである。集合値化された列に対する修正用として、ステップ（ｉｉ）は、集合値化された列内の値に対する変更の集合と、複雑に構造化されたタイプの列の階層内で更新される値の場所とを表すデータ構造（変更記述子）を使用する。ステップ（ｉｉ）では、クエリ実行エンジンは、スカラ値化された列用の単純なスカラ更新を使用することに加えて、変更記述子を読み取り、それによって記載されている変更を集合値化された列に適用する。
【００１１】
ＵＰＤＡＴＥの拡張を実施するための方法は、変更記述子と呼ばれる技術を使用し、これは、スカラ値化された変更と集合値化された変更の両方をすべて、集合値化された列内で行われる変更の完全な記述を提供する単一の値に集約するデータ構造である。変更記述子は、何を変更すべきか、そしてどこを変更すべきかをクエリ実行エンジンに指示し、従来のスカラではあるが、指定された階層的なレベルでスカラを修正するのに必要な階層的な情報を有するスカラとしてパッケージされている。したがって変更記述子によって、単一の操作で様々な細分度のレベルにおける複数の更新を効率よく適用することができる。また変更記述子は、ＵＰＤＡＴＥ演算内のＳＥＴ節によって様々なネスティングレベルで修正された特定のスカラフィールドによって影響を受けるインデックスのみを更新することによって、またＵＰＤＡＴＥ演算によって修正された実際の要素に対応するインデックスの行のみを更新することによって、効率のよいインデックスメンテナンスアルゴリズムを実施することもできる。また変更記述子は、変更の計算をその適用自体から分離するという（ハローウィンプロテクション（Halloween Protection）として知られている）利点、すなわち更新ステートメントが自分自身に副作用を及ぼすことを防止するという利点も有する。これは、変更の計算と適用が強力に分離されていない場合に発生する可能性がある。それは、第２のフェーズによって生じる可能性のあるデータに対する中間時点での変更が目に入ることによって、第１のフェーズが不適切な影響を受ける可能性があるためである。
【００１２】
したがって本発明によって、（ネスト化されたテーブルや、複雑に構造化されたオブジェクトまたはＸＭＬを保存するテーブルなどの）階層構造を有するテーブルを１つのステップにおいて任意の方法で修正するために、ネスト化されたリレーショナルＳＱＬ言語の拡張を使用することができ、複雑で部分的な更新を効率よく実行するための（変更記述子や、クエリ最適化技術およびクエリ実行技術の活用などの）メカニズムが提供される。また本発明のＳＱＬ言語の拡張は、本発明を実施するように適合されたデータベース内で複雑に構造化されたタイプのリレーショナルデータまたはＸＭＬデータに対して管理およびクエリを行うための豊かで効率のよいサポートも可能にする。
【００１３】
前述の概要、ならびに後述の本発明に関する詳細な説明は、添付の図面と併せて読めば、よりよく理解することができる。本発明を説明する目的で、図面には本発明の様々な態様の典型的な実施形態が含まれている。しかし本発明は、開示されている特定の方法および手段に限定されるものではないことを当業者なら理解できるであろう。
【発明を実施するための最良の形態】
【００１４】
本発明の主題は、法的要件（３５Ｕ．Ｓ．Ｃ．１、以下参照）を満たすために具体的に説明されている。しかしこの説明自体は、本発明の範囲を限定することを意図するものではない。むしろ特許請求されている主題は、この特許の有効期間中に現在または将来における他の技術と共に使用できる、本明細書に記載したものと類似した異なるステップまたは要素を含む他の方法で具体化できる可能性もあることを発明者は考慮している。さらに「ステップ」という用語は、本明細書では、採用される方法の異なる側面を示すために使用される場合があるが、この用語は、各ステップの特定の順序が必要であると明示されない限り、本明細書に開示される様々なステップ間における何らかの特定の順序を意味するものと解釈すべきではない。
【００１５】
本発明は、ＭＹＳＱＬなどのネスト化されたテーブルをサポートする任意の拡張されたリレーショナルデータベースシステムにとって有用であることをデータベースおよびメモリ管理分野の技術者なら理解するであろう。したがって図１〜６を参照しながら本明細書で説明される本発明は、そうしたすべてのシステムに適用できることを理解されたい。
【００１６】
定義：
複雑に構造化されたタイプ：複雑に構造化されたタイプは、フィールド、プロパティ、およびメソッドのセットから構成される。各フィールドまたはプロパティは、次のうちの１つとすることができる。  
−  スカラタイプ
−  複雑に構造化されたタイプ自体
−  各要素が、複雑に構造化されたタイプであるマルチセット。
【００１７】
複雑に構造化されたタイプは、非再帰的なものに限定される。すなわち複雑に構造化されたタイプは、その同じタイプのフィールドのプロパティを含むことはできない。本明細書で定義される複雑に構造化されたタイプは、ネスト化されたテーブル、集合値化されたテーブル、および他の多次元データ構造を含む。
【００１８】
マルチセット：マルチセットは集合のタイプである。それは、可能性のある複製を有する命令されていないオブジェクトのセットである。マルチセットは、自分が含む要素のタイプを定義するという意味で強力にタイプ分けされている。本明細書では、タイプＴの要素のマルチセットを表すためにＭｕｌｔｉｓｅｔ＜Ｔ＞という表記を使用する。
【００１９】
複雑に構造化されたタイプとマルチセット値化されたタイプの両方で、任意の深さのレベルのネスティングを有することができる。
【００２０】
複雑に構造化されたタイプは、次のシンタックスを用いて正規に表すことができる。この例ではＡｄｄｒｅｓｓＴｙｐｅは、ＰｈｏｎｅＮｏｓと呼ばれるフィールドを有し、これは集合値化され、Ｍｕｌｔｉｓｅｔ＜ＰｈｏｎｅＮｏＴｙｐｅ＞と入力される。
【００２１】
【表１】
2007509422.tif 000003
【００２２】
ここでは、ＰｈｏｎｅＮｏＴｙｐｅは次のように定義される。
【００２３】
【表２】
2007509422.tif 000004
【００２４】
次のテーブルは、上で定義したタイプを使用する。最初にＡｄｄｒｅｓｓＴｙｐｅのＭｕｌｔｉｓｅｔ用にＭＵＬＴＩＳＥＴタイプが作成される。次いでこのタイプは、Ｅｍｐｌｏｙｅｅｓテーブルの列を定義するために使用される。
【００２５】
【表３】
2007509422.tif 000005
【００２６】
本発明の実施形態：
本発明は、複雑な構造を有するテーブル（すなわち、構造化された列とマルチセット値化された列の両方を含むテーブル）用のデータ修正機能を提供するための技術を提供する。本発明の好ましい実施形態では、これらの機能は、リレーショナルデータベース内に保存されたデータを更新するためのＳＱＬ  Ｓｅｒｖｅｒエンジンの一部である。例えば本発明は、しばしば１ＮＦ（または「フラット」な）リレーショナルモデルよりも複雑なデータモデルを有するアプリケーションと共に効率よく使用される。データのモデルとなるデータタイプは、複雑な内部構造を有するか、および／または値のマルチセットを含む。こうしたアプリケーションは通常、フラットなテーブルのセットを用いてこのデータをモデル化する。複雑に構造化されたタイプおよびマルチセットは、論理的なスキーマが元のデータモデルにより自然にマップするようなデータをモデル化する方法を提供する。本発明は、こうした複雑に構造化されたタイプの内側に埋め込まれているマルチセット内のリレーショナルデータを更新するために使用することができる。以降でより詳細に説明するように、本発明は、フラットなテーブル上の最も外側のレベルでＳＱＬが提供する豊かさおよび表現力のレベルでマルチセットデータを修正する機能も含む。
【００２７】
本発明によれば、ＳＱＬステートメントは、テーブルの集合値化された列（マルチセット）に対する修正をサポートするように強化されている。本発明によるテーブルの集合値化された列に対する修正をサポートするように強化されているＳＱＬステートメントは、ＵＰＤＡＴＥステートメントである。従来のＵＰＤＡＴＥステートメントの一般的なフォーマットは次のようなものであり、＜＞によって囲まれているシンタックス要素は非終端であり、記述内において後で展開される。
【００２８】
【表４】
2007509422.tif 000006
【００２９】
ここでは＜ｔａｒｇｅｔ−ｔａｂｌｅ＞は、修正されているテーブルであり、＜ｓｃａｌａｒ−ｃｏｌｕｍｎ−ｍｏｄｉｆｃａｔｉｏｎ＞は、スカラ値化された列の修正を指定し、次の形式をとる。
【００３０】
【表５】
2007509422.tif 000007
【００３１】
ここでは＜ｔａｒｇｅｔ−ｃｏｌｕｍｎ＞は、修正されている列の名前であり、＜ｖａｌｕｅ−ｅｘｐｒｅｓｓｉｏｎ＞は、＜ｔａｒｇｅｔ−ｃｏｌｕｍｎ＞の修正後の値となるべき新たな値を提供するスカラ値化された式である。
【００３２】
提案している本発明によるＵＰＤＡＴＥステートメントの拡張は、集合値化された列を修正するために使用できるＳＥＴ節内の別の種類の修正（＜ｃｏｌｌｅｃｔｉｏｎ−ｃｏｌｕｍｎ−ｍｏｄｉｆｉｃａｔｉｏｎ＞）を導入する。＜ｃｏｌｌｅｃｔｉｏｎ−ｃｏｌｕｍｎ−ｍｏｄｉｆｉｃａｔｉｏｎ＞は、次の形式の１つである。
【００３３】
【表６】
2007509422.tif 000008
【００３４】
または
【００３５】
【表７】
2007509422.tif 000009
【００３６】
または
【００３７】
【表８】
2007509422.tif 000010
【００３８】
すなわち＜ｃｏｌｌｅｃｔｉｏｎ−ｃｏｌｕｍｎ−ｍｏｄｉｆｉｃａｔｉｏｎ＞は、外側のテーブルに対してＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥに類似したＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥシンタックスを使用する。内側のＵＰＤＡＴＥのＳＥＴ節は、外側の集合値化された列の内側にある集合値化された列に対する修正を指定することができ、したがって同一の再帰的にネスト化された統語的な手法を用いて任意のレベルのネスティングで集合値化された列を修正することができる。本質的に、集合値化された列上の修正は、外側のＵＰＤＡＴＥステートメントのＳＥＴ節内にＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥを埋め込むことによって、外側のテーブル上のＵＰＤＡＴＥとしてモデル化される。
【００３９】
前述のように、スカラ値化された変更と集合値化された変更の両方の変更をすべて、複雑に構造化された列、オブジェクト値化された列、または集合値化された列において行われる変更の完全な記述を提供する単一の値に集約する本発明によるデータ構造を本明細書では「変更記述子」と呼ぶ。変更記述子は、複雑に構造化されたタイプの階層内で何を変更すべきか、そしてどこを変更すべきかをＵＰＤＡＴＥ命令に指示し、指定された階層的なレベルでＵＰＤＡＴＥ命令がスカラを更新できるように従来のスカラとしてパッケージされている。変更記述子は、ＵＰＤＡＴＥ演算内のＳＥＴ節によって影響を受けるスカラフィールドまたは集合値化されたフィールドによって影響を受けるインデックスのみを更新することによって、またＵＰＤＡＴＥ演算によって修正された集合の実際の要素に対応するインデックスの行のみを更新することによって、効率のよいインデックスメンテナンスアルゴリズムを実施することができる。したがって本発明は変更記述子を使用して、スカラではなく階層構造を有するテーブルの列に対して複雑で部分的な更新を実施する。
【００４０】
ＦｉｒｓｔＮａｍｅ、ＬａｓｔＮａｍｅおよびＥｍｐｌｏｙｅｅＩＤ、Ｓａｌａｒｙというスカラ値化された列と、住所のセットを保存するＡｄｄｒｅｓｓｅｓという集合値化された列とを有するＥｍｐｌｏｙｅｅｓテーブルに対する更新を参照しながら、変更記述子の実施態様の例を以降に示す。集合値化された列内の各住所は、Ｓｔｒｅｅｔ、Ｃｉｔｙ、Ｓｔａｔｅ、ＺｉｐＣｏｄｅというスカラ値化された列と、ＰｈｏｎｅＮｏｓという集合値化された列とを有する。例えば、
【００４１】
【表９】
2007509422.tif 000011
【００４２】
従来のＵＰＤＡＴＥステートメントのシンタックスでは、テーブルの列に新たな値を割り当てることによって、列を全体として修正することしかできない。例えばテーブル「Ｅｍｐｌｏｙｅｅｓ」内の従業員１２３４および１２３５が１０％の昇給を受ける場合、この演算は、次のような従来のシンタックスを用いて実施することができる。
【００４３】
【表１０】
2007509422.tif 000012
【００４４】
こうしたＵＰＤＡＴＥは、２つのフェーズを用いて処理される。第１のフェーズでは、変更される行が列挙され、修正される列用の新たな値が計算される。このプロセスでは、実行される変更を表すデータのストリームが作成され、これを本明細書ではデルタストリームと呼ぶ。第２のフェーズでは、列はこのデルタストリームごとに修正される。
【００４５】
一方、本発明によれば、ＵＰＤＡＴＥステートメントは、２つのフェーズを使用する同じメカニズムの変形形態を用いて、複雑に構造化され集合値化された列の一部を修正する。本発明によれば、第１のフェーズでは、デルタストリームは、集合値化された列に対するすべての変更を集約する新たなデータ構造を使用する。図１に示されているように、更新の第１のフェーズは、クエリ内の述部を満たす行を列挙し、そのそれぞれに対するＳａｌａｒｙ列の新たな値を計算することによって実施される。これによって、更新用のデルタストリームが作成される。第２のフェーズは、その前に集約された変更を実行するために、デルタストリームをテーブル自体に適用するステップを含む。
【００４６】
本明細書に記載されているように、変更記述子の技術は、前述のデルタストリームの概念を拡張して、複雑に構造化された列または集合値化された列に対して全体的な変更ではなく細分化された変更を実施するための方法である。ネスト化された更新の一部として集合値化された列に適用される変更のセットは、それ自体デルタストリームとみなすことができる。このデルタストリームは、テーブルに対する変更を表す最上部のデルタストリームの内側でネスト化される。集合値化された列の内側に含まれるやはり集合値化された列に対する変更は、さらにネスト化されたデルタストリームと共に表すことができる。
【００４７】
変更記述子は、ネスト化されたデルタストリームのコンパクトなスカラの表現である。それをスカラ値として表すことによって、最上部のテーブルのレベルのデルタストリームを作成している間に、通常のテーブルの列の他の新たな値と共にそれをシームレスに集約することができる。これによって、スカラの更新と複数のレベルでネスト化された更新とが、同じステートメント内で混在することができる。
【００４８】
更新の第２のフェーズの実施態様では、変更記述子が、集合値化された列の新たな値をすべて含むのではなく、適用される細分化された変更のセットのみを含むことが理解されている。この実施態様は、集合値化された列のストレージフォーマットにも留意し、変更記述子の内側に含まれる情報を物理的な演算に変換することができる。したがって変更記述子のフォーマットはかなり柔軟であり、過度に実施態様に依存することなく、集合値化された列に加えて、ＸＭＬ、オブジェクトタイプなど、様々な他の種類の複雑な構造と共に使用することができる。
【００４９】
図２〜４は、ネスト化された更新ステートメントの３つの例と、変更記述子の内容およびその適用効果の概要を示す対応する図とを示している。第１のステートメント（図２）は、１０％の昇給およびワシントン州における住所用のＺｉｐＣｏｄｅの更新という、２人の従業員に対するレコードの変更を同時に行う。
【００５０】
【表１１】
2007509422.tif 000013
【００５１】
第２のステートメント（図３）は類似のものだが、更新される住所の内側に含まれる電話番号のいくつかの内側にあるＡｒｅａＣｏｄｅフィールドも更新する。これは、同一のステートメント内における３つのレベルの階層（Ｓａｌａｒｙがレベル１、Ｚｉｐｃｏｄｅがレベル２、ＡｒｅａＣｏｄｅがレベル３）でスカラ値を修正する機能を示している。
【００５２】
【表１２】
2007509422.tif 000014
【００５３】
第３の例（図４）では、昇給と併せて、２人の従業員のシアトルの住所が削除されている。
【００５４】
【表１３】
2007509422.tif 000015
【００５５】
変更記述子のコードの実施態様
本発明による変更記述子を実施するためのコードは、変更記述子を作成するように、そして変更記述子を使用するように動作する。変更記述子は階層内で最初から作成され、変更記述子を受け取る演算子は、詳細に前述したシンタックスに従って変更記述子を分解する。このシンタックスは、階層的なネスト化されたテーブル構造内における更新の場所を指定し、複数の値として保存されたデータの階層的なレコードを維持する。変更記述子は、場所に関する情報ならびにスカラ情報を具体化するため、１つのセル内の階層的なデータは、前述の例のようにクエリ実行アルゴリズム内の単一のステップを用いて更新することができる。
【００５６】
図５および６は、前述の図２〜４の例における本発明の変更記述子の実施態様を示している。図５は、従来のＳＱＬ  Ｓｅｒｖｅｒシステムにおける従来のＵＰＤＡＴＥ命令を用いたセルの通常の更新を解析するステップ、最適化するステップ、および実行するステップを示している。図６は、前述のシンタックスによる変更記述子を計算するためにクエリ実行プロセスが修正される本発明のネスト化された更新のケースを示している。図示されているように、リレーショナルデータベースシステムは、受け取ったＳＱＬステートメントを解析して、ユーザがデータベースによって実行したいこと（例えばデータの挿入、更新、または削除）の論理的な記述を作成するＳＱＬパーサと、当技術分野で知られている技術を用いて実行アルゴリズムを作成するクエリオプティマイザとを含む。本発明によれば、図５の従来のクエリの実行は、変更記述子内に記載されているネスト化されたテーブル内の各変更を行うために変更記述子を計算するステップをさらに含むように修正されている。さらに本発明によるクエリ実行エンジンは、変更記述子を読み取り、変更記述子によって記述されている変更をテーブルに適用するように強化されている。図６の例では、給与に加えてＡｄｄｒｅｓｓｅｓが更新されている。変更は集約されると、本発明のＳＱＬ  Ｓｅｒｖｅｒシステムに関連付けられているデータベース（図示せず）内のＥｍｐｌｏｙｅｅｓテーブルに適用される。
【００５７】
本発明の変更記述子は、ＵＰＤＡＴＥ演算内のＳＥＴ節によって様々なネスティングレベルで修正された特定のスカラフィールドによって影響を受けるインデックスのみを更新することによって、またＵＰＤＡＴＥ演算によって修正された実際の要素に対応するインデックスの行のみを更新することによって、効率のよいインデックスメンテナンスアルゴリズムを実施できることを当業者なら図６から理解するであろう。また変更記述子は、変更の計算をその適用から分離するという（ハローウィンプロテクションとして知られている）利点、すなわち更新ステートメントが自分自身に副作用を及ぼすことを防止するという利点も有する。
【００５８】
これは、変更の計算と適用が２つの別々のステップに強力に分離されていない場合に発生する可能性がある。それは、第２のフェーズによって生じる可能性のあるデータに対する中間時点での変更が目に入ることによって、第１のフェーズが不適切な影響を受ける可能性があるためである。
【００５９】
本発明は、大きなデータタイプをデータベース管理システム内のユーザ定義型のフィールドとして保存する上で特に有利であることも当業者なら理解するであろう。本発明の広範な概念から逸脱することなく前述の実施形態に変更を実施できることを理解することができる。例えば、ここまで本発明の実施形態についてＭｉｃｒｏｓｏｆｔのＳＱＬ  ＳＥＲＶＥＲデータベース管理システムというコンテキストで説明したが、本発明はＳＱＬのＵＰＤＡＴＥステートメントの使用をサポートする任意のデータベース管理システム（例えばオブジェクト指向データベース、ＸＭＬデータベースなど）において具体化できることを理解することができる。さらに本発明の特定の態様について、ＳＱＬ  Ｓｅｒｖｅｒなどのリレーショナルデータベースシステムのコンテキストにおいて具体化されるものとして説明したが、本発明のそれらの態様は、その環境における実施態様に必ずしも限定されるものではないことを理解することができる。したがって本発明は、開示された特定の実施形態に限定されるものではなく、添付の特許請求の範囲によって定義される本発明の趣旨および範囲内に収まるすべての修正を包含することを意図していることを理解することができる。
【図面の簡単な説明】
【００６０】
【図１】クエリ内の述部を満たす行を列挙し、各行に対するＳａｌａｒｙ列の新たな値を計算することによって実施される、Ｓａｌａｒｙスカラに関するネスト化されたテーブルの更新を示す図である。
【図２】変更記述子の内容およびその適用効果の概要を示す図を含む、本発明によるネスト化されたＵＰＤＡＴＥステートメントの例を示す図である。
【図３】変更記述子の内容およびその適用効果の概要を示す図を含む、本発明によるネスト化されたＵＰＤＡＴＥステートメントの例を示す図である。
【図４】変更記述子の内容およびその適用効果の概要を示す図を含む、本発明によるネスト化されたＵＰＤＡＴＥステートメントの例を示す図である。
【図５】従来のＳＱＬ  Ｓｅｒｖｅｒシステムにおける従来のＵＰＤＡＴＥ命令を使用したテーブルの通常の更新を解析するステップ、最適化するステップ、および実行するステップを示す図である。
【図６】本発明による変更記述子を計算するためにクエリ実行プロセスが修正される本発明のネスト化された更新のケースを示す図である。
【図１】
2007509422.tif 000016
【図２】
2007509422.tif 000017
【図３】
2007509422.tif 000018
【図４】
2007509422.tif 000019
【図５】
2007509422.tif 000020
【図６】
2007509422.tif 000021
【国際調査報告】
2007509422.tif 000022
2007509422.tif 000023