関係データベースシステムを制御するための方法
関係データベースシステムを制御するための方法であって、キーワードからなるクエリステートメントが解析され、ここで、RTNが独立したRTNビルディングブロックから形成され、ここで各RTNビルディングブロックは、少なくとも一つの決定経路上に少なくとも一つの決定ポジションを有する他のRTNビルディングブロックの内部の有向決定グラフとは独立して定義される内部の有向決定グラフを有しており、選択ステップにおいてキーワードを用いて全てのRTNビルディングブロックの内部決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、関係データベース(リレーショナルデータベース)システムを制御するための方法に関し、キーワードからなるクエリステートメントが再帰遷移ネットワーク(recursive transition network)(RTN)を適用することによって最初に解析され、該再帰遷移ネットワークでは、キーワードまたはキーワードのグループが、該ステートメントによって与えられる順序で処理に関連するプロパティ(特性)を割り当てられ、その後に続いて、制御コマンドへの変換およびオプションでの最適化が行われる。
【0002】
本発明はさらに、関連する関係データベースシステム、該関係データベースシステム用の制御情報を含む関連するデータキャリアまたはキャリア信号、ならびに、前述の方法を実行するための関連するコンピュータプログラムおよびコンピュータプログラム製品に関する。
【背景技術】
【0003】
関係データベースシステムは、大部分がSQLに基づいており、該SQLは、その高い伝搬レベルおよび絶え間ない進歩にも関わらず、より複雑なクエリを処理する場合にクエリステートメントを定式化するのに難があり、また、文法的に自由度が制限されていることから、不必要に複雑な問題記述およびその結果として最適でないアクセスコードが生じ、それに伴ってストレージ集約的、ハードディスクアクセス集約的およびプロセッサ集約的な処理が生じる。
【0004】
SQLは、セット処理(set-processing)クエリ言語であり、各ステートメントおよびサブステートメントのそれぞれについての自由に定義可能な入力量に、各ステートメントおよびサブステートメントのそれぞれに対するある固定された順序で、予め定められたセット処理関数を適用する。
【0005】
SQLの適用におけるこの相対的な制限は、基礎となっているRTN(再帰遷移ネットワーク)の論理から生じており、該RTNの論理の処理は、与えられる決定グラフ(decision graph)に沿って行なわれており、該与えられる決定グラフにより、各キーワードの後のキーワードの選択の制限が可能となると同時に、キーワードの順序が固定または大部分固定され、かつ、予め定められた決定ポジション(decision position)において決定グラフ全体が再帰的に使いやすくなる。この与えられる順序により、ステートメントの処理は、決定グラフ全体の、自己ネスト(self-nested)および/または自己連結した(self-concatenated)全実行のみによって記述されることができ、それにより、特にSQL、OQLなどを用いる場合、定義された処理ブロックの処理は、決定グラフによって定められた順序によって可能であるが、一方で、順序が自由に選択可能かつ繰り返し可能である新たな処理ブロックを導入することは不可能である。
【0006】
上述した本来的に有効であるRTNの制限を有するSQLは、チューリング完全であるように設計されてきたとはいえ、実際には、相当な数のクエリが専門家にとっても実行が難しく、それゆえ、理論的に可能な処理時間と比べて長い処理時間を招くことが多く、SQLのRTNは、定式化およびクエリステートメントの使用における自由度を許容していないため、理論的に可能な処理時間を達成することができない。
【発明の概要】
【発明が解決しようとする課題】
【0007】
従って、本発明の目的は、クエリ言語において種々の困難のレベルにある事実の簡単かつ簡明な記述、および、改善されたアクセスプランの確立を可能とし、その結果として、クエリ結果の計算および実行をそれぞれはるかに高速に行なうことができる、上述したような種類の方法を提示することである。
【0008】
本発明のさらなる目的は、ユーザーおよびサードパーティーにとっての理解および明確さを増し、かつ、例えばある問題から開始して更なる類似の問題が与えられる場合に、現存のステートメントの修正または調整を容易に達成することを可能とする方法を提示することである。
【0009】
容易な適用性を確実にするために、本発明の方法はまた、グラフィカルインターフェースで表示するのを容易にすべきである。
【0010】
当該方法の基礎であるクエリ言語を適用するための新たな処理関数の定義およびアップグレードのそれぞれは、容易に行えるようにすべきである。
【課題を解決するための手段】
【0011】
これは、本発明によって、次のように達成される。
独立したRTNビルディングブロック(複数)からRTNを形成し、各RTNビルディングブロックは、内部の有向決定グラフを持つものであり、該グラフは、他のRTNビルディングブロックの内部の有向決定グラフ(inner, directed decision graph)とは独立して定義され、少なくとも一つの決定経路(decision path)上に少なくとも一つの決定ポジションを有するものであり、
選択ステップにおけるキーワードを用いて、全てのRTNビルディングブロックの内部決定グラフを実行し、個々の経路との一致(match)が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路をたどり(following)、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
かつ、全てのキーワードでの選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランを生成することによって達成され、
また、少なくともコンピュータシステムを有する関係データベースシステムによって達成され、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを有し、前述の本発明の方法に従って動作するようにプログラムに基づくように構成される。
【0012】
このようにして、SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、UNIONなどの予め定められた処理領域および処理順序を有するSQLやOQLなどのクエリ言語において、これまでの高い構造的な度合いを適用することなく済ませることができる。デカルト積がクエリのFROM部分で形成され、デカルト積の特定の行がWHERE部分で除かれ、特定のデータフィールドがGROUP BY部分で結合され、特定の行がHAVING部分でグループ計算の結果を用いることによって除かれ、ソートがORDER BYによって行われ、かつ、セットがUNIONまたは、セットを結び付けるその他の演算で結合される、SQLにおいて適用されるこのモデルによって、必要とされるチューリング完全が達成され得るため、データに関連する全ての解決可能な問題を理論的には定式化することができるが、それにも関わらず、複雑性が高いため、中等度に困難なタスクから始めて困難なタスクまで、ユーザーの能力に依存して、現実にはうまくいかない。加えて、あり得る全てのクエリのうちの大部分は専門家によって定式化され得るが、それらは各々の問題によって、複雑なやり方でのみ、与えられた処理領域に組み込まれ得る。これは、例えばSQLにおいて、構造および順序が予め定められていることにより、他の方法で行なうことができないためである。処理領域のセットが小さいためにセット処理の直接的な方法を予め定めることが多くの場合において不可能であるため、最悪の方法の多くを回避するのはこの目的のために意図されたオプティマイザー次第であり、個々に適用される記述が最良の方法を決定する。理論的に可能な最良の方法と比較すると、これは、それとは大きく異なるものであり得る。
【0013】
本発明のさらなる実施形態は、添付の特許請求の範囲において与えられる。以下において、図に示した実施形態によって本発明を詳細に説明する。
【図面の簡単な説明】
【0014】
【図1】図1は、先行技術のSQL−RTNの概略的な表現である。
【図2】図2は、本発明の方法の一つの実施形態のための基礎としての役目を果たすRTNビルディングブロックの概略的な表現である。
【図3】図3は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図4】図4は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図5】図5は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図6】図6は、本発明の方法の更なる実施形態のための基礎としての役目を果たすRTNビルディングブロックの概略的な表現である。
【図7】図7は、本発明の方法の一つの実施形態によるRTNビルディングブロックのネスティングの概略的な表現である。
【図8】図8は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図9】図9は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図10】図10は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図11】図11は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図12】図12は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図13】図13は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図14】図14は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図15】図15は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図16】図16は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図17】図17は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【発明を実施するための形態】
【0015】
2つの非常に単純な例が、これを説明するのに役に立つだろう。
表(テーブル)“会社(COMPANIES)”を与え、該表は、“会社_名”および“都市”のフィールドを少なくとも含んでいる。
【0016】
例1
第1の問題:100より多い会社を有する都市からの全ての会社
【0017】
SQLでの一つの可能な記述(先行技術):
SELECT 会社.*
FROM 会社, (SELECT 会社.都市
FROM 会社
GROUP BY 会社.都市
HAVING (count(*)>100)
) AS 会社_都市_more_than_100
WHERE (会社.都市=会社_都市_more_than_100.都市)
【0018】
会社のセットを受け取り、都市に従って結合し、そして100より多い会社を有する都市のみを記憶する。このセットは、会社のセットとデカルト(カルテシアン)・リンク(Cartesian linkage)を持っており、そして、そのフィールド「都市」を100より多い会社を有する都市のセットにおいても見つけることができる会社のみが受け取られる。
欠点:都市のセットを格納しなければならず、また、会社のセットを2度実行し、都市と1度比較しなければならない。
【0019】
本発明の方法による、RTNビルディングブロックにおける一つの可能な記述:
SELECT 会社. *
WHERE (会社.都市.WHERE([会社.count]>100))
【0020】
会社のセットを受け取り、各会社について、この都市において100より多い会社が見つかるかどうかを調べる。見つかった都市が出力である。当然、当該処理は、オプティマイザー(最適化プログラム)によって、充分に良く定式化される。
【0021】
例2
第2の問題:各都市から無作為な100の会社
【0022】
SQLでの一つの可能な記述(先行技術):
SELECT*
FROM (
SELECT 会社.*,row_numberate() OVER 会社.都市 AS 都市_の_会社
FROM 会社
)
WHERE (都市_の_会社<=100)
【0023】
会社のセットを数え、各都市で再び開始し、それを一つのセットに格納し、そして、数えた結果(numeration)が<=100であるこのセットからの全ての要素を受け取る。
【0024】
本発明の方法による、柔軟性のあるRTNビルディングブロックを用いた一つの可能な記述:
SELECT 会社.*
BREAKON 会社.都市
FIRST #100
【0025】
会社のセットが対応するテーブルから受け取られる。BREAKON が指し示すのは、同一の都市からの各会社に対して、次に続く関数を適用することを示しており、即ち、各都市からの FIRST 100 (最初の100)の会社である。
【0026】
図1は、クエリ言語SQLのSELECTコマンドについての単純化した先行技術の決定グラフを示しており、図1から、SQL用のRTNの概略的な構造が明確になる。
【0027】
各クエリステートメントは、固定して予め定められた順序の、必須に連続に配置された処理領域40、41、42、43、44、45から形成され、これらはキーワード20、21、23、24、25、26、27、28、29、30、31を持っており、処理領域42、43、44および45の導入キーワード24、26、28、30のみが所望のクエリ結果に到達する単純化のために、或る選択したキーワードのみが決定ポジション10、11、12、13で選ばれる。キーワードのあるグループが各処理領域(例、FROM(キーワード22、23)、WHERE(キーワード24、25)、GROUP BY(キーワード26、27)など)を形成し、各処理領域が割り当てられたセット処理関数を実行し(例、FROMはデカルト積を形成する)、それにより特有のJOINが可能となる。
【0028】
各導入キーワード20、22、24、26、28、30の後に、さらなるキーワード(明快にするために図1には示していない)が続いてもよい。従って、例えば、キーワード24“WHERE”の後に、キーワード“(”、“NOT”、テーブル名、テーブルスペース名、定義関数などが、直接その後に続いてもよい。SUBSELECT、即ち、例えば“(”による、常にSELECT(キーワード20)において始まるRTNの再帰的適用は、常に、予め定められた決定ポジションにおいて現れ得る。それゆえ、そのようなポジションでは、常にRTN全体のみがユニットとして再帰的に使用され得る。
【0029】
潜在的には複数のキーワードが選択可能であるにも関わらず、SQLおよび関連するクエリ言語ではかなり制限されており、また、予め定められた処理順序での与えられた処理領域によるそのトランスクリプションがかなり複雑で冗長である様々なクエリがあり、それが、この記述から、現実に必要とされるよりも複雑かつ遅いアクセスプランが生成される理由となっている。
【0030】
図2は、本発明が基礎としているRTNの概略的な表現を一例で示しており、RTNは独立したRTNビルディングブロック50、51、52、53、54、55(その個数は、所望により拡大することができる)から形成されている。図2は、一例として、単純化されたRTNビルディングブロックを示しており、そのそれぞれは、対応する少数の決定ポジションを有するわずか一つの単一の決定経路79を有している。
【0031】
各RTNビルディングブロック50、51、52、53、54、55は、セットの要素の順序が定義された割り当てられた処理入力セットの入力データセットにアクセスし、これらを処理し、そして、これもまたセットの要素の順序が定義されている少なくとも一つの出力データセットを有する新たな処理出力セットを提供し、ここで、該出力データセットは、それらの値に関して、必ずしも該入力データセットから逸脱するものではない。それぞれの場合における処理は、キーワード61“WHERE”、キーワード62“ORDERBY”、キーワード63“FINDFIRST”、キーワード64“=”、キーワード66“#”およびキーワード67(例、当該関係データベースで利用可能なテーブルフィールド名)などの、決定ポジションにあるキーワードに基づく。
【0032】
RTNビルディングブロック50、51、52、53、54、55における*で印を付けた決定ポジション70では特殊な関数(special function)が実行されるが、それは即ち、利用可能な全てのRTNビルディングブロックの選択全体からの任意のRTNビルディングブロックがこのポジションに導入され、当該処理の間に実行されるということである。
【0033】
例3
FROM 会社
WHERE 会社.都市=“ウィーン”
ORDERBY 会社.従業員_の_NO.
FINDFIRST (会社.売り上げ_前_年>20,000)#100
【0034】
FROMは、データセットを与え、データセットは、この例では、表「会社」である。
【0035】
WHERE(RTNビルディングブロック50におけるキーワード61)は、入力データセット 会社の全てのセットの要素を受け取るが、この処理関数は、データ入力およびデータ出力のいずれにおいても順序に影響を与えず、かつ、それ自身の順序にも影響を与えない。図2から明らかなように、RTNビルディングブロック50では、WHEREは、“*”で印を付けた決定ポジション70に続き、そこにおいて、全ての定義されたRTNビルディングブロックからの任意のRTNビルディングブロックが導入され、実行される。
【0036】
WHEREは、入力データセットから、決定ポジション70で導入されたRTNビルディングブロックが、各データ記録に関して渡された値のセットで実行された後に、0でもZEROでもない少なくとも一つの値を生じるデータ記録のみを、このRTNビルディングブロックのためにここで用いられる定義に対応して、出力データセットとして与える(各RTNビルディングブロックは少なくとも一つの値を有するセットを出力するため)。
【0037】
少なくとも一つの値が0でもZEROでもないものでなければならないこと、あるいは厳密には、0またはZEROである値であってはならないことが、決定ポジション70の値のセットにおける選択基準として定義されることを規定するために、例えばRTNビルディングブロック50に対するさらなる任意選択の決定ポジションを付加すること、または、別個のビルディングブロックを定義することが好適であろう。
【0038】
例3によれば、RTNビルディングブロック53は、決定ポジション70において導入され、該決定ポジション70において、それぞれの場合について、(図2のRTNビルディングブロックを用いることにより、)決定ポジション70“*”の両方においてさらなるRTNビルディングブロックが導入される。
【0039】
例3では、RTNビルディングブロック50は、テーブルフィールド 都市に “ウィーン”と書いてある会社のみを渡す。
【0040】
ORDERBY(RTNビルディングブロック51におけるキーワード62)
処理入力セットの要素は、各要素に関する決定ポジション70に由来する値に従ってソートされ、該RTNビルディングブロックは、処理入力セットの要素を、適切にソートされた順序で処理出力セットとして渡す。例3では、ソートは、従業員の人数に従って行われる。
【0041】
FINDFIRST(RTNビルディングブロック52におけるキーワード63)
このRTNビルディングブロックは、例えばORDERBY RTNビルディングブロックによって渡されたとおりにソートされた順序で入力データセットを受け取り、そして、決定ポジション70で導入されたRTNビルディングブロックが、各要素に関して渡された値のセットで実行された後に、0でもZEROでもない少なくとも一つの値を生じる要素のみを、この順序を考慮することによって、また、この順序の考慮のもとで、見つけ、そして、入力のソートの順序に従って、見つかった要素を出力する。
【0042】
#(RTNビルディングブロック54におけるキーワード66)
例3では、RTNビルディングブロック52(“FINDFIRST”)が、1つ目の決定ポジション70の代わりに、上位とされたRTNビルディングブロックであるRTNビルディングブロック54において導入される。この定義では、RTNビルディングブロック54は、1つ目の決定ポジション70の実行に由来して渡される全ての要素が第2の決定ポジション70において記述された要素の個数に制限されることを指示する。
【0043】
例4から分かるように、RTNビルディングブロック54(“#”)の、RTNビルディングブロック54(“#”)中に組み込まれた形での適用は、定義により許容可能である。
【0044】
例4
(5, 3, 2, 9) #3 #2
ステップ#3に由来して、最初の3つの要素が受け取られ、従って、出力データセットとして(5, 3, 2)が渡され、それが#2のための入力データセットとなる。#2からの結果は(5, 3)である。
【0045】
=(RTNビルディングブロック53におけるキーワード64)
本例では、RTNビルディングブロック50において、RTNビルディングブロック53が、キーワード61(WHERE)の後で決定ポジション70において導入され、従って、WHERE * = *となる。
【0046】
テーブルフィールド名(RTNビルディングブロック55におけるキーワード67)
都市、従業員_の_NO.、売り上げ_前_年は、表のフィールド名であり、これは、任意の決定ポジション70にあってよい。
【0047】
既に述べたように、各RTNビルディングブロック(図2の50、51、52、53、54、55においても)は、少なくとも一つの決定経路79を有する内部の有向決定グラフを持つ。図2に従う例では、それぞれの場合において、厳密には、一つの決定経路が、分岐を持たない各RTNビルディングブロック50、51、52、53、54、55の中を走り、図2からの決定グラフは、上から始まって下へ進む。
【0048】
RTNビルディングブロック50、51、52、53、54、55の各決定グラフは、他のRTNビルディングブロック50、51、52、53、54、55の内部の有向決定グラフとは独立して定義され、また、決定経路上には1つ以上の決定ポジション70があっても良い。
【0049】
以下において、可能なさらなるRTNビルディングブロックを説明するが、これらは、部分的には、より複雑な決定グラフを必要とする。
【0050】
図3はRTNビルディングブロック150を示しており、これは、処理入力セットによって、上位付けされたセットの各要素に対し、個別に計算されるという特徴を持つ処理出力セットを渡す。決定ポジション70に、任意のRTNビルディングブロックを導入することができる。説明する決定グラフを用いることにより、矢印で示しているように、角括弧161、162の間で所望の回数だけ連続的にこのポジションが実行されることが可能であり、ここで、RTNビルディングブロックの選択全体からの一つが各実行時に導入される。この状況における上位付けされたセットとは、このRTNビルディングブロックが決定ポジション70で導入されるところの上位付けされたRTNビルディングブロックの処理入力セットである。
【0051】
例5
[
SELECT COMPANIES.会社_名
WHERE [
部門.COUNT
WHERE (会社.会社_ID=部門.会社_#)
]>3
]
【0052】
ここでは、全ての会社のセットは上位付けされたセットであるため、部門のセット全体から、各会社に割り当てられてカウントされる部門のみが各会社のために与えられる。3つより多くの部門を有する会社のみが受け取られる。
【0053】
例5に従うステートメントを、以下のビルディングブロックに変形しても良い。
【0054】
RTNビルディングブロック150の適用:この例における[*(繰り返し)]は、[ * * ]を与え、
ここで、
* .........SELECT *1
* .........WHERE *1
である。
【0055】
この定義による「角括弧」は、該角括弧に含まれているセットを受け取り、そして、処理されている処理入力セットの要素および導入されたRTNビルディングブロックが、RTNビルディングブロック150の決定経路上で実行され、これは、該処理入力セットの要素があるのと一致した回数だけ行われる。この1つ目のRTNビルディングブロック150は上位付けされたRTNビルディングブロックを持たないため、この1つ目のRTNビルディングブロックが1回だけ実行されるように、一つの要素を有する仮想の処理入力セットが仮定されている。
【0056】
SELECT *1の処理入力セットは、会社(COMPANIES)であり、それは、これらがSELECTのパラメータとして記載されているからである。
【0057】
WHERE *1の処理入力セットは会社でありが、それは、SQL標準との互換性の理由から、SELECTに代表される表示関数は、常に最後に行われ、ステートメントにおいて決して前には記述され得ないためである。
【0058】
WHERE *1はRTNビルディングブロック50に対応しており、決定ポジション70は、処理入力セット(すなわち、会社)の各要素に対して値のセットが計算される選択全体からのRTNビルディングブロックを要求する。当該の場合(例5)における決定ポジション70において、次のRTNビルディングブロックが導入される:
*2 (決定ポジション70) > (文字列) *2 (決定ポジション70)
【0059】
1つ目の星印 *2 (決定ポジション70)は、RTNビルディングブロック150を再び導入するが、今度はこれが、[ *3 *3 ](すなわち、複合の1つ目の星印 *3 = 部門.COUNT、および、複合の2つ目の星印 *3としてWHERE (会社.会社_ID = 部門.会社_#))を有している。
【0060】
“>”の後の2つ目の星印 *2 (決定ポジション70)は、一つの値(すなわち、3)を有する値のセットを含んでいる。
【0061】
例5と同様にして、さらなるRTNビルディングブロックへの変換が継続される。
【0062】
以下では、異なる抽象化を用いて例5と同じ問題を記述し、且つ、例5と同じ方法で最適化することができて同一の処理プランを渡す、この例のための2つの代替的な表記法を示す。
【0063】
例6
[SELECT 会社.会社_名
WHERE [
部門
WHERE (会社.会社_ID = 部門.会社_NO.)
].COUNT>3
]
【0064】
例6では、各会社に関する部門のセットが実行され、マッチ(一致)する要素が、現在の会社に従ってRTNビルディングブロック150の処理出力セットとして渡され、“COUNT”によってカウントされ、そして>3と比較される。
【0065】
例7
[SELECT 会社.会社_名
WHERE [
部門.WHERE (会社.会社_ID = 部門.会社_NO.).COUNT
] > 3
]
【0066】
例7では、各会社に関する部門のセットが実行され、一致(一致)する要素の個数が、現在の会社に従ってRTNビルディングブロック150の処理出力セットとして渡され、>3と比較される。
【0067】
角括弧の定義をさらに説明するために、例1と同じ問題(即ち、100より多い会社を有する都市からの全ての会社)に答える別の例を与える。
【0068】
例8
[SELECT 会社.会社_名,会社.住所
WHERE [会社 AS 会社2
WHERE 会社.都市 = 会社2.都市
].COUNT > 100]
【0069】
この例は、各要素 会社についてセット 会社がアクセスされ、それにより同一の都市をカウントすることが可能となるという特徴を持つ。
【0070】
以下では、異なる抽象化ではあるが同一の最適化されたアクセスプランを有する、3つの代替的な表記法を示す。
【0071】
例9
[SELECT 会社.会社_名, 会社.住所
WHERE 会社.都市.[会社.COUNT] > 100]
【0072】
100より多い会社が見つかる都市における全ての会社を受け取る。
【0073】
例10
[SELECT 会社.会社_名, 会社.住所
GROUPBY 会社.都市
WHERE [会社.COUNT] > 100
END GROUPBY]
【0074】
異なる各都市に関して会社.都市をGROUPBYによって結合し、結合された各要素に関してこの都市の会社を記憶する。[会社.count]によって各要素の都市に対していくつの会社が割り当てられているかをカウントし、そしてWHEREによって100より多くの会社を割り当てられている都市のみを受け取る。END GROUPBYが意味するのは、各都市についての結合を止め、代わりに、該都市に割り当てられた会社を使用することである。100未満の会社を有する都市であったならば処理されないため、これらの会社もまた、これ以上は処理されない。
【0075】
例11
[SELECT 会社.会社_名, 会社.住所
BREAKON 会社.都市
WHERE COUNT > 100]
【0076】
RTNビルディングブロック“BREAKON *”は、その処理入力セットの各要素に対して、その処理出力セットにおけるいくつかの出力データセットへの分割を与える。生じた出力データセットは、決定ポジション70(*)に導入されたRTNビルディングブロックのために対応する同一の処理出力セットを再び渡す該処理入力データセットの要素がそれぞれ、対応する同一の出力データセットに導入されるようにして、および、出力データセットの個数が、RTNビルディングブロックBREAKONの決定ポジション70(*)における異なる値の個数と同じになるようにして、処理出力セットにおいて結合される。
【0077】
当該の場合(例11)においては、BREAKONのための決定ポジション70は“会社.都市”であり、それに由来して、存在する都市の個数に一致するデータセットの個数が生じる。
【0078】
BREAKONの後の他の処理関数は常に、入力データセットがこれらの出力データセットと関係しており、一つ一つの入力データセットに対して独立してそれらの処理関数を適用し、特定のRTNビルディングブロック(例えば、”END BREAKON“)に到達するまで同数の出力データセットを次々に与える。それが、その処理入力セットの全ての入力データセットが、その処理出力セットにおいて、一つの単一の出力データセットに結合されるということを指し示す。
【0079】
上記例11については、各都市についての全ての会社はそれぞれ、それら自身のセットに書き込まれ、後続するWHEREがこれらのセットのそれぞれに対して独立して適用され、それは、現在の入力データセット(都市)においていくつの要素(会社)があるかを、各入力データセットに関してカウントするためである。現在の入力データセットの都市において100より多い会社がある場合には、この都市についての入力セット全体が採用され、そしてこの後で、この出力データセットの全ての会社が、SELECTにより表示される。
【0080】
別の例が第一に示しているのは、データセット内のデータ全体に対して処理関数を適用し、それに続くのは、いくつかのデータセットへの分割、次いで、各データセットに対して個別に適用される処理関数であり、その後、データセット全体を参照する最後の処理関数によって一つのデータセットへ結合するというものである。SQLと比較すると、定式化記述(formulation)がより短く、かつ、現在の問題に対してより具体的に追従し、なおかつ、処理が改善されており、その理由は、個々のRTNビルディングブロックがユーザーがどのような種類の結果を期待しているかを非常に具体的に記載しており、一時的なテーブルで作業する必要がないからである。
【0081】
例12
[SELECT 会社.都市_名, 会社.住所 (0)
WHERE 会社.削除済 = FALSE (1)
BREAKON 会社,都市 (2)
WHERE COUNT > 100 (3)
END BREAKON (4)
MAX 会社.売り上げ2006 # 1000 (5)
]
【0082】
(1)会社のセット全体から、削除されていない会社のみを選択する。
(2)対応する同一のデータセットにおける同一の都市に従って、削除されていない会社のセットを格納する。
(3)各データセットをカウントし、100より多い要素が存在するデータセットのみを用いて続ける。いまや、100より多い会社があるデータセット(この場合、都市)のみが残される。
(4)一つのデータセット中に全ての個々のデータセットを再び書き込むとは、100より多い会社を有する全ての都市の全ての会社を、一つのデータセットに書き込むことを意味する。
(5)これらの会社から、全体の中で、最も良い売り上げを持つ1000の会社に属する会社のみを選ぶ。
(0)SELECTにおいて定義されたテーブルフィールドを渡す。
【0083】
図4は、キーワード163“ALL”および164“ANY”を有するRTNビルディングブロック151を示しており、これらは、既に以前に示したように、少なくとも一つの値がnot 0および not ZERO(ANY)でなければならないか、あるいは正確にどの値も0またはZERO(ALL)であってはならないようにして、決定ポジション70において導入されるRTNビルディングブロックの値のセットにおいての選択基準として定義されている。
【0084】
RTNビルディングブロック151はまた、ある値のセット(キーワード168)の、EXACTLY(キーワード167)、AT LEAST(キーワード166)またはA MAXIMUM OF(キーワード167)がゼロ(zero)またはZEROであってはならないこと(“ANY”の場合)、あるいは、(“ALL”の場合には、)exactly(キーワード167)/at least(キーワード166)/a maximum of(キーワード165)を除く全ての値がそれぞれゼロおよびZEROであるセット(キーワード168)でなければならないことを記述することを可能とする。
【0085】
RTNビルディングブロックの適用における柔軟性は、以下の通りに、既述のRTNビルディングブロック151を用いることによって示すことができる。基本の定義においてANYとは、処理入力セットの現在の要素についての値のセットの少なくとも一つの値がマッチ(一致)して、ゼロでもZEROでもないものでなければならないことを意味している。しかしながら、この関数は、必要であれば、一つ若しくは複数のさらなる上位付けされるまたは導入されるRTNビルディングブロックの各々の修正を許容することによって拡張されてもよい。
【0086】
例13
会社.WHERE ANY [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0087】
ANYは、(例13では、WHEREのポジションにおける)処理関数の少なくとも一つの値が、少なくとも一つのゼロではない値を持たなければならないことを指し示し、従って、少なくとも一人の男性担当者がいる全ての会社を渡す。
【0088】
例14
会社.WHERE ANY (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0089】
(<=3)という拡張を伴うANYが意味しているのは、(例14では、WHEREのポジションにおける)処理関数の最大3つの値が、少なくとも一つのゼロではない値を持たなければならず、従って最大で3人の男性担当者がいる全ての会社を与えるということである。
【0090】
例15
会社.WHERE ALL [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0091】
ALLが意味しているのは、処理関数の全ての値(例15では、WHEREのポジションにおけるもの)が、正確にゼロではない(not ZERO)値を持ってはならないということであり、従って、男性担当者のみ(ONLY)である全ての会社を与えるということである。
【0092】
例16
会社.WHERE ALL (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0093】
(<=3)という拡張を伴うALLが意味しているのは、(例16では、WHEREのポジションにおける)処理関数の最大3つの値を除いた全てが、ゼロではない値を持つということであり、従って、最大で3人の女性担当者がいる全ての会社を与えるということである。
【0094】
図5は、出力データセットの計算のために、IF THEN ELSE条件を使用するRTNビルディングブロック152を示している。
【0095】
例17
SELECT 会社.会社_名, 会社.都市
IF 会社.従業員_の_数< 100
THEN WHERE 会社.売り上げ2006 >
IF 会社.ZIP = 1010 THEN 500,000 ELSE 300,000
ELSE MAX 会社.売り上げ_2006 # 1000
END IF
ORDERBY 会社.会社_名
【0096】
この例についての問題は、次の通りである。全ての会社を記述し、ここで、100人未満の従業員を有する会社は、正確に100人または100人より多くの従業員を有する会社と比べて他の基準を有している。
会社が100人未満の従業員を有する場合、売り上げ2006が、郵便番号(ZIP)に従って比較されるが、ZIP 1010では、売り上げは > 500,000でなければならず、一方、他の全てのZIPでは、300,000の売り上げと比較される。
少なくとも100人の従業員を有する会社の中で、2006年の売り上げが、全会社のうちで1000の最も大きな売り上げに入る会社のみが選択される。
【0097】
図5におけるRTNビルディングブロック152は、2つの必須な、そして1つの任意選択の(キーワード172の後)(ELSE)決定ポジション70を有しており、そこで全てのRTNビルディングブロックからのRTNビルディングブロックが導入され、キーワード170(IF)および後続する決定ポジション70が、このRTNビルディングブロックが、処理入力セットの現在の要素に関して、このRTNビルディングブロックの処理出力セットとして、キーワード171(THEN)の後の決定ポジション70、または、キーワード172(ELSE)の後の決定ポジション70のいずれを返すのかを決定する。キーワード172(ELSE)および、その結果として決定ポジション70が記述されない場合は、この決定ポジション70についての処理出力セットとしては、TRUE(-1)が仮定される。
【0098】
従って、キーワード173(END)および174(IF)は任意選択(optional)であり、それは、これらのキーワードは明確化のために記述され得るとはいえ、RTNビルディングブロック152の最後は、正確に一つの(EXACTLY ONE)決定ポジション70によって定義されるためである。
【0099】
キーワード170と171との間、またはキーワード171と172との間、またはキーワード172と173との間のそれぞれに、いくつかの決定ポジション70が連続的に導入される場合、2つの可能性がある。
【0100】
第1の可能性は、キーワード173(END)および174(IF)を固定して決定し、その結果として、このRTNビルディングブロックの各決定ポジション70において任意の回数だけ繰り返すことができる呼び出しを可能とするというものであろう。
【0101】
ここで選んだ第2の可能性は、少なくとも一つのキーワードで始まって少なくとも1つのキーワードで終了するRTNビルディングブロックであって、これらのキーワードの間に、任意の回数だけ呼び出し可能な正確に一つの決定ポジション70を有する前記RTNビルディングブロックを使用するということであろう。このRTNビルディングブロックでは、あらゆる所望のRTNビルディングブロックを記述することができ、また、各々のRTNビルディングブロックを、該決定ポジションにおける他の全てのRTNビルディングブロックにおいてのみならず、RTNビルディングブロック152において導入することができる。
【0102】
例18
図6は、一例として、単純化の目的のために、総数が制限されていることが仮定された、互いに隣接して定義されたRTNビルディングブロック250、251、252、253、254、255を示している。
【0103】
使用されるキーワードであるA、B、Cを持った、10個のキーワードを有する次のステートメントが、例18のための基礎として役に立つ。
BACCCBACCA
【0104】
本発明の方法に従う選択ステップでは、RTNビルディングブロック250から255までの全ての内部決定グラフがキーワード261から271までを用いて実行され、そして、決定グラフを通るそれぞれに選ばれた経路79とのマッチ(一致)が見つからずに処理が停止されるか、または、それぞれに選ばれた経路79が最後まで実行されるかのいずれかまで、これらの決定グラフのありうる全ての経路79がたどられる。
【0105】
この処理は、以下の10個のステップからなるが、ステップの個数はキーワードの個数と対応しており、また、この処理を、最後の10ステップの結果として図7に図式的に示している。
【0106】
ステップ1
当該ステートメントにおける1つ目のキーワードである“B”を、RTNビルディングブロック250、251...における各1つ目のキーワードと比較すると、マッチ(一致)するものが以下で見つかる:
RTNビルディングブロック250 → キーワード261(“A”)ではマッチしない
RTNビルディングブロック251 → キーワード263(“A”)ではマッチしない
RTNビルディングブロック252 → キーワード265(“B”)
RTNビルディングブロック253 → キーワード268(“B”)
RTNビルディングブロック254 → キーワード269(“B”)
RTNビルディングブロック255 → キーワード271(“C”)ではマッチしない
このため、RTNビルディングブロック252、253、254のみが、たどられる。
結果(現在の位置に下線を引いている)
RTNビルディングブロック252 B * C
RTNビルディングブロック253 B * A
RTNビルディングブロック254 B A *
【0107】
ステップ2
当該ステートメントにおける次のキーワード(“A”)が使用され、各々のRTNビルディングブロックの現在の2番目のポジションにおけるマッチ(一致)が検索される。この状況における決定ポジション70(“*”)が意味しているのは、任意のRTNビルディングブロックをこのポジションに導入できるということである。それゆえ、決定経路は、決定ポジション70において再帰呼び出し関数を持っており、該再帰呼び出し関数によって、全てのRTNビルディングブロックでの選択ステップの適用の結果としてRTNビルディングブロックの一つが実行されるため、選択ステップの再帰的にネストされた(nested、入れ子)実行が、少なくとも一つの決定ポジションから始めて、所望の回数だけ繰り返され得る。従って、決定ポジション70においては、全てのRTNビルディングブロックからの一つを導入することによってマッチを見つけることができるかどうかも調べなければならない。
RTNビルディングブロック252 → 決定ポジション70(“B” “*”)によってフォローされるキーワード265
RTNビルディングブロック253 → 決定ポジション70 (“B” “*”)によってフォローされるキーワード268
RTNビルディングブロック254 → キーワード269 (“B” “A”)
それゆえ、RTNビルディングブロック252における決定ポジション70では、全てのRTNビルディングブロックからその一つを選択して導入することができる。例えば、RTNビルディングブロック250から255までが導入され、そしてそれらが当該ステートメントとマッチするかどうかが調べられるが、1つ目の決定ポジションにおけるマッチは、RTNビルディングブロック250および251についてのみ見つけることができる。
252に導入された250: B * C → B A B * C
252に導入された251: B * C → B A C * C
253に導入された250: B * A → B A B * A
253に導入された251: B * A → B A C * A
254 B A *
【0108】
ステップ3
252に導入された250: B * C → B A B* C これ以上は続けない
252に導入された251: B * C → B A C* C 継続する
253に導入された250: B * A → B A B* A これ以上は続けない
253に導入された251: B * A → B A C* A 継続する
254 B A * 全てのビルディングブロックの導入
結果:
252に導入された251: B * C → B A C* C
253に導入された251: B * A → B A C* A
254に導入された255: B A * → B A C
【0109】
ステップ4
252に導入された251: B A C * C 全てのRTNビルディングブロックの導入
253に導入された251: B A C * A 全てのRTNビルディングブロックの導入
254に導入された255: B A C 最後まで達したため、これ以上は続けない
結果:
252に導入された251における255: B * C → B A C CC
253に導入された251における255: B * A → B A C CA
【0110】
ステップ5
252に導入された251における255: B A C C C 継続する
253に導入された251における255: B A C C * A 任意の種類の、RTNビルディングブロックにおける決定ポジション70への到達が可能;
253に導入された251における255 B A C C A マッチ(一致)するものがなかったため、これ以上は続けない
結果
252に導入された251における255 B A C C C
253に導入された(251における255、その後に255) B A C C C A
【0111】
ステップ6
252に導入された251における255: B A C C C 最後まで達したため、これ以上は続けない
253に導入された(251における255、その後に255) B A C C C A マッチ(一致)するものがなかったため、これ以上は続けない
253に導入された(251における255、その後に255) B A C C * A 全てのRTNビルディングブロックの導入
結果:
(251における255、続いて255、続いて252)
253に導入されたもの B A C C C B * C A
(251における255、続いて255、続いて253)
253に導入されたもの B A C C C B * A A
(251における255、続いて255、続いて254)
253に導入されたもの B A C C C B A * A
など...
【0112】
ステップ10の結果
253における(251における255、続いて255、続いて254における255、続いて255)
【0113】
図7に示した結果から、ステップ10によって、RTNビルディングブロックの順序および、クエリステートメントの全てのキーワードでの選択ステップの実行の結果としてのそれらのネスティング(nesting)に従って、当該関係データベースシステムのためのアクセスプランが生成され、ここでRTNビルディングブロックのネスティングは、任意に、他のRTNビルディングブロックの決定ポジション70でのRTNビルディングブロックの導入の可能性に起因する曖昧さを適切に解決するために、以下に説明する重み(weighting)によって変える必要がある。
【0114】
各RTNビルディングブロックの最後、および、そこに導入されるRTNビルディングブロックに常に明確に示すためには、次のことが必要であり、それは、キーワード(文字列、記号、変数または数字)を要求する少なくとも一つの決定ポジションが、再帰呼び出し関数(これは前もって決定することができない)の無制限の回数の連続的な呼び出しが行われる決定ポジションにおけるRTNビルディングブロックの決定グラフに前置される(prefixed)こと、および、これもまたキーワードを要求する少なくとも一つの決定ポジションが、これに従うことである。
【0115】
その一例は、決定ポジション70が所望の回数だけ連続して続くことができるRTNビルディングブロック“レベル”であり、このビルディングブロックは、定義により、先行するキーワード(“[”)で始まり、後続するキーワード(“]”)で終了する:“[” (1) * (*1)“]”。
【0116】
ステートメントの定式化における自由度を有する本発明の方法により、以下の論理に従うクエリ言語を定義することが可能となる。
【0117】
関係データベースシステムでは、複数のテーブル(表)および格納されたクエリが想定されており、以下にそれらをセットと呼び、そして、それらを要約する。
【0118】
本発明によれば、複数の予め定められたRTNビルディングブロックが与えられ、ここで各RTNビルディングブロックは、他のRTNビルディングブロックの内部決定グラフからは独立して定義される内部決定グラフを有するものである。複数のRTNビルディングブロックは、少なくとも一つの決定ポジションにおいて、全てのRTNビルディングブロックからの任意の所望のRTNビルディングブロックをこの決定ポジションに導入できることを示す構文上の印を有する。上に示したものにおいては、これは、決定ポジション70に対応している。
【0119】
各RTNビルディングブロックは、少なくとも一つの処理入力セットを割り当てられ、この処理入力セットに基づいて少なくとも一つの処理関数を実行し、処理出力セットを形成する。そうすることによって、RTNビルディングブロックの処理入力セットが、処理関数の実行前に、このRTNビルディングブロックにおける決定グラフ70に導入されるRTNビルディングブロックによって、新たに割り当てられることができるということが意図されている。
【0120】
RTNビルディングブロックへの変換および導入によって、定式化可能な各ステートメントは、使用時にRTNビルディングブロックに割り当てられることになる処理関数とは無関係に、RTNビルディングブロックのネスティングに基づく同一の抽象化形式にさせられる。この同一の抽象化によって、一つの代数(algebra)で、全てのRTNビルディングブロックおよびネスティングの可能性が満たされる。
有限の数の基本のビルディングブロック群を常に宣言することができるが、ここで、上位付けされたまたは導入されたRTNビルディングブロックがそれら独自の異なる定義を指定しない限りにおいて適用されるいくつかの仮定が必要とされる。
【0121】
可能な基本のビルディングブロック群の例(図14、15、16、17)
【0122】
変形1(図14):RTNビルディングブロック601であって、これは、任意のキーワード600および、全てのRTNビルディングブロックから一つのRTNビルディングブロックが導入される正確に一つの決定ポジション70を有しており、ここで、この変形の一つのRTNビルディングブロックは、決定ポジション70の前および/または後のいずれかにおいて、少なくとも一つのキーワード600を指定している。
【0123】
変形2(図15):RTNビルディングブロック602であって、これは、任意のキーワード600および少なくとも2つまたはそれより多い決定ポジション70を有しており、存在する全ての決定ポジション70がそれぞれキーワードによって分けられている。
【0124】
変形3(図16):RTNビルディングブロック603であって、これは、所望の回数だけ呼び出すことができる、排他的に決定ポジション70の前または後に位置する任意のキーワード600を有している。
【0125】
変形4(図17):RTNビルディングブロック604であって、これは、決定経路79の最初および最後に位置する任意のキーワード600を有しており、かつ、決定ポジション70を有しており、その後に、所望の回数だけ呼び出すことができる決定ポジション70が従っており、任意の個数のキーワード600が、1つ目の決定ポジション70の後に従うことができる。
【0126】
任意のステートメントの定式化に由来するネスティングの可能性の全ては、これらまたはさらなる変形あるいはそれらの組み合わせに分けることができる。使用されるRTNビルディングブロックが他の処理方法および処理セットの割り当てをそれぞれ記述していない限りにおいて、これらの変形においてそれぞれに適用される処理ステップを示す。
【0127】
変形1(図8、14)
図14に示す変形1に従って定義される全てのRTNビルディングブロックのRTNビルディングブロックには、以下の処理セットの割り当てが適用される:
上位付けされたRTNビルディングブロックにおいて決定ポジション70が与えられる場合、処理入力セットとしてこのポジションに導入されるさらなるRTNビルディングブロックは、該上位付けされたRTNビルディングブロックに対して割り当てられた処理入力セットを割り当てられる。この処理はネストしたRTNビルディングブロックの最も内部まで実行されるため、該処理入力セットは常に、決定ポジション70において直接的に導入される各々のRTNビルディングブロックに受け渡される。
他のRTNビルディングブロックが、該導入されたRTNビルディングブロックに導入されない場合、導入されたRTNビルディングブロックの処理関数がその割り当てられた処理入力セットに対して適用され、そして、生成した、導入されたRTNビルディングブロックの渡される処理出力が新たな処理入力セットとして該上位付けされたRTNビルディングブロックに割り当てられ、続いて、該上位付けされたRTNビルディングブロックの処理関数が実行される。この適用の結果が、該上位付けされたRTNビルディングブロックの処理出力セットとして渡される。それゆえ、この原理により、望むだけ頻繁なRTNビルディングブロックのネスティングが可能となる。
【0128】
従って、図8は、次に従ってネスティングにしたに従うネストしたRTNビルディングブロック407、408、409を示す。
RTNビルディングブロック407(キーワード+決定ポジション70)
RTNビルディングブロック408(キーワード+決定ポジション70)
RTNビルディングブロック409(キーワード)
【0129】
処理入力セット401がRTNビルディングブロック407に受け渡され、次いで導入されたRTNビルディングブロック408に対してその処理入力セット402として受け渡され、それが今度は、RTNビルディングブロック408に導入されるRTNビルディングブロック409に同様にして渡される。
【0130】
最も内部のネスティング点(nesting point)までいったん達すると、RTNビルディングブロック409の処理関数が処理入力セット403に対して適用され、そしてその結果が処理出力セット404として、RTNビルディングブロック408に対して新たな処理入力セットとして受け渡される。
【0131】
ここでRTNビルディングブロック408の処理関数が新たな処理入力セット404に対して適用され、その結果が、処理出力セット405として、そして、RTNビルディングブロック407に対する新たな処理入力セットとして、受け渡される。
【0132】
次のステップでは、次なる外部のRTNビルディングブロック(すなわち、RTNビルディングブロック407)の処理関数がその新たな処理入力セット405に対して適用され、そしてその結果が、RTNビルディングブロック407の処理出力セット406に格納される。
【0133】
しかしながら、既に上述したように、個々のRTNビルディングブロックのための異なる定義を排除してはならない。
【0134】
変形2(図9、15)
図15に示した変形2に従って定義される全てのRTNビルディングブロックのうちのRTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
それぞれの場合において、上位付けされたRTNビルディングブロックにおける2つまたはそれより多い決定ポジション70の間に少なくとも一つのキーワードが存在する場合には、毎回、同じ処理入力セット(すなわち、上位付けされたRTNビルディングブロックの処理入力セット)が、決定ポジション70に直接的に導入されるRTNビルディングブロックに対して割り当てられ、外部のおよび/または少なくとも一つの導入されたRTNビルディングブロックが異なる定義を用いている特殊な場合でなければ、生成する全ての処理出力セットが、上位付けされたRTNビルディングブロックの処理関数の処理入力セットとして受け渡される。
【0135】
図9は、RTNビルディングブロック417に導入されるキーワード420によって連結されたRTNビルディングブロック418および419を示している。この変形は、例えば、RTNビルディングブロックの算術または論理演算において適用される。
【0136】
RTNビルディングブロック417(決定ポジション70+キーワード420+決定ポジション70)
RTNビルディングブロック418 RTNビルディングブロック419
【0137】
処理入力セット411が上位付けされたRTNビルディングブロック417に受け渡され、次いで、導入されるRTNビルディングブロック418に対して、その処理入力セット412として渡される。その後、RTNビルディングブロック418の関連する処理関数が処理入力セット412に対して適用され、処理出力セット413に格納される。
【0138】
また、RTNビルディングブロック419は処理入力セット414として、上位付けされたRTNビルディングブロック417の処理入力セット411を受け取る。次いで、RTNビルディングブロック419の関連する処理関数がその処理入力セット414に対して適用され、処理出力セット415に格納される。
【0139】
次のステップでは、上位付けされたRTNビルディングブロック417が、処理出力セット413および415を、その2つの新たな処理入力セットとして割り当てられ、それらに対してそれ以後に、その処理関数が適用された後、1つの処理出力セット416に記憶される。
しかしながら、既に上述したように、個々のRTNビルディングブロックのための異なる定義を排除してはならない。
【0140】
変形3(図10、16)
図16に示した変形3に従って定義される全てのRTNビルディングブロックのうちの各RTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
上位付けされたRTNビルディングブロックは、決定ポジション70に所望の回数だけ連続的に達することを可能とする決定経路を有する(図6におけるRTN253を参照)。
【0141】
この場合には、当該順序の1番目のポジションで導入されるRTNビルディングブロックは上位付けされたRTNビルディングブロックの処理入力セットを取り出し、他の連続的なRTNビルディングブロックのそれぞれは、処理入力セットとして、先行するものの処理出力セットを使用し、そして順序が最後であるRTNビルディングブロックは、その処理出力セットを、上位付けされたRTNビルディングブロックに対して処理入力セットとして渡し、上位付けされたRTNビルディングブロックは、外部のまたは少なくとも一つの導入されたRTNビルディングブロックが異なる定義を用いている特殊な場合でなければ、その処理関数を実行するというのが適用される。そうすることによって、別の箇所で既に述べたように、SQLと比較して大幅に自由なクエリの実行が可能となる。
【0142】
図10は、上位付けされたRTNビルディングブロック427の中で互いに続いているRTNビルディングブロック428、429、430を示しており、上位付けされたRTNビルディングブロック427においては、最初および最後のRTNビルディングブロックを除いて、与えられたRTNビルディングブロックの順序で、先行するRTNビルディングブロックの各処理出力セットが、後続するRTNビルディングブロックの処理入力セットとして取り出され、そして、各々のRTNビルディングブロックに対して割り当てられる処理関数が適用される。
【0143】
具体的には、上位付けされたRTNビルディングブロック427の処理入力セット421が、順序としては最初にくるRTNビルディングブロック428の処理入力セット422として受け渡され、そこにその処理関数が適用され、処理出力セット423を生成する。後者が、2つ目のRTNビルディングブロック429の処理入力セット423として渡される。同様にして、これが、後続するRTNビルディングブロック430および生成した処理入力セット424について起こり、その処理出力セット425が、上位付けされたRTNビルディングブロック427の処理関数が適用される新たな処理入力セットとして取り出され、その結果として処理出力セット426が渡される。
【0144】
変形3の可能な一つの有用な再定義は、以下のセットの割り当ての特性を有するRTNビルディングブロック446によって与えられ、それを図12に示している。
【0145】
しかしながら、上位付けされたRTNビルディングブロック446は、決定ポジション70に所望の回数だけ連続的に達することができることを可能とする決定経路を有する。
【0146】
特殊なRTNビルディングブロック446の定義によれば、決定ポジション70で直接的に導入される全てのRTNビルディングブロック447、448、449が、上位付けされたRTNビルディングブロック446の処理入力セット441を割り当てられることが適用される。
【0147】
上位付けされたRTNビルディングブロック446の処理入力セットとして、直接的に導入される全てのRTNビルディングブロック447、447、449の処理出力セット442、443、444が受け取られ、そして、処理関数の適用後、処理出力セット445に格納される。
【0148】
例えば自身のRTNビルディングブロックによって決定される、このRTNビルディングブロック446の可能な処理関数の例:
1. 導入されるRTNビルディングブロックの全ての処理出力セットの特定の個数(少なくとも、正確に、最大、...)を有する全ての要素(ANY (*))
2. 少なくとも/最大で/正確に特定の個数を除いた、それぞれ、導入されるRTNビルディングブロックの各処理出力セットにある全ての要素、および、全ての処理出力セットにある全ての要素(ALL (*))
【0149】
別個のRTNビルディングブロックを用いることによって、導入されるRTNビルディングブロックの一つより多くの処理出力セットにおいて存在する要素が、上位付けされたRTNビルディングブロックの処理出力セットにおいて、1度または複数回、受け取られるべきかどうかを記述することもできる。
【0150】
この上位付けされたRTNビルディングブロック446の処理関数のためのパラメータとしてRTNビルディングブロックが与えられない場合、導入されるRTNビルディングブロック447、448、449の処理出力セット442、443、444の少なくとも一つに存在する全ての要素が重複なく渡されなければならないことが仮定される。
【0151】
変形4(図11、13、17)
図17に示した変形4に従って定義される全てのRTNビルディングブロックのうちのRTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
上位付けされたRTNビルディングブロック(例、図11におけるRTNビルディングブロック457、または、図13におけるRTNビルディングブロック477)は、1つ以上のキーワード600の後に決定ポジション70を指定する決定経路を有しており、該決定ポジション70の後に、任意の個数のキーワード600が続くことができ、かつ、該決定経路は、所望の回数だけ連続的に決定ポジション70に達することを可能とし(図6におけるRTN253を参照)、これは少なくとも一つのキーワード600によって終了する。
【0152】
この変形のRTNビルディングブロックに対しては、1つ目の決定ポジション70が上位付けされたRTNビルディングブロックの処理入力セットのデータを使用し、また、決定ポジション70に導入されるRTNビルディングブロックの処理出力セットを用いることによって、このRTNビルディングブロックの処理関数が実行されるということが適用され、一方、所望の回数だけ呼び出すことができる決定ポジション70で導入される他の全てのRTNビルディングブロックについては、変形3に関して記載した論理(ロジック)(図16)がセット割り当てに適用され、所望の回数だけ呼び出すことができる決定ポジション70の1つ目のRTNビルディングブロックは、1つ目の、繰り返し可能ではない決定ポジションにおけるRTNビルディングブロックの処理出力セットを、その処理入力セットとして割り当てられる。少なくとも一つのキーワード600で印をされている上位付けされたRTNビルディングブロックの最後に達した時点で、少なくとも一つのさらなる処理関数を、所望の回数だけ呼び出すことができる決定ポジション70の最後のRTNビルディングブロックの処理出力セットに対して適用することができる。
【0153】
図11には、変形4のRTNビルディングブロックを示しており、これは、上位付けされたRTNビルディングブロック457の1つ目の決定ポジション70において、上位付けされたRTNビルディングブロック457の処理入力セット452にアクセスするRTNビルディングブロック458を導入しており、ここで処理入力セット452は、処理入力セット451に一致している。
このRTNビルディングブロック457の処理関数は、最初に、グループ化を実行し、それは、各々のグループ化される要素を参照して、処理入力セット452の要素についてのRTNビルディングブロック458の処理出力セット453の同一の値のセットに従って行われる。このようにして、処理入力セット452として渡される処理入力セット451は、17個の要素を含んでいる。RTNビルディングブロック458の処理関数の結果として、処理出力セット453において、これらは5つの異なる要素にグループ化され、ここで各要素は、結合された個々の要素によって各々のセットを参照する(セット461、462、463、464、465)。いま、処理出力セット453は、RTNビルディングブロック459のための処理入力セットである。要素が、導入されるRTNビルディングブロック459および460の後続する処理関数によって、各々の処理出力セット454、455から除かれる場合、割り当てられた要素のセット(図11ではセット461および463)に対する参照もまた削除される。このRTNビルディングブロックを完了したときに、RTNビルディングブロック457の処理出力456における処理出力セット465の割り当てられたセット(セット462、464、465)の全ての要素がRTNビルディングブロック457の処理出力セット456に書き込まれることが定義される。この最後の処理関数は、RTNビルディングブロック457における少なくとも一つの任意選択のキーワードを通じて、または、後続するRTNビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【0154】
図13には、変形4の一つのRTNビルディングブロックを示しており、これは、上位付けされたRTNビルディングブロック477の1つ目の決定ポジション70において、上位付けされたRTNビルディングブロック477の処理入力セット472にアクセスするRTNビルディングブロック478を導入しており、ここで処理入力セット472は、処理入力セット471に一致している。
【0155】
このRTNビルディングブロック477の処理関数は、最初に、処理入力セット472の要素に対して、RTNビルディングブロック478の処理出力セット473の同一の値のセットに従ってグループ化を実行し、各々同じにグループ化されるべき要素は、処理出力セット473の同一の出力データセットに独立に書き込まれる。
このRTNビルディングブロック477の存在によって仮定されるのは、各処理入力セットおよび各処理出力セットが、それぞれ、少なくとも一つの入力データセットおよび少なくとも一つの出力データセットを含んでおり、ここで、該処理入力セットおよび該処理出力セットのデータセット内の個数、内容および順序は、同一でなくても良いということである。それぞれ、入力データセットおよび出力データセットが記述されていない場合には、各処理入力セットおよび各処理出力セットは、全ての要素を含む、それぞれ、正確に一つの入力データセットおよび出力データセットを含む。全ての処理関数が、各々のRTNビルディングブロック(図13では:479、480)の処理入力セット(図13では:473、474)の全ての入力データセットに対して独立して適用され、そしてそれに対応して、出力データセットがまだ要素を含んでいる場合には、各々のRTNビルディングブロック479、480の処理出力セット474、475の出力データセットに書き込まれる。このRTNビルディングブロックを完了したときに、処理出力セット475の全ての出力データセットが、RTNビルディングブロック477の処理出力セット476の同一の出力データセットに書き込まれることが定義される。この最後の処理関数は、RTNビルディングブロック477における少なくとも一つの任意選択のキーワードを通じて、または、後続するRTNビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【0156】
図13を参照することによって明確となるのは、RTNビルディングブロックが異なる定義を指示していなければ、RTNビルディングブロックの各処理関数は、その処理入力セットを参照し、かつ、常に、その処理入力セットにおける全ての入力データセットの全ての要素で独立して実行され、その処理出力セットのそれぞれ同一および他の出力データセットに格納されるということである。
【0157】
該RTNビルディングブロックは、処理入力セットを割り当てられる。従って、RTNビルディングブロックに対する処理入力セットの割り当てを独立して記述するRTNビルディングブロックを与えることができる。
【0158】
RTNビルディングブロックのさらなる可能な特徴付けを、以下の通りに実行することができるが、一例として述べており、この特徴づけに関しても限定はない。その上、エンジン(engine)による処理に関するアプローチがあることがはっきりと明らかである。
【0159】
一つのセットとしてデカルト積(カルテシアン積)の処置を施すこと(RTNビルディングブロック“FROM”)、および、それぞれの場合において、要素ごとに全体的な2つ目のセットへ進み、そしてそうすることにより、これもまたデカルト積に到達すること、の両方が可能でなければならず、ここで、この場合の値は、該2つ目のセットの基準に依存して該1つ目のセットの各要素に従って計算されて渡される(RTNビルディングブロック“レベル”)。
【0160】
RTNビルディングブロック“FROM”
“FROM”は、このRTNビルディングブロックの決定ポジション70において指し示されるRTNビルディングブロックが生成するセットについてのデカルト積を形成し、そしてそれを、その上位付けされたRTNビルディングブロック“レベル”の1つ目の決定ポジション70におけるRTNビルディングブロックのための処理入力セットとして利用できるようにする。
【0161】
RTNビルディングブロック“レベル”
“レベル”は、このRTNビルディングブロック(“レベル”)中で決定ポジション70においてその後に記述されたRTNビルディングブロックの全ての処理関数を、このRTNビルディングブロック(“レベル”)が含まれるRTNビルディングブロックの処理入力セットの各要素に従って段階的に実行し、ここで、各RTNビルディングブロックの処理入力セットは、直前のRTNビルディングブロックの処理出力セットである。変形3のこのRTNビルディングブロックの特異な点は、このRTNビルディングブロックは、そこに導入される1つ目のRTNビルディングブロックのための処理入力セットとして、その処理入力セットを渡さず、1つ目のRTNビルディングブロックのための処理入力セットは、それ自身のRTNビルディングブロック(例、RTNビルディングブロック“FROM”の処理出力セット)を用いて定義されるか、または、このRTNビルディングブロックで使用されるそれぞれ、全てのセットおよびテーブルの、全ての合計から定義されるということである。
【0162】
このRTNビルディングブロック“レベル”に1つ目の決定ポジション70において導入されるRTNビルディングブロックは、RTNビルディングブロック“レベル”において、特定のRTNビルディングブロック(例、“FROM”)の処理出力セットによる処理入力セットとして定義されるセット(テーブル、格納されたクエリまたはデカルト積)を、処理入力セットとして受け取る。導入されるRTNビルディングブロックのための処理入力セットがRTNビルディングブロック”レベル”で定義されていない場合、この処理入力セットは、データベース固有の特性によって、例えば、グラフの理論、関係のテーブル、およびこのRTNビルディングブロック“レベル”における全ての記述されたRTNビルディングブロック“テーブル”によって、RTNビルディングブロック“レベル”におけるネスティングとは無関係に、決定することができる。
【0163】
最も外側のRTNビルディングブロック“レベル”には、それを導入することができ、かつ、その処理入力セットを受け取ることができる取り囲むRTNビルディングブロックがないため、一つの要素を有する抽象的な開始のセットが受け取られ、ここで該要素には、抽象化された様式で、あらゆる数字、定数、文字およびグローバル関数などが含まれる。
【0164】
各RTNビルディングブロック“レベル”は、それ自身およびそこにネストされた全てのRTNビルディングブロックに、上位付けされたRTNビルディングブロックによって渡される、その処理入力セットの情報の全ての構成要素(例、全てのテーブルフィールド)を有する各々の現在の要素を与え、ここでまた、“最も深く”ネストされたRTNビルディングブロックは、全てのRTNビルディングブロック“レベル”の情報のそれらの構成要素へのアクセスを持つ。
【0165】
RTNビルディングブロック“レベル”の処理出力セットは、最後の繰り返し可能な決定ポジション70においてRTNビルディングブロック“レベル”に導入される、最後のRTNビルディングブロックの処理出力セットである。
【0166】
RTNビルディングブロック“処理_同一の親”
このRTNビルディングブロックを図12に示し、上で説明したが、これは、そのセット割り当てが、変形3のための一般的な説明とは一致しないため、“特殊な”セット割り当てのグループに挙げられる。
【0167】
このRTNビルディングブロックに導入される全てのRTNビルディングブロックは、直前に位置するRTNビルディングブロックの処理出力セットを割り当てられず、その代わりに、RTNビルディングブロック 処理_同一の親の処理入力セットを割り当てられる。
RTNビルディングブロック 処理_同一の親の処理出力セットは、このRTNビルディングブロックに導入された全ての要素の全ての処理出力セットの全ての要素である。付加的なRTNビルディングブロックにパラメータとして依存して、このRTNビルディングブロックの処理出力セットもまた、全てまたは特定の(正確な、最小の、または最大の)個数で存在する要素のみを含み得る。RTNパラメータ要素(RTN parameter elements)によって、処理出力セット中に複数(multiply)存在する要素がこの要素の処理出力セットにおいて数回、複数(multiply)格納されるかどうか、あるいは、1回のみ格納されるべきかまたは全く含められないべきかどうかについても決定することができる。
【0168】
RTNビルディングブロック“処理_先行する親(PrevParents)“
このRTNビルディングブロックに導入される全てのRTNビルディングブロックは、処理入力セットとして、直前のRTNビルディングブロックの処理出力セットを割り当てられ、それにより、このRTNビルディングブロックは、変形3に従うセット割り当てと一致する。このRTNビルディングブロックにより、例えば、RTNビルディングブロック 処理_同一の親において、または、決定ポジション70を1つだけ許容する他のRTNビルディングブロックにおいて、一つのRTNビルディングブロックが、いくつかの連続的、かつ段階的に順次実行される処理関数の処理出力セットを渡すことができるようになる。
【0169】
RTNビルディングブロック“BreakOn”
各処理関数は、処理入力セットにおける全ての入力データセットにおいて独立して実行される。いくつかのデータセットへの分割が行なわれる場合、これは、RTNビルディングブロック“BreakOnによって行なうことができ、それぞれの場合において、1つ目の決定ポジション70において導入されるRTNビルディングブロックの処理出力セット(この処理出力セット中にいくつかの要素がある場合には、それぞれ“ALL”および“ANY”の使用が有用である)のために同一の値を渡すRTNビルディングブロック“BreakOn”の処理入力セットの要素が、それぞれに同じデータセットに書き込まれる。
【0170】
一つのデータセットへの結合は例えば、RTNビルディングブロック“BreakOn”において所望の回数だけ繰り返すことができる決定ポジション70の後の少なくとも一つのキーワード(例、“END”、“BREAKON”)によって決定することができる。
【0171】
RTNビルディングブロック“GroupBy”
処理入力セットおよび処理出力セットの各要素は、それぞれの場合において、一つの値のセットを割り当てられ得る。
多くの問題は、同一の値に従ってグループ化すること、および、各グループ化された要素について任意に、この要素と一緒のグループとされた要素を記憶することを必要とさせる。これは、RTNビルディングブロック“GroupBy”によって決定されるが、一方、RTNビルディングブロック“GroupBy”の処理出力セット中の要素に従って割り当てられるセットの全ての要素を書き、それによって処理関数の完了後にグループ化を削除ことが可能である。これは、所望の回数だけ呼び出すことができる決定ポジション70の後の少なくとも一つのキーワード(例、“END GROUPBY”)によって決定することができる。ステートメント中にそのようなキーワードが与えられない場合、グループ化が、それを初めて使用したときから、各々の上位付けされたRTNビルディングブロックにおける後続する全ての処理関数のために残ったままである。
【0172】
RTNビルディングブロック“OrderBy”
各セットの要素は常に、ある順序で並べられる。最適化の後では、全ての処理関数がこの順序を固持するわけではない。
【0173】
それゆえ、RTNビルディングブロック(“OrderBy”)が提供され、これは、その処理入力セットの全ての入力データセットの要素を、ソートされた与えられた値および値のセットにそれぞれ従って、互いに独立して格納する。
【0174】
それぞれの有用なセット処理関数および値計算関数を各々、または表示関数なども、RTNビルディングブロックによって定義して、クエリにおいて実行することができる。以下において、セット処理関数のいくつかの例を挙げる。
【0175】
RTNビルディングブロック“WHERE”
このRTNビルディングブロックは、処理入力セットの各要素に対して、このRTNビルディングブロック“WHERE”の決定ポジション70におけるRTNビルディングブロックがゼロでない値を渡すときにのみこの要素が処理出力セットに書き込まれることを決定するために使用される。値のセットが渡される場合、定義は、決定ポジション70においてRTNビルディングブロック“ALL”および“ANY”のそれぞれによって決定することができる。
【0176】
RTNビルディングブロック“MIN”/“MAX”
それぞれの場合において一つのデータセットから、セット全体のうちの各要素についての計算の、それぞれ最大値および最小値に一致する要素のみが選択されるべき場合には、これは、それぞれRTNビルディングブロック“MIN”および“MAX”によって決定することができる。最大値および最小値のそれぞれの、あるセットが渡される場合には、これは、決定ポジション70において導入されるRTNビルディングブロックの処理出力セットの要素の個数を制限する上位付けされたRTNビルディングブロック(“セット要素”)によって実行することができる。
【0177】
RTNビルディングブロック“セット要素の制限(set element limiting)”
現在のソートに基づく処理出力セットの現在のデータセットのそれぞれから、ある個数の要素のみを渡すのであれば、この場合には、RTNビルディングブロック“セット要素制限(set element limited)”を上位付けされたRTNビルディングブロックとして使用することができる。このRTNビルディングブロックは、その処理入力セットの、正確にX番目の要素(“=”)、X番目の要素までの全ての要素(“<=”)、またはX番目の要素から始まる全ての要素(“>=”)が、その処理出力セットにおいて取り出されることを決定する。処理入力セットにおける現在のデータセットの要素の個数についてのあるパーセンテージに対して、制限を決定することもできる(“%”)。
【0178】
RTNビルディングブロック“FIND”
各処理関数が、その処理入力セットの全ての入力データセットに対して各要素についてそれぞれに実行され、処理出力セットのデータセットの要素が、上位付けされたおよび後続するRTNビルディングブロックのそれぞれのための処理入力セットとして受け取られる。
特定のRTNビルディングブロック(“FIND”)を使用することによって、RTNビルディングブロック“FIND”の処理出力セットが、変えられることなくこのRTNビルディングブロックの処理出力セットに一致し、ここでそれが、決定ポジション70においてRTNビルディングブロック“FIND”に導入されるRTNビルディングブロックの処理出力セットに存在する要素が、RTNビルディングブロック“FIND”の処理出力セットにおいて渡された順序で印をされるという特徴を有しているものであることが決定される。次いで、後続するRTNビルディングブロックのそれぞれが、データのセット全体ではなく、それぞれに印をされた要素に対して、後続する要素(RTNビルディングブロック“NEXT”)または先行する要素(RTNビルディングブロック“PREV”)に関して、それらの処理関数を独立に実行する。それより先では、処理関数において見つかった要素が印をされるのみである。
このRTNビルディングブロックを使用するときには、RTNビルディングブロック“ORDERBY”を前以て適用しておくことがかなり有用である。
後にデータのセット全体へのアクセスが行なわれる場合、これは例えば、RTNビルディングブロック“FIND”における拡張によって行なうことができ、それは、1つ目の決定ポジション70(例、“:”)の一つの後に従うキーワードの後に所望の回数だけ決定ポジション70を呼び出すことを可能とし、従って必然的に少なくとも一つのキーワード(例、“END”、“FIND”)を指示するものである。このキーワードが見つかった時点で、決定ポジション70(これは、可能な回数だけ呼び出すことができる)におけるRTNビルディングブロック“FIND”中の最後のRTNビルディングブロックの処理出力セットの印をされた全ての要素を、このRTNビルディングブロックの処理出力セットに書き込み、そして他の要素にはこれ以上印をしないことによって、後続する処理関数は再び、データのセット全体にアクセスする。
【0179】
RTNビルディングブロック“NEXT”/“PREV”
各処理関数が、処理データセット中の各要素に対して個々に適用される。それにより、例えば、各々の現在の要素を、後続する(“NEXT”)または先行する(“PREV”)要素の値と比較することが可能となる。RTNビルディングブロック“NEXT”が上位付けされたRTNビルディングブロックを持たない場合、それぞれの場合におけるセット全体から、X番目の要素のみ(“=”)、X番目の要素までの全ての要素(“<=”)、またはX番目の要素から始まる全ての要素(“>=”)が、このRTNビルディングブロックの処理出力セットとして渡される。
【0180】
RTNビルディングブロック“ANY”/“ALL”
例えば、RTNビルディングブロック“比較”(これは、両方とも決定ポジション70において導入されるRTNビルディングブロックの処理出力セットを比較する)では、導入されるRTNビルディングブロックの少なくとも一つが値のセットを返す場合に、全ての(“ALL”)返された値または少なくとも一つの(“ANY”)返された値が、比較されたときにマッチしなければならないかどうかを決定することができる。“ANY”では、正確に(“=)、少なくとも(“>=”)または最大で(“<=”)ある個数の要素が、比較についてマッチしなければならないことも決定することができる。“ALL”では、比較は、正確に(“=”)、少なくとも(“<=”)または最大で(“>=”)X個の要素にマッチしなければならないことをいうことができる。
【0181】
RTNビルディングブロック“中間セット”
RTNビルディングブロックの処理出力セットが他のRTNビルディングブロックとのさらなる処理のために格納されるべき場合、これは、上位付けされたRTNビルディングブロック“中間セット”によって実行することができる。このRTNビルディングブロックは、その処理入力セットが、変数名として記述されたセットに一時的に格納され、後続する全てのRTNビルディングブロックによって処理入力セットとして使用され得るということを指示する。
【0182】
RTNビルディングブロック“DO LOOP”
ある問題では、RTNビルディングブロック“DO LOOP”におけるキーワード“DO” “:”の後で決定ポジション70に導入されるRTNビルディングブロックの処理入力セットの各要素の後で(その要素は、導入されるRTNビルディングブロックの処理関数に付される)、キーワード“UNTIL”の後の決定ポジション70において記述されたRTNビルディングブロックの処理出力セットがゼロでないかについて、またはZEROでないかについて調べられること、および、それに依存して、このRTNビルディングブロックのための処理関数が終了されることが必要であり得る。
【0183】
例19
選択された会社の売り上げ2006が、100,000ユーロよりも大きな総計となるまで、ウィーンの全ての会社を受け取る。
SELECT
DO:
WHERE (会社.都市=“ウィーン”)
LOOP UNTIL
SUM (会社.売り上げ2006) > 100000
RTNビルディングブロック“セット要素の形成” “,”を用いることにより、両方ともこのRTNビルディングブロックの決定ポジション70で導入されるRTNビルディングブロックの2つの処理出力セットは、このRTNビルディングブロックの結合された処理出力セットに結合される。
【0184】
さらなるRTNビルディングブロックとしては、現在の関係データベースにおける、それぞれ、全てのテーブルおよび格納されたクエリの名前ならびにテーブルおよびクエリフィールドの名前を含む、それぞれRTNビルディングブロック“テーブルRTNビルディングブロック”および“テーブルフィールドRTNビルディングブロック”であり、その他にはまた、RTNビルディングブロック“変数”、“数”、“定数”(有効な定数の定義)、“グローバル関数”(別の言語における“CurrentUser()”などの組み込み関数をユーザーが定義するため)、比較(“>”,“>=”,“<=”,“<>”,“=”,“BETWEEN”,“IN”,...)のための、論理演算(“AND”,“OR”,“XOR”,...)のための、論理否定(“NOT”)のための、RTNビルディングブロックへの結合のための(“()”)、およ
び、コンピュータの演算
のための、RTNビルディングブロックがある。
好ましい変形は、集約関数(“count”、“all”、“none”、“sum”、“AVG”、“percent”,...)のためのRTNビルディングブロックであり、それらは、それらに対して割り当てられた処理入力セットの要素にそれぞれ適用され、各入力データセットについて正確に一つの値をその出力データセットにおいて再び渡す。
それぞれデータ操作およびデータ出力のためのRTNビルディングブロックが必要である。先行技術でのこの種のコマンドを、例えば“SELECT”、“UPDATE”、“INSERT INTO”および“DELETE”がそうであるように、RTNビルディングブロックとして好適に採用することができる。
【0185】
SQLで使用可能なジョイン(join)リンクである“left join”、“right join”、inner join”および“outer join”を定義するRTNビルディングブロックが導入されてもよい。OLAP、T−SQL、GEO−SQLの関数、および他のSQLの拡張において定義される関数を含むRTNビルディングブロックがあってもよい。
【0186】
さらには、例えばRTNビルディングブロック“IN”でそうであるように、変換可能なRTNビルディングブロックを定義することが可能である:Value IN (1, 2, 3, 4, 5)をRTNビルディングブロック* “IN” “(”*“)”として定義することができ、ここで、* “,” *は、それ自身のRTNビルディングブロックである。RTNビルディングブロックINは、value = ANY (1, 2, 3, 4, 5)と同一であり、これらのRTNビルディングブロックに変換されるか、または、それ自身エンジンによって処理されるかのいずれであってもよい。
同様のことは、可能なRTNビルディングブロックUNION (ALL)、INTERSECT、EXCLUDEについても成立し、これらは、重複を伴わない(UNION)か、または、伴う(UNION ALL)かのいずれかでセットを結合し、記述された両方のセットに存在する要素のみを受け取る(INTERSECT)か、あるいは、2つのセットのいずれにも存在しない要素のみを受け取る(EXCLUDE)。これらのRTNビルディングブロックは、任意にRTNビルディングブロック“Group By”を伴うRTNビルディングブロック“ANY”/“ALL”と組み合わせて表すことができ、また、これらのRTNビルディングブロックに変換することもできる。
【0187】
(1, 2, 3, 4) UNION ALL (3, 4, 5, 6) = ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
>=1は、基準として受け取られ、記述される必要はない。
(1, 2, 3, 4) UNION (3, 4, 5, 6) = GROUPBY ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
は、オプティマイザーによって異なるようにして処理することができる。
(1, 2, 3, 4) INTERSECT (3, 4, 5, 6) = ALL (1, 2, 3, 4), (3, 4, 5, 6)
(1, 2, 3, 4) EXCLUDE (3, 4, 5, 6) = ANY (=1) (1, 2, 3, 4), (3, 4, 5, 6)
【0188】
明らかなように、UNIONなどでそうであるように、ANYおよびALLによって、2つより多くのセットを用いたはるかに正確な記述を作成することができる。また、これらのRTNビルディングブロックの定義は、より簡便な適用性という理由のみならず、SQLとの互換性という理由からも実行することができるが、それは特に、多数のRTNビルディングブロックの存在は、不都合をもたらさないためである。
【0189】
同様のことは、RTNビルディングブロック“AND”、“OR”/“XOR”を用いても行なうことができる:
これらのRTNビルディングブロックは、RTNビルディングブロック“ANY”/“ALL”をRTNビルディングブロック“処理_同一の親”と結合することによって表すことができ、また、これらのRTNビルディングブロックに変換することができる。
【0190】
【0191】
WHERE (会社.業種=“販売”) AND (会社.[従業員.count]>100)
は、例えば、このようにもまた表すことができ、それは、1つ目の外部のRTNビルディングブロック“WHERE”の処理出力セットが、処理入力セットとして2つ目の外部のRTNビルディングブロック“WHERE”に渡されるためである:
WHERE (会社.業種=“販売”) WHERE (会社.[従業員.count]>100)
【0192】
変換可能なRTNビルディングブロックはさらに、例えば、RTNビルディングブロック“セット要素の制限”であり、これは、RTNビルディングブロック“FOR-NEXT”、“IF THEN ELSE”に変換することができ、これらは、RTNビルディングブロック“SELECT CASE”、RTNビルディングブロック“count”に変換することができ、これらは、RTNビルディングブロック“SUM”および“1”などに変換することができる。
【0193】
クエリはRTNビルディングブロックからなり、具体的には、必要な個数のRTNビルディングブロックを、与えられた順序で有するRTNレベル要素(RTN level element)からなる。
【0194】
定義により、決定グラフの決定ポジション70で始まるRTNビルディングブロックが存在する。各ステートメントにおいて使用されるRTNビルディングブロックを決定するためには、RTNビルディングブロックを2つの包括的(generic)グループに分けるため、および、さらなる処理のために各RTNビルディングブロックについて対応する包括的グループを記憶するために、1つ目のステートメントでの選択ステップの適用の前に変換ステップを実施することが必要である。
【0195】
選択ステップの適用前の変換ステップでは、各RTNビルディングブロックが第1または第2の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるRTNビルディングブロックは第1の包括的グループに割り当てられ、かつ、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるRTNビルディングブロックが、第2の包括的グループに割り当てられ、かつ、第1の決定ポジションが削除されるよう、および、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第1の包括的グループの全てのRTNビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第2の包括的グループのRTNビルディングブロックが、該選択ステップが第2の包括的グループのRTNビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加される。
【0196】
一例として以下では、決定グラフにおける1つ目の決定ポジションとして決定ポジション70を有さないRTNビルディングブロックの変換を示す:
“(”*“)”
は、
“(” 第1の包括的グループのRTNビルディングブロック “)”[第2の包括的グループのRTNビルディングブロック]
に変換される。
【0197】
一例として、次のものでは、決定グラフにおいて、1つ目の決定ポジションとして決定ポジション70を有し、かつ、最後の決定ポジションとして決定ポジション70を有するRTNビルディングブロックの変換を示す:
* (“+”1/2“-”) *
は、
(“+”1/2“-”)RTNビルディングブロックであって第1の包括的(generic)グループのものへと変換される。
【0198】
一例として、次のものでは、決定グラフにおいて、1つ目の決定ポジションとして決定ポジション70を有し、かつ、最後の決定ポジションとして決定ポジション70を有さないRTNビルディングブロックの変換を示す:
* “IN” “(”*“)”
は、第2の包括的グループに割り当てられ、かつ、
“IN” “(” 第1の包括的グループのRTNビルディングブロック “)” [第2の包括的RTNビルディングブロック]
に変換される。
【0199】
与えられる各ステートメントを先行技術のアルゴリズムを通じてRTNビルディングブロックに変換し、以ってクエリを定式化するときにRTNビルディングブロックの完全な柔軟性を使用することを可能とすることが、この変換ステップによって保証される。
【0200】
この変換ステップの後で、各RTNビルディングブロックは、少なくとも一つの文字列、少なくとも一つの記号、一つの変数または一つの数字で始まり、そしてそれ以降、各選択ステップは、第1の包括的グループのRTNビルディングブロックに対してのみ、または、第2の包括的グループのRTNビルディングブロックにおいてのみ、適用される。さらには、この変換ステップの後、第2の包括的グループのRTNビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意に呼び出される。
【0201】
具体的には、当該2つの包括的グループへの必要とされる変換は、RTNビルディングブロックのネスティングをもたらし、これはさらなる処理に適用されないが、その理由は、それぞれの場合において、ステートメント中に存在するならば第1の包括的グループの一つのRTNビルディングブロックは、第2の包括的グループのRTNビルディングブロックを呼び出すが、ここで第2の包括的グループのこのRTNビルディングブロックは常に、第1の包括的グループの少なくともこの呼び出しのRTNビルディングブロックに対して上位付けされるためである。
定義により、決定グラフにおいて決定ポジション70で始まるRTNビルディングブロックが存在する。これらのRTNビルディングブロックでは、多数のネスティングに関しては、それらがどのRTNビルディングブロックに対して上位付けされているか明確に確認することができないが、それは、一つの決定ポジション70において、RTNビルディングブロックのネスティングにおいて明らかでない第1または第2の包括的グループの全てのRTNビルディングブロックを導入することができるためである。
【0202】
例20
以下の単純な例は、上記を説明するために役に立つ:
WHERE A + B / C
1つ目のステップで、RTNビルディングブロックのネスティングが、当該ステートメントで選択ステップを実行した後で示される。
WHERE 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック]
A [第2の包括的グループのRTNビルディングブロック]
+ 第1の包括的グループのRTNビルディングブロック
B [第2の包括的グループのRTNビルディングブロック]
/ 第1の包括的グループのRTNビルディングブロック
C [第2の包括的グループのRTNビルディングブロック]
【0203】
ここで、1つ目の決定ポジション70でのRTNビルディングブロック“+”に関して次の2つの導入の可能性があることが明らかである:
* (WHERE *) + *
* (A) + *
【0204】
同様に、RTNビルディングブロック“+”の2つ目の決定ポジション70に関して2つの導入の可能性がある:
* + * (B)
* + * (* / *)
【0205】
RTNビルディングブロック“/”に関して、その1つ目の決定ポジション70についての以下の3つの導入の可能性がある:
* (WHERE *) / *
* (* + *) / *
* (B) / *
【0206】
RTNビルディングブロック“/”に関して、その2つ目の決定ポジション70についてのただ1つの導入の可能性がある:
* / * (B)
【0207】
これらの単純な場合およびより複雑な場合を明確かつ正確に解決するためには、各RTNビルディングブロックに対して第1および第2の重みを割り当てることが必要であり、ここで、個々のRTNビルディングブロックのための重みは、ステートメント中に見られる全てのRTNビルディングブロックの互いの間のネスティングを考慮に入れる以下の方法に従って決定される。
【0208】
各RTNビルディングブロックは、第1の重みを割り当てられ、それによって、RTNビルディングブロックのネスティングは、各選択ステップの間または選択ステップを全て適用した後に、それぞれの場合においてより大きい第1の重みを有するRTNビルディングブロックを、比較するとより小さい第1の重みを有する元々上位にあるRTNビルディングブロックに対して上位付けることによって、後続する処理に使用可能なネスティングに変えられる。
【0209】
第1の包括的グループの全てのRTNビルディングブロックの第1の重みは、ステートメントにおいて直接的に上位付けされている第2の包括的グループのRTNビルディングブロックに依存するが、そのことが、第1の包括的グループのRTNビルディングブロックに対して割り当てられる第1の重みが、初期(initial)重みとして記述(described)される理由である。
【0210】
第1の包括的グループのRTNビルディングブロックは、同一の第1の初期重みを持ち、それは好ましくは平均的な大きさのものであり、そして、第1の包括的グループのこれらのRTNビルディングブロックは、第2の包括的グループのRTNビルディングブロックに導入されるときに、単一の値だけ、好ましくは1だけ減らされる第1の重みを採用する。
【0211】
一例として、RTNビルディングブロック“テーブルフィールド”は、第1の包括的グループのその他の全てのRTNビルディングブロックと同様に、第1の最初の重み200を受け取り、ここでRTNビルディングブロック“加法/減法演算”は、重み17を有している。
“A” (テーブルフィールド) “+” (加法/減法演算) “B” (テーブルフィールド)とすると、両RTNビルディングブロック テーブルフィールドは、それらの元々の第1の最初の重み200の代わりに、1だけ減らされた、それらに対して上位付けされることになるRTNビルディングブロック 加法/減法演算の第1の重み17を割り当てられる。両方のテーブルフィールドRTNビルディングブロックは従って、ステートメントに起因して、重み16を受け取り、そして両者は、小さい第1の重み(16)のため、加法/減法演算RTNビルディングブロック(重み16)に対して下位付けされる。
【0212】
第2の包括的グループのRTNビルディングブロックのための第1の重みは以下のようにして決定される:
・第1または第2の包括的グループのRTNビルディングブロックの処理関数の処理出力セットに対してそれらの処理関数を適用する第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第1の包括的サブグループを形成し、かつ、それぞれは、可能な最も大きい重みではないが、第1の包括的グループのRTNビルディングブロックの第1の最初の平均の大きさの重みよりは大きい、同一の第1の重みを割り当てられる。
【0213】
このようにして、例えば、処理関数RTNビルディングブロック * “UNION” *, * “#” * および * “AS” V:変数名 がそれぞれ、第1または第2の包括的グループのRTNビルディングブロック(これらは、それらの決定ポジション70において直接的に導入される)の、それぞれ処理出力セット(単数)および処理出力セット(複数)に対して適用されるが、これが、第1の包括的サブグループのRTNビルディングブロックが第2の包括的グループに割り当てられ、かつ250という第1の重みを受け取る理由である(ここで、200が第1の包括的グループのRTNビルディングブロックの第1の重みであり、また、255を可能な最も大きい重みとして仮定している)。
【0214】
結果として、第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックが常に、第1および第2の包括的グループのRTNビルディングブロックに対して上位付けされること、および、従って定義によりそれらの処理入力セットとしてそれらの処理出力セットを割り当てられることが保証される。
【0215】
・その処理出力セットが第1または第2の包括的グループの他のRTNビルディングブロックのための処理入力セットとして受け取られる第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第2の包括的サブグループを形成し、かつ、どんな場合であっても第1の包括的グループのRTNビルディングブロックの第1の最初の平均の大きさの重みよりは小さいそれぞれに異なる第1の重みを割り当てられる。各々のRTNビルディングブロックのためのこの第1の重みは、それぞれの場合において、より小さい第1の重みをそれぞれ第一に割り当てて、このグループのRTNビルディングブロックを実行することによって、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックに関する予め決定可能な処理の順序を個々に記述している。
【0216】
従って、例えば、RTNビルディングブロック“乗法/除法演算”は第1の重み14を受け取り、RTNビルディングブロック“加法/減法演算”はより大きい第1の重み17を受け取り、RTNビルディングブロック“比較”は第1の重み50を受け取り、そしてRTNビルディングブロック“ブール組み合わせ”は第1の重み100を受け取る。
【0217】
これは、A + B * C > D AND E = Fという所望のネスティングから明らかとなる。
【0218】
ここに記述された全ての第1の重みは、第1の包括的グループのRTNビルディングブロックの第1の最初の重み200よりも小さい。
【0219】
決定ポジション70の後に、任意に加えられる最後の決定ポジション70(これは変換ステップの後で加えられる)の前で少なくとも一つのさらなる決定ポジションが従う第1および第2の包括的グループのRTNビルディングブロックにおける誤ったネスティングを排除するために、最大の大きさの第2の重みを、正確にこれらのRTNビルディングブロックのために割り当てることが必要となる。さもなければ、第2の包括的グループの第1の包括的サブグループの少なくとも一つのRTNビルディングブロックが、最後ではない決定ポジション70(即ち、第1の包括的グループのRTNビルディングブロックの平均の重みの大きさよりも大きい重みを有するRTNビルディングブロック)において、これらのRTNビルディングブロックに導入されるまさにその時に、誤ったネスティングが現実に生じるであろう。より大きい第1の重みにもかかわらず、これらのRTNビルディングブロックは、決定経路における最大の第2の重みを有するRTNビルディングブロックが変換ステップの後で任意に導入される最後の決定ポジション70に達するまでは、最大の第2の重みを有するこれらのRTNビルディングブロックではネストしてはならない。
【0220】
それゆえ、第1の包括的グループの少なくとも一つのRTNビルディングブロックの導入を指示する決定ポジション70の後に、少なくとも一つのさらなる決定ポジションが、第1および第2の包括的グループの全てのRTNビルディングブロックに続き、前記の少なくとも一つのさらなる決定ポジションは、変換ステップの後で任意選択的に(オプションとして)存在して第2の包括的グループのRTNビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジション70とは独立しており、
該第1および第2の包括的グループの全てのRTNビルディングブロックが、可能な最も大きい重みの大きさを有する第2の固定された重みを割り当てられる。
【0221】
RTNビルディングブロック“WHERE”は、定義により最大の大きさの第2の重みを割り当てられない第1の包括的グループのRTNビルディングブロックの一例として役に立つ:
“WHERE” * 変換ステップ後:
“WHERE” 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック ]
【0222】
このRTNビルディングブロックでは、変換ステップによって加えられる最後の任意選択の決定ポジション70を除いて、1つ目の決定ポジション70の後には他の決定ポジションは従わない。従って、このRTNビルディングブロックのための第2の重みは、このRTNビルディングブロックの第1の重みの値を受け取ることができる。
【0223】
RTNビルディングブロック“RTNビルディングブロックの集約”(角括弧内)およびRTNビルディングブロック“for next”は、定義により最大の大きさの第2の重みを割り当てられる第1の包括的グループのRTNビルディングブロックの2つの例である:
“(” * “)” 変換ステップ後:
“(” 第1の包括的グループのRTNビルディングブロック “)” [第2の包括的グループのRTNビルディングブロック]
“FOR” * “:” * “NEXT” 変換ステップ後:
“FOR” 第1の包括的グループのRTNビルディングブロック “:” 第1の包括的グループのRTNビルディングブロック
“NEXT” [第2の包括的グループのRTNビルディングブロック]
【0224】
これらのRTNビルディングブロックでは毎回、各1つ目の決定ポジション70の後に、最後の任意選択の決定ポジション70(これは変換ステップによって加えられる)に加えて、少なくとも一つの決定ポジションが常に従う。従って、これらのRTNビルディングブロックのための第2の重みは、可能な最も大きい重みの大きさ、具体的には255に一致する。
【0225】
同じことは、第2の包括的グループのRTNビルディングブロックに対しても成り立つ。これは例えば、RTNビルディングブロック“加法/減法演算”およびRTNビルディングブロック“IN 比較”に関して示される:
* (“+”1/2“-”) * 変換ステップ後
(“+”1/2“-”) 第1の包括的グループのRTNビルディングブロック
このRTNビルディングブロックでは、変換ステップ後には、唯一の決定ポジション70の後には他の決定ポジションは従わない。従って、このRTNビルディングブロックのための第2の重みは、例えば、このRTNビルディングブロックの第1の重みの値を受け取ることができる。
【0226】
* “IN” “(” * “)” 変換ステップ後:
“IN” 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック]
このRTNビルディングブロックでは、1つ目の決定ポジション70の後に、最後の任意選択の決定ポジション70(これは変換ステップによって加えられる)に加えて、決定ポジションが続く。従って、このRTNビルディングブロックのための第2の重みは、可能な最も大きい重みの大きさ、具体的には255に一致する。
【0227】
各RTNビルディングブロックの、変換ステップ後の選択ステップの実行によってそれらに対して上位付けされるステートメント中の各RTNビルディングブロックに関するさらなる処理のために必要であるネスティングを決定するために、変換ステップ後のクエリステートメントに由来するネスティングの順序での第2の包括的グループの各RTNビルディングブロックの第1の重みが、より大きい第1の重みの各々のRTNビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第2の重みを有する各々の上位付けされたRTNビルディングブロックが到達されるまで、各々の上位付けされたRTNビルディングブロックの第1の重みと比較され、そして、この決定されたネスティングの順序に従って、比較の基準としての役目をするRTNビルディングブロックが、到達されたRTNビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのRTNビルディングブロックに対して上位付けされる。
これは、以下の例によって説明される:
【0228】
例21
IF A THEN WHERE B=C # 5 ELSE WHERE D=E#10 END IF # 20
この例においてさらなる処理を要求するネスティングは以下の通りである:
*(1.1) # *(1.2) 第1の重み.250、第2の重み.250
(=1.1) IF *(2.1) THEN *(2.2) ELSE *(2.3) END IF 第1の重み.200、第2の重み.255
(=2.1) A 第1の重み.200、第2の重み.1
(=2.2) *(3.1) # *(3.2) 第1の重み.200、第2の重み.200
(=3.1) *(4.1) = *(4.2) 第1の重み. 50、第2の重み 50
(=4.1) B 第1の重み. 49(初期200)、第2の重み. 1
(=4.2) C 第1の重み. 49(初期200)、第2の重み. 1
(=3.2) 5 第1の重み. 249(初期200)、第2の重み. 1
(=2.3) *(5.1) # *(5.2) 第1の重み. 250、第2の重み. 250
(=5.1) *(6.1) = *(6.2) 第1の重み. 50、第2の重み. 50
(=6.1) D 第1の重み. 49(初期200)、第2の重み. 1
(=6.2) E 第1の重み. 49(初期200)、第2の重み. 1
(=5.2) 10 第1重み. 249(初期200)、第2重み. 1
(=1.2) 20 第1重み. 249(初期200)、第2重み. 1
ここで、第1の重み(first weight).は、第1の重み付け(first weighting)であり、
第2の重み(second weight).は、第2の重み付け(second weighting)であり、
初期(initial)は、第2の包括的グループのRTNビルディングブロックへの導入によって変えられる場合に記述される、第1の包括的グループのRTNビルディングブロックの初期の重み付けである。
ここで、第1の重み250を有するRTNビルディンブロック“#”は、RTNビルディングブロック“IF THEN ELSE END IF”(これがその最後の決定ポジションに到達した後では、第1の重み200および第2の重み255を有する)に対してのみ上位付けされることが分かる。
【0229】
例21の記述の完全性を目的として、この例では変換ステップ後の選択ステップの実行に由来する、ネスティングを示す:
IF 呼び出し:第1の包括的グループのRTNビルディングブロック
A
THEN 呼び出し:第1の包括的グループのRTNビルディングブロック
WHERE 呼び出し:第1の包括的グループのRTNビルディングブロック
B 呼び出し:第2の包括的グループのRTNビルディングブロック
= 呼び出し:第1の包括的グループのRTNビルディングブロック
C 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
5
ELSE 呼び出し:第1の包括的グループのRTNビルディングブロック
WHERE 呼び出し:第1の包括的グループのRTNビルディングブロック
D 呼び出し:第2の包括的グループのRTNビルディングブロック
= 呼び出し:第1の包括的グループのRTNビルディングブロック
E 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
10
END
IF 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
20
【0230】
第1の包括的グループのRTNビルディングブロックは、それら自身、および、それらに対して上位付けされるRTNビルディンブロックの第1の重みとは無関係に、それらに対して直接的に上位付けされる第1または第2の包括的グループのRTNビルディングブロックに対して下位付け(subordinated)される。
【0231】
例22
WHERE A + MIN B
【0232】
例22は以下の通りにネストされる:
WHERE * (1.1) 第1の重み. 200、第2の重み. 200
(=1.1) *(2.1) + *(2.2) 第1の重み. 50、第2の重み. 50
(=2.1) A 第1の重み. 49(初期 200)、第2の重み. 1
(=2.2) MIN *(3.1) 第1の重み. 49(初期 200)、第2の重み. 200
(=3.1) B 第1の重み. 200、第2の重み. 1
【0233】
例22から分かるように、第1の包括的グループのRTNビルディングブロックとしてのRTNビルディングブロック“B”は、そのより大きい第1重み200にもかかわらず、それに対して上位付けされたRTNビルディングブロック“MIN”と比較したときに、その上位付けされた第2の包括的グループのRTNビルディングブロック“+”によって変えられる第1重み49と共に下位付けされる。
【0234】
第2の包括的グループのRTNビルディングブロックの第1の重みを比較するときに同一の第1の重みを有する上位付けされたRTNビルディンブロックが存在するならば、各々の包括的サブグループに依存して手続きは異なる:
第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと比較されることになる、第2の包括的グループのRTNビルディングブロックが、同一の第1の重みを持つ場合、該比較される必要のあるRTNビルディングブロックは、これらのRTNビルディングブロックが第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックであるならば、このRTNビルディングブロックに対して直接的に下位付けされる。
以下の例が上記を説明するために役に立つ:
【0235】
例23
【0236】
例23では、第1の重みを比較するときに、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックは2度出会う(“/”は“MOD”に出会い、
は“/”に出会う)。第2の包括的グループの第2の包括的サブグループへの割り当てにより、これらのRTNビルディングブロックはそれぞれ下位付けされるが、それは、下位付けされたRTNビルディングブロックの処理出力セットが各上位付けされたRTNビルディングブロックの処理入力セットとして受け取られることが定義されているためである。RTNビルディングブロック“RTNビルディングブロックの集約”を使用することで、すなわち、括弧でくくることによって、別の第1および第2の重み、ならびに、従って別の計算順序が得られる。
【0237】
比較されることになる第2の包括的グループのRTNビルディングブロックが、第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと同一の第1の重みを持つ場合、上位付けされたRTNビルディングブロックとの比較は、これらのRTNビルディングブロックが第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックである限り継続される。
【0238】
以下の例は、上記を説明するために役に立つ:
例24
Aが要求する全ての要素を受け取る。このセットから最初の100個を受け取り、中間セット1にこれらの100要素を格納し、この中間セット1から最初の50要素を受け取る。
WHERE A # 100 AS 中間セット # 50
*(1.1) # *(1.2) 第1の重み. 250、第2の重み. 250
(=1.1) *(2.1) AS Zwischenmenge 第1の重み. 250、第2の重み. 250
(=2.1) *(3.1) # *(3.2) 第1の重み. 250、第2の重み. 250
(=3.1) WHERE *(4.1) 第1の重み. 249(初期200)、第2の重み. 200
(=4.1) A 第1の重み. 200、第2の重み. 1
(=3.2) 100 第1の重み. 249(最初 200)、第2の重み. 1
(=1.2) 50 第1の重み. 249(最初 200)、第2の重み. 1
【0239】
例24では、第1の重みを比較するときに、第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックが2度応じる(“AS”は“#”に応じ、“#”は“AS”に応じる)。第2の包括的グループの第1の包括的サブグループへの割り当てにより、これらのRTNビルディングブロックは、それぞれ前もって配置される(prearranged)が、それは、下位付けされたRTNビルディングブロックの処理出力セットが各上位付けされたRTNビルディングブロックの処理入力セットとして受け取られることが定義されているためである。
【0240】
可能な最も大きい第2の重みのRTNビルディングブロックの決定ポジション70に直接的に導入されるRTNビルディングブロックが、各々のRTNビルディングブロックに関して望まれる場合には第2の包括的グループのRTNビルディングブロックに対してのみ下位付けされることは重要である。これは、次の方法によって行われ、即ち、第1の包括的グループのRTNビルディングブロックであって、該第1の包括的グループのRTNビルディングブロックが、RTNビルディングブロックの全体から一つが導入可能(introducible)である第2の可能な最大の重みの大きさを有するRTNビルディングブロックの決定ポジションの一つに直接的に導入されるときに、第2の包括的グループのRTNビルディングブロックに対して下位付けされることが予め定められているものである当該第1の包括的グループのRTNビルディングブロックが、最小の重みの大きさの第2の重みを割り当てられ、かつ、そのような場合において、最小の大きさの第2の重みを持たない当該第1の包括的グループのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに対して下位付けされない、という方法である。
【0241】
2つの例が、これらの2つの可能な場合に関するネスティングを示すが、これらは、上述した方法の後では以下の結果となる。
【0242】
例25
第1の可能な場合:可能な最も大きい重みの大きさを有する第2の重みの上位付けされたRTNビルディングブロックの決定ポジション70において、最小の重みの大きさの重みではない第2の重みの第1の包括的グループのRTNビルディングブロックが導入される(この例では、キーワードは“WHERE”):
[ WHERE MAX A + B / C = D ]
【0243】
例25においてさらなる処理を要求するネスティングは以下の通りである:
[ *(1.1) ] 第1の重み. 200、第2の重み. 255
(=1.1) WHERE *(2.1) 第1の重み. 200、第2の重み. 200
(2.1) *(3.1) = *(3.2) 第1の重み. 50、第2の重み. 50
(=3.1) MAX *(4.1) 第1の重み. 49(初期. 200)、第2の重み. 200
(=4.1) *(5.1) + *(5.2) 第1の重み. 17、第2の重み. 17
(=5.1) A 第1の重み. 16(初期. 200)、第2の重み. 1
(=5.2) *(6.1) / *(6.2) 第1の重み. 14、第2の重み. 14
(=6.2) B 第1の重み. 13(初期. 200)、第2の重み. 1
(=6.3) C 第1の重み. 13(初期. 200)、第2の重み. 1
(=3.2) D 第1の重み. 49、第2の重み. 200
【0244】
RTNビルディングブロック“MAX”はキーワード“/”を有するRTNビルディングブロックに対して下位付けされるが、これは、その上位付けされたRTNビルディングブロック“WHERE”が可能な最大の重みの大きさの重みを持たないためである。
RTNビルディングブロック“WHERE”は、グローバル定義に従って、キーワード“=”を有するRTNビルディングブロックに対して下位付けされるべきであるが、これはこの場合には起こらない。それは、その上位付けされたRTNビルディングブロック“レベル”(“[ ]”)は、第2の可能な最大の重みの大きさを持っているが、一方、RTNビルディングブロック“WHERE”は、最小の重みの大きさの第2の重みを持っていないためである。
【0245】
RTNビルディングブロックの異なるネスティングが達成されるべきならば、これは、RTNビルディングブロック“RTNビルディングブロックの集約”(“()”)(例、WHERE (MAX (A + B / C) = D)、MAX A + B / Cと同等)を使用することによって行なうことができる。
【0246】
例26
第2の可能な場合:可能な最も大きい重みの大きさの第2の重みを有する上位付けされたRTNビルディングブロックの決定ポジション70において、最小の重みの大きさの第2の重みを有する第1の包括的グループのRTNビルディングブロックが導入される(この例ではキーワード“A”):
[ A + B ]
[ *(1.1) ] 第1の重み. 200、第2の重み. 255
(=1.1) *(2.1) + *(2.2) 第1の重み. 17、第2の重み. 17
(=2.1) A 第1の重み. 16(初期 200)、第2の重み. 1
(=2.2) B 第1の重み. 16(初期 200)、第2の重み. 1
【0247】
例26は、RTNビルディングブロック“加法/減法 演算”が、RTNビルディングブロック“テーブルフィールド”(A)に対して上位付けされるということを示しており、これは、RTNビルディングブロック“A”がRTNビルディングブロック“レベル”の決定ポジション70に直接的に導入され、RTNビルディングブロックAは最小の重みの大きさの第2の重みを有しており、かつ、直接的に導入されたRTNビルディングブロック“レベル”は可能な最も大きい重みの大きさの第2の重みを持っているためである。
【0248】
本発明の一つの更なる実施形態をここで与える。この場合には、ステートメントに従って、変換ステップの後で、第2の包括的グループのRTNビルディングブロックの導入を指示する任意選択の決定ポジションが後に続く、第2の包括的グループのRTNビルディングブロックが、正確にこの任意選択の決定ポジションにおいて、導入された第2の包括的グループのRTNビルディングブロックである。
このような場合には、この最後の決定ポジションで導入されるRTNビルディングブロックは常に、それより以前に上位付けされたRTNビルディングブロックに対して上位付けされた目下の2つのRTNビルディングブロックの第1および第2の重みとは無関係である。
【0249】
これは以下の例によって示されるが、以下の例が示しているのは、変形(variant)“中間セット”中のフィールドAの値が格納され、この変数“中間セット”に対してフィールドBの値が加えられ、次いでこの値が値Cと一致しているかどうかが調べられるということ、および、次いでこの比較の結果が変数“結果IN”に格納されるということである。
【0250】
A AS 中間セット + B IN (C) AS 結果IN
【0251】
ここでは、より小さい第1の重み17にもかかわらず、キーワード“+”を有するRTNビルディングブロックは、第1の重みが250であるキーワード“AS”を有するRTNビルディングブロックに対して上位付けされる。同じことがキーワード“IN”および“AS”を有するRTNビルディングブロックに関しても起こり、ここで、上位付けされる必要があるキーワード“AS”を有するRTNビルディングブロックの第1の重みは、キーワード“IN”を有するRTNビルディングブロックの第1の重み(60)とは独立して、より高い(250)ものである。
【0252】
当該のRTNビルディングブロックに従って、RTNビルディングブロックグループもまた、例えば算術型または論理型の処理関数のみを含む、ステートメントまたはステートメントの一部として定義することができる。そのような場合について一致するのは、第1および第2の包括的グループの全てのRTNビルディングブロックが、少なくとも一つのRTNビルディングブロックを割り当てられることができ、ここで該少なくとも一つのRTNビルディングブロックは、第1および第2の包括的グループのRTNビルディングブロックが、可能な最も大きい第2の重みを有するRTNビルディングブロックの、全てのRTNビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるということである。
【0253】
以下のRTNビルディングブロックは、ある程度は、可能な最も大きい重みの大きさを有する第2の重みのRTNビルディングブロックの決定ポジション70に直接的に導入される限りにおいて、下記する割り当てを含む:
【0254】
RTNビルディングブロック“テーブルフィールド”:このRTNビルディングブロックは、“SELECT”RTNビルディングブロック、このフィールドにおけるテーブルの名前を含むRTNビルディングブロック“テーブル”、ならびに、2つのRTNビルディングブロック“テーブル”および“テーブルフィールド”を互いに関係させるためのRTNビルディングブロック“値のリンク”を自動的に前置され(prefixed)得る。
【0255】
例27
[テーブル_フィールド_名]
これは、自動的な前置の後では:
[SELECT テーブル_名.テーブル_フィールド_名]
となる。
【0256】
RTNビルディングブロック“テーブル”:このRTNビルディングブロックは、全てのテーブルフィールドを渡すために“SELECT”RTNビルディングブロックを前に置かれ(preceded with)得る。
【0257】
例28
[テーブル_名]
これは、自動的な前置の後では:
[SELECT テーブル_名.*]
となる。
【0258】
計算または比較演算を実行するRTNビルディングブロック:これらのRTNビルディングブロックは、“WHERE”RTNビルディングブロックを前置され得るが、これが存在しない場合にも、例えばそれぞれに必要なRTNビルディングブロック“セット要素形成”および“値のリンク”を有する全ての使用されるテーブルの全てのフィールドを渡す、“SELECT”RTNビルディングブロックを前置され得る。
【0259】
例29
[ A + B ]
これは、自動的な前置の後で、
[ SELECT テーブル_名.A, テーブル_名.B
WHERE テーブル_名.A + テーブル_名.B ]
となる。
【0260】
表1および表2は、各々の第1および第2の重みを有するあり得るRTNビルディングブロックのリスト、ならびに、該RTNビルディングブロックの決定グラフを含んでおり、該決定グラフにおいては、RTNビルディングブロックの決定グラフが決定ポジションで実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、あるいは、全てのRTNビルディングブロックからRTNビルディングブロックが挿入され、次いでそれが再び実行される。
【0261】
各決定ポジション70において、常に全てのRTNビルディングブロックから選択することができるということから、決定ポジションでの選択が限られている場合と比較して、クエリステートメントを定式化するときにより高い自由度が可能である。
【0262】
RTNビルディングブロック“NEXT”は、例で示すように作用し、その処理入力セットから、現在の要素ごとに、その処理出力セットにおいて決定ポジション70で挙げられたその次の要素を再び渡す。
例えば、決定ポジション70の代わりに数字のみが許されているのであれば、現在の要素ごとに渡されることになる次の要素の数字のみ決定することができ、そして、次いでその1つ目の決定ポジション70においてRTNビルディングブロック“WHERE”が導入される決定ポジション70を用いることによって、現在の要素の後に従い、かつ、RTNビルディングブロック“セット要素の制限”の処理出力セットにある要素が、RTNビルディングブロック“セット要素の制限”によって渡され得る。従って、これは全てのRTNビルディングブロックに対してあてはまる。例えば、RTNビルディングブロック“MAX”を使用することにより、RTNビルディングブロック“MAX”の決定ポジション70において挙げられた最も大きい値を有する正確に後に続く要素(exactly the subsequent element)を、現在の要素から始めて、検索することができる。
【0263】
以下の抽象化された例がこれを説明するのに役に立つ。
【0264】
例30
ORDERBY A
NEXT (WHERE B=C # 100)
NEXT (MAX D # 20)
【0265】
ここでは、セットが値Aによってソートされた後、比較B=Cがあてはまる正確に100個の要素が、該セットの各要素のために渡される。次いで、このセットから、値Dが現在の要素から始めて最も大きい20個に入るものである後続する20個の要素のセットが渡される。
【0266】
例31
テスト株式(test share)と名付けられた2006年1月1日時による株式の位置が見つけられ、さらなる計算のために受け取られて、その日以来、株式が20%だけ上昇するまでに経過した日数が表示される。
WHERE (株式.名=“テスト株式”)
ORDERBY 株式.日付
FIND WHERE (株式.日付=01.01.2006) AS 位置010106
SELECT NEXT (WHERE (株式.位置>=位置010106*1.2 # 1).日付-株式.日付
【0267】
例31におけるステートメントの記述:
“テスト株式”と名付けられた株式を検索する。
これらの株式を日付によってソートする。
【0268】
日付が2006年1月1日である要素を正確に検索し、この要素を変数 位置01012006に格納する。
“FIND”によって現在の要素として印をされた要素に基づいて、その位置が、現在の要素から始めて、変数 位置010106に格納された値よりも20%だけ大きい株式が検索される。
#1はWHEREによって見つかった要素を1つ目の要素に制限し、それゆえ、NEXTもまたWHEREが要求する1つ目の要素の値のみを渡す。
見つかった要素の値の、現在の要素の値との比較を可能とするために、NEXTを使用しなければならず、経過した日数は、この例では、このようにして計算される。
結果の表示はキーワードSELECTによる。
【0269】
これと関連して、例えば以下の印が使用される:
[ ]において与えられた決定ポジションは任意選択でのみ実行され、期待されるキーワードは“”で示しており、(“キーワード1” 1/2 “キーワード2”)は“キーワード1” OR “キーワード2”を表しており、*は決定ポジション70を表しており、(x)および(*x)のそれぞれは、ある位置(*x)から別の位置(x)への、各印の飛び越し位置であり、そしてV:変数名およびV:数字のそれぞれは、自由に選択可能なそれぞれ変数および数字のそれぞれを表している。
RTNビルディングブロックは、これらのRTNビルディングブロックがステートメント中で使用される頻度とおおよそ一致する順序で並べられるため、頻出するRTNビルディングブロックはより早く見つけることができ、可能な限り少ない比較が必要とされる。
【0270】
RTNビルディングブロックを、2つの包括的グループへの変換ステップの前(表1)および変換ステップ後(表2)の両方で示している。
このリストは、さらなるRTNビルディングブロックによっていつでも、簡便に拡張することができ、従って網羅的なものではないことに留意すべきである。
【0271】
最適化されたアクセスプランに到達するために、ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のRTNビルディングブロックグループを割り当てられたRTNビルディングブロックは、エンジンインターフェースの要素においてそれぞれ変換されなければならず、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有するものである。
【0272】
本発明の方法は、また、関係データベースシステムをプログラム的に組み立てるために好適であり、該システムは、少なくともコンピュータシステムを有し、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを持っており、通常、例えば、コンピュータプログラムとして、当該方法を実施するために設定された各々の命令(インストラクション)を持っている。
そのようなコンピュータプログラムは、任意の形態をとってよい。具体的には、それは、フロッピーディスク、CD、または、DVDといったコンピュータが読み取り可能な媒体上のコンピュータプログラム製品であってよく、コンピュータプログラムコード手段を有しており、それによって、コンピュータは、本発明のデータキャリアまたは電子キャリア信号を生成するために、該コンピュータプログラムを読み込んだ後、毎回、当該方法を実行するよう該プログラムによって指示される。しかしながら、それは、例えば、コンピュータプログラム製品であって、該コンピュータプログラム製品は、電子的なキャリア信号上のコンピュータプログラムを有する、当該コンピュータプログラム製品であってもよく、該コンピュータプログラムの読み込んだ後、毎回、コンピュータは、該プログラムによって本発明の方法を実行するよう指示されるものである。
【0273】
【表1−1】
【0274】
【表1−2】
【0275】
【表2−1】
【0276】
【表2−2】
【0277】
【表2−3】
【技術分野】
【0001】
本発明は、関係データベース(リレーショナルデータベース)システムを制御するための方法に関し、キーワードからなるクエリステートメントが再帰遷移ネットワーク(recursive transition network)(RTN)を適用することによって最初に解析され、該再帰遷移ネットワークでは、キーワードまたはキーワードのグループが、該ステートメントによって与えられる順序で処理に関連するプロパティ(特性)を割り当てられ、その後に続いて、制御コマンドへの変換およびオプションでの最適化が行われる。
【0002】
本発明はさらに、関連する関係データベースシステム、該関係データベースシステム用の制御情報を含む関連するデータキャリアまたはキャリア信号、ならびに、前述の方法を実行するための関連するコンピュータプログラムおよびコンピュータプログラム製品に関する。
【背景技術】
【0003】
関係データベースシステムは、大部分がSQLに基づいており、該SQLは、その高い伝搬レベルおよび絶え間ない進歩にも関わらず、より複雑なクエリを処理する場合にクエリステートメントを定式化するのに難があり、また、文法的に自由度が制限されていることから、不必要に複雑な問題記述およびその結果として最適でないアクセスコードが生じ、それに伴ってストレージ集約的、ハードディスクアクセス集約的およびプロセッサ集約的な処理が生じる。
【0004】
SQLは、セット処理(set-processing)クエリ言語であり、各ステートメントおよびサブステートメントのそれぞれについての自由に定義可能な入力量に、各ステートメントおよびサブステートメントのそれぞれに対するある固定された順序で、予め定められたセット処理関数を適用する。
【0005】
SQLの適用におけるこの相対的な制限は、基礎となっているRTN(再帰遷移ネットワーク)の論理から生じており、該RTNの論理の処理は、与えられる決定グラフ(decision graph)に沿って行なわれており、該与えられる決定グラフにより、各キーワードの後のキーワードの選択の制限が可能となると同時に、キーワードの順序が固定または大部分固定され、かつ、予め定められた決定ポジション(decision position)において決定グラフ全体が再帰的に使いやすくなる。この与えられる順序により、ステートメントの処理は、決定グラフ全体の、自己ネスト(self-nested)および/または自己連結した(self-concatenated)全実行のみによって記述されることができ、それにより、特にSQL、OQLなどを用いる場合、定義された処理ブロックの処理は、決定グラフによって定められた順序によって可能であるが、一方で、順序が自由に選択可能かつ繰り返し可能である新たな処理ブロックを導入することは不可能である。
【0006】
上述した本来的に有効であるRTNの制限を有するSQLは、チューリング完全であるように設計されてきたとはいえ、実際には、相当な数のクエリが専門家にとっても実行が難しく、それゆえ、理論的に可能な処理時間と比べて長い処理時間を招くことが多く、SQLのRTNは、定式化およびクエリステートメントの使用における自由度を許容していないため、理論的に可能な処理時間を達成することができない。
【発明の概要】
【発明が解決しようとする課題】
【0007】
従って、本発明の目的は、クエリ言語において種々の困難のレベルにある事実の簡単かつ簡明な記述、および、改善されたアクセスプランの確立を可能とし、その結果として、クエリ結果の計算および実行をそれぞれはるかに高速に行なうことができる、上述したような種類の方法を提示することである。
【0008】
本発明のさらなる目的は、ユーザーおよびサードパーティーにとっての理解および明確さを増し、かつ、例えばある問題から開始して更なる類似の問題が与えられる場合に、現存のステートメントの修正または調整を容易に達成することを可能とする方法を提示することである。
【0009】
容易な適用性を確実にするために、本発明の方法はまた、グラフィカルインターフェースで表示するのを容易にすべきである。
【0010】
当該方法の基礎であるクエリ言語を適用するための新たな処理関数の定義およびアップグレードのそれぞれは、容易に行えるようにすべきである。
【課題を解決するための手段】
【0011】
これは、本発明によって、次のように達成される。
独立したRTNビルディングブロック(複数)からRTNを形成し、各RTNビルディングブロックは、内部の有向決定グラフを持つものであり、該グラフは、他のRTNビルディングブロックの内部の有向決定グラフ(inner, directed decision graph)とは独立して定義され、少なくとも一つの決定経路(decision path)上に少なくとも一つの決定ポジションを有するものであり、
選択ステップにおけるキーワードを用いて、全てのRTNビルディングブロックの内部決定グラフを実行し、個々の経路との一致(match)が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路をたどり(following)、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
かつ、全てのキーワードでの選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランを生成することによって達成され、
また、少なくともコンピュータシステムを有する関係データベースシステムによって達成され、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを有し、前述の本発明の方法に従って動作するようにプログラムに基づくように構成される。
【0012】
このようにして、SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、UNIONなどの予め定められた処理領域および処理順序を有するSQLやOQLなどのクエリ言語において、これまでの高い構造的な度合いを適用することなく済ませることができる。デカルト積がクエリのFROM部分で形成され、デカルト積の特定の行がWHERE部分で除かれ、特定のデータフィールドがGROUP BY部分で結合され、特定の行がHAVING部分でグループ計算の結果を用いることによって除かれ、ソートがORDER BYによって行われ、かつ、セットがUNIONまたは、セットを結び付けるその他の演算で結合される、SQLにおいて適用されるこのモデルによって、必要とされるチューリング完全が達成され得るため、データに関連する全ての解決可能な問題を理論的には定式化することができるが、それにも関わらず、複雑性が高いため、中等度に困難なタスクから始めて困難なタスクまで、ユーザーの能力に依存して、現実にはうまくいかない。加えて、あり得る全てのクエリのうちの大部分は専門家によって定式化され得るが、それらは各々の問題によって、複雑なやり方でのみ、与えられた処理領域に組み込まれ得る。これは、例えばSQLにおいて、構造および順序が予め定められていることにより、他の方法で行なうことができないためである。処理領域のセットが小さいためにセット処理の直接的な方法を予め定めることが多くの場合において不可能であるため、最悪の方法の多くを回避するのはこの目的のために意図されたオプティマイザー次第であり、個々に適用される記述が最良の方法を決定する。理論的に可能な最良の方法と比較すると、これは、それとは大きく異なるものであり得る。
【0013】
本発明のさらなる実施形態は、添付の特許請求の範囲において与えられる。以下において、図に示した実施形態によって本発明を詳細に説明する。
【図面の簡単な説明】
【0014】
【図1】図1は、先行技術のSQL−RTNの概略的な表現である。
【図2】図2は、本発明の方法の一つの実施形態のための基礎としての役目を果たすRTNビルディングブロックの概略的な表現である。
【図3】図3は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図4】図4は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図5】図5は、本発明の方法に従うRTNビルディングブロックの概略的な表現である。
【図6】図6は、本発明の方法の更なる実施形態のための基礎としての役目を果たすRTNビルディングブロックの概略的な表現である。
【図7】図7は、本発明の方法の一つの実施形態によるRTNビルディングブロックのネスティングの概略的な表現である。
【図8】図8は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図9】図9は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図10】図10は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図11】図11は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図12】図12は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図13】図13は、本発明の方法の実施形態で適用される、それぞれ、異なるRTNビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図14】図14は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図15】図15は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図16】図16は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【図17】図17は、本発明の方法の実施形態において適用される、RTNビルディングブロックのグループの変形の概略的な表現である。
【発明を実施するための形態】
【0015】
2つの非常に単純な例が、これを説明するのに役に立つだろう。
表(テーブル)“会社(COMPANIES)”を与え、該表は、“会社_名”および“都市”のフィールドを少なくとも含んでいる。
【0016】
例1
第1の問題:100より多い会社を有する都市からの全ての会社
【0017】
SQLでの一つの可能な記述(先行技術):
SELECT 会社.*
FROM 会社, (SELECT 会社.都市
FROM 会社
GROUP BY 会社.都市
HAVING (count(*)>100)
) AS 会社_都市_more_than_100
WHERE (会社.都市=会社_都市_more_than_100.都市)
【0018】
会社のセットを受け取り、都市に従って結合し、そして100より多い会社を有する都市のみを記憶する。このセットは、会社のセットとデカルト(カルテシアン)・リンク(Cartesian linkage)を持っており、そして、そのフィールド「都市」を100より多い会社を有する都市のセットにおいても見つけることができる会社のみが受け取られる。
欠点:都市のセットを格納しなければならず、また、会社のセットを2度実行し、都市と1度比較しなければならない。
【0019】
本発明の方法による、RTNビルディングブロックにおける一つの可能な記述:
SELECT 会社. *
WHERE (会社.都市.WHERE([会社.count]>100))
【0020】
会社のセットを受け取り、各会社について、この都市において100より多い会社が見つかるかどうかを調べる。見つかった都市が出力である。当然、当該処理は、オプティマイザー(最適化プログラム)によって、充分に良く定式化される。
【0021】
例2
第2の問題:各都市から無作為な100の会社
【0022】
SQLでの一つの可能な記述(先行技術):
SELECT*
FROM (
SELECT 会社.*,row_numberate() OVER 会社.都市 AS 都市_の_会社
FROM 会社
)
WHERE (都市_の_会社<=100)
【0023】
会社のセットを数え、各都市で再び開始し、それを一つのセットに格納し、そして、数えた結果(numeration)が<=100であるこのセットからの全ての要素を受け取る。
【0024】
本発明の方法による、柔軟性のあるRTNビルディングブロックを用いた一つの可能な記述:
SELECT 会社.*
BREAKON 会社.都市
FIRST #100
【0025】
会社のセットが対応するテーブルから受け取られる。BREAKON が指し示すのは、同一の都市からの各会社に対して、次に続く関数を適用することを示しており、即ち、各都市からの FIRST 100 (最初の100)の会社である。
【0026】
図1は、クエリ言語SQLのSELECTコマンドについての単純化した先行技術の決定グラフを示しており、図1から、SQL用のRTNの概略的な構造が明確になる。
【0027】
各クエリステートメントは、固定して予め定められた順序の、必須に連続に配置された処理領域40、41、42、43、44、45から形成され、これらはキーワード20、21、23、24、25、26、27、28、29、30、31を持っており、処理領域42、43、44および45の導入キーワード24、26、28、30のみが所望のクエリ結果に到達する単純化のために、或る選択したキーワードのみが決定ポジション10、11、12、13で選ばれる。キーワードのあるグループが各処理領域(例、FROM(キーワード22、23)、WHERE(キーワード24、25)、GROUP BY(キーワード26、27)など)を形成し、各処理領域が割り当てられたセット処理関数を実行し(例、FROMはデカルト積を形成する)、それにより特有のJOINが可能となる。
【0028】
各導入キーワード20、22、24、26、28、30の後に、さらなるキーワード(明快にするために図1には示していない)が続いてもよい。従って、例えば、キーワード24“WHERE”の後に、キーワード“(”、“NOT”、テーブル名、テーブルスペース名、定義関数などが、直接その後に続いてもよい。SUBSELECT、即ち、例えば“(”による、常にSELECT(キーワード20)において始まるRTNの再帰的適用は、常に、予め定められた決定ポジションにおいて現れ得る。それゆえ、そのようなポジションでは、常にRTN全体のみがユニットとして再帰的に使用され得る。
【0029】
潜在的には複数のキーワードが選択可能であるにも関わらず、SQLおよび関連するクエリ言語ではかなり制限されており、また、予め定められた処理順序での与えられた処理領域によるそのトランスクリプションがかなり複雑で冗長である様々なクエリがあり、それが、この記述から、現実に必要とされるよりも複雑かつ遅いアクセスプランが生成される理由となっている。
【0030】
図2は、本発明が基礎としているRTNの概略的な表現を一例で示しており、RTNは独立したRTNビルディングブロック50、51、52、53、54、55(その個数は、所望により拡大することができる)から形成されている。図2は、一例として、単純化されたRTNビルディングブロックを示しており、そのそれぞれは、対応する少数の決定ポジションを有するわずか一つの単一の決定経路79を有している。
【0031】
各RTNビルディングブロック50、51、52、53、54、55は、セットの要素の順序が定義された割り当てられた処理入力セットの入力データセットにアクセスし、これらを処理し、そして、これもまたセットの要素の順序が定義されている少なくとも一つの出力データセットを有する新たな処理出力セットを提供し、ここで、該出力データセットは、それらの値に関して、必ずしも該入力データセットから逸脱するものではない。それぞれの場合における処理は、キーワード61“WHERE”、キーワード62“ORDERBY”、キーワード63“FINDFIRST”、キーワード64“=”、キーワード66“#”およびキーワード67(例、当該関係データベースで利用可能なテーブルフィールド名)などの、決定ポジションにあるキーワードに基づく。
【0032】
RTNビルディングブロック50、51、52、53、54、55における*で印を付けた決定ポジション70では特殊な関数(special function)が実行されるが、それは即ち、利用可能な全てのRTNビルディングブロックの選択全体からの任意のRTNビルディングブロックがこのポジションに導入され、当該処理の間に実行されるということである。
【0033】
例3
FROM 会社
WHERE 会社.都市=“ウィーン”
ORDERBY 会社.従業員_の_NO.
FINDFIRST (会社.売り上げ_前_年>20,000)#100
【0034】
FROMは、データセットを与え、データセットは、この例では、表「会社」である。
【0035】
WHERE(RTNビルディングブロック50におけるキーワード61)は、入力データセット 会社の全てのセットの要素を受け取るが、この処理関数は、データ入力およびデータ出力のいずれにおいても順序に影響を与えず、かつ、それ自身の順序にも影響を与えない。図2から明らかなように、RTNビルディングブロック50では、WHEREは、“*”で印を付けた決定ポジション70に続き、そこにおいて、全ての定義されたRTNビルディングブロックからの任意のRTNビルディングブロックが導入され、実行される。
【0036】
WHEREは、入力データセットから、決定ポジション70で導入されたRTNビルディングブロックが、各データ記録に関して渡された値のセットで実行された後に、0でもZEROでもない少なくとも一つの値を生じるデータ記録のみを、このRTNビルディングブロックのためにここで用いられる定義に対応して、出力データセットとして与える(各RTNビルディングブロックは少なくとも一つの値を有するセットを出力するため)。
【0037】
少なくとも一つの値が0でもZEROでもないものでなければならないこと、あるいは厳密には、0またはZEROである値であってはならないことが、決定ポジション70の値のセットにおける選択基準として定義されることを規定するために、例えばRTNビルディングブロック50に対するさらなる任意選択の決定ポジションを付加すること、または、別個のビルディングブロックを定義することが好適であろう。
【0038】
例3によれば、RTNビルディングブロック53は、決定ポジション70において導入され、該決定ポジション70において、それぞれの場合について、(図2のRTNビルディングブロックを用いることにより、)決定ポジション70“*”の両方においてさらなるRTNビルディングブロックが導入される。
【0039】
例3では、RTNビルディングブロック50は、テーブルフィールド 都市に “ウィーン”と書いてある会社のみを渡す。
【0040】
ORDERBY(RTNビルディングブロック51におけるキーワード62)
処理入力セットの要素は、各要素に関する決定ポジション70に由来する値に従ってソートされ、該RTNビルディングブロックは、処理入力セットの要素を、適切にソートされた順序で処理出力セットとして渡す。例3では、ソートは、従業員の人数に従って行われる。
【0041】
FINDFIRST(RTNビルディングブロック52におけるキーワード63)
このRTNビルディングブロックは、例えばORDERBY RTNビルディングブロックによって渡されたとおりにソートされた順序で入力データセットを受け取り、そして、決定ポジション70で導入されたRTNビルディングブロックが、各要素に関して渡された値のセットで実行された後に、0でもZEROでもない少なくとも一つの値を生じる要素のみを、この順序を考慮することによって、また、この順序の考慮のもとで、見つけ、そして、入力のソートの順序に従って、見つかった要素を出力する。
【0042】
#(RTNビルディングブロック54におけるキーワード66)
例3では、RTNビルディングブロック52(“FINDFIRST”)が、1つ目の決定ポジション70の代わりに、上位とされたRTNビルディングブロックであるRTNビルディングブロック54において導入される。この定義では、RTNビルディングブロック54は、1つ目の決定ポジション70の実行に由来して渡される全ての要素が第2の決定ポジション70において記述された要素の個数に制限されることを指示する。
【0043】
例4から分かるように、RTNビルディングブロック54(“#”)の、RTNビルディングブロック54(“#”)中に組み込まれた形での適用は、定義により許容可能である。
【0044】
例4
(5, 3, 2, 9) #3 #2
ステップ#3に由来して、最初の3つの要素が受け取られ、従って、出力データセットとして(5, 3, 2)が渡され、それが#2のための入力データセットとなる。#2からの結果は(5, 3)である。
【0045】
=(RTNビルディングブロック53におけるキーワード64)
本例では、RTNビルディングブロック50において、RTNビルディングブロック53が、キーワード61(WHERE)の後で決定ポジション70において導入され、従って、WHERE * = *となる。
【0046】
テーブルフィールド名(RTNビルディングブロック55におけるキーワード67)
都市、従業員_の_NO.、売り上げ_前_年は、表のフィールド名であり、これは、任意の決定ポジション70にあってよい。
【0047】
既に述べたように、各RTNビルディングブロック(図2の50、51、52、53、54、55においても)は、少なくとも一つの決定経路79を有する内部の有向決定グラフを持つ。図2に従う例では、それぞれの場合において、厳密には、一つの決定経路が、分岐を持たない各RTNビルディングブロック50、51、52、53、54、55の中を走り、図2からの決定グラフは、上から始まって下へ進む。
【0048】
RTNビルディングブロック50、51、52、53、54、55の各決定グラフは、他のRTNビルディングブロック50、51、52、53、54、55の内部の有向決定グラフとは独立して定義され、また、決定経路上には1つ以上の決定ポジション70があっても良い。
【0049】
以下において、可能なさらなるRTNビルディングブロックを説明するが、これらは、部分的には、より複雑な決定グラフを必要とする。
【0050】
図3はRTNビルディングブロック150を示しており、これは、処理入力セットによって、上位付けされたセットの各要素に対し、個別に計算されるという特徴を持つ処理出力セットを渡す。決定ポジション70に、任意のRTNビルディングブロックを導入することができる。説明する決定グラフを用いることにより、矢印で示しているように、角括弧161、162の間で所望の回数だけ連続的にこのポジションが実行されることが可能であり、ここで、RTNビルディングブロックの選択全体からの一つが各実行時に導入される。この状況における上位付けされたセットとは、このRTNビルディングブロックが決定ポジション70で導入されるところの上位付けされたRTNビルディングブロックの処理入力セットである。
【0051】
例5
[
SELECT COMPANIES.会社_名
WHERE [
部門.COUNT
WHERE (会社.会社_ID=部門.会社_#)
]>3
]
【0052】
ここでは、全ての会社のセットは上位付けされたセットであるため、部門のセット全体から、各会社に割り当てられてカウントされる部門のみが各会社のために与えられる。3つより多くの部門を有する会社のみが受け取られる。
【0053】
例5に従うステートメントを、以下のビルディングブロックに変形しても良い。
【0054】
RTNビルディングブロック150の適用:この例における[*(繰り返し)]は、[ * * ]を与え、
ここで、
* .........SELECT *1
* .........WHERE *1
である。
【0055】
この定義による「角括弧」は、該角括弧に含まれているセットを受け取り、そして、処理されている処理入力セットの要素および導入されたRTNビルディングブロックが、RTNビルディングブロック150の決定経路上で実行され、これは、該処理入力セットの要素があるのと一致した回数だけ行われる。この1つ目のRTNビルディングブロック150は上位付けされたRTNビルディングブロックを持たないため、この1つ目のRTNビルディングブロックが1回だけ実行されるように、一つの要素を有する仮想の処理入力セットが仮定されている。
【0056】
SELECT *1の処理入力セットは、会社(COMPANIES)であり、それは、これらがSELECTのパラメータとして記載されているからである。
【0057】
WHERE *1の処理入力セットは会社でありが、それは、SQL標準との互換性の理由から、SELECTに代表される表示関数は、常に最後に行われ、ステートメントにおいて決して前には記述され得ないためである。
【0058】
WHERE *1はRTNビルディングブロック50に対応しており、決定ポジション70は、処理入力セット(すなわち、会社)の各要素に対して値のセットが計算される選択全体からのRTNビルディングブロックを要求する。当該の場合(例5)における決定ポジション70において、次のRTNビルディングブロックが導入される:
*2 (決定ポジション70) > (文字列) *2 (決定ポジション70)
【0059】
1つ目の星印 *2 (決定ポジション70)は、RTNビルディングブロック150を再び導入するが、今度はこれが、[ *3 *3 ](すなわち、複合の1つ目の星印 *3 = 部門.COUNT、および、複合の2つ目の星印 *3としてWHERE (会社.会社_ID = 部門.会社_#))を有している。
【0060】
“>”の後の2つ目の星印 *2 (決定ポジション70)は、一つの値(すなわち、3)を有する値のセットを含んでいる。
【0061】
例5と同様にして、さらなるRTNビルディングブロックへの変換が継続される。
【0062】
以下では、異なる抽象化を用いて例5と同じ問題を記述し、且つ、例5と同じ方法で最適化することができて同一の処理プランを渡す、この例のための2つの代替的な表記法を示す。
【0063】
例6
[SELECT 会社.会社_名
WHERE [
部門
WHERE (会社.会社_ID = 部門.会社_NO.)
].COUNT>3
]
【0064】
例6では、各会社に関する部門のセットが実行され、マッチ(一致)する要素が、現在の会社に従ってRTNビルディングブロック150の処理出力セットとして渡され、“COUNT”によってカウントされ、そして>3と比較される。
【0065】
例7
[SELECT 会社.会社_名
WHERE [
部門.WHERE (会社.会社_ID = 部門.会社_NO.).COUNT
] > 3
]
【0066】
例7では、各会社に関する部門のセットが実行され、一致(一致)する要素の個数が、現在の会社に従ってRTNビルディングブロック150の処理出力セットとして渡され、>3と比較される。
【0067】
角括弧の定義をさらに説明するために、例1と同じ問題(即ち、100より多い会社を有する都市からの全ての会社)に答える別の例を与える。
【0068】
例8
[SELECT 会社.会社_名,会社.住所
WHERE [会社 AS 会社2
WHERE 会社.都市 = 会社2.都市
].COUNT > 100]
【0069】
この例は、各要素 会社についてセット 会社がアクセスされ、それにより同一の都市をカウントすることが可能となるという特徴を持つ。
【0070】
以下では、異なる抽象化ではあるが同一の最適化されたアクセスプランを有する、3つの代替的な表記法を示す。
【0071】
例9
[SELECT 会社.会社_名, 会社.住所
WHERE 会社.都市.[会社.COUNT] > 100]
【0072】
100より多い会社が見つかる都市における全ての会社を受け取る。
【0073】
例10
[SELECT 会社.会社_名, 会社.住所
GROUPBY 会社.都市
WHERE [会社.COUNT] > 100
END GROUPBY]
【0074】
異なる各都市に関して会社.都市をGROUPBYによって結合し、結合された各要素に関してこの都市の会社を記憶する。[会社.count]によって各要素の都市に対していくつの会社が割り当てられているかをカウントし、そしてWHEREによって100より多くの会社を割り当てられている都市のみを受け取る。END GROUPBYが意味するのは、各都市についての結合を止め、代わりに、該都市に割り当てられた会社を使用することである。100未満の会社を有する都市であったならば処理されないため、これらの会社もまた、これ以上は処理されない。
【0075】
例11
[SELECT 会社.会社_名, 会社.住所
BREAKON 会社.都市
WHERE COUNT > 100]
【0076】
RTNビルディングブロック“BREAKON *”は、その処理入力セットの各要素に対して、その処理出力セットにおけるいくつかの出力データセットへの分割を与える。生じた出力データセットは、決定ポジション70(*)に導入されたRTNビルディングブロックのために対応する同一の処理出力セットを再び渡す該処理入力データセットの要素がそれぞれ、対応する同一の出力データセットに導入されるようにして、および、出力データセットの個数が、RTNビルディングブロックBREAKONの決定ポジション70(*)における異なる値の個数と同じになるようにして、処理出力セットにおいて結合される。
【0077】
当該の場合(例11)においては、BREAKONのための決定ポジション70は“会社.都市”であり、それに由来して、存在する都市の個数に一致するデータセットの個数が生じる。
【0078】
BREAKONの後の他の処理関数は常に、入力データセットがこれらの出力データセットと関係しており、一つ一つの入力データセットに対して独立してそれらの処理関数を適用し、特定のRTNビルディングブロック(例えば、”END BREAKON“)に到達するまで同数の出力データセットを次々に与える。それが、その処理入力セットの全ての入力データセットが、その処理出力セットにおいて、一つの単一の出力データセットに結合されるということを指し示す。
【0079】
上記例11については、各都市についての全ての会社はそれぞれ、それら自身のセットに書き込まれ、後続するWHEREがこれらのセットのそれぞれに対して独立して適用され、それは、現在の入力データセット(都市)においていくつの要素(会社)があるかを、各入力データセットに関してカウントするためである。現在の入力データセットの都市において100より多い会社がある場合には、この都市についての入力セット全体が採用され、そしてこの後で、この出力データセットの全ての会社が、SELECTにより表示される。
【0080】
別の例が第一に示しているのは、データセット内のデータ全体に対して処理関数を適用し、それに続くのは、いくつかのデータセットへの分割、次いで、各データセットに対して個別に適用される処理関数であり、その後、データセット全体を参照する最後の処理関数によって一つのデータセットへ結合するというものである。SQLと比較すると、定式化記述(formulation)がより短く、かつ、現在の問題に対してより具体的に追従し、なおかつ、処理が改善されており、その理由は、個々のRTNビルディングブロックがユーザーがどのような種類の結果を期待しているかを非常に具体的に記載しており、一時的なテーブルで作業する必要がないからである。
【0081】
例12
[SELECT 会社.都市_名, 会社.住所 (0)
WHERE 会社.削除済 = FALSE (1)
BREAKON 会社,都市 (2)
WHERE COUNT > 100 (3)
END BREAKON (4)
MAX 会社.売り上げ2006 # 1000 (5)
]
【0082】
(1)会社のセット全体から、削除されていない会社のみを選択する。
(2)対応する同一のデータセットにおける同一の都市に従って、削除されていない会社のセットを格納する。
(3)各データセットをカウントし、100より多い要素が存在するデータセットのみを用いて続ける。いまや、100より多い会社があるデータセット(この場合、都市)のみが残される。
(4)一つのデータセット中に全ての個々のデータセットを再び書き込むとは、100より多い会社を有する全ての都市の全ての会社を、一つのデータセットに書き込むことを意味する。
(5)これらの会社から、全体の中で、最も良い売り上げを持つ1000の会社に属する会社のみを選ぶ。
(0)SELECTにおいて定義されたテーブルフィールドを渡す。
【0083】
図4は、キーワード163“ALL”および164“ANY”を有するRTNビルディングブロック151を示しており、これらは、既に以前に示したように、少なくとも一つの値がnot 0および not ZERO(ANY)でなければならないか、あるいは正確にどの値も0またはZERO(ALL)であってはならないようにして、決定ポジション70において導入されるRTNビルディングブロックの値のセットにおいての選択基準として定義されている。
【0084】
RTNビルディングブロック151はまた、ある値のセット(キーワード168)の、EXACTLY(キーワード167)、AT LEAST(キーワード166)またはA MAXIMUM OF(キーワード167)がゼロ(zero)またはZEROであってはならないこと(“ANY”の場合)、あるいは、(“ALL”の場合には、)exactly(キーワード167)/at least(キーワード166)/a maximum of(キーワード165)を除く全ての値がそれぞれゼロおよびZEROであるセット(キーワード168)でなければならないことを記述することを可能とする。
【0085】
RTNビルディングブロックの適用における柔軟性は、以下の通りに、既述のRTNビルディングブロック151を用いることによって示すことができる。基本の定義においてANYとは、処理入力セットの現在の要素についての値のセットの少なくとも一つの値がマッチ(一致)して、ゼロでもZEROでもないものでなければならないことを意味している。しかしながら、この関数は、必要であれば、一つ若しくは複数のさらなる上位付けされるまたは導入されるRTNビルディングブロックの各々の修正を許容することによって拡張されてもよい。
【0086】
例13
会社.WHERE ANY [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0087】
ANYは、(例13では、WHEREのポジションにおける)処理関数の少なくとも一つの値が、少なくとも一つのゼロではない値を持たなければならないことを指し示し、従って、少なくとも一人の男性担当者がいる全ての会社を渡す。
【0088】
例14
会社.WHERE ANY (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0089】
(<=3)という拡張を伴うANYが意味しているのは、(例14では、WHEREのポジションにおける)処理関数の最大3つの値が、少なくとも一つのゼロではない値を持たなければならず、従って最大で3人の男性担当者がいる全ての会社を与えるということである。
【0090】
例15
会社.WHERE ALL [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0091】
ALLが意味しているのは、処理関数の全ての値(例15では、WHEREのポジションにおけるもの)が、正確にゼロではない(not ZERO)値を持ってはならないということであり、従って、男性担当者のみ(ONLY)である全ての会社を与えるということである。
【0092】
例16
会社.WHERE ALL (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【0093】
(<=3)という拡張を伴うALLが意味しているのは、(例16では、WHEREのポジションにおける)処理関数の最大3つの値を除いた全てが、ゼロではない値を持つということであり、従って、最大で3人の女性担当者がいる全ての会社を与えるということである。
【0094】
図5は、出力データセットの計算のために、IF THEN ELSE条件を使用するRTNビルディングブロック152を示している。
【0095】
例17
SELECT 会社.会社_名, 会社.都市
IF 会社.従業員_の_数< 100
THEN WHERE 会社.売り上げ2006 >
IF 会社.ZIP = 1010 THEN 500,000 ELSE 300,000
ELSE MAX 会社.売り上げ_2006 # 1000
END IF
ORDERBY 会社.会社_名
【0096】
この例についての問題は、次の通りである。全ての会社を記述し、ここで、100人未満の従業員を有する会社は、正確に100人または100人より多くの従業員を有する会社と比べて他の基準を有している。
会社が100人未満の従業員を有する場合、売り上げ2006が、郵便番号(ZIP)に従って比較されるが、ZIP 1010では、売り上げは > 500,000でなければならず、一方、他の全てのZIPでは、300,000の売り上げと比較される。
少なくとも100人の従業員を有する会社の中で、2006年の売り上げが、全会社のうちで1000の最も大きな売り上げに入る会社のみが選択される。
【0097】
図5におけるRTNビルディングブロック152は、2つの必須な、そして1つの任意選択の(キーワード172の後)(ELSE)決定ポジション70を有しており、そこで全てのRTNビルディングブロックからのRTNビルディングブロックが導入され、キーワード170(IF)および後続する決定ポジション70が、このRTNビルディングブロックが、処理入力セットの現在の要素に関して、このRTNビルディングブロックの処理出力セットとして、キーワード171(THEN)の後の決定ポジション70、または、キーワード172(ELSE)の後の決定ポジション70のいずれを返すのかを決定する。キーワード172(ELSE)および、その結果として決定ポジション70が記述されない場合は、この決定ポジション70についての処理出力セットとしては、TRUE(-1)が仮定される。
【0098】
従って、キーワード173(END)および174(IF)は任意選択(optional)であり、それは、これらのキーワードは明確化のために記述され得るとはいえ、RTNビルディングブロック152の最後は、正確に一つの(EXACTLY ONE)決定ポジション70によって定義されるためである。
【0099】
キーワード170と171との間、またはキーワード171と172との間、またはキーワード172と173との間のそれぞれに、いくつかの決定ポジション70が連続的に導入される場合、2つの可能性がある。
【0100】
第1の可能性は、キーワード173(END)および174(IF)を固定して決定し、その結果として、このRTNビルディングブロックの各決定ポジション70において任意の回数だけ繰り返すことができる呼び出しを可能とするというものであろう。
【0101】
ここで選んだ第2の可能性は、少なくとも一つのキーワードで始まって少なくとも1つのキーワードで終了するRTNビルディングブロックであって、これらのキーワードの間に、任意の回数だけ呼び出し可能な正確に一つの決定ポジション70を有する前記RTNビルディングブロックを使用するということであろう。このRTNビルディングブロックでは、あらゆる所望のRTNビルディングブロックを記述することができ、また、各々のRTNビルディングブロックを、該決定ポジションにおける他の全てのRTNビルディングブロックにおいてのみならず、RTNビルディングブロック152において導入することができる。
【0102】
例18
図6は、一例として、単純化の目的のために、総数が制限されていることが仮定された、互いに隣接して定義されたRTNビルディングブロック250、251、252、253、254、255を示している。
【0103】
使用されるキーワードであるA、B、Cを持った、10個のキーワードを有する次のステートメントが、例18のための基礎として役に立つ。
BACCCBACCA
【0104】
本発明の方法に従う選択ステップでは、RTNビルディングブロック250から255までの全ての内部決定グラフがキーワード261から271までを用いて実行され、そして、決定グラフを通るそれぞれに選ばれた経路79とのマッチ(一致)が見つからずに処理が停止されるか、または、それぞれに選ばれた経路79が最後まで実行されるかのいずれかまで、これらの決定グラフのありうる全ての経路79がたどられる。
【0105】
この処理は、以下の10個のステップからなるが、ステップの個数はキーワードの個数と対応しており、また、この処理を、最後の10ステップの結果として図7に図式的に示している。
【0106】
ステップ1
当該ステートメントにおける1つ目のキーワードである“B”を、RTNビルディングブロック250、251...における各1つ目のキーワードと比較すると、マッチ(一致)するものが以下で見つかる:
RTNビルディングブロック250 → キーワード261(“A”)ではマッチしない
RTNビルディングブロック251 → キーワード263(“A”)ではマッチしない
RTNビルディングブロック252 → キーワード265(“B”)
RTNビルディングブロック253 → キーワード268(“B”)
RTNビルディングブロック254 → キーワード269(“B”)
RTNビルディングブロック255 → キーワード271(“C”)ではマッチしない
このため、RTNビルディングブロック252、253、254のみが、たどられる。
結果(現在の位置に下線を引いている)
RTNビルディングブロック252 B * C
RTNビルディングブロック253 B * A
RTNビルディングブロック254 B A *
【0107】
ステップ2
当該ステートメントにおける次のキーワード(“A”)が使用され、各々のRTNビルディングブロックの現在の2番目のポジションにおけるマッチ(一致)が検索される。この状況における決定ポジション70(“*”)が意味しているのは、任意のRTNビルディングブロックをこのポジションに導入できるということである。それゆえ、決定経路は、決定ポジション70において再帰呼び出し関数を持っており、該再帰呼び出し関数によって、全てのRTNビルディングブロックでの選択ステップの適用の結果としてRTNビルディングブロックの一つが実行されるため、選択ステップの再帰的にネストされた(nested、入れ子)実行が、少なくとも一つの決定ポジションから始めて、所望の回数だけ繰り返され得る。従って、決定ポジション70においては、全てのRTNビルディングブロックからの一つを導入することによってマッチを見つけることができるかどうかも調べなければならない。
RTNビルディングブロック252 → 決定ポジション70(“B” “*”)によってフォローされるキーワード265
RTNビルディングブロック253 → 決定ポジション70 (“B” “*”)によってフォローされるキーワード268
RTNビルディングブロック254 → キーワード269 (“B” “A”)
それゆえ、RTNビルディングブロック252における決定ポジション70では、全てのRTNビルディングブロックからその一つを選択して導入することができる。例えば、RTNビルディングブロック250から255までが導入され、そしてそれらが当該ステートメントとマッチするかどうかが調べられるが、1つ目の決定ポジションにおけるマッチは、RTNビルディングブロック250および251についてのみ見つけることができる。
252に導入された250: B * C → B A B * C
252に導入された251: B * C → B A C * C
253に導入された250: B * A → B A B * A
253に導入された251: B * A → B A C * A
254 B A *
【0108】
ステップ3
252に導入された250: B * C → B A B* C これ以上は続けない
252に導入された251: B * C → B A C* C 継続する
253に導入された250: B * A → B A B* A これ以上は続けない
253に導入された251: B * A → B A C* A 継続する
254 B A * 全てのビルディングブロックの導入
結果:
252に導入された251: B * C → B A C* C
253に導入された251: B * A → B A C* A
254に導入された255: B A * → B A C
【0109】
ステップ4
252に導入された251: B A C * C 全てのRTNビルディングブロックの導入
253に導入された251: B A C * A 全てのRTNビルディングブロックの導入
254に導入された255: B A C 最後まで達したため、これ以上は続けない
結果:
252に導入された251における255: B * C → B A C CC
253に導入された251における255: B * A → B A C CA
【0110】
ステップ5
252に導入された251における255: B A C C C 継続する
253に導入された251における255: B A C C * A 任意の種類の、RTNビルディングブロックにおける決定ポジション70への到達が可能;
253に導入された251における255 B A C C A マッチ(一致)するものがなかったため、これ以上は続けない
結果
252に導入された251における255 B A C C C
253に導入された(251における255、その後に255) B A C C C A
【0111】
ステップ6
252に導入された251における255: B A C C C 最後まで達したため、これ以上は続けない
253に導入された(251における255、その後に255) B A C C C A マッチ(一致)するものがなかったため、これ以上は続けない
253に導入された(251における255、その後に255) B A C C * A 全てのRTNビルディングブロックの導入
結果:
(251における255、続いて255、続いて252)
253に導入されたもの B A C C C B * C A
(251における255、続いて255、続いて253)
253に導入されたもの B A C C C B * A A
(251における255、続いて255、続いて254)
253に導入されたもの B A C C C B A * A
など...
【0112】
ステップ10の結果
253における(251における255、続いて255、続いて254における255、続いて255)
【0113】
図7に示した結果から、ステップ10によって、RTNビルディングブロックの順序および、クエリステートメントの全てのキーワードでの選択ステップの実行の結果としてのそれらのネスティング(nesting)に従って、当該関係データベースシステムのためのアクセスプランが生成され、ここでRTNビルディングブロックのネスティングは、任意に、他のRTNビルディングブロックの決定ポジション70でのRTNビルディングブロックの導入の可能性に起因する曖昧さを適切に解決するために、以下に説明する重み(weighting)によって変える必要がある。
【0114】
各RTNビルディングブロックの最後、および、そこに導入されるRTNビルディングブロックに常に明確に示すためには、次のことが必要であり、それは、キーワード(文字列、記号、変数または数字)を要求する少なくとも一つの決定ポジションが、再帰呼び出し関数(これは前もって決定することができない)の無制限の回数の連続的な呼び出しが行われる決定ポジションにおけるRTNビルディングブロックの決定グラフに前置される(prefixed)こと、および、これもまたキーワードを要求する少なくとも一つの決定ポジションが、これに従うことである。
【0115】
その一例は、決定ポジション70が所望の回数だけ連続して続くことができるRTNビルディングブロック“レベル”であり、このビルディングブロックは、定義により、先行するキーワード(“[”)で始まり、後続するキーワード(“]”)で終了する:“[” (1) * (*1)“]”。
【0116】
ステートメントの定式化における自由度を有する本発明の方法により、以下の論理に従うクエリ言語を定義することが可能となる。
【0117】
関係データベースシステムでは、複数のテーブル(表)および格納されたクエリが想定されており、以下にそれらをセットと呼び、そして、それらを要約する。
【0118】
本発明によれば、複数の予め定められたRTNビルディングブロックが与えられ、ここで各RTNビルディングブロックは、他のRTNビルディングブロックの内部決定グラフからは独立して定義される内部決定グラフを有するものである。複数のRTNビルディングブロックは、少なくとも一つの決定ポジションにおいて、全てのRTNビルディングブロックからの任意の所望のRTNビルディングブロックをこの決定ポジションに導入できることを示す構文上の印を有する。上に示したものにおいては、これは、決定ポジション70に対応している。
【0119】
各RTNビルディングブロックは、少なくとも一つの処理入力セットを割り当てられ、この処理入力セットに基づいて少なくとも一つの処理関数を実行し、処理出力セットを形成する。そうすることによって、RTNビルディングブロックの処理入力セットが、処理関数の実行前に、このRTNビルディングブロックにおける決定グラフ70に導入されるRTNビルディングブロックによって、新たに割り当てられることができるということが意図されている。
【0120】
RTNビルディングブロックへの変換および導入によって、定式化可能な各ステートメントは、使用時にRTNビルディングブロックに割り当てられることになる処理関数とは無関係に、RTNビルディングブロックのネスティングに基づく同一の抽象化形式にさせられる。この同一の抽象化によって、一つの代数(algebra)で、全てのRTNビルディングブロックおよびネスティングの可能性が満たされる。
有限の数の基本のビルディングブロック群を常に宣言することができるが、ここで、上位付けされたまたは導入されたRTNビルディングブロックがそれら独自の異なる定義を指定しない限りにおいて適用されるいくつかの仮定が必要とされる。
【0121】
可能な基本のビルディングブロック群の例(図14、15、16、17)
【0122】
変形1(図14):RTNビルディングブロック601であって、これは、任意のキーワード600および、全てのRTNビルディングブロックから一つのRTNビルディングブロックが導入される正確に一つの決定ポジション70を有しており、ここで、この変形の一つのRTNビルディングブロックは、決定ポジション70の前および/または後のいずれかにおいて、少なくとも一つのキーワード600を指定している。
【0123】
変形2(図15):RTNビルディングブロック602であって、これは、任意のキーワード600および少なくとも2つまたはそれより多い決定ポジション70を有しており、存在する全ての決定ポジション70がそれぞれキーワードによって分けられている。
【0124】
変形3(図16):RTNビルディングブロック603であって、これは、所望の回数だけ呼び出すことができる、排他的に決定ポジション70の前または後に位置する任意のキーワード600を有している。
【0125】
変形4(図17):RTNビルディングブロック604であって、これは、決定経路79の最初および最後に位置する任意のキーワード600を有しており、かつ、決定ポジション70を有しており、その後に、所望の回数だけ呼び出すことができる決定ポジション70が従っており、任意の個数のキーワード600が、1つ目の決定ポジション70の後に従うことができる。
【0126】
任意のステートメントの定式化に由来するネスティングの可能性の全ては、これらまたはさらなる変形あるいはそれらの組み合わせに分けることができる。使用されるRTNビルディングブロックが他の処理方法および処理セットの割り当てをそれぞれ記述していない限りにおいて、これらの変形においてそれぞれに適用される処理ステップを示す。
【0127】
変形1(図8、14)
図14に示す変形1に従って定義される全てのRTNビルディングブロックのRTNビルディングブロックには、以下の処理セットの割り当てが適用される:
上位付けされたRTNビルディングブロックにおいて決定ポジション70が与えられる場合、処理入力セットとしてこのポジションに導入されるさらなるRTNビルディングブロックは、該上位付けされたRTNビルディングブロックに対して割り当てられた処理入力セットを割り当てられる。この処理はネストしたRTNビルディングブロックの最も内部まで実行されるため、該処理入力セットは常に、決定ポジション70において直接的に導入される各々のRTNビルディングブロックに受け渡される。
他のRTNビルディングブロックが、該導入されたRTNビルディングブロックに導入されない場合、導入されたRTNビルディングブロックの処理関数がその割り当てられた処理入力セットに対して適用され、そして、生成した、導入されたRTNビルディングブロックの渡される処理出力が新たな処理入力セットとして該上位付けされたRTNビルディングブロックに割り当てられ、続いて、該上位付けされたRTNビルディングブロックの処理関数が実行される。この適用の結果が、該上位付けされたRTNビルディングブロックの処理出力セットとして渡される。それゆえ、この原理により、望むだけ頻繁なRTNビルディングブロックのネスティングが可能となる。
【0128】
従って、図8は、次に従ってネスティングにしたに従うネストしたRTNビルディングブロック407、408、409を示す。
RTNビルディングブロック407(キーワード+決定ポジション70)
RTNビルディングブロック408(キーワード+決定ポジション70)
RTNビルディングブロック409(キーワード)
【0129】
処理入力セット401がRTNビルディングブロック407に受け渡され、次いで導入されたRTNビルディングブロック408に対してその処理入力セット402として受け渡され、それが今度は、RTNビルディングブロック408に導入されるRTNビルディングブロック409に同様にして渡される。
【0130】
最も内部のネスティング点(nesting point)までいったん達すると、RTNビルディングブロック409の処理関数が処理入力セット403に対して適用され、そしてその結果が処理出力セット404として、RTNビルディングブロック408に対して新たな処理入力セットとして受け渡される。
【0131】
ここでRTNビルディングブロック408の処理関数が新たな処理入力セット404に対して適用され、その結果が、処理出力セット405として、そして、RTNビルディングブロック407に対する新たな処理入力セットとして、受け渡される。
【0132】
次のステップでは、次なる外部のRTNビルディングブロック(すなわち、RTNビルディングブロック407)の処理関数がその新たな処理入力セット405に対して適用され、そしてその結果が、RTNビルディングブロック407の処理出力セット406に格納される。
【0133】
しかしながら、既に上述したように、個々のRTNビルディングブロックのための異なる定義を排除してはならない。
【0134】
変形2(図9、15)
図15に示した変形2に従って定義される全てのRTNビルディングブロックのうちのRTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
それぞれの場合において、上位付けされたRTNビルディングブロックにおける2つまたはそれより多い決定ポジション70の間に少なくとも一つのキーワードが存在する場合には、毎回、同じ処理入力セット(すなわち、上位付けされたRTNビルディングブロックの処理入力セット)が、決定ポジション70に直接的に導入されるRTNビルディングブロックに対して割り当てられ、外部のおよび/または少なくとも一つの導入されたRTNビルディングブロックが異なる定義を用いている特殊な場合でなければ、生成する全ての処理出力セットが、上位付けされたRTNビルディングブロックの処理関数の処理入力セットとして受け渡される。
【0135】
図9は、RTNビルディングブロック417に導入されるキーワード420によって連結されたRTNビルディングブロック418および419を示している。この変形は、例えば、RTNビルディングブロックの算術または論理演算において適用される。
【0136】
RTNビルディングブロック417(決定ポジション70+キーワード420+決定ポジション70)
RTNビルディングブロック418 RTNビルディングブロック419
【0137】
処理入力セット411が上位付けされたRTNビルディングブロック417に受け渡され、次いで、導入されるRTNビルディングブロック418に対して、その処理入力セット412として渡される。その後、RTNビルディングブロック418の関連する処理関数が処理入力セット412に対して適用され、処理出力セット413に格納される。
【0138】
また、RTNビルディングブロック419は処理入力セット414として、上位付けされたRTNビルディングブロック417の処理入力セット411を受け取る。次いで、RTNビルディングブロック419の関連する処理関数がその処理入力セット414に対して適用され、処理出力セット415に格納される。
【0139】
次のステップでは、上位付けされたRTNビルディングブロック417が、処理出力セット413および415を、その2つの新たな処理入力セットとして割り当てられ、それらに対してそれ以後に、その処理関数が適用された後、1つの処理出力セット416に記憶される。
しかしながら、既に上述したように、個々のRTNビルディングブロックのための異なる定義を排除してはならない。
【0140】
変形3(図10、16)
図16に示した変形3に従って定義される全てのRTNビルディングブロックのうちの各RTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
上位付けされたRTNビルディングブロックは、決定ポジション70に所望の回数だけ連続的に達することを可能とする決定経路を有する(図6におけるRTN253を参照)。
【0141】
この場合には、当該順序の1番目のポジションで導入されるRTNビルディングブロックは上位付けされたRTNビルディングブロックの処理入力セットを取り出し、他の連続的なRTNビルディングブロックのそれぞれは、処理入力セットとして、先行するものの処理出力セットを使用し、そして順序が最後であるRTNビルディングブロックは、その処理出力セットを、上位付けされたRTNビルディングブロックに対して処理入力セットとして渡し、上位付けされたRTNビルディングブロックは、外部のまたは少なくとも一つの導入されたRTNビルディングブロックが異なる定義を用いている特殊な場合でなければ、その処理関数を実行するというのが適用される。そうすることによって、別の箇所で既に述べたように、SQLと比較して大幅に自由なクエリの実行が可能となる。
【0142】
図10は、上位付けされたRTNビルディングブロック427の中で互いに続いているRTNビルディングブロック428、429、430を示しており、上位付けされたRTNビルディングブロック427においては、最初および最後のRTNビルディングブロックを除いて、与えられたRTNビルディングブロックの順序で、先行するRTNビルディングブロックの各処理出力セットが、後続するRTNビルディングブロックの処理入力セットとして取り出され、そして、各々のRTNビルディングブロックに対して割り当てられる処理関数が適用される。
【0143】
具体的には、上位付けされたRTNビルディングブロック427の処理入力セット421が、順序としては最初にくるRTNビルディングブロック428の処理入力セット422として受け渡され、そこにその処理関数が適用され、処理出力セット423を生成する。後者が、2つ目のRTNビルディングブロック429の処理入力セット423として渡される。同様にして、これが、後続するRTNビルディングブロック430および生成した処理入力セット424について起こり、その処理出力セット425が、上位付けされたRTNビルディングブロック427の処理関数が適用される新たな処理入力セットとして取り出され、その結果として処理出力セット426が渡される。
【0144】
変形3の可能な一つの有用な再定義は、以下のセットの割り当ての特性を有するRTNビルディングブロック446によって与えられ、それを図12に示している。
【0145】
しかしながら、上位付けされたRTNビルディングブロック446は、決定ポジション70に所望の回数だけ連続的に達することができることを可能とする決定経路を有する。
【0146】
特殊なRTNビルディングブロック446の定義によれば、決定ポジション70で直接的に導入される全てのRTNビルディングブロック447、448、449が、上位付けされたRTNビルディングブロック446の処理入力セット441を割り当てられることが適用される。
【0147】
上位付けされたRTNビルディングブロック446の処理入力セットとして、直接的に導入される全てのRTNビルディングブロック447、447、449の処理出力セット442、443、444が受け取られ、そして、処理関数の適用後、処理出力セット445に格納される。
【0148】
例えば自身のRTNビルディングブロックによって決定される、このRTNビルディングブロック446の可能な処理関数の例:
1. 導入されるRTNビルディングブロックの全ての処理出力セットの特定の個数(少なくとも、正確に、最大、...)を有する全ての要素(ANY (*))
2. 少なくとも/最大で/正確に特定の個数を除いた、それぞれ、導入されるRTNビルディングブロックの各処理出力セットにある全ての要素、および、全ての処理出力セットにある全ての要素(ALL (*))
【0149】
別個のRTNビルディングブロックを用いることによって、導入されるRTNビルディングブロックの一つより多くの処理出力セットにおいて存在する要素が、上位付けされたRTNビルディングブロックの処理出力セットにおいて、1度または複数回、受け取られるべきかどうかを記述することもできる。
【0150】
この上位付けされたRTNビルディングブロック446の処理関数のためのパラメータとしてRTNビルディングブロックが与えられない場合、導入されるRTNビルディングブロック447、448、449の処理出力セット442、443、444の少なくとも一つに存在する全ての要素が重複なく渡されなければならないことが仮定される。
【0151】
変形4(図11、13、17)
図17に示した変形4に従って定義される全てのRTNビルディングブロックのうちのRTNビルディングブロックについては、処理セットに関する以下の割り当てが適用される:
上位付けされたRTNビルディングブロック(例、図11におけるRTNビルディングブロック457、または、図13におけるRTNビルディングブロック477)は、1つ以上のキーワード600の後に決定ポジション70を指定する決定経路を有しており、該決定ポジション70の後に、任意の個数のキーワード600が続くことができ、かつ、該決定経路は、所望の回数だけ連続的に決定ポジション70に達することを可能とし(図6におけるRTN253を参照)、これは少なくとも一つのキーワード600によって終了する。
【0152】
この変形のRTNビルディングブロックに対しては、1つ目の決定ポジション70が上位付けされたRTNビルディングブロックの処理入力セットのデータを使用し、また、決定ポジション70に導入されるRTNビルディングブロックの処理出力セットを用いることによって、このRTNビルディングブロックの処理関数が実行されるということが適用され、一方、所望の回数だけ呼び出すことができる決定ポジション70で導入される他の全てのRTNビルディングブロックについては、変形3に関して記載した論理(ロジック)(図16)がセット割り当てに適用され、所望の回数だけ呼び出すことができる決定ポジション70の1つ目のRTNビルディングブロックは、1つ目の、繰り返し可能ではない決定ポジションにおけるRTNビルディングブロックの処理出力セットを、その処理入力セットとして割り当てられる。少なくとも一つのキーワード600で印をされている上位付けされたRTNビルディングブロックの最後に達した時点で、少なくとも一つのさらなる処理関数を、所望の回数だけ呼び出すことができる決定ポジション70の最後のRTNビルディングブロックの処理出力セットに対して適用することができる。
【0153】
図11には、変形4のRTNビルディングブロックを示しており、これは、上位付けされたRTNビルディングブロック457の1つ目の決定ポジション70において、上位付けされたRTNビルディングブロック457の処理入力セット452にアクセスするRTNビルディングブロック458を導入しており、ここで処理入力セット452は、処理入力セット451に一致している。
このRTNビルディングブロック457の処理関数は、最初に、グループ化を実行し、それは、各々のグループ化される要素を参照して、処理入力セット452の要素についてのRTNビルディングブロック458の処理出力セット453の同一の値のセットに従って行われる。このようにして、処理入力セット452として渡される処理入力セット451は、17個の要素を含んでいる。RTNビルディングブロック458の処理関数の結果として、処理出力セット453において、これらは5つの異なる要素にグループ化され、ここで各要素は、結合された個々の要素によって各々のセットを参照する(セット461、462、463、464、465)。いま、処理出力セット453は、RTNビルディングブロック459のための処理入力セットである。要素が、導入されるRTNビルディングブロック459および460の後続する処理関数によって、各々の処理出力セット454、455から除かれる場合、割り当てられた要素のセット(図11ではセット461および463)に対する参照もまた削除される。このRTNビルディングブロックを完了したときに、RTNビルディングブロック457の処理出力456における処理出力セット465の割り当てられたセット(セット462、464、465)の全ての要素がRTNビルディングブロック457の処理出力セット456に書き込まれることが定義される。この最後の処理関数は、RTNビルディングブロック457における少なくとも一つの任意選択のキーワードを通じて、または、後続するRTNビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【0154】
図13には、変形4の一つのRTNビルディングブロックを示しており、これは、上位付けされたRTNビルディングブロック477の1つ目の決定ポジション70において、上位付けされたRTNビルディングブロック477の処理入力セット472にアクセスするRTNビルディングブロック478を導入しており、ここで処理入力セット472は、処理入力セット471に一致している。
【0155】
このRTNビルディングブロック477の処理関数は、最初に、処理入力セット472の要素に対して、RTNビルディングブロック478の処理出力セット473の同一の値のセットに従ってグループ化を実行し、各々同じにグループ化されるべき要素は、処理出力セット473の同一の出力データセットに独立に書き込まれる。
このRTNビルディングブロック477の存在によって仮定されるのは、各処理入力セットおよび各処理出力セットが、それぞれ、少なくとも一つの入力データセットおよび少なくとも一つの出力データセットを含んでおり、ここで、該処理入力セットおよび該処理出力セットのデータセット内の個数、内容および順序は、同一でなくても良いということである。それぞれ、入力データセットおよび出力データセットが記述されていない場合には、各処理入力セットおよび各処理出力セットは、全ての要素を含む、それぞれ、正確に一つの入力データセットおよび出力データセットを含む。全ての処理関数が、各々のRTNビルディングブロック(図13では:479、480)の処理入力セット(図13では:473、474)の全ての入力データセットに対して独立して適用され、そしてそれに対応して、出力データセットがまだ要素を含んでいる場合には、各々のRTNビルディングブロック479、480の処理出力セット474、475の出力データセットに書き込まれる。このRTNビルディングブロックを完了したときに、処理出力セット475の全ての出力データセットが、RTNビルディングブロック477の処理出力セット476の同一の出力データセットに書き込まれることが定義される。この最後の処理関数は、RTNビルディングブロック477における少なくとも一つの任意選択のキーワードを通じて、または、後続するRTNビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【0156】
図13を参照することによって明確となるのは、RTNビルディングブロックが異なる定義を指示していなければ、RTNビルディングブロックの各処理関数は、その処理入力セットを参照し、かつ、常に、その処理入力セットにおける全ての入力データセットの全ての要素で独立して実行され、その処理出力セットのそれぞれ同一および他の出力データセットに格納されるということである。
【0157】
該RTNビルディングブロックは、処理入力セットを割り当てられる。従って、RTNビルディングブロックに対する処理入力セットの割り当てを独立して記述するRTNビルディングブロックを与えることができる。
【0158】
RTNビルディングブロックのさらなる可能な特徴付けを、以下の通りに実行することができるが、一例として述べており、この特徴づけに関しても限定はない。その上、エンジン(engine)による処理に関するアプローチがあることがはっきりと明らかである。
【0159】
一つのセットとしてデカルト積(カルテシアン積)の処置を施すこと(RTNビルディングブロック“FROM”)、および、それぞれの場合において、要素ごとに全体的な2つ目のセットへ進み、そしてそうすることにより、これもまたデカルト積に到達すること、の両方が可能でなければならず、ここで、この場合の値は、該2つ目のセットの基準に依存して該1つ目のセットの各要素に従って計算されて渡される(RTNビルディングブロック“レベル”)。
【0160】
RTNビルディングブロック“FROM”
“FROM”は、このRTNビルディングブロックの決定ポジション70において指し示されるRTNビルディングブロックが生成するセットについてのデカルト積を形成し、そしてそれを、その上位付けされたRTNビルディングブロック“レベル”の1つ目の決定ポジション70におけるRTNビルディングブロックのための処理入力セットとして利用できるようにする。
【0161】
RTNビルディングブロック“レベル”
“レベル”は、このRTNビルディングブロック(“レベル”)中で決定ポジション70においてその後に記述されたRTNビルディングブロックの全ての処理関数を、このRTNビルディングブロック(“レベル”)が含まれるRTNビルディングブロックの処理入力セットの各要素に従って段階的に実行し、ここで、各RTNビルディングブロックの処理入力セットは、直前のRTNビルディングブロックの処理出力セットである。変形3のこのRTNビルディングブロックの特異な点は、このRTNビルディングブロックは、そこに導入される1つ目のRTNビルディングブロックのための処理入力セットとして、その処理入力セットを渡さず、1つ目のRTNビルディングブロックのための処理入力セットは、それ自身のRTNビルディングブロック(例、RTNビルディングブロック“FROM”の処理出力セット)を用いて定義されるか、または、このRTNビルディングブロックで使用されるそれぞれ、全てのセットおよびテーブルの、全ての合計から定義されるということである。
【0162】
このRTNビルディングブロック“レベル”に1つ目の決定ポジション70において導入されるRTNビルディングブロックは、RTNビルディングブロック“レベル”において、特定のRTNビルディングブロック(例、“FROM”)の処理出力セットによる処理入力セットとして定義されるセット(テーブル、格納されたクエリまたはデカルト積)を、処理入力セットとして受け取る。導入されるRTNビルディングブロックのための処理入力セットがRTNビルディングブロック”レベル”で定義されていない場合、この処理入力セットは、データベース固有の特性によって、例えば、グラフの理論、関係のテーブル、およびこのRTNビルディングブロック“レベル”における全ての記述されたRTNビルディングブロック“テーブル”によって、RTNビルディングブロック“レベル”におけるネスティングとは無関係に、決定することができる。
【0163】
最も外側のRTNビルディングブロック“レベル”には、それを導入することができ、かつ、その処理入力セットを受け取ることができる取り囲むRTNビルディングブロックがないため、一つの要素を有する抽象的な開始のセットが受け取られ、ここで該要素には、抽象化された様式で、あらゆる数字、定数、文字およびグローバル関数などが含まれる。
【0164】
各RTNビルディングブロック“レベル”は、それ自身およびそこにネストされた全てのRTNビルディングブロックに、上位付けされたRTNビルディングブロックによって渡される、その処理入力セットの情報の全ての構成要素(例、全てのテーブルフィールド)を有する各々の現在の要素を与え、ここでまた、“最も深く”ネストされたRTNビルディングブロックは、全てのRTNビルディングブロック“レベル”の情報のそれらの構成要素へのアクセスを持つ。
【0165】
RTNビルディングブロック“レベル”の処理出力セットは、最後の繰り返し可能な決定ポジション70においてRTNビルディングブロック“レベル”に導入される、最後のRTNビルディングブロックの処理出力セットである。
【0166】
RTNビルディングブロック“処理_同一の親”
このRTNビルディングブロックを図12に示し、上で説明したが、これは、そのセット割り当てが、変形3のための一般的な説明とは一致しないため、“特殊な”セット割り当てのグループに挙げられる。
【0167】
このRTNビルディングブロックに導入される全てのRTNビルディングブロックは、直前に位置するRTNビルディングブロックの処理出力セットを割り当てられず、その代わりに、RTNビルディングブロック 処理_同一の親の処理入力セットを割り当てられる。
RTNビルディングブロック 処理_同一の親の処理出力セットは、このRTNビルディングブロックに導入された全ての要素の全ての処理出力セットの全ての要素である。付加的なRTNビルディングブロックにパラメータとして依存して、このRTNビルディングブロックの処理出力セットもまた、全てまたは特定の(正確な、最小の、または最大の)個数で存在する要素のみを含み得る。RTNパラメータ要素(RTN parameter elements)によって、処理出力セット中に複数(multiply)存在する要素がこの要素の処理出力セットにおいて数回、複数(multiply)格納されるかどうか、あるいは、1回のみ格納されるべきかまたは全く含められないべきかどうかについても決定することができる。
【0168】
RTNビルディングブロック“処理_先行する親(PrevParents)“
このRTNビルディングブロックに導入される全てのRTNビルディングブロックは、処理入力セットとして、直前のRTNビルディングブロックの処理出力セットを割り当てられ、それにより、このRTNビルディングブロックは、変形3に従うセット割り当てと一致する。このRTNビルディングブロックにより、例えば、RTNビルディングブロック 処理_同一の親において、または、決定ポジション70を1つだけ許容する他のRTNビルディングブロックにおいて、一つのRTNビルディングブロックが、いくつかの連続的、かつ段階的に順次実行される処理関数の処理出力セットを渡すことができるようになる。
【0169】
RTNビルディングブロック“BreakOn”
各処理関数は、処理入力セットにおける全ての入力データセットにおいて独立して実行される。いくつかのデータセットへの分割が行なわれる場合、これは、RTNビルディングブロック“BreakOnによって行なうことができ、それぞれの場合において、1つ目の決定ポジション70において導入されるRTNビルディングブロックの処理出力セット(この処理出力セット中にいくつかの要素がある場合には、それぞれ“ALL”および“ANY”の使用が有用である)のために同一の値を渡すRTNビルディングブロック“BreakOn”の処理入力セットの要素が、それぞれに同じデータセットに書き込まれる。
【0170】
一つのデータセットへの結合は例えば、RTNビルディングブロック“BreakOn”において所望の回数だけ繰り返すことができる決定ポジション70の後の少なくとも一つのキーワード(例、“END”、“BREAKON”)によって決定することができる。
【0171】
RTNビルディングブロック“GroupBy”
処理入力セットおよび処理出力セットの各要素は、それぞれの場合において、一つの値のセットを割り当てられ得る。
多くの問題は、同一の値に従ってグループ化すること、および、各グループ化された要素について任意に、この要素と一緒のグループとされた要素を記憶することを必要とさせる。これは、RTNビルディングブロック“GroupBy”によって決定されるが、一方、RTNビルディングブロック“GroupBy”の処理出力セット中の要素に従って割り当てられるセットの全ての要素を書き、それによって処理関数の完了後にグループ化を削除ことが可能である。これは、所望の回数だけ呼び出すことができる決定ポジション70の後の少なくとも一つのキーワード(例、“END GROUPBY”)によって決定することができる。ステートメント中にそのようなキーワードが与えられない場合、グループ化が、それを初めて使用したときから、各々の上位付けされたRTNビルディングブロックにおける後続する全ての処理関数のために残ったままである。
【0172】
RTNビルディングブロック“OrderBy”
各セットの要素は常に、ある順序で並べられる。最適化の後では、全ての処理関数がこの順序を固持するわけではない。
【0173】
それゆえ、RTNビルディングブロック(“OrderBy”)が提供され、これは、その処理入力セットの全ての入力データセットの要素を、ソートされた与えられた値および値のセットにそれぞれ従って、互いに独立して格納する。
【0174】
それぞれの有用なセット処理関数および値計算関数を各々、または表示関数なども、RTNビルディングブロックによって定義して、クエリにおいて実行することができる。以下において、セット処理関数のいくつかの例を挙げる。
【0175】
RTNビルディングブロック“WHERE”
このRTNビルディングブロックは、処理入力セットの各要素に対して、このRTNビルディングブロック“WHERE”の決定ポジション70におけるRTNビルディングブロックがゼロでない値を渡すときにのみこの要素が処理出力セットに書き込まれることを決定するために使用される。値のセットが渡される場合、定義は、決定ポジション70においてRTNビルディングブロック“ALL”および“ANY”のそれぞれによって決定することができる。
【0176】
RTNビルディングブロック“MIN”/“MAX”
それぞれの場合において一つのデータセットから、セット全体のうちの各要素についての計算の、それぞれ最大値および最小値に一致する要素のみが選択されるべき場合には、これは、それぞれRTNビルディングブロック“MIN”および“MAX”によって決定することができる。最大値および最小値のそれぞれの、あるセットが渡される場合には、これは、決定ポジション70において導入されるRTNビルディングブロックの処理出力セットの要素の個数を制限する上位付けされたRTNビルディングブロック(“セット要素”)によって実行することができる。
【0177】
RTNビルディングブロック“セット要素の制限(set element limiting)”
現在のソートに基づく処理出力セットの現在のデータセットのそれぞれから、ある個数の要素のみを渡すのであれば、この場合には、RTNビルディングブロック“セット要素制限(set element limited)”を上位付けされたRTNビルディングブロックとして使用することができる。このRTNビルディングブロックは、その処理入力セットの、正確にX番目の要素(“=”)、X番目の要素までの全ての要素(“<=”)、またはX番目の要素から始まる全ての要素(“>=”)が、その処理出力セットにおいて取り出されることを決定する。処理入力セットにおける現在のデータセットの要素の個数についてのあるパーセンテージに対して、制限を決定することもできる(“%”)。
【0178】
RTNビルディングブロック“FIND”
各処理関数が、その処理入力セットの全ての入力データセットに対して各要素についてそれぞれに実行され、処理出力セットのデータセットの要素が、上位付けされたおよび後続するRTNビルディングブロックのそれぞれのための処理入力セットとして受け取られる。
特定のRTNビルディングブロック(“FIND”)を使用することによって、RTNビルディングブロック“FIND”の処理出力セットが、変えられることなくこのRTNビルディングブロックの処理出力セットに一致し、ここでそれが、決定ポジション70においてRTNビルディングブロック“FIND”に導入されるRTNビルディングブロックの処理出力セットに存在する要素が、RTNビルディングブロック“FIND”の処理出力セットにおいて渡された順序で印をされるという特徴を有しているものであることが決定される。次いで、後続するRTNビルディングブロックのそれぞれが、データのセット全体ではなく、それぞれに印をされた要素に対して、後続する要素(RTNビルディングブロック“NEXT”)または先行する要素(RTNビルディングブロック“PREV”)に関して、それらの処理関数を独立に実行する。それより先では、処理関数において見つかった要素が印をされるのみである。
このRTNビルディングブロックを使用するときには、RTNビルディングブロック“ORDERBY”を前以て適用しておくことがかなり有用である。
後にデータのセット全体へのアクセスが行なわれる場合、これは例えば、RTNビルディングブロック“FIND”における拡張によって行なうことができ、それは、1つ目の決定ポジション70(例、“:”)の一つの後に従うキーワードの後に所望の回数だけ決定ポジション70を呼び出すことを可能とし、従って必然的に少なくとも一つのキーワード(例、“END”、“FIND”)を指示するものである。このキーワードが見つかった時点で、決定ポジション70(これは、可能な回数だけ呼び出すことができる)におけるRTNビルディングブロック“FIND”中の最後のRTNビルディングブロックの処理出力セットの印をされた全ての要素を、このRTNビルディングブロックの処理出力セットに書き込み、そして他の要素にはこれ以上印をしないことによって、後続する処理関数は再び、データのセット全体にアクセスする。
【0179】
RTNビルディングブロック“NEXT”/“PREV”
各処理関数が、処理データセット中の各要素に対して個々に適用される。それにより、例えば、各々の現在の要素を、後続する(“NEXT”)または先行する(“PREV”)要素の値と比較することが可能となる。RTNビルディングブロック“NEXT”が上位付けされたRTNビルディングブロックを持たない場合、それぞれの場合におけるセット全体から、X番目の要素のみ(“=”)、X番目の要素までの全ての要素(“<=”)、またはX番目の要素から始まる全ての要素(“>=”)が、このRTNビルディングブロックの処理出力セットとして渡される。
【0180】
RTNビルディングブロック“ANY”/“ALL”
例えば、RTNビルディングブロック“比較”(これは、両方とも決定ポジション70において導入されるRTNビルディングブロックの処理出力セットを比較する)では、導入されるRTNビルディングブロックの少なくとも一つが値のセットを返す場合に、全ての(“ALL”)返された値または少なくとも一つの(“ANY”)返された値が、比較されたときにマッチしなければならないかどうかを決定することができる。“ANY”では、正確に(“=)、少なくとも(“>=”)または最大で(“<=”)ある個数の要素が、比較についてマッチしなければならないことも決定することができる。“ALL”では、比較は、正確に(“=”)、少なくとも(“<=”)または最大で(“>=”)X個の要素にマッチしなければならないことをいうことができる。
【0181】
RTNビルディングブロック“中間セット”
RTNビルディングブロックの処理出力セットが他のRTNビルディングブロックとのさらなる処理のために格納されるべき場合、これは、上位付けされたRTNビルディングブロック“中間セット”によって実行することができる。このRTNビルディングブロックは、その処理入力セットが、変数名として記述されたセットに一時的に格納され、後続する全てのRTNビルディングブロックによって処理入力セットとして使用され得るということを指示する。
【0182】
RTNビルディングブロック“DO LOOP”
ある問題では、RTNビルディングブロック“DO LOOP”におけるキーワード“DO” “:”の後で決定ポジション70に導入されるRTNビルディングブロックの処理入力セットの各要素の後で(その要素は、導入されるRTNビルディングブロックの処理関数に付される)、キーワード“UNTIL”の後の決定ポジション70において記述されたRTNビルディングブロックの処理出力セットがゼロでないかについて、またはZEROでないかについて調べられること、および、それに依存して、このRTNビルディングブロックのための処理関数が終了されることが必要であり得る。
【0183】
例19
選択された会社の売り上げ2006が、100,000ユーロよりも大きな総計となるまで、ウィーンの全ての会社を受け取る。
SELECT
DO:
WHERE (会社.都市=“ウィーン”)
LOOP UNTIL
SUM (会社.売り上げ2006) > 100000
RTNビルディングブロック“セット要素の形成” “,”を用いることにより、両方ともこのRTNビルディングブロックの決定ポジション70で導入されるRTNビルディングブロックの2つの処理出力セットは、このRTNビルディングブロックの結合された処理出力セットに結合される。
【0184】
さらなるRTNビルディングブロックとしては、現在の関係データベースにおける、それぞれ、全てのテーブルおよび格納されたクエリの名前ならびにテーブルおよびクエリフィールドの名前を含む、それぞれRTNビルディングブロック“テーブルRTNビルディングブロック”および“テーブルフィールドRTNビルディングブロック”であり、その他にはまた、RTNビルディングブロック“変数”、“数”、“定数”(有効な定数の定義)、“グローバル関数”(別の言語における“CurrentUser()”などの組み込み関数をユーザーが定義するため)、比較(“>”,“>=”,“<=”,“<>”,“=”,“BETWEEN”,“IN”,...)のための、論理演算(“AND”,“OR”,“XOR”,...)のための、論理否定(“NOT”)のための、RTNビルディングブロックへの結合のための(“()”)、およ
び、コンピュータの演算
のための、RTNビルディングブロックがある。
好ましい変形は、集約関数(“count”、“all”、“none”、“sum”、“AVG”、“percent”,...)のためのRTNビルディングブロックであり、それらは、それらに対して割り当てられた処理入力セットの要素にそれぞれ適用され、各入力データセットについて正確に一つの値をその出力データセットにおいて再び渡す。
それぞれデータ操作およびデータ出力のためのRTNビルディングブロックが必要である。先行技術でのこの種のコマンドを、例えば“SELECT”、“UPDATE”、“INSERT INTO”および“DELETE”がそうであるように、RTNビルディングブロックとして好適に採用することができる。
【0185】
SQLで使用可能なジョイン(join)リンクである“left join”、“right join”、inner join”および“outer join”を定義するRTNビルディングブロックが導入されてもよい。OLAP、T−SQL、GEO−SQLの関数、および他のSQLの拡張において定義される関数を含むRTNビルディングブロックがあってもよい。
【0186】
さらには、例えばRTNビルディングブロック“IN”でそうであるように、変換可能なRTNビルディングブロックを定義することが可能である:Value IN (1, 2, 3, 4, 5)をRTNビルディングブロック* “IN” “(”*“)”として定義することができ、ここで、* “,” *は、それ自身のRTNビルディングブロックである。RTNビルディングブロックINは、value = ANY (1, 2, 3, 4, 5)と同一であり、これらのRTNビルディングブロックに変換されるか、または、それ自身エンジンによって処理されるかのいずれであってもよい。
同様のことは、可能なRTNビルディングブロックUNION (ALL)、INTERSECT、EXCLUDEについても成立し、これらは、重複を伴わない(UNION)か、または、伴う(UNION ALL)かのいずれかでセットを結合し、記述された両方のセットに存在する要素のみを受け取る(INTERSECT)か、あるいは、2つのセットのいずれにも存在しない要素のみを受け取る(EXCLUDE)。これらのRTNビルディングブロックは、任意にRTNビルディングブロック“Group By”を伴うRTNビルディングブロック“ANY”/“ALL”と組み合わせて表すことができ、また、これらのRTNビルディングブロックに変換することもできる。
【0187】
(1, 2, 3, 4) UNION ALL (3, 4, 5, 6) = ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
>=1は、基準として受け取られ、記述される必要はない。
(1, 2, 3, 4) UNION (3, 4, 5, 6) = GROUPBY ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
は、オプティマイザーによって異なるようにして処理することができる。
(1, 2, 3, 4) INTERSECT (3, 4, 5, 6) = ALL (1, 2, 3, 4), (3, 4, 5, 6)
(1, 2, 3, 4) EXCLUDE (3, 4, 5, 6) = ANY (=1) (1, 2, 3, 4), (3, 4, 5, 6)
【0188】
明らかなように、UNIONなどでそうであるように、ANYおよびALLによって、2つより多くのセットを用いたはるかに正確な記述を作成することができる。また、これらのRTNビルディングブロックの定義は、より簡便な適用性という理由のみならず、SQLとの互換性という理由からも実行することができるが、それは特に、多数のRTNビルディングブロックの存在は、不都合をもたらさないためである。
【0189】
同様のことは、RTNビルディングブロック“AND”、“OR”/“XOR”を用いても行なうことができる:
これらのRTNビルディングブロックは、RTNビルディングブロック“ANY”/“ALL”をRTNビルディングブロック“処理_同一の親”と結合することによって表すことができ、また、これらのRTNビルディングブロックに変換することができる。
【0190】
【0191】
WHERE (会社.業種=“販売”) AND (会社.[従業員.count]>100)
は、例えば、このようにもまた表すことができ、それは、1つ目の外部のRTNビルディングブロック“WHERE”の処理出力セットが、処理入力セットとして2つ目の外部のRTNビルディングブロック“WHERE”に渡されるためである:
WHERE (会社.業種=“販売”) WHERE (会社.[従業員.count]>100)
【0192】
変換可能なRTNビルディングブロックはさらに、例えば、RTNビルディングブロック“セット要素の制限”であり、これは、RTNビルディングブロック“FOR-NEXT”、“IF THEN ELSE”に変換することができ、これらは、RTNビルディングブロック“SELECT CASE”、RTNビルディングブロック“count”に変換することができ、これらは、RTNビルディングブロック“SUM”および“1”などに変換することができる。
【0193】
クエリはRTNビルディングブロックからなり、具体的には、必要な個数のRTNビルディングブロックを、与えられた順序で有するRTNレベル要素(RTN level element)からなる。
【0194】
定義により、決定グラフの決定ポジション70で始まるRTNビルディングブロックが存在する。各ステートメントにおいて使用されるRTNビルディングブロックを決定するためには、RTNビルディングブロックを2つの包括的(generic)グループに分けるため、および、さらなる処理のために各RTNビルディングブロックについて対応する包括的グループを記憶するために、1つ目のステートメントでの選択ステップの適用の前に変換ステップを実施することが必要である。
【0195】
選択ステップの適用前の変換ステップでは、各RTNビルディングブロックが第1または第2の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるRTNビルディングブロックは第1の包括的グループに割り当てられ、かつ、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるRTNビルディングブロックが、第2の包括的グループに割り当てられ、かつ、第1の決定ポジションが削除されるよう、および、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第1の包括的グループの全てのRTNビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第2の包括的グループのRTNビルディングブロックが、該選択ステップが第2の包括的グループのRTNビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加される。
【0196】
一例として以下では、決定グラフにおける1つ目の決定ポジションとして決定ポジション70を有さないRTNビルディングブロックの変換を示す:
“(”*“)”
は、
“(” 第1の包括的グループのRTNビルディングブロック “)”[第2の包括的グループのRTNビルディングブロック]
に変換される。
【0197】
一例として、次のものでは、決定グラフにおいて、1つ目の決定ポジションとして決定ポジション70を有し、かつ、最後の決定ポジションとして決定ポジション70を有するRTNビルディングブロックの変換を示す:
* (“+”1/2“-”) *
は、
(“+”1/2“-”)RTNビルディングブロックであって第1の包括的(generic)グループのものへと変換される。
【0198】
一例として、次のものでは、決定グラフにおいて、1つ目の決定ポジションとして決定ポジション70を有し、かつ、最後の決定ポジションとして決定ポジション70を有さないRTNビルディングブロックの変換を示す:
* “IN” “(”*“)”
は、第2の包括的グループに割り当てられ、かつ、
“IN” “(” 第1の包括的グループのRTNビルディングブロック “)” [第2の包括的RTNビルディングブロック]
に変換される。
【0199】
与えられる各ステートメントを先行技術のアルゴリズムを通じてRTNビルディングブロックに変換し、以ってクエリを定式化するときにRTNビルディングブロックの完全な柔軟性を使用することを可能とすることが、この変換ステップによって保証される。
【0200】
この変換ステップの後で、各RTNビルディングブロックは、少なくとも一つの文字列、少なくとも一つの記号、一つの変数または一つの数字で始まり、そしてそれ以降、各選択ステップは、第1の包括的グループのRTNビルディングブロックに対してのみ、または、第2の包括的グループのRTNビルディングブロックにおいてのみ、適用される。さらには、この変換ステップの後、第2の包括的グループのRTNビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意に呼び出される。
【0201】
具体的には、当該2つの包括的グループへの必要とされる変換は、RTNビルディングブロックのネスティングをもたらし、これはさらなる処理に適用されないが、その理由は、それぞれの場合において、ステートメント中に存在するならば第1の包括的グループの一つのRTNビルディングブロックは、第2の包括的グループのRTNビルディングブロックを呼び出すが、ここで第2の包括的グループのこのRTNビルディングブロックは常に、第1の包括的グループの少なくともこの呼び出しのRTNビルディングブロックに対して上位付けされるためである。
定義により、決定グラフにおいて決定ポジション70で始まるRTNビルディングブロックが存在する。これらのRTNビルディングブロックでは、多数のネスティングに関しては、それらがどのRTNビルディングブロックに対して上位付けされているか明確に確認することができないが、それは、一つの決定ポジション70において、RTNビルディングブロックのネスティングにおいて明らかでない第1または第2の包括的グループの全てのRTNビルディングブロックを導入することができるためである。
【0202】
例20
以下の単純な例は、上記を説明するために役に立つ:
WHERE A + B / C
1つ目のステップで、RTNビルディングブロックのネスティングが、当該ステートメントで選択ステップを実行した後で示される。
WHERE 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック]
A [第2の包括的グループのRTNビルディングブロック]
+ 第1の包括的グループのRTNビルディングブロック
B [第2の包括的グループのRTNビルディングブロック]
/ 第1の包括的グループのRTNビルディングブロック
C [第2の包括的グループのRTNビルディングブロック]
【0203】
ここで、1つ目の決定ポジション70でのRTNビルディングブロック“+”に関して次の2つの導入の可能性があることが明らかである:
* (WHERE *) + *
* (A) + *
【0204】
同様に、RTNビルディングブロック“+”の2つ目の決定ポジション70に関して2つの導入の可能性がある:
* + * (B)
* + * (* / *)
【0205】
RTNビルディングブロック“/”に関して、その1つ目の決定ポジション70についての以下の3つの導入の可能性がある:
* (WHERE *) / *
* (* + *) / *
* (B) / *
【0206】
RTNビルディングブロック“/”に関して、その2つ目の決定ポジション70についてのただ1つの導入の可能性がある:
* / * (B)
【0207】
これらの単純な場合およびより複雑な場合を明確かつ正確に解決するためには、各RTNビルディングブロックに対して第1および第2の重みを割り当てることが必要であり、ここで、個々のRTNビルディングブロックのための重みは、ステートメント中に見られる全てのRTNビルディングブロックの互いの間のネスティングを考慮に入れる以下の方法に従って決定される。
【0208】
各RTNビルディングブロックは、第1の重みを割り当てられ、それによって、RTNビルディングブロックのネスティングは、各選択ステップの間または選択ステップを全て適用した後に、それぞれの場合においてより大きい第1の重みを有するRTNビルディングブロックを、比較するとより小さい第1の重みを有する元々上位にあるRTNビルディングブロックに対して上位付けることによって、後続する処理に使用可能なネスティングに変えられる。
【0209】
第1の包括的グループの全てのRTNビルディングブロックの第1の重みは、ステートメントにおいて直接的に上位付けされている第2の包括的グループのRTNビルディングブロックに依存するが、そのことが、第1の包括的グループのRTNビルディングブロックに対して割り当てられる第1の重みが、初期(initial)重みとして記述(described)される理由である。
【0210】
第1の包括的グループのRTNビルディングブロックは、同一の第1の初期重みを持ち、それは好ましくは平均的な大きさのものであり、そして、第1の包括的グループのこれらのRTNビルディングブロックは、第2の包括的グループのRTNビルディングブロックに導入されるときに、単一の値だけ、好ましくは1だけ減らされる第1の重みを採用する。
【0211】
一例として、RTNビルディングブロック“テーブルフィールド”は、第1の包括的グループのその他の全てのRTNビルディングブロックと同様に、第1の最初の重み200を受け取り、ここでRTNビルディングブロック“加法/減法演算”は、重み17を有している。
“A” (テーブルフィールド) “+” (加法/減法演算) “B” (テーブルフィールド)とすると、両RTNビルディングブロック テーブルフィールドは、それらの元々の第1の最初の重み200の代わりに、1だけ減らされた、それらに対して上位付けされることになるRTNビルディングブロック 加法/減法演算の第1の重み17を割り当てられる。両方のテーブルフィールドRTNビルディングブロックは従って、ステートメントに起因して、重み16を受け取り、そして両者は、小さい第1の重み(16)のため、加法/減法演算RTNビルディングブロック(重み16)に対して下位付けされる。
【0212】
第2の包括的グループのRTNビルディングブロックのための第1の重みは以下のようにして決定される:
・第1または第2の包括的グループのRTNビルディングブロックの処理関数の処理出力セットに対してそれらの処理関数を適用する第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第1の包括的サブグループを形成し、かつ、それぞれは、可能な最も大きい重みではないが、第1の包括的グループのRTNビルディングブロックの第1の最初の平均の大きさの重みよりは大きい、同一の第1の重みを割り当てられる。
【0213】
このようにして、例えば、処理関数RTNビルディングブロック * “UNION” *, * “#” * および * “AS” V:変数名 がそれぞれ、第1または第2の包括的グループのRTNビルディングブロック(これらは、それらの決定ポジション70において直接的に導入される)の、それぞれ処理出力セット(単数)および処理出力セット(複数)に対して適用されるが、これが、第1の包括的サブグループのRTNビルディングブロックが第2の包括的グループに割り当てられ、かつ250という第1の重みを受け取る理由である(ここで、200が第1の包括的グループのRTNビルディングブロックの第1の重みであり、また、255を可能な最も大きい重みとして仮定している)。
【0214】
結果として、第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックが常に、第1および第2の包括的グループのRTNビルディングブロックに対して上位付けされること、および、従って定義によりそれらの処理入力セットとしてそれらの処理出力セットを割り当てられることが保証される。
【0215】
・その処理出力セットが第1または第2の包括的グループの他のRTNビルディングブロックのための処理入力セットとして受け取られる第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第2の包括的サブグループを形成し、かつ、どんな場合であっても第1の包括的グループのRTNビルディングブロックの第1の最初の平均の大きさの重みよりは小さいそれぞれに異なる第1の重みを割り当てられる。各々のRTNビルディングブロックのためのこの第1の重みは、それぞれの場合において、より小さい第1の重みをそれぞれ第一に割り当てて、このグループのRTNビルディングブロックを実行することによって、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックに関する予め決定可能な処理の順序を個々に記述している。
【0216】
従って、例えば、RTNビルディングブロック“乗法/除法演算”は第1の重み14を受け取り、RTNビルディングブロック“加法/減法演算”はより大きい第1の重み17を受け取り、RTNビルディングブロック“比較”は第1の重み50を受け取り、そしてRTNビルディングブロック“ブール組み合わせ”は第1の重み100を受け取る。
【0217】
これは、A + B * C > D AND E = Fという所望のネスティングから明らかとなる。
【0218】
ここに記述された全ての第1の重みは、第1の包括的グループのRTNビルディングブロックの第1の最初の重み200よりも小さい。
【0219】
決定ポジション70の後に、任意に加えられる最後の決定ポジション70(これは変換ステップの後で加えられる)の前で少なくとも一つのさらなる決定ポジションが従う第1および第2の包括的グループのRTNビルディングブロックにおける誤ったネスティングを排除するために、最大の大きさの第2の重みを、正確にこれらのRTNビルディングブロックのために割り当てることが必要となる。さもなければ、第2の包括的グループの第1の包括的サブグループの少なくとも一つのRTNビルディングブロックが、最後ではない決定ポジション70(即ち、第1の包括的グループのRTNビルディングブロックの平均の重みの大きさよりも大きい重みを有するRTNビルディングブロック)において、これらのRTNビルディングブロックに導入されるまさにその時に、誤ったネスティングが現実に生じるであろう。より大きい第1の重みにもかかわらず、これらのRTNビルディングブロックは、決定経路における最大の第2の重みを有するRTNビルディングブロックが変換ステップの後で任意に導入される最後の決定ポジション70に達するまでは、最大の第2の重みを有するこれらのRTNビルディングブロックではネストしてはならない。
【0220】
それゆえ、第1の包括的グループの少なくとも一つのRTNビルディングブロックの導入を指示する決定ポジション70の後に、少なくとも一つのさらなる決定ポジションが、第1および第2の包括的グループの全てのRTNビルディングブロックに続き、前記の少なくとも一つのさらなる決定ポジションは、変換ステップの後で任意選択的に(オプションとして)存在して第2の包括的グループのRTNビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジション70とは独立しており、
該第1および第2の包括的グループの全てのRTNビルディングブロックが、可能な最も大きい重みの大きさを有する第2の固定された重みを割り当てられる。
【0221】
RTNビルディングブロック“WHERE”は、定義により最大の大きさの第2の重みを割り当てられない第1の包括的グループのRTNビルディングブロックの一例として役に立つ:
“WHERE” * 変換ステップ後:
“WHERE” 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック ]
【0222】
このRTNビルディングブロックでは、変換ステップによって加えられる最後の任意選択の決定ポジション70を除いて、1つ目の決定ポジション70の後には他の決定ポジションは従わない。従って、このRTNビルディングブロックのための第2の重みは、このRTNビルディングブロックの第1の重みの値を受け取ることができる。
【0223】
RTNビルディングブロック“RTNビルディングブロックの集約”(角括弧内)およびRTNビルディングブロック“for next”は、定義により最大の大きさの第2の重みを割り当てられる第1の包括的グループのRTNビルディングブロックの2つの例である:
“(” * “)” 変換ステップ後:
“(” 第1の包括的グループのRTNビルディングブロック “)” [第2の包括的グループのRTNビルディングブロック]
“FOR” * “:” * “NEXT” 変換ステップ後:
“FOR” 第1の包括的グループのRTNビルディングブロック “:” 第1の包括的グループのRTNビルディングブロック
“NEXT” [第2の包括的グループのRTNビルディングブロック]
【0224】
これらのRTNビルディングブロックでは毎回、各1つ目の決定ポジション70の後に、最後の任意選択の決定ポジション70(これは変換ステップによって加えられる)に加えて、少なくとも一つの決定ポジションが常に従う。従って、これらのRTNビルディングブロックのための第2の重みは、可能な最も大きい重みの大きさ、具体的には255に一致する。
【0225】
同じことは、第2の包括的グループのRTNビルディングブロックに対しても成り立つ。これは例えば、RTNビルディングブロック“加法/減法演算”およびRTNビルディングブロック“IN 比較”に関して示される:
* (“+”1/2“-”) * 変換ステップ後
(“+”1/2“-”) 第1の包括的グループのRTNビルディングブロック
このRTNビルディングブロックでは、変換ステップ後には、唯一の決定ポジション70の後には他の決定ポジションは従わない。従って、このRTNビルディングブロックのための第2の重みは、例えば、このRTNビルディングブロックの第1の重みの値を受け取ることができる。
【0226】
* “IN” “(” * “)” 変換ステップ後:
“IN” 第1の包括的グループのRTNビルディングブロック [第2の包括的グループのRTNビルディングブロック]
このRTNビルディングブロックでは、1つ目の決定ポジション70の後に、最後の任意選択の決定ポジション70(これは変換ステップによって加えられる)に加えて、決定ポジションが続く。従って、このRTNビルディングブロックのための第2の重みは、可能な最も大きい重みの大きさ、具体的には255に一致する。
【0227】
各RTNビルディングブロックの、変換ステップ後の選択ステップの実行によってそれらに対して上位付けされるステートメント中の各RTNビルディングブロックに関するさらなる処理のために必要であるネスティングを決定するために、変換ステップ後のクエリステートメントに由来するネスティングの順序での第2の包括的グループの各RTNビルディングブロックの第1の重みが、より大きい第1の重みの各々のRTNビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第2の重みを有する各々の上位付けされたRTNビルディングブロックが到達されるまで、各々の上位付けされたRTNビルディングブロックの第1の重みと比較され、そして、この決定されたネスティングの順序に従って、比較の基準としての役目をするRTNビルディングブロックが、到達されたRTNビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのRTNビルディングブロックに対して上位付けされる。
これは、以下の例によって説明される:
【0228】
例21
IF A THEN WHERE B=C # 5 ELSE WHERE D=E#10 END IF # 20
この例においてさらなる処理を要求するネスティングは以下の通りである:
*(1.1) # *(1.2) 第1の重み.250、第2の重み.250
(=1.1) IF *(2.1) THEN *(2.2) ELSE *(2.3) END IF 第1の重み.200、第2の重み.255
(=2.1) A 第1の重み.200、第2の重み.1
(=2.2) *(3.1) # *(3.2) 第1の重み.200、第2の重み.200
(=3.1) *(4.1) = *(4.2) 第1の重み. 50、第2の重み 50
(=4.1) B 第1の重み. 49(初期200)、第2の重み. 1
(=4.2) C 第1の重み. 49(初期200)、第2の重み. 1
(=3.2) 5 第1の重み. 249(初期200)、第2の重み. 1
(=2.3) *(5.1) # *(5.2) 第1の重み. 250、第2の重み. 250
(=5.1) *(6.1) = *(6.2) 第1の重み. 50、第2の重み. 50
(=6.1) D 第1の重み. 49(初期200)、第2の重み. 1
(=6.2) E 第1の重み. 49(初期200)、第2の重み. 1
(=5.2) 10 第1重み. 249(初期200)、第2重み. 1
(=1.2) 20 第1重み. 249(初期200)、第2重み. 1
ここで、第1の重み(first weight).は、第1の重み付け(first weighting)であり、
第2の重み(second weight).は、第2の重み付け(second weighting)であり、
初期(initial)は、第2の包括的グループのRTNビルディングブロックへの導入によって変えられる場合に記述される、第1の包括的グループのRTNビルディングブロックの初期の重み付けである。
ここで、第1の重み250を有するRTNビルディンブロック“#”は、RTNビルディングブロック“IF THEN ELSE END IF”(これがその最後の決定ポジションに到達した後では、第1の重み200および第2の重み255を有する)に対してのみ上位付けされることが分かる。
【0229】
例21の記述の完全性を目的として、この例では変換ステップ後の選択ステップの実行に由来する、ネスティングを示す:
IF 呼び出し:第1の包括的グループのRTNビルディングブロック
A
THEN 呼び出し:第1の包括的グループのRTNビルディングブロック
WHERE 呼び出し:第1の包括的グループのRTNビルディングブロック
B 呼び出し:第2の包括的グループのRTNビルディングブロック
= 呼び出し:第1の包括的グループのRTNビルディングブロック
C 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
5
ELSE 呼び出し:第1の包括的グループのRTNビルディングブロック
WHERE 呼び出し:第1の包括的グループのRTNビルディングブロック
D 呼び出し:第2の包括的グループのRTNビルディングブロック
= 呼び出し:第1の包括的グループのRTNビルディングブロック
E 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
10
END
IF 呼び出し:第2の包括的グループのRTNビルディングブロック
# 呼び出し:第1の包括的グループのRTNビルディングブロック
20
【0230】
第1の包括的グループのRTNビルディングブロックは、それら自身、および、それらに対して上位付けされるRTNビルディンブロックの第1の重みとは無関係に、それらに対して直接的に上位付けされる第1または第2の包括的グループのRTNビルディングブロックに対して下位付け(subordinated)される。
【0231】
例22
WHERE A + MIN B
【0232】
例22は以下の通りにネストされる:
WHERE * (1.1) 第1の重み. 200、第2の重み. 200
(=1.1) *(2.1) + *(2.2) 第1の重み. 50、第2の重み. 50
(=2.1) A 第1の重み. 49(初期 200)、第2の重み. 1
(=2.2) MIN *(3.1) 第1の重み. 49(初期 200)、第2の重み. 200
(=3.1) B 第1の重み. 200、第2の重み. 1
【0233】
例22から分かるように、第1の包括的グループのRTNビルディングブロックとしてのRTNビルディングブロック“B”は、そのより大きい第1重み200にもかかわらず、それに対して上位付けされたRTNビルディングブロック“MIN”と比較したときに、その上位付けされた第2の包括的グループのRTNビルディングブロック“+”によって変えられる第1重み49と共に下位付けされる。
【0234】
第2の包括的グループのRTNビルディングブロックの第1の重みを比較するときに同一の第1の重みを有する上位付けされたRTNビルディンブロックが存在するならば、各々の包括的サブグループに依存して手続きは異なる:
第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと比較されることになる、第2の包括的グループのRTNビルディングブロックが、同一の第1の重みを持つ場合、該比較される必要のあるRTNビルディングブロックは、これらのRTNビルディングブロックが第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックであるならば、このRTNビルディングブロックに対して直接的に下位付けされる。
以下の例が上記を説明するために役に立つ:
【0235】
例23
【0236】
例23では、第1の重みを比較するときに、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックは2度出会う(“/”は“MOD”に出会い、
は“/”に出会う)。第2の包括的グループの第2の包括的サブグループへの割り当てにより、これらのRTNビルディングブロックはそれぞれ下位付けされるが、それは、下位付けされたRTNビルディングブロックの処理出力セットが各上位付けされたRTNビルディングブロックの処理入力セットとして受け取られることが定義されているためである。RTNビルディングブロック“RTNビルディングブロックの集約”を使用することで、すなわち、括弧でくくることによって、別の第1および第2の重み、ならびに、従って別の計算順序が得られる。
【0237】
比較されることになる第2の包括的グループのRTNビルディングブロックが、第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと同一の第1の重みを持つ場合、上位付けされたRTNビルディングブロックとの比較は、これらのRTNビルディングブロックが第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックである限り継続される。
【0238】
以下の例は、上記を説明するために役に立つ:
例24
Aが要求する全ての要素を受け取る。このセットから最初の100個を受け取り、中間セット1にこれらの100要素を格納し、この中間セット1から最初の50要素を受け取る。
WHERE A # 100 AS 中間セット # 50
*(1.1) # *(1.2) 第1の重み. 250、第2の重み. 250
(=1.1) *(2.1) AS Zwischenmenge 第1の重み. 250、第2の重み. 250
(=2.1) *(3.1) # *(3.2) 第1の重み. 250、第2の重み. 250
(=3.1) WHERE *(4.1) 第1の重み. 249(初期200)、第2の重み. 200
(=4.1) A 第1の重み. 200、第2の重み. 1
(=3.2) 100 第1の重み. 249(最初 200)、第2の重み. 1
(=1.2) 50 第1の重み. 249(最初 200)、第2の重み. 1
【0239】
例24では、第1の重みを比較するときに、第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックが2度応じる(“AS”は“#”に応じ、“#”は“AS”に応じる)。第2の包括的グループの第1の包括的サブグループへの割り当てにより、これらのRTNビルディングブロックは、それぞれ前もって配置される(prearranged)が、それは、下位付けされたRTNビルディングブロックの処理出力セットが各上位付けされたRTNビルディングブロックの処理入力セットとして受け取られることが定義されているためである。
【0240】
可能な最も大きい第2の重みのRTNビルディングブロックの決定ポジション70に直接的に導入されるRTNビルディングブロックが、各々のRTNビルディングブロックに関して望まれる場合には第2の包括的グループのRTNビルディングブロックに対してのみ下位付けされることは重要である。これは、次の方法によって行われ、即ち、第1の包括的グループのRTNビルディングブロックであって、該第1の包括的グループのRTNビルディングブロックが、RTNビルディングブロックの全体から一つが導入可能(introducible)である第2の可能な最大の重みの大きさを有するRTNビルディングブロックの決定ポジションの一つに直接的に導入されるときに、第2の包括的グループのRTNビルディングブロックに対して下位付けされることが予め定められているものである当該第1の包括的グループのRTNビルディングブロックが、最小の重みの大きさの第2の重みを割り当てられ、かつ、そのような場合において、最小の大きさの第2の重みを持たない当該第1の包括的グループのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに対して下位付けされない、という方法である。
【0241】
2つの例が、これらの2つの可能な場合に関するネスティングを示すが、これらは、上述した方法の後では以下の結果となる。
【0242】
例25
第1の可能な場合:可能な最も大きい重みの大きさを有する第2の重みの上位付けされたRTNビルディングブロックの決定ポジション70において、最小の重みの大きさの重みではない第2の重みの第1の包括的グループのRTNビルディングブロックが導入される(この例では、キーワードは“WHERE”):
[ WHERE MAX A + B / C = D ]
【0243】
例25においてさらなる処理を要求するネスティングは以下の通りである:
[ *(1.1) ] 第1の重み. 200、第2の重み. 255
(=1.1) WHERE *(2.1) 第1の重み. 200、第2の重み. 200
(2.1) *(3.1) = *(3.2) 第1の重み. 50、第2の重み. 50
(=3.1) MAX *(4.1) 第1の重み. 49(初期. 200)、第2の重み. 200
(=4.1) *(5.1) + *(5.2) 第1の重み. 17、第2の重み. 17
(=5.1) A 第1の重み. 16(初期. 200)、第2の重み. 1
(=5.2) *(6.1) / *(6.2) 第1の重み. 14、第2の重み. 14
(=6.2) B 第1の重み. 13(初期. 200)、第2の重み. 1
(=6.3) C 第1の重み. 13(初期. 200)、第2の重み. 1
(=3.2) D 第1の重み. 49、第2の重み. 200
【0244】
RTNビルディングブロック“MAX”はキーワード“/”を有するRTNビルディングブロックに対して下位付けされるが、これは、その上位付けされたRTNビルディングブロック“WHERE”が可能な最大の重みの大きさの重みを持たないためである。
RTNビルディングブロック“WHERE”は、グローバル定義に従って、キーワード“=”を有するRTNビルディングブロックに対して下位付けされるべきであるが、これはこの場合には起こらない。それは、その上位付けされたRTNビルディングブロック“レベル”(“[ ]”)は、第2の可能な最大の重みの大きさを持っているが、一方、RTNビルディングブロック“WHERE”は、最小の重みの大きさの第2の重みを持っていないためである。
【0245】
RTNビルディングブロックの異なるネスティングが達成されるべきならば、これは、RTNビルディングブロック“RTNビルディングブロックの集約”(“()”)(例、WHERE (MAX (A + B / C) = D)、MAX A + B / Cと同等)を使用することによって行なうことができる。
【0246】
例26
第2の可能な場合:可能な最も大きい重みの大きさの第2の重みを有する上位付けされたRTNビルディングブロックの決定ポジション70において、最小の重みの大きさの第2の重みを有する第1の包括的グループのRTNビルディングブロックが導入される(この例ではキーワード“A”):
[ A + B ]
[ *(1.1) ] 第1の重み. 200、第2の重み. 255
(=1.1) *(2.1) + *(2.2) 第1の重み. 17、第2の重み. 17
(=2.1) A 第1の重み. 16(初期 200)、第2の重み. 1
(=2.2) B 第1の重み. 16(初期 200)、第2の重み. 1
【0247】
例26は、RTNビルディングブロック“加法/減法 演算”が、RTNビルディングブロック“テーブルフィールド”(A)に対して上位付けされるということを示しており、これは、RTNビルディングブロック“A”がRTNビルディングブロック“レベル”の決定ポジション70に直接的に導入され、RTNビルディングブロックAは最小の重みの大きさの第2の重みを有しており、かつ、直接的に導入されたRTNビルディングブロック“レベル”は可能な最も大きい重みの大きさの第2の重みを持っているためである。
【0248】
本発明の一つの更なる実施形態をここで与える。この場合には、ステートメントに従って、変換ステップの後で、第2の包括的グループのRTNビルディングブロックの導入を指示する任意選択の決定ポジションが後に続く、第2の包括的グループのRTNビルディングブロックが、正確にこの任意選択の決定ポジションにおいて、導入された第2の包括的グループのRTNビルディングブロックである。
このような場合には、この最後の決定ポジションで導入されるRTNビルディングブロックは常に、それより以前に上位付けされたRTNビルディングブロックに対して上位付けされた目下の2つのRTNビルディングブロックの第1および第2の重みとは無関係である。
【0249】
これは以下の例によって示されるが、以下の例が示しているのは、変形(variant)“中間セット”中のフィールドAの値が格納され、この変数“中間セット”に対してフィールドBの値が加えられ、次いでこの値が値Cと一致しているかどうかが調べられるということ、および、次いでこの比較の結果が変数“結果IN”に格納されるということである。
【0250】
A AS 中間セット + B IN (C) AS 結果IN
【0251】
ここでは、より小さい第1の重み17にもかかわらず、キーワード“+”を有するRTNビルディングブロックは、第1の重みが250であるキーワード“AS”を有するRTNビルディングブロックに対して上位付けされる。同じことがキーワード“IN”および“AS”を有するRTNビルディングブロックに関しても起こり、ここで、上位付けされる必要があるキーワード“AS”を有するRTNビルディングブロックの第1の重みは、キーワード“IN”を有するRTNビルディングブロックの第1の重み(60)とは独立して、より高い(250)ものである。
【0252】
当該のRTNビルディングブロックに従って、RTNビルディングブロックグループもまた、例えば算術型または論理型の処理関数のみを含む、ステートメントまたはステートメントの一部として定義することができる。そのような場合について一致するのは、第1および第2の包括的グループの全てのRTNビルディングブロックが、少なくとも一つのRTNビルディングブロックを割り当てられることができ、ここで該少なくとも一つのRTNビルディングブロックは、第1および第2の包括的グループのRTNビルディングブロックが、可能な最も大きい第2の重みを有するRTNビルディングブロックの、全てのRTNビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるということである。
【0253】
以下のRTNビルディングブロックは、ある程度は、可能な最も大きい重みの大きさを有する第2の重みのRTNビルディングブロックの決定ポジション70に直接的に導入される限りにおいて、下記する割り当てを含む:
【0254】
RTNビルディングブロック“テーブルフィールド”:このRTNビルディングブロックは、“SELECT”RTNビルディングブロック、このフィールドにおけるテーブルの名前を含むRTNビルディングブロック“テーブル”、ならびに、2つのRTNビルディングブロック“テーブル”および“テーブルフィールド”を互いに関係させるためのRTNビルディングブロック“値のリンク”を自動的に前置され(prefixed)得る。
【0255】
例27
[テーブル_フィールド_名]
これは、自動的な前置の後では:
[SELECT テーブル_名.テーブル_フィールド_名]
となる。
【0256】
RTNビルディングブロック“テーブル”:このRTNビルディングブロックは、全てのテーブルフィールドを渡すために“SELECT”RTNビルディングブロックを前に置かれ(preceded with)得る。
【0257】
例28
[テーブル_名]
これは、自動的な前置の後では:
[SELECT テーブル_名.*]
となる。
【0258】
計算または比較演算を実行するRTNビルディングブロック:これらのRTNビルディングブロックは、“WHERE”RTNビルディングブロックを前置され得るが、これが存在しない場合にも、例えばそれぞれに必要なRTNビルディングブロック“セット要素形成”および“値のリンク”を有する全ての使用されるテーブルの全てのフィールドを渡す、“SELECT”RTNビルディングブロックを前置され得る。
【0259】
例29
[ A + B ]
これは、自動的な前置の後で、
[ SELECT テーブル_名.A, テーブル_名.B
WHERE テーブル_名.A + テーブル_名.B ]
となる。
【0260】
表1および表2は、各々の第1および第2の重みを有するあり得るRTNビルディングブロックのリスト、ならびに、該RTNビルディングブロックの決定グラフを含んでおり、該決定グラフにおいては、RTNビルディングブロックの決定グラフが決定ポジションで実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、あるいは、全てのRTNビルディングブロックからRTNビルディングブロックが挿入され、次いでそれが再び実行される。
【0261】
各決定ポジション70において、常に全てのRTNビルディングブロックから選択することができるということから、決定ポジションでの選択が限られている場合と比較して、クエリステートメントを定式化するときにより高い自由度が可能である。
【0262】
RTNビルディングブロック“NEXT”は、例で示すように作用し、その処理入力セットから、現在の要素ごとに、その処理出力セットにおいて決定ポジション70で挙げられたその次の要素を再び渡す。
例えば、決定ポジション70の代わりに数字のみが許されているのであれば、現在の要素ごとに渡されることになる次の要素の数字のみ決定することができ、そして、次いでその1つ目の決定ポジション70においてRTNビルディングブロック“WHERE”が導入される決定ポジション70を用いることによって、現在の要素の後に従い、かつ、RTNビルディングブロック“セット要素の制限”の処理出力セットにある要素が、RTNビルディングブロック“セット要素の制限”によって渡され得る。従って、これは全てのRTNビルディングブロックに対してあてはまる。例えば、RTNビルディングブロック“MAX”を使用することにより、RTNビルディングブロック“MAX”の決定ポジション70において挙げられた最も大きい値を有する正確に後に続く要素(exactly the subsequent element)を、現在の要素から始めて、検索することができる。
【0263】
以下の抽象化された例がこれを説明するのに役に立つ。
【0264】
例30
ORDERBY A
NEXT (WHERE B=C # 100)
NEXT (MAX D # 20)
【0265】
ここでは、セットが値Aによってソートされた後、比較B=Cがあてはまる正確に100個の要素が、該セットの各要素のために渡される。次いで、このセットから、値Dが現在の要素から始めて最も大きい20個に入るものである後続する20個の要素のセットが渡される。
【0266】
例31
テスト株式(test share)と名付けられた2006年1月1日時による株式の位置が見つけられ、さらなる計算のために受け取られて、その日以来、株式が20%だけ上昇するまでに経過した日数が表示される。
WHERE (株式.名=“テスト株式”)
ORDERBY 株式.日付
FIND WHERE (株式.日付=01.01.2006) AS 位置010106
SELECT NEXT (WHERE (株式.位置>=位置010106*1.2 # 1).日付-株式.日付
【0267】
例31におけるステートメントの記述:
“テスト株式”と名付けられた株式を検索する。
これらの株式を日付によってソートする。
【0268】
日付が2006年1月1日である要素を正確に検索し、この要素を変数 位置01012006に格納する。
“FIND”によって現在の要素として印をされた要素に基づいて、その位置が、現在の要素から始めて、変数 位置010106に格納された値よりも20%だけ大きい株式が検索される。
#1はWHEREによって見つかった要素を1つ目の要素に制限し、それゆえ、NEXTもまたWHEREが要求する1つ目の要素の値のみを渡す。
見つかった要素の値の、現在の要素の値との比較を可能とするために、NEXTを使用しなければならず、経過した日数は、この例では、このようにして計算される。
結果の表示はキーワードSELECTによる。
【0269】
これと関連して、例えば以下の印が使用される:
[ ]において与えられた決定ポジションは任意選択でのみ実行され、期待されるキーワードは“”で示しており、(“キーワード1” 1/2 “キーワード2”)は“キーワード1” OR “キーワード2”を表しており、*は決定ポジション70を表しており、(x)および(*x)のそれぞれは、ある位置(*x)から別の位置(x)への、各印の飛び越し位置であり、そしてV:変数名およびV:数字のそれぞれは、自由に選択可能なそれぞれ変数および数字のそれぞれを表している。
RTNビルディングブロックは、これらのRTNビルディングブロックがステートメント中で使用される頻度とおおよそ一致する順序で並べられるため、頻出するRTNビルディングブロックはより早く見つけることができ、可能な限り少ない比較が必要とされる。
【0270】
RTNビルディングブロックを、2つの包括的グループへの変換ステップの前(表1)および変換ステップ後(表2)の両方で示している。
このリストは、さらなるRTNビルディングブロックによっていつでも、簡便に拡張することができ、従って網羅的なものではないことに留意すべきである。
【0271】
最適化されたアクセスプランに到達するために、ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のRTNビルディングブロックグループを割り当てられたRTNビルディングブロックは、エンジンインターフェースの要素においてそれぞれ変換されなければならず、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有するものである。
【0272】
本発明の方法は、また、関係データベースシステムをプログラム的に組み立てるために好適であり、該システムは、少なくともコンピュータシステムを有し、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを持っており、通常、例えば、コンピュータプログラムとして、当該方法を実施するために設定された各々の命令(インストラクション)を持っている。
そのようなコンピュータプログラムは、任意の形態をとってよい。具体的には、それは、フロッピーディスク、CD、または、DVDといったコンピュータが読み取り可能な媒体上のコンピュータプログラム製品であってよく、コンピュータプログラムコード手段を有しており、それによって、コンピュータは、本発明のデータキャリアまたは電子キャリア信号を生成するために、該コンピュータプログラムを読み込んだ後、毎回、当該方法を実行するよう該プログラムによって指示される。しかしながら、それは、例えば、コンピュータプログラム製品であって、該コンピュータプログラム製品は、電子的なキャリア信号上のコンピュータプログラムを有する、当該コンピュータプログラム製品であってもよく、該コンピュータプログラムの読み込んだ後、毎回、コンピュータは、該プログラムによって本発明の方法を実行するよう指示されるものである。
【0273】
【表1−1】
【0274】
【表1−2】
【0275】
【表2−1】
【0276】
【表2−2】
【0277】
【表2−3】
【特許請求の範囲】
【請求項1】
関係データベースシステムを制御するための方法であって、当該方法では、キーワードからなるクエリステートメントが再帰遷移ネットワーク(RTN)を適用することによって、および、キーワードまたはキーワードのグループに対して、該ステートメントによって与えられる順序で処理に関連する特性を割り当てることによって、最初に解析され、その後に制御コマンドへの変換および任意選択的に最適化が続き、
その特徴が、
RTNが独立したRTNビルディングブロックから形成され、ここで、各RTNビルディングブロックは内部の有向決定グラフを有し、該グラフは、他のRTNビルディングブロックの内部の有向決定グラフとは独立して定義され、少なくとも一つの決定経路に沿って少なくとも一つの決定ポジションを持っており、
選択ステップにおけるキーワードを用いて、全てのRTNビルディングブロックの内部の決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
全てのキーワードでの選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
当該方法。
【請求項2】
RTNビルディングブロックの決定グラフが決定ポジションにおいて実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、または、全てのRTNビルディングブロックからRTNビルディングブロックが挿入され、次いでそれが再び実行されること、
を特徴とする、請求項1に記載の方法。
【請求項3】
RTNビルディングブロックの決定グラフにおいて、決定ポジションでは再帰呼び出し関数の事前決定し得ない無制限の回数の連続的な呼び出しが行われるものであり、該決定ポジションが、キーワード(文字列、記号、変数または数字)を要求する少なくとも一つの決定ポジションを前置され、かつ、少なくとも一つの決定ポジションが後に続き、該決定ポジションがまたキーワードを要求すること、
を特徴とする、請求項1または2に記載の方法。
【請求項4】
選択ステップの実行前の変換ステップにおいて、各RTNビルディングブロックが第1または第2の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるRTNビルディングブロックは第1の包括的グループに割り当てられ、かつ、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるRTNビルディングブロックが、第2の包括的グループに割り当てられ、かつ、第1の決定ポジションが削除されるよう、および、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第1の包括的グループの全てのRTNビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第2の包括的グループのRTNビルディングブロックが、該選択ステップが第2の包括的グループのRTNビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加されること、
を特徴とする、先行する請求項に記載の方法。
【請求項5】
各RTNビルディングブロックが、少なくとも一つの文字列、少なくとも一つの記号、変数または数字で始まり、かつ、
選択ステップが、第1の包括的グループのRTNビルディングブロックに対してのみ、または、第2の包括的グループのRTNビルディングブロックにおいてのみ、適用され得ること、
を特徴とする、請求項4に記載の方法。
【請求項6】
第2の包括的グループのRTNビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意選択にて呼び出され得ること、
を特徴とする、請求項4または5に記載の方法。
【請求項7】
各RTNビルディングブロックが、決定グラフの完全な実行後に、少なくとも一つの処理入力セットに依存して、各々のRTNビルディングブロックのために定義された少なくとも一つの処理関数の結果として、ZEROを含む少なくとも一つの値を有する処理出力セットを返し、ここで、これらのセット内の値の順序が格納され、かつ、得られた各処理出力セットは、処理入力セットの一つとして各RTNビルディングブロックに割り当てられ得ること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項8】
各RTNビルディングブロックが、少なくとも一つの第1の重みを有し、それによって、RTNビルディングブロックのネスティングが、1つのネスティングへと変えられ、該1つのネスティングは、各選択ステップの間または全ての選択ステップを実行した後に、さらなる処理のために使用でき、それが、同等に小さい第1の重みを有する元の上位付けされたRTNビルディングブロックのそれぞれに対して、より大きい第1の重みのRTNビルディングブロックを上位付けることによって行われること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項9】
第1の包括的グループの全てのRTNビルディングブロックの第1の重みが、ステートメントにおいて直接的に上位付けされている第2の包括的グループのRTNビルディングブロックに依存しており、
そのことが、第1の包括的グループのRTNビルディングブロックに対して割り当てられる第1の重みが、初期の重みとして記述される理由であること、
を特徴とする、請求項8に記載の方法。
【請求項10】
第1の包括的グループのRTNビルディングブロックが、同一の第1の初期の重みを持ち、それは好ましくは平均的な大きさのものであり、かつ、これらのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに導入されるときに、単一の値だけ、好ましくは1だけ減らされた第1の重みを採用すること、
を特徴とする、請求項9に記載の方法。
【請求項11】
第1または第2の包括的グループのRTNビルディングブロックの処理関数の処理出力セットに対して、それらの処理関数を適用する第2の包括的グループのRTNビルディングブロックが、第2の包括的グループの第1の包括的サブグループを形成し、かつ、それぞれが、同一の第1の重みを持ち、その重みは、可能な最も大きい重みではなく、しかし、第1の包括的グループのRTNビルディングブロックの第1の初期の平均の大きさの重みよりは大きいこと、
を特徴とする、請求項8、9または10に記載の方法。
【請求項12】
第2の包括的グループのRTNビルディングブロックが、それらの処理出力セットが第1または第2の包括的グループの他のRTNビルディングブロックのための処理入力セットとして受け取られるものであって、該第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第2の包括的サブグループを形成し、かつ、どんな場合であっても第1の包括的グループのRTNビルディングブロックの第1の初期の平均の大きさの重みよりは小さいそれぞれに異なる第1の重みを有し、かつ、各々のRTNビルディングブロックのための第1の重みが、各場合において、該第1のグループのRTNビルディングブロックを実行するためにより小さい第1の重みをこのグループにそれぞれに割り当てることによって、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックに関する予め決定可能な処理の順序を個々に記述していること、
を特徴とする、請求項8、9、10または11に記載の方法。
【請求項13】
第1の包括的グループからの少なくとも一つのRTNビルディングブロックの導入を指示する決定ポジションの後に、少なくとも一つのさらなる決定ポジションが、第1および第2の包括的グループの全てのRTNビルディングブロックに続き、
前記さらなる決定ポジションは、変換ステップの後で任意選択的に存在して第2の包括的グループからのRTNビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジションとは独立しており、
前記第1および第2の包括的グループの全てのRTNビルディングブロックが、可能な最も大きい重みの大きさを持った第2の固定された重みを有すること、
を特徴とする、請求項8から12に記載の方法。
【請求項14】
変換ステップ後のクエリステートメントに由来するネスティングの順序での第2の包括的グループの各RTNビルディングブロックの第1の重みが、より大きい第1の重みの各々のRTNビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第2の重みを有する各々の上位付けされたRTNビルディングブロックが到達されるまで、各上位付けされたRTNビルディングブロックの第1の重みと比較されること、および、
それに応じて、比較の基準としての役目をする、この決定されたネスティングの順序のRTNビルディングブロックが、到達されたRTNビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのRTNビルディングブロックに対して上位付けされること、
を特徴とする、請求項13に記載の方法。
【請求項15】
第1の包括的グループのRTNビルディングブロックが、それら自身の第1の重み、および、それらに対して上位付けされるRTNビルディンブロックの第1の重みとは無関係に、それらに対して直接的に上位付けされる第1または第2の包括的グループのRTNビルディングブロックに対して下位付けされること、
を特徴とする、請求項8から14に記載の方法。
【請求項16】
比較されことになる第2の包括的グループのRTNビルディングブロックが、第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと同一の第1の重みを持つ場合に、該比較される必要のあるRTNビルディングブロックが、これらのRTNビルディングブロックが第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックであるならば、かつ、そうである場合にのみ、このRTNビルディングブロックに対して直接的に下位付けされること、
を特徴とする、請求項8から15に記載の方法。
【請求項17】
第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと比較されることになる第2の包括的グループのRTNビルディングブロックが、同一の第1の重みを持つ場合、上位付けされたRTNビルディングブロックとの比較は、これらのRTNビルディングブロックが第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックである限り継続されること、
を特徴とする、請求項8から16に記載の方法。
【請求項18】
該第1の包括的グループのRTNビルディングブロックが、全てのRTNビルディングブロックから、第2の可能な最大の重みの大きさを有するRTNビルディングブロックが導入可能である決定ポジションの一つに直接的に導入されるときに、第2の包括的グループのRTNビルディングブロックに対して下位付けされることが予め定められており、該第1の包括的グループのRTNビルディングブロックが、最小の重みの大きさの第2の重みを割り当てられること、および、
そのような場合において、最小の大きさの第2の重みを持たない当該第1の包括的グループのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに対して下位付けされないこと、
を特徴とする、請求項13から17に記載の方法。
【請求項19】
第1および第2の包括的グループの全てのRTNビルディングブロックが、少なくとも一つのRTNビルディングブロックを割り当てられ、ここで該少なくとも一つのRTNビルディングブロックは、第1および第2の包括的グループのRTNビルディングブロックが、可能な最も大きい第2の重みを有するRTNビルディングブロックの、全てのRTNビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるものであること、
を特徴とする、請求項13から18に記載の方法。
【請求項20】
ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のRTNビルディングブロックグループを割り当てられたRTNビルディングブロックが、エンジンインターフェースの要素においてそれぞれ変換され、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有すること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項21】
少なくともコンピュータシステムを有する関係データベースシステムであって、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを備え、その特徴が、
該データ処理ユニットが、請求項1から20のいずれかに記載の上記方法に従って動作するよう、プログラムに基づくように構成されていることである、
前記関係データベースシステム。
【請求項22】
請求項23に記載のデータキャリアまたは電子キャリア信号の関係データベースシステムを制御するために、データベース言語で与えられるデータベースステートメントをメモリ内に読み込むための手段を有すること、
を特徴とする、請求項21に記載の関係データベースシステム。
【請求項23】
請求項22に記載の関係データベースシステムを制御するため、および、該関係データベースシステムを読み込むための、データベース言語で与えられるデータベースステートメントを有するデータキャリアまたは電子キャリア信号であって、
その特徴が、
該データキャリアまたは該キャリア信号上に存在する該データベースステートメントが、独立したRTNビルディングブロックから形成されたRTNの情報を有しており、
ここで、各RTNビルディングブロックは、少なくとも一つの決定経路上に少なくとも一つの決定ポジションを有する他のRTNビルディングブロックの内部の有向決定グラフとは独立して定義される内部の有向決定グラフを有しており、
選択ステップにおいてキーワードを用いて、全てのRTNビルディングブロックの内部決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路は、少なくとも部分的に、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
クエリステートメントの全てのキーワードに対する選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
前記データキャリアまたは電子キャリア信号。
【請求項24】
請求項1から20のいずれか1項に記載の方法を実行するように調整された命令を有するコンピュータプログラム。
【請求項25】
コンピュータに読み込み可能な媒体を有するコンピュータプログラム製品であって、当該コンピュータプログラム製品は、コンピュータが、請求項1から20のいずれか1項に記載のコンピュータプログラムを読み込んだ後には毎回、当該方法を実行するためのプログラムによって促されるコンピュータプログラムコード手段を有するものである、
前記コンピュータプログラム製品。
【請求項26】
電子キャリア信号上にコンピュータプログラムを有するコンピュータプログラム製品であって、
コンピュータが、当該コンピュータプログラムの読み込み後に、毎回、請求項1から6のいずれか1項に係る発明の方法を実行するよう、該プログラムによって指示されるものである、
前記コンピュータプログラム製品。
【請求項1】
関係データベースシステムを制御するための方法であって、当該方法では、キーワードからなるクエリステートメントが再帰遷移ネットワーク(RTN)を適用することによって、および、キーワードまたはキーワードのグループに対して、該ステートメントによって与えられる順序で処理に関連する特性を割り当てることによって、最初に解析され、その後に制御コマンドへの変換および任意選択的に最適化が続き、
その特徴が、
RTNが独立したRTNビルディングブロックから形成され、ここで、各RTNビルディングブロックは内部の有向決定グラフを有し、該グラフは、他のRTNビルディングブロックの内部の有向決定グラフとは独立して定義され、少なくとも一つの決定経路に沿って少なくとも一つの決定ポジションを持っており、
選択ステップにおけるキーワードを用いて、全てのRTNビルディングブロックの内部の決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
全てのキーワードでの選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
当該方法。
【請求項2】
RTNビルディングブロックの決定グラフが決定ポジションにおいて実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、または、全てのRTNビルディングブロックからRTNビルディングブロックが挿入され、次いでそれが再び実行されること、
を特徴とする、請求項1に記載の方法。
【請求項3】
RTNビルディングブロックの決定グラフにおいて、決定ポジションでは再帰呼び出し関数の事前決定し得ない無制限の回数の連続的な呼び出しが行われるものであり、該決定ポジションが、キーワード(文字列、記号、変数または数字)を要求する少なくとも一つの決定ポジションを前置され、かつ、少なくとも一つの決定ポジションが後に続き、該決定ポジションがまたキーワードを要求すること、
を特徴とする、請求項1または2に記載の方法。
【請求項4】
選択ステップの実行前の変換ステップにおいて、各RTNビルディングブロックが第1または第2の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるRTNビルディングブロックは第1の包括的グループに割り当てられ、かつ、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるRTNビルディングブロックが、第2の包括的グループに割り当てられ、かつ、第1の決定ポジションが削除されるよう、および、選択ステップが全てのRTNビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第1の包括的グループのRTNビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第1の包括的グループの全てのRTNビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第2の包括的グループのRTNビルディングブロックが、該選択ステップが第2の包括的グループのRTNビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加されること、
を特徴とする、先行する請求項に記載の方法。
【請求項5】
各RTNビルディングブロックが、少なくとも一つの文字列、少なくとも一つの記号、変数または数字で始まり、かつ、
選択ステップが、第1の包括的グループのRTNビルディングブロックに対してのみ、または、第2の包括的グループのRTNビルディングブロックにおいてのみ、適用され得ること、
を特徴とする、請求項4に記載の方法。
【請求項6】
第2の包括的グループのRTNビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意選択にて呼び出され得ること、
を特徴とする、請求項4または5に記載の方法。
【請求項7】
各RTNビルディングブロックが、決定グラフの完全な実行後に、少なくとも一つの処理入力セットに依存して、各々のRTNビルディングブロックのために定義された少なくとも一つの処理関数の結果として、ZEROを含む少なくとも一つの値を有する処理出力セットを返し、ここで、これらのセット内の値の順序が格納され、かつ、得られた各処理出力セットは、処理入力セットの一つとして各RTNビルディングブロックに割り当てられ得ること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項8】
各RTNビルディングブロックが、少なくとも一つの第1の重みを有し、それによって、RTNビルディングブロックのネスティングが、1つのネスティングへと変えられ、該1つのネスティングは、各選択ステップの間または全ての選択ステップを実行した後に、さらなる処理のために使用でき、それが、同等に小さい第1の重みを有する元の上位付けされたRTNビルディングブロックのそれぞれに対して、より大きい第1の重みのRTNビルディングブロックを上位付けることによって行われること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項9】
第1の包括的グループの全てのRTNビルディングブロックの第1の重みが、ステートメントにおいて直接的に上位付けされている第2の包括的グループのRTNビルディングブロックに依存しており、
そのことが、第1の包括的グループのRTNビルディングブロックに対して割り当てられる第1の重みが、初期の重みとして記述される理由であること、
を特徴とする、請求項8に記載の方法。
【請求項10】
第1の包括的グループのRTNビルディングブロックが、同一の第1の初期の重みを持ち、それは好ましくは平均的な大きさのものであり、かつ、これらのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに導入されるときに、単一の値だけ、好ましくは1だけ減らされた第1の重みを採用すること、
を特徴とする、請求項9に記載の方法。
【請求項11】
第1または第2の包括的グループのRTNビルディングブロックの処理関数の処理出力セットに対して、それらの処理関数を適用する第2の包括的グループのRTNビルディングブロックが、第2の包括的グループの第1の包括的サブグループを形成し、かつ、それぞれが、同一の第1の重みを持ち、その重みは、可能な最も大きい重みではなく、しかし、第1の包括的グループのRTNビルディングブロックの第1の初期の平均の大きさの重みよりは大きいこと、
を特徴とする、請求項8、9または10に記載の方法。
【請求項12】
第2の包括的グループのRTNビルディングブロックが、それらの処理出力セットが第1または第2の包括的グループの他のRTNビルディングブロックのための処理入力セットとして受け取られるものであって、該第2の包括的グループのRTNビルディングブロックは、第2の包括的グループの第2の包括的サブグループを形成し、かつ、どんな場合であっても第1の包括的グループのRTNビルディングブロックの第1の初期の平均の大きさの重みよりは小さいそれぞれに異なる第1の重みを有し、かつ、各々のRTNビルディングブロックのための第1の重みが、各場合において、該第1のグループのRTNビルディングブロックを実行するためにより小さい第1の重みをこのグループにそれぞれに割り当てることによって、第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックに関する予め決定可能な処理の順序を個々に記述していること、
を特徴とする、請求項8、9、10または11に記載の方法。
【請求項13】
第1の包括的グループからの少なくとも一つのRTNビルディングブロックの導入を指示する決定ポジションの後に、少なくとも一つのさらなる決定ポジションが、第1および第2の包括的グループの全てのRTNビルディングブロックに続き、
前記さらなる決定ポジションは、変換ステップの後で任意選択的に存在して第2の包括的グループからのRTNビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジションとは独立しており、
前記第1および第2の包括的グループの全てのRTNビルディングブロックが、可能な最も大きい重みの大きさを持った第2の固定された重みを有すること、
を特徴とする、請求項8から12に記載の方法。
【請求項14】
変換ステップ後のクエリステートメントに由来するネスティングの順序での第2の包括的グループの各RTNビルディングブロックの第1の重みが、より大きい第1の重みの各々のRTNビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第2の重みを有する各々の上位付けされたRTNビルディングブロックが到達されるまで、各上位付けされたRTNビルディングブロックの第1の重みと比較されること、および、
それに応じて、比較の基準としての役目をする、この決定されたネスティングの順序のRTNビルディングブロックが、到達されたRTNビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのRTNビルディングブロックに対して上位付けされること、
を特徴とする、請求項13に記載の方法。
【請求項15】
第1の包括的グループのRTNビルディングブロックが、それら自身の第1の重み、および、それらに対して上位付けされるRTNビルディンブロックの第1の重みとは無関係に、それらに対して直接的に上位付けされる第1または第2の包括的グループのRTNビルディングブロックに対して下位付けされること、
を特徴とする、請求項8から14に記載の方法。
【請求項16】
比較されことになる第2の包括的グループのRTNビルディングブロックが、第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと同一の第1の重みを持つ場合に、該比較される必要のあるRTNビルディングブロックが、これらのRTNビルディングブロックが第2の包括的グループの第2の包括的サブグループのRTNビルディングブロックであるならば、かつ、そうである場合にのみ、このRTNビルディングブロックに対して直接的に下位付けされること、
を特徴とする、請求項8から15に記載の方法。
【請求項17】
第2の包括的サブグループのものでもある上位付けされたRTNビルディングブロックの一つと比較されることになる第2の包括的グループのRTNビルディングブロックが、同一の第1の重みを持つ場合、上位付けされたRTNビルディングブロックとの比較は、これらのRTNビルディングブロックが第2の包括的グループの第1の包括的サブグループのRTNビルディングブロックである限り継続されること、
を特徴とする、請求項8から16に記載の方法。
【請求項18】
該第1の包括的グループのRTNビルディングブロックが、全てのRTNビルディングブロックから、第2の可能な最大の重みの大きさを有するRTNビルディングブロックが導入可能である決定ポジションの一つに直接的に導入されるときに、第2の包括的グループのRTNビルディングブロックに対して下位付けされることが予め定められており、該第1の包括的グループのRTNビルディングブロックが、最小の重みの大きさの第2の重みを割り当てられること、および、
そのような場合において、最小の大きさの第2の重みを持たない当該第1の包括的グループのRTNビルディングブロックが、第2の包括的グループのRTNビルディングブロックに対して下位付けされないこと、
を特徴とする、請求項13から17に記載の方法。
【請求項19】
第1および第2の包括的グループの全てのRTNビルディングブロックが、少なくとも一つのRTNビルディングブロックを割り当てられ、ここで該少なくとも一つのRTNビルディングブロックは、第1および第2の包括的グループのRTNビルディングブロックが、可能な最も大きい第2の重みを有するRTNビルディングブロックの、全てのRTNビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるものであること、
を特徴とする、請求項13から18に記載の方法。
【請求項20】
ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のRTNビルディングブロックグループを割り当てられたRTNビルディングブロックが、エンジンインターフェースの要素においてそれぞれ変換され、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有すること、
を特徴とする、上記請求項のうちの1項に記載の方法。
【請求項21】
少なくともコンピュータシステムを有する関係データベースシステムであって、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを備え、その特徴が、
該データ処理ユニットが、請求項1から20のいずれかに記載の上記方法に従って動作するよう、プログラムに基づくように構成されていることである、
前記関係データベースシステム。
【請求項22】
請求項23に記載のデータキャリアまたは電子キャリア信号の関係データベースシステムを制御するために、データベース言語で与えられるデータベースステートメントをメモリ内に読み込むための手段を有すること、
を特徴とする、請求項21に記載の関係データベースシステム。
【請求項23】
請求項22に記載の関係データベースシステムを制御するため、および、該関係データベースシステムを読み込むための、データベース言語で与えられるデータベースステートメントを有するデータキャリアまたは電子キャリア信号であって、
その特徴が、
該データキャリアまたは該キャリア信号上に存在する該データベースステートメントが、独立したRTNビルディングブロックから形成されたRTNの情報を有しており、
ここで、各RTNビルディングブロックは、少なくとも一つの決定経路上に少なくとも一つの決定ポジションを有する他のRTNビルディングブロックの内部の有向決定グラフとは独立して定義される内部の有向決定グラフを有しており、
選択ステップにおいてキーワードを用いて、全てのRTNビルディングブロックの内部決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路は、少なくとも部分的に、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該RTNビルディングブロックの一つが、全てのRTNビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
クエリステートメントの全てのキーワードに対する選択ステップの適用の結果として、該RTNビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
前記データキャリアまたは電子キャリア信号。
【請求項24】
請求項1から20のいずれか1項に記載の方法を実行するように調整された命令を有するコンピュータプログラム。
【請求項25】
コンピュータに読み込み可能な媒体を有するコンピュータプログラム製品であって、当該コンピュータプログラム製品は、コンピュータが、請求項1から20のいずれか1項に記載のコンピュータプログラムを読み込んだ後には毎回、当該方法を実行するためのプログラムによって促されるコンピュータプログラムコード手段を有するものである、
前記コンピュータプログラム製品。
【請求項26】
電子キャリア信号上にコンピュータプログラムを有するコンピュータプログラム製品であって、
コンピュータが、当該コンピュータプログラムの読み込み後に、毎回、請求項1から6のいずれか1項に係る発明の方法を実行するよう、該プログラムによって指示されるものである、
前記コンピュータプログラム製品。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公表番号】特表2009−539151(P2009−539151A)
【公表日】平成21年11月12日(2009.11.12)
【国際特許分類】
【出願番号】特願2009−512359(P2009−512359)
【出願日】平成18年6月1日(2006.6.1)
【国際出願番号】PCT/AT2006/000228
【国際公開番号】WO2007/137308
【国際公開日】平成19年12月6日(2007.12.6)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(508127753)メディアライフ モーシュトル ウント ライフ コミュニケーションズ−ウント インフォメーションズテクノロジーン オーエーゲー (2)
【Fターム(参考)】
【公表日】平成21年11月12日(2009.11.12)
【国際特許分類】
【出願日】平成18年6月1日(2006.6.1)
【国際出願番号】PCT/AT2006/000228
【国際公開番号】WO2007/137308
【国際公開日】平成19年12月6日(2007.12.6)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(508127753)メディアライフ モーシュトル ウント ライフ コミュニケーションズ−ウント インフォメーションズテクノロジーン オーエーゲー (2)
【Fターム(参考)】
[ Back to top ]