(57)【特許請求の範囲】
【請求項１】
リレーショナルテーブルに多次元データを記憶するための方法であって、前記方法は
複数の次元に関連するセル値を記憶するためのファクトテーブルを維持するステップと、
次元キー値の特定の組に関連する特定のセル値を記憶する要求を受取るステップとを含み、次元キー値の前記特定の組は前記複数の次元の各々に記憶される１つの次元キー値を含み、さらに
次元キー値の前記特定の組における２つまたはそれ以上の次元キー値に基づいて置換値を生成するステップと、
前記ファクトテーブル中に
前記特定のセル値と
前記特定のセル値に関連して前記置換値とを記憶するステップとを含む、方法。
【請求項２】
複数の次元テーブルを維持するステップをさらに含み、前記複数の次元テーブルの各次元テーブルは前記複数の次元の異なる次元に対する次元キー値を記憶する、請求項１に記載の方法。
【請求項３】
２つまたはそれ以上の次元キー値は特定の次元からの特定の次元キー値を含み、
前記方法は前記特定の次元に関連する次元テーブル内に座標値を記憶するステップをさらに含み、
置換値を生成するステップは、前記特定の次元キー値に関連して前記次元テーブルに記憶される座標値に基づいて置換値を生成するステップを含む、請求項２に記載の方法。
【請求項４】
前記特定のセル値に関連して前記置換値を記憶するステップは、前記特定のセル値に関連して前記２つまたはそれ以上の次元キー値を記憶することなく行なわれる、請求項１に記載の方法。
【請求項５】
前記ファクトテーブルから前記特定のセル値に関連する置換値を読取るステップと、
前記置換値に基づいて前記２つまたはそれ以上の次元キー値が前記特定のセル値に関連することを判断するステップとをさらに含む、請求項４に記載の方法。
【請求項６】
置換値を生成するステップは、次元キー値の前記特定の組におけるすべての次元キー値に対応する次元キー値に基づいて置換値を生成するステップを含む、請求項１に記載の方法。
【請求項７】
置換値を生成するステップは、
前記複数の次元における次元キー値と多次元キューブのセルとの間のマッピングを確立するステップと、
前記多次元キューブをタイルに細分化するステップと、
前記多次元キューブのどのタイルが前記特定のセル値に対応するセルを含むかを定めるステップと、
前記特定のセル値に対応するセルを含むタイルに基づいて前記置換値を生成するステップとを含む、請求項１に記載の方法。
【請求項８】
ファクトテーブルの各行は前記多次元キューブのタイルに対応し、
前記タイルを識別するデータと、
前記タイル中のセルに対応する特定のセル値とを記憶する、請求項７に記載の方法。
【請求項９】
ファクトテーブルの各行はセル値に対応し、
前記セル値に関連するセルを含むタイルと、
前記タイル内のセルの相対的な場所とを識別するデータを記憶する、請求項７に記載の方法。
【請求項１０】
前記複数の次元の特定の次元は階層的であり、最微細レベル次元値の組と非最微細レベル次元値の組とを含み、
前記多次元キューブをタイルに細分化するステップは、最微細レベル次元値の前記組における前記次元値と非最微細レベル次元値の前記組における次元値とのマッピングに基づいて前記多次元キューブをタイルの第１の組に細分化するステップを含む、請求項７に記載の方法。
【請求項１１】
前記特定の次元は、
最微細レベル次元値の前記組よりも粗い細分性のレベルと、
非最微細レベル次元値の前記組よりも細かい細分性のレベルとを有する非最微細レベル次元値の第２の組を含み、
前記多次元キューブをタイルに細分化するステップは、最微細レベル次元値の前記組における前記次元値と非最微細レベル次元値の前記第２の組における次元値とのマッピングに基づいてタイルの前記第１の組の各タイルをタイルの第２の組に細分化するステップを含む、請求項１０に記載の方法。
【請求項１２】
前記多次元キューブをタイルに細分化するステップは、前記複数の次元の特定の次元に対する固定された幅のタイリング範囲を確立するステップを含む、請求項７に記載の方法。
【請求項１３】
前記多次元キューブをタイルに細分化するステップは、前記複数の次元のうち前記特定の次元以外の次元に対する固定された幅のタイリング範囲を確立するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記多次元キューブをタイルに細分化するステップは、
第１の基準に基づいて前記多次元キューブをタイルの第１の組に細分化するステップと、
第２の基準に基づいてタイルの前記第１の組の各タイルをタイルの第２の組に細分化するステップとを含み、
前記方法はさらに
前記セル値に関連するセルを含むタイルの前記第１の組のタイルと、
前記セル値に関連するセルを含むタイルの前記第２の組のタイルとに基づいて
前記ファクトテーブル内のどこに各セル値を記憶するかを選択するステップを含む、請求項７に記載の方法。
【請求項１５】
前記ファクトテーブル内にクラスタの第１の組を確立するステップをさらに含み、クラスタの前記第１の組における各クラスタはタイルの前記第１の組における特定のタイルに関連する行に対応し、さらに
クラスタの前記第１の組の各クラスタ内にクラスタの第２の組を確立するステップを含み、クラスタの前記第２の組における各クラスタはタイルの前記第２の組における特定のタイルに関連する行に対応する、請求項１４に記載の方法。
【請求項１６】
前記方法は、前記タイルにタイル数を割当てるステップと、
前記タイル数に基づいて分類された順序で前記ファクトテーブル中に行を記憶することによって前記ファクトテーブル内のどこに各セル値を記憶するかを選択するステップとを含む、請求項７に記載の方法。
【請求項１７】
前記タイルにタイル数を割当てるステップは、密接に関係するタイル数を前記多次元キューブ内の密接に関係する位置に存在するタイルに割当てる割当技術を用いて行なわれる、請求項１６に記載の方法。
【請求項１８】
リレーショナルテーブルに多次元データを記憶するための命令を有するコンピュータ読取可能媒体であって、前記命令は
複数の次元に関連するセル値を記憶するためのファクトテーブルを維持するステップと、
次元キー値の特定の組に関連する特定のセル値を記憶する要求を受取るステップとを行なうための命令を含み、次元キー値の前記特定の組は前記複数の次元の各々に記憶される１つの次元キー値を含み、さらに
次元キー値の前記特定の組における２つまたはそれ以上の次元キー値に基づいて置換値を生成するステップと、
前記ファクトテーブル内に
前記特定のセル値と
前記特定のセル値に関連して前記置換値とを記憶するステップとを行なうための命令を含む、コンピュータ読取可能媒体。
【請求項１９】
複数の次元テーブルを維持するための命令をさらに含み、前記複数の次元テーブルの各次元テーブルは前記複数の次元の異なる次元に対する次元キー値を記憶する、請求項１８に記載のコンピュータ読取可能媒体。
【請求項２０】
２つまたはそれ以上の次元キー値は特定の次元からの特定の次元キー値を含み、
前記コンピュータ読取可能媒体は前記特定の次元に関連する次元テーブル内に座標値を記憶するステップを行なうための命令をさらに含み、
置換値を生成するステップは、前記特定の次元キー値に関連して前記次元テーブルに記憶される座標値に基づいて置換値を生成するステップを含む、請求項１９に記載のコンピュータ読取可能媒体。
【請求項２１】
前記特定のセル値に関連して前記置換値を記憶するステップは、前記特定のセル値に関連して前記２つまたはそれ以上の次元キー値を記憶することなく行なわれる、請求項１８に記載のコンピュータ読取可能媒体。
【請求項２２】
前記ファクトテーブルから前記特定のセル値に関連する置換値を読取るステップと、
前記置換値に基づいて前記２つまたはそれ以上の次元キー値が前記特定のセル値に関連することを判断するステップとを行なうための命令をさらに含む、請求項２１に記載のコンピュータ読取可能媒体。
【請求項２３】
置換値を生成するステップは、次元キー値の前記特定の組におけるすべての次元キー値に対応する次元キー値に基づいて置換値を生成するステップを含む、請求項１８に記載のコンピュータ読取可能媒体。
【請求項２４】
置換値を生成するステップは、
前記複数の次元における次元キー値と多次元キューブのセルとの間のマッピングを確立するステップと、
前記多次元キューブをタイルに細分化するステップと、
前記多次元キューブのどのタイルが前記特定のセル値に対応するセルを含むかを定めるステップと、
前記特定のセル値に対応するセルを含むタイルに基づいて前記置換値を生成するステップとを含む、請求項１８に記載のコンピュータ読取可能媒体。
【請求項２５】
ファクトテーブルの各行は前記多次元キューブのタイルに対応し、
前記タイルを識別するデータと
前記タイルにおけるセルに対応する特定のセル値とを記憶する、請求項２４に記載のコンピュータ読取可能媒体。
【請求項２６】
ファクトテーブルの各行はセル値に対応し、
前記セル値に関連するセルを含むタイルと
前記タイル内のセルの相対的な場所とを識別するデータを記憶する、請求項２４に記載のコンピュータ読取可能媒体。
【請求項２７】
前記複数の次元の特定の次元は階層的であり、最微細レベル次元値の組と非最微細レベル次元値の組とを含み、
前記多次元キューブをタイルに細分化するステップは、最微細レベル次元値の前記組における前記次元値と非最微細レベル次元値の前記組における次元値との間のマッピングに基づいて前記多次元キューブをタイルの第１の組に細分化するステップを含む、請求項２４に記載のコンピュータ読取可能媒体。
【請求項２８】
前記特定の次元は
最微細レベル次元値の前記組よりも粗い細分性のレベルと
非最微細レベル次元値の前記組よりも細かい細分性のレベルとを有する非最微細レベル次元値の第２の組を含み、
前記多次元キューブをタイルに細分化するステップは、最微細レベル次元値の前記組における前記次元値と非最微細次元値の前記第２の組における次元値との間のマッピングに基づいてタイルの前記第１の組の各タイルをタイルの第２の組に細分化するステップを含む、請求項２７に記載のコンピュータ読取可能媒体。
【請求項２９】
前記多次元キューブをタイルに細分化するステップは、前記複数の次元の特定の次元に対する固定された幅のタイリング範囲を確立するステップを含む、請求項２４に記載のコンピュータ読取可能媒体。
【請求項３０】
前記多次元キューブをタイルに細分化するステップは、前記複数の次元のうち前記特定の次元以外の次元に対する固定された幅のタイリング範囲を確立するステップをさらに含む、請求項２９に記載のコンピュータ読取可能媒体。
【請求項３１】
前記多次元キューブをタイルに細分化するステップは、
第１の基準に基づいて前記多次元キューブをタイルの第１の組に細分化するステップと、
第２の基準に基づいてタイルの前記第１の組の各タイルをタイルの第２の組に細分化するステップとを含み、
前記命令は
前記セル値に関連するセルを含むタイルの前記第１の組のタイルと、
前記セル値に関連するセルを含むタイルの前記第２の組のタイルとに基づいて
前記ファクトテーブル内のどこに各セル値を記憶するかを選択するための命令をさらに含む、請求項２４に記載のコンピュータ読取可能媒体。
【請求項３２】
前記ファクトテーブル内にクラスタの第１の組を確立するステップを行なうための命令をさらに含み、クラスタの前記第１の組における各クラスタはタイルの前記第１の組における特定のタイルに関連する行に対応し、さらに
クラスタの前記第１の組の各クラスタ内にクラスタの第２の組を確立するステップを行なうための命令を含み、クラスタの前記第２の組における各クラスタはタイルの前記第２の組における特定のタイルに関連する行に対応する、請求項３１に記載のコンピュータ読取可能媒体。
【請求項３３】
前記命令は前記タイルにタイル数を割当てるための命令と、
前記タイル数に基づいて分類される順序で前記ファクトテーブル中に行を記憶することによって前記ファクトテーブル内のどこに各セル値を記憶するかを選択するための命令とをさらに含む、請求項２４に記載のコンピュータ読取可能媒体。
【請求項３４】
前記タイルにタイル数を割当てるステップは、前記多次元キューブ内の密接に関係する位置に存在するタイルに密接に関係するタイル数を割当てる割当技術を用いて行なわれる、請求項３３に記載のコンピュータ読取可能媒体。
【請求項３５】
リレーショナルテーブルに記憶された多次元データを表す多次元キューブのデータセルに関連する置換値を生成するための方法であって、前記方法は
多次元キューブ内の他のタイルに対するセルの存在するタイルの位置を表すタイル位置値を生成するステップと、
セルの存在するタイル内の他のセルに対する前記セルの位置を表すローカル位置値を生成するステップと、
タイル位置値およびローカル位置値に基づいて置換値を生成するステップとを含み、
置換値を生成するステップは
タイル位置値に基づいて単一のタイル数を生成するステップと、
ローカル位置値に基づいて単一のオフセット数を生成するステップとを含み、
前記方法は、
索引専用テーブルの単一行内に、少なくともデータセルに関連する特定のセル値と、特定のセル値に関連する単一のタイル値とを記憶するステップをさらに含む、方法。
【請求項３６】
多次元データに関連するファクトテーブルのキー範囲区画として次元キー値の特定の範囲に関連するタイルおよびゼロまたはそれ以上の他のタイルを表すステップをさらに含む、請求項３５に記載の方法。
【請求項３７】
複数の行を有するテーブル上に構築された索引を記憶する方法であって、前記方法は
前記複数の行の行のサブ部分に対するキー値を含有する索引エントリを記憶するステップを含み、前記索引エントリは
前記行を場所決めするための第１のデータと、
前記行内に前記行の前記サブ部分に関連する値を場所決めするための第２のデータとを含む、コンピュータ読取可能媒体。
【請求項３８】
前記行の前記サブ部分はアレイであり、前記アレイの各メンバーが前記行において表される、請求項３７に記載の方法。
【請求項３９】
前記索引は、前記行の前記サブ部分に関連する各値に対する異なる索引エントリを有する、請求項３７に記載の方法。
【請求項４０】
前記第１のデータは、多次元キューブの部分の前記多次元キューブの他の部分に対する位置を表す値であり、
前記第２のデータは、前記多次元キューブのセルの、前記セルが存在する同じ部分内の他のセルに対する位置を表す値である、請求項３７に記載の方法。
【請求項４１】
前記行の前記サブ部分はアレイであり、前記アレイの各メンバーは多次元キューブのセルの値を表す、請求項３７に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の分野】
この発明はリレーショナルデータベース管理システムに関し、より特定的にはリレーショナルデータベース管理システムに多次元データを記憶するための技術に関する。
【０００２】
【発明の背景】
データベースシステムの状況において、「次元」とはデータに対するカテゴリを提供する値のリストである。次元は変数の値を識別するための索引として作用する。たとえば、販売データが各月に対する別個の販売数値を有するならば、そのデータは「月」次元を有する。すなわち、データは月によって編成される。次元はリレーショナルデータベースにおけるキーに似ている。２つまたはそれ以上の次元によって編成されるデータは「多次元データ」と呼ばれる。
【０００３】
変数の次元の各々から１つのメンバーを特定化することによって、多次元変数内のデータのあらゆる項目を一意にかつ完全に選択できる。たとえば、販売変数が「月」、「製品」および「市場」によって次元を定められるとき、「月」次元に対して「１月」を特定化し、「製品」次元に対して「ステレオ」を特定化し、「市場」次元に対して「東部地方」を特定化することによって変数の単一の値を一意に特定化する。よって次元は、検索、更新および計算を行なうためのデータを編成および選択する、簡潔かつ直観的な態様を提供する。
【０００４】
多次元データは、リレーショナルデータベースシステム（“ＲＯＬＡＰ”システム）または特殊化された「多次元」データベースシステム（“ＭＯＬＡＰ”システム）に記憶されてもよい。多次元データベースシステムは多次元データに対して特定的に設計された構造およびアクセス技術を提供し、したがって多次元データに対する比較的効率のよい記憶およびアクセスを提供する。しかし、特殊化した多次元データベースシステムに記憶されると、それらの多次元データベースシステムと相互作用するよう特別に構築されたアプリケーションしかデータのアクセスおよび操作ができない。
【０００５】
一方、リレーショナルデータベースシステムに記憶されると、リレーショナルデータベースとの相互作用を支持するすべてのアプリケーションがデータへのアクセスを有する。こうしたデータベースアプリケーションは、リレーショナルデータベースシステムによって支持されるデータベース言語に従う命令を提出することによって、リレーショナルデータベースシステムと通信する。最も一般的なデータベース言語は構造化照会言語（ＳＱＬ）である。
【０００６】
リレーショナルデータベースシステムは関連するテーブルの形でデータを記憶し、各テーブルは１つまたはそれ以上の列および０またはそれ以上の行を有する。リレーショナルデータベースシステムに多次元データを記憶するための従来の機構は、スタースキーマと呼ばれるものに配置されたテーブルにデータを記憶するものである。リレーショナルデータベースシステムにおいて、スタースキーマは１つまたはそれ以上の比較的大きいテーブルおよびいくつかの比較的小さいテーブルの存在によって識別される。大きいテーブルはより小さいテーブルに含まれる情報を複製するかわりに、より小さいテーブルに記憶される行に対する参照（外部キー値）を含む。スタースキーマ内のより大きいテーブルは「ファクトテーブル」と呼ばれ、より小さいテーブルは「次元テーブル」と呼ばれる。図１に、２次元を有する例示的なスタースキーマを例示する。
【０００７】
図１を参照すると、テーブル１０２、１０４および１０６を含むデータベース１００が例示される。テーブル１０２は「店」と名づけられ、販売が起こり得る各々の店に関する情報とを含む。店テーブル１０２中の各行は一意の店ＩＤと、その店ＩＤに対応する特定の店に関する情報を含む。テーブル１０４は「製品」と名付けられ、いずれかの店で販売され得る各種の製品に関する情報を含む。製品テーブル１０４中の各行は一意の製品ＩＤと、その特定の製品に関する情報とを含む。
【０００８】
テーブル１０６は「販売」と名づけられ、店テーブル１０２に表わされる店の各々における各販売に関する情報を含む。販売テーブル１０６中の各行は、ドル金額と、その販売が行なわれた店を示すための店ＩＤと、その販売において売られた製品を示すための製品ＩＤと、販売の日付とを含む。典型的に、販売の数は、その販売が行なわれた店の数およびその店によって扱われた製品の数のどちらよりもかなり大きくなる。販売トランザクションに含まれる店および製品に関する詳細な情報は、テーブル１０６の行に記憶される必要はない。なぜならこのような詳細な情報はそれぞれテーブル１０２および１０４において入手可能だからである。その代わりに、テーブル１０６の行は他のテーブル１０２および１０４に記憶される情報を参照する値（店ＩＤおよび製品ＩＤ）のみを含む。したがってテーブル１０２、１０４および１０６はスタースキーマを構成し、ここでテーブル１０６はファクトテーブルであり、テーブル１０２および１０４は次元テーブルである。
【０００９】
ファクトテーブル１０６に記憶されるデータは２次元しか有さないため、ファクトテーブル１０６はそれらの次元に対する外部キー値を記憶するための専用の列を２つだけ有する。一般的にファクトテーブルは、ファクトテーブルに記憶される多次元データに関連する次元の各々に対する外部キー値を記憶するために１つの列を専用にしなければならない。よって２０次元に関連するデータを記憶するファクトテーブルは、外部キー値の記憶のために２０列を専用にする必要がある。
ＵＳ−Ａ−５  ９４３  ６６８号およびＵＳ−Ａ−５  ９０５  ９８５号は、２レベルデータ構造が定められるリレーショナルアーキテクチャに基づくものであり、ここで一方のレベルは密なデータブロックを得るためにユーザによって選択される次元（すなわちサブキューブ）を含み、他方のレベルは次元を識別することによって密なデータブロックを選択するための疎の索引（すなわち疎の索引キーまたは次元識別子）として用いられる残りの次元の組合せを含む（’９８５特許、第７欄、５５−６２行）。すなわち、次元メンバーの可能な組合せのうち比較的高い割合がデータ値を含まない疎の次元が、次元メンバーの可能な組合せのうち比較的高い割合がデータ値を含む密なデータブロックを索引付けするために用いられる。
’６６８特許および’９８５特許の両方に開示されるシステムはまた、すべてのメンバーが「ファクトテーブル４０２」中の列にマップされるという点で、「非アンカ」次元と呼ばれるその他の次元と異なる態様で扱われる「アンカ」次元と呼ばれる１つの次元を含む（’９８５、第８欄、６４−６７行）。
【００１０】
リレーショナルデータベース内に多次元データを記憶することは、２つの重要な欠点を有する。第１に、ファクトテーブルが多次元データそのものしか記憶する必要がないとき、ファクトテーブルは必要以上にかなり大きくなる。ファクトテーブルのサイズが次元データ自体に対してかなり大きくなる主な理由は、各多次元値に対する各次元に対して外部キー値を記憶する必要があるためである。第２に、従来のファクトテーブル内の行は特定の順序を有さない。したがって、互いに概念的に密接に関係する多次元値がファクトテーブル全体にわたって比較的ランダムに記憶されるおそれがある。互いに概念的に関係する多次元データはしばしばグループとしてアクセスされ操作されるため、このことは非効率をもたらす。
【００１１】
リレーショナルデータベースにおける多次元データの管理に対する代替的なアプローチは、リレーショナルファイルにデータを記憶しながらも多次元データベースシステム技術を用いてすべての多次元構造、メタデータ、運営、およびアクセス制御を維持することを含む。多次元技術を用いて関係的に記憶されたデータにアクセスすることは多数の困難を有する。たとえば、すべての運営および多次元データへのアクセスが多次元データベースシステムエンジンを通じて排他的に制御されるとき、２つのデータベース管理システムを運営する必要がある。さらに、従来のリレーショナルコマンド（例、ＳＱＬコマンド）を用いてデータにアクセスするデータベースアプリケーションは、多次元データにアクセスできない。
【００１２】
リレーショナルデータベースシステムに多次元データを記憶するための前述のアプローチは先行技術のアプローチによって行なわれるトレードオフを示すものであり、それは（１）従来のリレーショナルアクセスなどの現在のリレーショナルシステムの利益を享受するために多次元記憶の利益を犠牲にしたか、または（２）多次元記憶の効率を得るためにリレーショナル記憶の利益を犠牲にしたものである。
【００１３】
【発明の概要】
リレーショナルデータベースシステムに多次元データを記憶するための従来のアプローチに関連する問題に向けた技術が提供される。この発明の１つの局面に従うと、ファクトテーブル中の各行の多くの外部キー値が「置換」値にマップされ、それによって置換される。データベースサーバが外部キー値のあらゆる所与の組合せから置換値を導くことを可能にするマッピング機能が与えられ、その置換値のときの外部キー値の組合せを再生するために逆マッピング機能が与えられる。
【００１４】
この発明の別の局面に従うと、互いに概念的に関係する多次元値の外部キー値の組合せが互いに近い値にマップするようにマッピング機能が選択される。次いでファクトテーブル中の行は分類された順序でファクトテーブル内に記憶され、外部キー値から導かれた置換値は分類キーとして用いられる。各行の分類キー値は一般的に多次元に対するその行におけるその値の位置を反映するため、導かれた値に基づいてファクトテーブルを分類することにより、互いに概念的に関係する値がファクトテーブル内で物理的に互いの近くに分類される。
【００１５】
外部キー値から置換値を生成するためにさまざまな技術が提供される。このプロセスは一般的に、すべての多次元値を含む多次元キューブを細分化して、タイルと呼ばれるより小さなサブキューブにすることを含む。各タイルはより大きなキューブ内の座標の特定の組を有し、各多次元値はそれが属するタイル内の座標の特定の組を有する。キューブをこの態様で細分化することによって生成されるすべてのタイルには単一の数が割当てられ、密接に関係する数を割当てられたタイルはキューブの次元内で密接に関係する。次いで、特定の多次元値がその中に存在するタイルのタイル数がファクトテーブル中のその多次元値を含む行に記憶され、そのタイル数を導くために用いられた別個の外部キー値を置換する。
【００１６】
タイリング機構の修正形が提供される。アプローチの１つに従うと、キューブは階層的次元の特定のレベルのメンバーに基づいてタイルに細分化される。たとえば、多次元キューブの１つの次元は「地理的場所」であってもよく、地理的場所は市、州、地方、国というレベルを有する。この場合、その次元の特定のレベル、たとえば州などが選択されてもよく、特定の州値に対応する多次元キューブ内のすべての値は同じタイルに属すると考えられる。
【００１７】
別のタイリングアプローチに従うと、タイル自体がより小さなタイルに細分化されてもよい。このことによってタイルの階層が生じ、タイルの１つのレベルに用いられる細分化基準は、異なるレベルでタイルを細分化するために用いられる基準とは全く異なっていてもよい。
【００１８】
添付の図面の図において、制限的なものではなく例としてこの発明が例示される。ここで類似の参照番号は類似の構成要素を示す。
【００１９】
【好ましい実施例の詳細な説明】
リレーショナルデータベース管理システムに多次元データを記憶するための方法および装置を説明する。以下の説明においては、説明する目的のために、この発明の完全な理解を提供するために多数の特定の詳細が示される。しかし、この発明はこれらの特定の詳細なしでも実施され得ることが当業者に明らかになるであろう。別の場合においては、この発明を不必要に不明瞭にすることを避けるために、周知の構造および装置をブロック図の形で示す。
【００２０】
（ファクトテーブルのサイズを減少させるために置換値を用いる）
この発明の１つの局面に従うと、ファクトテーブル中の各行の多くの外部キー値が、それらの外部キー値から導かれるデータによって置換される。行中の複数の外部キー値を置換するために用いられる導出データをここでは「置換値」と呼ぶ。以下により詳細に説明するとおり、置換値は多数の成分を含み得るが、置換値に含まれるデータの量は、それが置換する多数の外部キー値に対して必要とされるデータの量よりもかなり少なくなる傾向がある。置換値は、それが行において置換する多数の外部キー値よりも小さいため、行のサイズはかなり減少する。ファクトテーブルの各行のサイズがかなり減少することによって、ファクトテーブル自体のサイズがかなり減少する。
【００２１】
この発明の別の局面に従うと、行は分類された順序でファクトテーブルに記憶される。行が分類される順序は、その行に属する多次元値の多次元キューブ内での近さに基づいている。多次元キューブ内で近くに位置する値は一緒にアクセスされる可能性がある。したがって、多次元キューブ内で近くに置かれる値をクラスタリングする態様でファクトテーブル行を記憶することは、ファクトテーブルにアクセスする動作中に生成されるＩ／Ｏを減少させる傾向がある。
【００２２】
実施例の１つに従うと、データベースサーバが外部キー値のあらゆる所与の組合せから単一の置換値を導くことを可能にするマッピング機能が与えられ、またその単一の置換値のときの外部キー値の組合せを再生するために逆マッピング機能が与えられる。ファクトテーブルに新たな行が挿入されるとき、その行の外部キー値にマッピング機能が適用されて置換値が生成される。置換値は含むがそれが導いた個々の外部キー値は含まない、変更された行が次いでファクトテーブルに挿入される。その行に関連する特定の外部キー値を定める必要があるときには、その行に記憶される置換値に逆マッピング機能が適用される。
【００２３】
（用語）
外部キー値の組から置換値を生成するためにさまざまな技術が用いられてもよい。説明する目的のために、置換値を導くために用いられる技術を以下の用語を参照しながら説明する。
【００２４】
「次元キー値」は特定の次元に関連する値である。たとえば「地方」次元に対する次元キー値は「北部地方」、「南部地方」、「東部地方」、および「西部地方」であってもよい。スタースキーマにおいて、ある次元の次元キー値は典型的に、その次元に関連する次元テーブルの次元キー列に記憶される。
【００２５】
前述のとおり、変数の次元の各々から１つのメンバーを特定することによって、次元変数内のデータのあらゆる項目を一意にかつ完全に選択できる。よって多次元変数はＮ次元アレイとして概念的に考えることができ、ここでＮとは変数の次元の数であり、各次元に対する１つの次元キー値を特定化することによって、アレイ中の各値にアクセスしてもよい（例、ＭＤＶａｒ（ｄｉｍ１，ｄｉｍ２，ｄｉｍ３，…，ｄｉｍＮ））。
【００２６】
２次元および３次元の多次元アレイをそれぞれグリッドおよびキューブとして視覚的に示してもよい。便宜上、多次元変数に対応する概念的多次元アレイのことを、それが有する次元の数にかかわらず習慣的に「多次元キューブ」または単に「キューブ」と呼んでいる。さらに各多次元値はキューブの「セル」に属すると言い、セルのアドレスはそこに含まれる多次元値に対応する次元キー値の組（次元ごとに１つ）である。説明する目的のために、あるセルに属する多次元値のことをそのセルの「セル値」と呼ぶ。
【００２７】
多次元値は概念的には多次元キューブのセル中に存在するが、リレーショナルデータベース内でそれらは実際にはファクトテーブルの行の中に存在する。実施例の１つに従うと、キューブ内のセルの相対的な位置を用いて、そのセル中に概念的に存在するセル値に対する置換値を定める。
【００２８】
（置換値導出の概要）
実施例の１つに従うと、置換値は以下のステップによって導かれる。
【００２９】
（１）  多次元キューブを「タイル」に分割し、その各々は多数のセルを含んでもよく、さらに
（２）  タイルにtile＿position値を割当て、
（３）  各タイル内のセルにlocal＿position値を割当て、
（４）  tile＿positionおよびlocal＿position値を用いてtile＿numberおよびオフセット値を導き、
（５）  tile＿number−オフセット値の組合せを置換値として用いる。
【００３０】
置換値導出プロセスにおけるこれらの相の各々を以下に詳細に説明する。
（タイル）
この発明の実施例の１つに従うと、置換値は、ファクトテーブルのセル値のすべてを含む多次元キューブをここでタイルと呼ばれるより小さいサブキューブに細分化することによって導かれる。各タイルはより大きいキューブ内の座標の特定の組を有し、各セル値はそれが属するタイル内の座標の特定の組を有する。この態様でキューブを細分化することによって生成される各々のタイルに単一の数が割当てられ、密接に関係する数を割当てられたタイルはキューブの次元内で密接に関係する。
【００３１】
次いで特定のセル値が存在するタイルのタイル数が、ファクトテーブル中のそのセル値を含む行に置換値として記憶され、そのタイル数を導くために用いられた別個の外部キー値を置換する。
【００３２】
（次元キー値を整数にマップする）
実施例の１つに従うと、次元キューブのサブキューブへの分割は、各次元の次元キー値と「座標値」との間の１対１のマッピングの確立を含む。実施例の１つに従うと、座標値は０から始まる整数である。よってＮ次元キー値の次元に対し、Ｎ次元キー値は０からＮ−１の範囲の整数にマップされる。もちろんこのようなマッピングは、次元キー値自体が０からＮ−１の範囲の整数ではないときにのみ必要である。
【００３３】
次元キー値と整数との１対１マッピングを確立するためにさまざまな技術が用いられてもよい。たとえば、Ｎは特定の次元テーブルの濃度であると仮定する。その次元テーブル中のＮ次元キー値は、以下の規則に従って０．．Ｎ−１の範囲の整数にマップされてもよい。
【００３４】
（１）  次元キー値がＫからＬの範囲の整数値であるとき、そのＫからＬの値を関数ｆ（ｘ）＝ｘ−Ｋを用いて０．．Ｎ−１にマップする。
【００３５】
（２）  次元キー値をいくつかの基準に従って分類できるとき、分類された結果における各位置に０からＮ−１の整数を割当てることができる。座標値０からＮ−１を次元テーブル中の隠れた列に記憶できる。次いで、座標マッピングはキー列と隠れた列との関係に要約される。
【００３６】
（３）  次元キー値を分類するための本来の態様がないとき、リレーショナルデータベースシステムによって、またはユーザによって供給されるデータに基づいてマッピングを任意に行なうことができる。この態様で割当てられるときも、座標値は次元テーブル中の隠れた列に記憶されてもよい。
【００３７】
各次元が座標の組にマップされたとき、変数の次元の各々から１つの座標値を特定化することによって、多次元変数内のデータのあらゆる項目を一意にかつ完全に選択できる。たとえば、多次元変数が次元「月」、「地方」および「製品」を有すると仮定する。「月」＝４、「地方」＝１０、および「製品」＝１２を特定化することによって特定の項目Ｘが選択されてもよい。
【００３８】
（指向付け）
実施例の１つに従うと、キューブの次元に順序が割当てられ、特定の座標値が対応する次元はその座標値が特定化される順序によって示される。たとえば、次元「月」、「地方」、「製品」に順序＜地方、月、製品＞が割当てられると仮定する。この順序付けに基づいて、項目Ｘは＜１０、４、１２＞を特定化することによって選択されてもよい。
【００３９】
次元の組に適用される特定の順序付けをここでは「指向付け」と呼ぶ。よって＜地方、製品＞と＜製品、地方＞とは２つの異なる指向付けを示す。以下により詳細に説明するとおり、指向付けはキューブのセルを移動するために用いられる。
【００４０】
（キューブをタイルに分割する）
実施例の１つに従うと、多次元キューブは座標値範囲に基づいてタイルに分割され、各タイルには各次元に対する座標値の範囲が与えられる。たとえば、図２に２つの次元ＡおよびＢを有する多次元キューブ２００が示される。次元Ａは座標値０から１４にマップされた１５の次元キー値を有する。次元Ｂもまた座標値０から１４にマップされた１５の次元キー値を有する。次元Ａは５つの値の３つの領域すなわち［０．．４］、［５．．９］および［１０．．１４］に分割されている。同様に、次元Ｂも５つの値の３つの領域すなわち［０．．４］、［５．．９］および［１０．．１４］に分割されている。
【００４１】
多次元キューブ２００は９つのタイル２０２、２０４、２０６、２０８、２１０、２１２、２１４、２１６および２１８に分割されており、その各々は座標範囲の一意の組合せに対応し、次元ごとに１つの座標値範囲を有する。たとえば、タイル２０２は座標値範囲の組合せＡ［０．．４］Ｂ［０．．４］に対応する。同様に、タイル２１６は座標値範囲の組合せＡ［１０．．１４］Ｂ［５．．９］に対応する。
【００４２】
（タイル位置）
キューブがタイルに分割されるとき、各タイルはその他のタイルに関するキューブ中の特定の位置に存在する。あるタイルのその他のタイルに関するキューブ内の位置をここではタイルのtile＿positionと呼ぶ。タイルのtile＿positionは各次元に対する１つの「タイル座標値」を含む。たとえば、キューブ２００の指向付けが次元Ａ、次元Ｂであると仮定する。したがってタイル２０２、２０８および２１４はそれぞれtile＿position＜０，０＞、＜１，０＞および＜２，０＞に対応する。同様に、タイル２０６、２１２および２１８はそれぞれtile＿position＜０，２＞、＜１，２＞および＜２，２＞に対応する。
【００４３】
（ローカルセル位置）
セルが存在するタイルに関するそのセルの位置をセルの“local＿position”と呼ぶ。あらゆる所与のセルに対し、local＿positionはそのセルが存在するタイルの各次元に対する１つの座標値を含む。たとえば、キューブ２００中の各タイルは２つの次元、すなわち次元Ａおよび次元Ｂを有する。したがって、キューブ２００のタイルに属するセルのlocal＿positionは、次元Ａに対する座標値および次元Ｂに対する座標値からなる。しかし、local＿positionの座標値はキューブ全体におけるセルの位置ではなく、同じタイル内のその他のセルに関するセルの位置を示す。よってセル２３０、２３２および２３４は、異なるタイルおよびキューブ２００内の異なる「グローバル」座標に存在するにもかかわらず、同じlocal＿positionを有する。
【００４４】
多次元キューブがタイルに分割されるとき、個々のセルは、そのセルが位置するタイルを一意に識別するtile＿position、およびタイル内のそのセルの場所を一意に識別するlocal＿positionに基づいて選択されてもよい。したがって、tile＿position−local＿positionの組合せを置換値として用いてもよい。特定的には、tile＿position−local＿positionの組合せを用いて、ファクトテーブルの各行において、その行のセル値に関連する外部キー値を置換してもよい。
【００４５】
（tile＿position−local＿positionの組合せを導く）
この発明の実施例の１つに従うと、最初に（次元キー値対座標値マッピングに基づいて）セル値が属するセルのグローバル座標を定め、次に以下の方程式を適用することによって、セル値に対して＜tile＿position，local＿position＞の組合せが導かれる。
【００４６】
あるセルがグローバル座標位置（ｘ１，…，ｘＮ）に存在するとすると、
tile＿position＝（ｑ１，…，ｑＮ）  ここでｑｊ＝ｘｊ  ＤＩＶ  Ｔｊ
local＿position＝（ｒ１，…，ｒＮ）  ここでｒｊ＝ｘｊ  ＭＯＤ  Ｔｊ
両方の方程式において、Ｔｊはタイルによって次元ｊに沿って張られる次元キー値の数である。
【００４７】
たとえば、図２のキューブ２００におけるセル２３０のグローバル座標は＜１４，２＞である。キューブ２００は５×５のタイルに分割される。よって両方の次元ＡおよびＢに対するＴｉは５である。したがってセル２３０に対するtile＿positionは＜１４ＤＩＶ５，２ＤＩＶ５＞または＜２，０＞である。セル２３０に対するlocal＿positionは＜１４ＭＯＤ５，２ＭＯＤ５＞または＜４，２＞である。したがってセル２３０に対するtile＿position−local＿positionの組合せは（＜２，０＞＜４，２＞）である。
【００４８】
（tile＿number−オフセットの組合せ）
tile＿positionおよびlocal＿positionの各々は座標値のＮ−タプルであり、Ｎはキューブの次元の数である。つまり、tile＿position−local＿positionの組合せは２Ｎ座標値からなる。たとえばＮが１０であるとき、各tile＿position−local＿positionの組合せは２０の座標値を含む。ファクトテーブルの各行において２Ｎ座標値を記憶するために必要とされる空間の量はまだ有効であり得る。したがってこの発明の実施例の１つに従うと、tile＿position値よりも小さいtile＿number値がtile＿position値から導かれ、local＿position値よりも小さいオフセット値がlocal＿position値から導かれる。よって、すべてのtile＿position−local＿positionの組合せがtile＿number−オフセットの組合せに低減されてもよい。次いでこのtile＿number−オフセットの組合せがファクトテーブル内の置換値として用いられる。tile＿position値からtile＿number値を、local＿position値からオフセット値をそれぞれ導く技術について以下により詳細に説明する。
【００４９】
（tile＿position値からtile＿number値を導く）
実施例の１つに従うと、タイルを一意に識別するtile＿position  Ｎ−タプルは、以下の方程式に従ってここでタイルのtile＿numberと呼ばれる単一の値に減少される。
【００５０】
tile＿number＝sum（Ｎ−１，１，ｐ１*…*ｐｊ*ｑ［ｊ＋１］）＋ｑ１＋１、ここで
ｑｊ＝ｊ番目のtile＿position座標（前述と同様）
ｐｊ＝次元ｊに沿ったページの数
ｐｊ＝（Ｄｉｍ［ｊ］からカウント（相異なるｉｄ）を選択）ＤＩＶ  Ｔｊ＋ｒ／ｍａｘ（ｒ，１）、ｒ＝（Ｄｉｍ［ｊ］からカウント（相異なるｉｄ）を選択）ＭＯＤ  Ｔｊ
sum（Ａ，Ｂ，ｅｘｐｒ［ｊ］）という表記は、ｊ＝Ａからｊ＝Ｂまでのｅｘｐｒ［ｊ］の和を示す。
【００５１】
上記の方程式はキューブ内のタイルに特定の順序を割当てる。その順序はキューブの特定の横断パターンに対応する。他の方程式を用いて、異なるタイルナンバリングスキームをもたらし得る異なる横断パターンを得ることができる。この発明はtile＿number値を確立するためのあらゆる特定のキューブ横断パターンの使用に制限されないため、tile＿number値を確立するためのあらゆる特定の方程式に制限されない。実現例によって用いられる特定の横断パターンは、多次元キューブにおいて互いの近くに置かれるタイルに対して密接に関係するtile＿number値を割当てる態様で選択されることが好ましい。密接に関係するtile＿number値を近くに位置するタイルに割当てることによって、以下により詳細に説明するとおり、ファクトテーブルの行がタイル数によって分類される実現例におけるクラスタリングが改善される。
【００５２】
（local＿position値からオフセット値を導く）
実施例の１つに従うと、タイル内のセルを一意に識別するlocal＿position  Ｎ−タプルは、以下の方程式に従ってここでセルのオフセットと呼ばれる単一の値に減少される。
【００５３】
オフセット＝sum（Ｎ−１，１，Ｔ１*…*Ｔｊ*ｒ［ｊ＋１］）＋ｒ１＋１、ここでｒｊ＝ｘｊ  ＭＯＤ  Ｔｊ
前述の方程式は、タイル内のセルに特定の順序を割当てる。その順序はタイルの特定の横断パターンに対応する。他の方程式が異なる横断パターンに対応し得る。この発明はセルのオフセット値を確立するためのあらゆる特定のタイル横断パターンの使用に制限されず、したがってオフセット値を確立するためのあらゆる特定の方程式に制限されない。実現例によって用いられる特定の横断パターンは、多次元タイルにおいて互いの近くに位置するセルに密接に関連するオフセットを割当てる態様で選択されることが好ましい。近くに位置するセルに密接に関係する数を割当てることによって、以下により詳細に説明するとおり、ファクトテーブルの行がtile＿number−オフセットによって分類される実現例におけるクラスタリングが改善される。
【００５４】
（tile＿number−オフセットの組合せから次元キー値を導く）
各セル値に関連する次元キー値をファクトテーブルに記憶しないことによってファクトテーブルのサイズを減少させてもよい。実施例の１つに従うと、tile＿number−オフセットの組合せが外部キー値の代わりにファクトテーブルに記憶される。しかし、ファクトテーブル内のセル値はしばしば次元キー値に基づいてアクセスされる。次元キー値に基づいてファクトテーブルデータにアクセスするために、ファクトテーブルに記憶されるセル値に関連する次元キー値を定める必要がある。
【００５５】
実施例の１つに従うと、ファクトテーブルに記憶されるセル値に関連する次元キー値を定めるプロセスは、ファクトテーブルに記憶されるtile＿number−オフセットの組合せを導くために用いられるプロセスの逆である。特定的には、セル値に関連するtile＿number−オフセットの組合せからtile＿position−local＿positionの組合せが導かれる。次いで、tile＿position−local＿positionの組合せからセル値に関連するセルのグローバル座標が導かれる。次に、グローバル座標値と次元キー値との間のマッピングに基づいて、セル値に関連する次元キー値が定められてもよい。
【００５６】
たとえば、セルのtile＿number値およびオフセット値を導くために前述の方程式が用いられると仮定すると、セルのtile＿positionは以下の方程式から導かれてもよい。
【００５７】
ｊ＝Ｎから２までに対して｛ｑｊ＝（tile＿number−１）ＤＩＶｐ１*…*ｐ［ｊ−１］−sum（ｋ＝ｊ＋１，Ｎ，ｐｊ*…*ｐ［ｋ−１］*ｑｋ）｝、ここでｑ１は前に特定化したtile＿number方程式を用いて解かれる。
【００５８】
セルのlocal＿positionは次の方程式によって導かれてもよい。
ｊ＝Ｎから２までに対して｛ｒｊ＝（オフセット−１）ＤＩＶ  Ｔ１*…*Ｔ［ｊ−１］−sum（ｋ＝ｊ＋１，Ｎ，Ｔｊ*…*Ｔ［ｋ−１］*ｒｋ）｝、ここでｒ１は前に特定化したオフセット方程式を用いて解かれる。
【００５９】
次いで、次の方程式によってtile＿position−local＿positionの組合せからセルのグローバル座標が導かれてもよい。
【００６０】
ｘｊ＝Ｔｊ*ｑｊ＋ｒｊ
（ファクトテーブル内のクラスタリングの増加）
この発明の実施例の１つに従うと、置換値を生成するために用いられるマッピング機能は、互いに概念的に関係するセル値の外部キー値の組合せが互いに近い置換値にマップするように選択される。次に、ファクトテーブル中の行が分類された順序でファクトテーブル内に記憶され、ここで置換値は分類キーとして用いられる。各行の置換は一般的に複数の次元に関するその行中のセル値の位置を反映するため、置換値に基づいてファクトテーブルを分類することにより、互いに概念的に関係するセル値がファクトテーブル内の互いの物理的に近くに記憶されるようになる。
【００６１】
たとえば、置換値としてtile＿number−オフセットの組合せを用いる実施例において、近くに位置するセルのセル値はしばしば同じタイル中にあるため、同じtile＿numberを有する。tile＿numberを分類キーとして用いてファクトテーブルを分類された順序で維持することによって、同じタイルに属するセル値を含む行は互いの近くに記憶される。さらに、tile＿number−オフセットの組合せが分類キーとして用いられるときは、タイル内の各セル値は最も密接に関係する同じタイル内の他方のセル値の近くに記憶される。
【００６２】
（タイルサイズの選択）
この発明の実施例の１つに従うと、タイルのサイズは多次元データが記憶される記憶装置の特徴に基づいて選択される。特定的には、実施例の１つにおいて、キューブが分割されてできるタイルのサイズは、単一のタイルに対するすべてのデータが１つのディスクブロック内に適合するように選択される。たとえば、多次元データを含む行を有するファクトテーブルを記憶する記憶装置が４Ｋバイトのディスクブロックサイズを有すると仮定する。さらに、（置換値、セル値）フォーマットにおけるファクトテーブルの各行が４０バイトを消費すると仮定する。これらの条件下では、ファクトテーブルの１００行がディスクブロック内に適合できる。よって１００セルのタイルサイズが選択されてもよい。１００セルタイルの実際の次元は、キューブがどのように分割されるかに依存して変動してもよい。たとえば、２次元キューブは４×２５、５×２０、１０×１０などの１００セルタイルに分割されてもよい。同様に、３次元キューブは４×５×５、５×１０×２、１０×１０×１などの１００セルタイルに分割されてもよい。
【００６３】
単一のディスクブロックにあるタイルに属するデータを記憶することによって、データ検索がより効率的になる。特定的には、ある動作があるタイルからの１つのデータ項目の検索を要求するとき、その同じタイルからの他のデータ項目が近い将来に必要とされる確率が比較的高くなる。データ項目の検索の際に、そのデータ項目を含むディスクブロック全体が揮発性メモリにロードされる。したがって、その後同じタイルからの他のデータ項目が要求されるときには、それらは付加的なディスクアクセスをもたらすことなく揮発性メモリから検索されてもよい。
【００６４】
マルチブロックＩ／Ｏを支持するシステムなどのいくつかのシステムにおいては、単一のディスクブロックに適合し得るよりも多くのデータを保持するタイルサイズを選択することが望ましいことがある。実施例の１つに従うと、このようなより大きいタイルサイズを選択するときにもディスクブロックサイズが考慮される。特に、より大きいタイルサイズは、その中に含まれるデータがディスクブロックの特定の数に適合するように選択される。たとえば、１００ファクトテーブル行が各ディスクブロックに適合するとき、Ｎセルのタイルサイズが選択され、ここでＮは１００の倍数である。一度に１０ブロックのＩ／Ｏを支持するシステムにおいては、１０００セルのタイルサイズであっても単一のＩ／Ｏ動作によって揮発性メモリにタイルのすべての値をロードできる。
【００６５】
（ファクトテーブル記憶フォーマット）
前述の技術は、tile＿number−オフセットの組合せに基づいてセル値をファクトテーブルに記憶させることを可能にしたが、こうしたファクトテーブルの実際のフォーマットは実現例によって変動してもよい。たとえば実施例の１つにおいては、各セル値はファクトテーブルのそれ自身の行に記憶される。このような実施例において、各行は＜tile＿number，オフセット，値＞という形を有してもよく、ここで「値」は特定のセルに関連するセル値であり、tile＿numberはそのセルを含むタイルの数であり、オフセットはそのタイル内のセルに対するオフセット値である。この形で情報を記憶するファクトテーブルをここではrow-per-cell（行−毎セル）テーブルと呼ぶ。なぜならこのファクトテーブルは、そのファクトテーブルに関連する多次元キューブにおける各占有済セルに対して１つの行を含むためである。row-per-cellフォーマットが用いられるとき、冗長tile＿number値がデータ層において圧縮されてもよい。
【００６６】
別の実施例においては、タイル中に存在すべきすべての値を記憶するためにファクトテーブルの各行が用いられてもよい。タイル内のすべての値に対する単一の行を記憶するファクトテーブルを、ここではrow-per-tileテーブルと呼ぶ。row-per-tileテーブル中の行のフォーマットは、たとえば＜tile＿number，ＶＡＲＲＡＹ＞などであってもよく、ここでＶＡＲＲＡＹは特定のタイルに含まれるセル値のアレイである。特定的には、ＶＡＲＲＡＹは＜cell＿value１，cell＿value２，…cell＿valueＮ＞という形を有し、ここでＮはタイル内のセルの数である。ＶＡＲＲＡＹ内のセル値の位置は、セル値のオフセットに対応する。
【００６７】
疎に占有された（sparsely populated）タイルにおいて、多くのセル値はゼロであってもよい。各行内に多くのゼロを含むＶＡＲＲＡＹを記憶する代わりに、行は＜tile＿number，＜オフセット１，値１＞，＜オフセット２，値２＞…＞という形で記憶されてもよく、ここでオフセット−値の対は実際に占有されているセルに対してのみ供給される。
【００６８】
別の実施例に従うと、「クラスタ」を用いることもできる。このような実施例において、「クラスタキー」は多次元サブキューブのグリッド位置であってもよい。この実現例は前述のrow-per-cell実施例に似ており、ここで「クラスタキー」は＜tile＿number，オフセット＞対に対応する。
【００６９】
（索引専用テーブル）
この発明の別の実施例に従うと、ファクトテーブルは従来のリレーショナルテーブルではなく、索引専用テーブル（ＩＯＴ）として記憶されてもよい。索引専用テーブルは、列の１つまたはそれ以上に索引を有する従来のテーブルと類似のものである。しかし、索引専用テーブルが標準的なテーブルと異なるのは、テーブルおよびその索引に対して２つの別個のデータコンテナを維持する代わりに、データベースサーバが実際のベーステーブルを有さない単一の索引のみを維持することである。
【００７０】
従来のテーブルと同様、クライアントはデータベースサーバによって支持されるデータベース言語でデータベースサーバにステートメントを提出することによって索引専用テーブルを操作する。しかしテーブル中のデータにおけるすべての動作は、対応する索引を操作することによって行なわれる。
【００７１】
索引専用テーブルに対する索引中の各エントリは、符号化されたキー値および対応する行に対する関連する列値の両方を含む。すなわち、索引エントリ中に行識別子を有するのではなく、対応する行からの実際のデータが索引に記憶される。よって索引専用テーブルに対するすべての索引エントリは、＜primary＿key＿value，non＿primary＿key＿column＿values＞という形を有する。
【００７２】
索引専用テーブルは、１次キーまたは１次キーの有効プレフィクスであるあらゆるキーを介してデータにアクセスするために好適である。また、非キー列値のみがキーとともに記憶されているため、キー値は複製されない。
【００７３】
ここに記載される技術と組合せるとき、索引専用テーブルはtile＿numberを１次キーとして用いて多次元データを記憶してもよい。
【００７４】
（区画との統合）
実施例の１つに従うと、ここに記載するタイリング技術は分割技術と組合せることによって、キューブの占有、性能、および疎に関連する問題の減少における実質的な利点を生じる。
【００７５】
実施例の１つに従うと、新たなデータは区画を利用する態様でキューブに関連するファクトテーブルに加えられる。特定的には、ほとんどのデータウェアハウジング顧客はキー範囲または複合区画によって可能にされる「ローリングウィンドウ」動作スキームを用いる。このスキームにおいて、各キー範囲区画は独立のユニットとして処理でき、独立にタイリングできる。最新の区画のデータは次のようにしてウェアハウスに加えられる。
【００７６】
（１）  データをテーブルにロードまたは挿入し、それを所望のサブキューブスキームに従ってタイリングする。
【００７７】
（２）  そのテーブルをファクトテーブルの区画に交換する。
動作の前述のモードにおいて、あらゆる特定の区画における時間次元キー値の数が固定される。よって、指向付けにおける最後の次元を、２番目によく変化する非時間次元（たとえば製品）に割当てることができる。その利点は、それが指向付けにおける最後の次元であるため、座標値を製品次元に対する現存する範囲を超えて予め割当てる必要がないことである。
【００７８】
（疎（sparsity））
多くの空のセル（値が入れられていないセル）を有する多次元キューブは、疎に占有されたキューブと呼ばれる。キューブ自体は疎に占有されていなくても、そのキューブ内の特定のタイルがそうである可能性がある。この発明の実施例に従うと、セルデータはリレーショナルテーブルに記憶される。row-per-cellテーブルにおいては、行は値が入れられたセルに対してのみ割当てられる。row-per-tileテーブルにおいては、行は少なくとも１つの占有されたセルを含むタイルに対してのみ割当てられる。row-per-tileテーブルにおいては、前述のように、疎に占有されたタイルに対する行は占有されていないタイル中の各セルに対してゼロ値を記憶してもよい。
【００７９】
代替的には、前述のように、row-per-tileテーブルの行は占有されているセルに対してのみ値を記憶してもよい。行に記憶されるセル値に対応するセルを識別するために、その行は各セル値とともにオフセットを記憶する。よってファクトテーブル行のフォーマットは＜tile＿number，＜オフセット１，cell＿value１＞＜オフセット２，cell＿value２＞…＜オフセットＮ，cell＿valueＮ＞＞となり、ここでＮはtile＿numberによって識別されるタイルにおける占有されたセルの数である。
【００８０】
ここに記載される技術は、従来のＭＯＬＡＰ記憶スキームを悩ませる伝統的な疎の問題に向けられる。たとえば、製品、地方および時間次元を有するキューブについて考える。各月に対するデータは別個のキューブとして扱われてもよく、各月に基づくキューブはその他の月に基づくキューブとは独立にタイリングされる。時間Ｔにおいて新たな製品が加えられるとき、Ｔより前の日付に対するその製品に対する販売は存在しないため、そのキューブには空のセルが導入される。これは、これらのセルを記憶表示の外に圧縮する必要のある従来のＭＯＬＡＰスキームにおける実質的な問題である。ここに記載される技術は、このことをずっと効率的な態様で取扱う。４月に新たな製品が導入されるとき、４月のキューブ区画は以前のキューブ区画よりも単に１つの製品だけ「高い」。疎は導入されない。
【００８１】
この表示においては、キューブは付加的な構造を受けて互いに素のサブキューブの集まりとして編成されるが、それは実際には運営および照会アクセスの観点から単一のテーブルである。
【００８２】
これらの技術を用いて、多次元照会に対して大きな性能利得を実現できる。なぜなら、それらは区画の枝刈を利用できるため、解集合の部分を含む可能性のある区画のみがアクセスされることが確実になるためである。
【００８３】
（次元に値を加える）
次元に新たな値を加えるとき、キューブはその次元の方向に効率的に拡張される。たとえば、図２に示されるキューブ２００の次元Ａに１６番目の値が加えられ、その新しい値が座標値１５にマップされると仮定する。図３に例示されるとおり、このことはキューブ２００にセルの新たな列３０２を効率的に付加する。残念ながら、その新たな列３０２に属するセルはどの現存するタイルにも属さない。しかし、現存する行のすべてと同じ態様で（すなわち外部キー値ではなく＜tile＿number，オフセット＞によって）それらのセルに関連する行をファクトテーブルに記憶するためには、それらのセルをタイルに割当てる必要がある。
【００８４】
新たに加えられた次元キー値に対応するセルがタイルに属することを確実にするために、さまざまな技術が用いられてもよい。技術の１つに従うと、キューブはある次元に現在記憶される次元キー値の実際の数よりも多数のその次元中の座標によって構成されてもよい。たとえば、キューブ２００の次元Ａが１０次元キー値のみを有すると仮定する。キューブ２００を次元Ａにおける１０座標によって確立するのではなく、キューブ２００は次元Ａにおける１５座標によって確立される。１５座標値のうち１０個は１０の現存する次元Ａ値にマップされる。残り５つの座標値は現在は現存するいずれの次元Ａ値にもマップされない。これら５つの座標値は、キューブをタイリングする目的のために割当てられたが実際にはいずれの次元キー値にも対応しないため、ここでは「予め割当てられた」座標値と呼ばれる。予め割当てられた座標値の各々に関連するセルの列はいかなるセル値も含まない。なぜなら、ファクトテーブル行はそれらの列の座標値にマップする次元Ａ値を有さないためである。
【００８５】
次元Ａに新たな次元キー値が加えられるとき、その次元キー値は５つの予め割当てられた座標値のうちの１つにマップされる。新たな次元Ａ値に関連する行がファクトテーブルに加えられるとき、それらの行はキューブの特定のタイルに既に存在するセルに対応する。その結果、その行に対するtile＿numberおよびオフセットが生成され、その行に対する置換値としてファクトテーブルに記憶されてもよい。
【００８６】
ある次元に対するすべての予め割当てられた座標値が用いられてしまうと、その次元における新たな次元キー値に割当てるための座標値はなくなる。そのような状況においては、ファクトテーブルに対してタイルの新たな組を有する全く新しいキューブが確立されてもよい。
【００８７】
データを再編成する必要なく新たな次元キー値を加えるために、さまざまな技術が用いられてもよい。一般的に、新たな次元キー値は座標範囲の「端部に」加えられることによってデータを再編成する必要性を避ける。新たな次元キー値を加える技術の例は、以下を含む。
【００８８】
１．区画を用いることによって新たな時間次元キー値を加えることができる。各区画は別個にタイリングできるため、あらゆる再編成の発行が完全に避けられる。
【００８９】
２．定められた指向付けにおける「最後の」次元は、データのあらゆる再編成またはタイルの再ナンバリングなしに新たな次元キー値を常に受入れることができる。
【００９０】
３．指向付けにおける「最後の」次元以外の次元に対して、座標値を将来の次元キー値の付加の必要性に適応するように予め割当てることができる。（リレーショナルシステムの性質により）関連するセルは単に記憶されないため、予め割当てることは多次元編成の性能に影響しない。次に、あらゆる再編成またはタイルの再ナンバリングなしに、新たな次元キー値を予めの割当の限界まで加えることができる。
【００９１】
４．新たな次元キー値をデータを再編成することなく指向付けにおける「最後の」次元以外の次元に対して予めの割当の限界を超えて付加することができるが、タイルをリナンバリングする必要がある。よってこの動作にはいくらかの出費が伴うが、それはデータブロック中のデータを実際にシャフルするよりもかなり安上がりである。
【００９２】
新たな次元キー値を加えるときのタイルリナンバリングを避けるために、スキーマ設計者はあらゆる迅速に変化する次元（時間など）を指向付けにおける最後の次元にしておくことが好ましい。
【００９３】
（メタデータ）
ここに記載される技術を実現するシステムによって、情報のさまざまな項目がメタデータとして維持される。典型的に、このメタデータはシステムディクショナリ中に存在する。実現例に依存して、メタデータは（１）各次元に対する次元キー値に対する座標マッピング、（２）次元の指向付け、および（３）各次元に沿ったタイルの幅Ｔｊを含んでもよい。なお、Ｔｊはタイル（端部タイルを除く）当りの次元ｊからの次元キー値の数である。
【００９４】
（クラスタリングおよび圧縮）
リレーショナルデータベース内に多次元データを記憶するための従来の技術に比べ、ここに記載する技術は改善されたクラスタリングおよび減少した記憶サイズの両方を提供する。特定的には、この技術は（tile＿numberに従って行をグルーピング／分類することによって）データをクラスタリングし、かつそれを圧縮する（単一のtile＿numberがタイル中の各個々のセルに関連する次元キー値となるものを置換するため）。
【００９５】
しかし、特定の実施例はこの技術の圧縮局面を実現することなくこの技術のクラスタリング局面を実現してもよい。同様に、その他の実施例はこの技術のクラスタリング局面を実現することなくこの技術の圧縮局面を実現してもよい。たとえば、対応する＜tile＿number，オフセット＞によってファクトテーブルの行を分類する一方で、そのファクトテーブルの各行を元のリレーショナル形（すなわちすべての次元キー値を有する）のまま残すことによって、圧縮なしにクラスタリングを達成してもよい。次いで外部キー値を置換値に圧縮するステップを別個のステップとして達成できる。その圧縮ステップがデータ層において行なわれるとき、スキーム全体がリレーショナルエンジンのＳＱＬ層に対して完全に透明になり、その実現をかなり容易にする。
【００９６】
代替的には、次元キー値の代わりにファクトテーブルに置換値を記憶するが、あらゆる特定の分類された順序でファクトテーブルを維持しないことによって、クラスタリングなしに圧縮を達成してもよい。こうした実施例は、クラスタリングを犠牲にしてファクトテーブルを分類された順序で維持することに関連するオーバヘッドを避ける。
【００９７】
この技術の圧縮およびクラスタリング局面の両方を実現し、かつファクトテーブル行を＜tile＿number，cell＿value１，cell＿value２，…cell＿valueＮ＞の形で記憶する実施例のことを、ここでは「組合わせた」実施例と呼ぶ。この技術の圧縮局面のみ、またはこの技術のクラスタリング局面のみを実現する実施例のことをここでは「分離可能な」実施例と呼ぶ。
【００９８】
（照会インターフェイス）
ここに記載される技術は、典型的なＳＱＬおよびＲＯＬＡＰアプリケーションがソース−コード変更なしに圧縮された／クラスタリングされたファクトテーブルに対する照会を実行できるようにするが、ファクトテーブルのサイズ減少および多次元編成によるより大きな性能を可能にする。
【００９９】
ファクトテーブルにアクセスする典型的なＲＯＬＡＰ照会は次の形を有する。
ＳＥＬＥＣＴ  ｄ１＿ｉｄ，…，ｄＮ＿ｉｄ，ｍｌ，…，ｍＫ
ＦＲＯＭ  ｆａｃｔ，ｄ１，…，ｄＮ
ＷＨＥＲＥ  ｆａｃｔ．ｄ１＿ｉｄ＝ｄ１．ｄ１＿ｉｄ  ａｎｄ  ｆａｃｔ．ｄ２＿ｉｄ＝ｄ２．ｄ２＿ｉｄ…                              ＜結合述語＞
ＡＮＤ  ｄ１  ＢＥＴＷＥＥＮ  ａ  ＡＮＤ  ｂ              ＜フィルタ＞
ＡＮＤ  ｄ２  ＢＥＴＷＥＥＮ  ｃ  ａｎｄ  ｄ…
ＧＲＯＵＰ  ＢＹ  ｄ１，…，ｄＮ                  ＜グループバイキー＞
この発明の分離可能なクラスタリングのみの実施例において、すべてのオブジェクトはリレーショナルデータベース管理システム（“ＲＤＢＭＳ”）のＳＱＬ層に対する従来のリレーショナルテーブルとして示され、その照会はＲＤＢＭＳのＳＱＬ層におけるあらゆる特別な考慮なしに多次元編成の利益を得る。
【０１００】
この発明の組合わせた実施例においては、ＲＤＢＭＳのＳＱＬ層における発行のアドレスを定める必要がある。特定的には、結合述語は、列ファクト．ｄ１＿ｉｄ，…，ファクト．ｄＮ＿ｉｄが実際には存在しないという点において、この発明の組合わせた実施例に対する発行を提供する。次元とファクトテーブルとの典型的な１次外部キー関係は、座標および次いでタイリングスキーム内の測定の位置への次元キー値のマッピングによって置換えられたため、それらはファクトテーブルの「外に圧縮（compressed out）」される。照会を分割して実行プランをうまく生成するために、メタデータは、マッピングが存在するために結合述語をそれに従って解釈できることを示すディクショナリ中に保たれる。
【０１０１】
典型的には、このような照会に対する実行プランはスター照会準結合実行プランと同じであるが、ファクトテーブルに対するより少ないＩ／Ｏによるより大きい性能を有する。
【０１０２】
選択−リスト項目が次元キー列ではなく任意の次元テーブル列を示すより一般的なＲＯＬＡＰ照会に対して、同じ考慮および利点が適用される。
【０１０３】
次元キー列に対応するファクトテーブル上のビットマップ索引が生成されないとき、実行プランは以下に説明するようにフィルタを有するテーブル走査を用いる。
【０１０４】
（テーブル走査）
この発明の分離可能なクラスタリングのみの実施例において、テーブル走査は従来の態様で実行する。この発明の組合わせた実施例において、特別な考慮が適用される。ファクトテーブルの各ページが読取られるときにセル値が抽出され、各セル値に対して、前述の逆マッピング技術を用いてその＜tile＿number，オフセット＞対が座標（ｘ１，…，ｘＮ）に戻ってマップされる。その結果、（ｘ１，…，ｘＮ，測定１，…，測定Ｍ）という形の行が得られる。次いで述語を適用できる。述語は照会テキストに現われる値ではなく座標によって表現される。述語に用いられる座標値は、照会のコンパイル時間において照会における次元キー値を座標値にマップすることによって得られる。
【０１０５】
（索引の生成）
この発明の分離可能なクラスタリングのみの実施例において、索引は従来の態様で生成される。この発明の組合わせた実施例においては特別な考慮が適用される。たとえば、ファクトテーブルが繰返すtile＿number値が圧縮された＜tile＿number，ＶＡＲＲＡＹ＞の形の行を有する通常のテーブルとして実現されると仮定する。このような実施例において、行ＩＤはセル値ではなくタイルを一意に識別する。索引エントリに関連するセル値の場所を定めるために、索引エントリはセル値を含む行の行ＩＤに加えて、そのセルに対するオフセット値を記憶する。索引エントリに記憶される行ＩＤに基づいて正しい行が検索されると、索引エントリに記憶されるオフセット値に基づいて行内の正しいセル値が検索される。
【０１０６】
ファクトテーブルに生成されるいくつかの索引は索引キーとして次元キー値とともに構築されてもよい。しかしそれらの次元キー値は次元テーブルにのみ現われ、ファクトテーブルには現われない。これらの条件下でセルは読取られ、各セルに対して行ＩＤおよび＜tile＿number，オフセット＞の組合せが得られる。＜tile＿number，オフセット＞対はセルグリッド位置（ｘ１，…，ｘＮ）に戻ってマップされる。必要であれば、次元キー値を得るために次元テーブルへのジョインバック（join back）が行なわれる。＜dimension＿key＿value，行ＩＤ＞対は分類され、索引が構築される。この技術はバランス木およびビットマップ索引の両方に対して用いられてもよい。
【０１０７】
ユーザが次元キー値の密な範囲を特定化したときには、ジョインバックする必要はない。この場合、ディクショナリに最大値および最小値を保つことができ、次元キー値に戻るあらゆる座標値のマッピングは、範囲＜ｍｉｎ，…，ｍａｘ＞の＜０，…，Ｎ−１＞へのマッピングに基づくトリビアルな計算である。
【０１０８】
ここに記載される索引付け技術は、たとえファクトテーブルに次元キー列が実際には存在しなくても、従来の「索引の生成」シンタックスを変えることなく導入できる。データディクショナリは、次元テーブル列を索引生成ステートメントにおいて特定化される列の名前に対応する名前と関連づける情報を含むため、そのステートメントは前述のとおり進行および実行できる。
【０１０９】
（キューブオペレータとの統合）
前述において導入したマッピングの簡単な変更形によるここに記載する技術は、「キューブ」オペレータの出力のコンパクトな表示を可能にする。キューブオペレータは、「ＳＱＬグループバイ」オペレータによって生成される出力を取り、そこから同じ次元だが各次元に沿って１つの付加的な座標値を有する論理キューブを生成するものと考えることができる。ここに記載される技術に導入される座標システムが各次元に沿って単に１だけシフトされるとき、その結果はこの新たなキューブに対する座標グリッドである。これは、各次元キー列に新たな値「すべて」を加え、それをタイリングのその次元に沿って座標値０に対応させることによって得られる。ここに考察する方程式を次いでこの「拡張されたキューブ」に直接適用することができ、前には入手できなかった効率的な記憶表示が得られる。
【０１１０】
「キューブ」オペレータによって生成される付加的な集合値の検索は簡単である。次の照会について考える。
【０１１１】
ＳＥＬＥＣＴ  ｒｅｇｉｏｎ  ｓｕｍ（ｓａｌｅｓ）ＦＲＯＭｃ
ＷＨＥＲＥ  ｒｅｇｉｏｎ＝“Ｅ”
ＧＲＯＵＰ  ＢＹ  ｒｅｇｉｏｎ
この照会は内的に次の照会に変形されてもよい。
【０１１２】
ＳＥＬＥＣＴ  ｒｅｇｉｏｎ  ｓｕｍ（ｓａｌｅｓ）ＦＲＯＭｃ
ＷＨＥＲＥ  ｒｅｇｉｏｎ＝“Ｅ”
ＡＮＤ  ｍｏｄｅｌ＝ａｌｌ
適合する行ＩＤを得るための述語に対応するビットマップの「アンド」によって検索が達成される。
【０１１３】
（階層を定めたタイリング）
前述の技術においては、あらゆる所与の次元に沿ってすべてのタイルが固定された幅を有すると仮定された。固定された幅のタイルは、（１）各次元キー値を座標値にマップし、（２）各次元を同じサイズの座標値範囲に細分化することによって達成される。キューブをタイリングする目的のために特定の次元が分割される範囲のことを、ここではその次元の「タイリング範囲」と呼ぶ。
【０１１４】
各タイリング範囲は同数の座標値をカバーし、座標値は次元キー値に対応するため、各タイリング範囲は同数の次元キー値をカバーする。キューブがこの態様で細分化されるとき、ある次元のタイリング範囲間の境界は、（１）次元値対座標値マッピング、および（２）その次元に対して選択される固定された幅によって全体的に規定され、その次元における次元キー値間のあらゆる論理的関係は関係しない。次元値対座標値マッピングを行なうために用いられる順序付けは、次元キー値間の論理的関係にはほとんど関係しなくてよい。たとえば次元キー値が市の名前であるとき、次元値対座標割当はアルファベット順に行なわれてもよい。すなわち、アンカレッジ（ＡＫ）およびアポプカ（ＦＬ）の両市は共通点がほとんどないにもかかわらず同じタイリング範囲に入る可能性があり、一方で論理的に関係するアンカレッジおよびランゲル（ＡＫ）はそうはならない。
【０１１５】
あるタイリング範囲に入る次元キー値が互いにほとんど論理的関係を有さないとき、タイルメンバーシップに基づいてファクトテーブル行をクラスタリングすることによって得られる利益がなくなる。たとえば、市の名前はアルファベット順に基づいて座標にマップされ、ファクトテーブル行はタイルメンバーシップに基づく順序で記憶されると仮定する。ある照会が特定の州のすべての市に対するデータを要求するとき、その照会はファクトテーブル行が全く順序付けされていないときと同じ数のデータブロックからのデータを要求することになる。
【０１１６】
しかし、いずれかの次元に沿って階層的関係が定められるとき、それらはそれらの次元に沿ってタイリングに対する本来の細分性を定め、階層的に定められたグラニュールの各々の中にあるセルをともに記憶できれば、多くの照会が改善した性能による利益を得るであろう。たとえば、多次元キューブの１つの次元は「地理」であってもよく、地理は以下のレベル、すなわち市、州、地方、国を有する。これらのレベルのうちで「市」が最も微細な細分性を有し、各市の値はキューブの単一のセルに対応する。次元キー値が個々のセルにマップするような階層的次元のレベルをここでは「最微細（finest）」レベルと呼ぶ。階層におけるその他すべてのレベルは「非最微細（non-finest）」レベルと呼ばれる。
【０１１７】
地理次元が固定された幅のタイリング範囲に細分化されるとき、すべての個別のタイルは同数の市レベル次元キー値に関連付けられる。しかし、単一のタイルに関連する市レベル次元キー値は多くの異なる州に属する市に対応し得る。逆に、多くの州がそのデータを複数のタイルにわたって分散させ得る。特定の市に対応するセル値は同じ州の他の市に対するセル値とともにアクセスされる可能性があるため、所与の州内のすべての市に対するセル値を単一のタイリング範囲に入れることが有益であろう。
【０１１８】
実施例の１つに従うと、階層的構造を通じて本来関係するセル値を一緒に記憶することによって最小限の数のＩ／Ｏによって検索できるようにするためのスキームを実現するための技術が提供される。さらに、階層を定めたタイリング技術を固定した幅のタイリング技術と組合わせることによって、タイルの幅がある次元に沿って固定され別の次元に沿って可変であるときに利益を得るマッピングを生成できる。
【０１１９】
アプローチの１つに従うと、キューブは階層的次元の非最微細レベルの次元キー値に基づいて階層的次元に沿って細分化される。「地理」の例においては、たとえば「州」などの地理次元の特定の非最微細レベルが選択されてもよく、キューブは市レベルセルと州レベル次元キー値との間のマッピングに基づいてその次元に沿って細分化されてもよい。固定した幅のタイルとは異なり、この態様で生成されるタイルは次元に沿って可変の幅を有する。
【０１２０】
階層を定めたタイリングの用法を例示するために、モデルおよび市ごとの販売データを含む図４Ａに例示されるキューブ４００について考える。市は階層的次元「地理」の最微細レベルである。その階層の別のレベルは「州」である。このデータベースシステムは、市レベル次元キー値から州レベル次元キー値へのマッピングを維持する。このマッピングはたとえば地理次元テーブルに記憶されてもよく、ここで地理次元テーブル行は＜ＩＤ，CITY＿VALUE，STATE＿VALUE，…＞の形を有する。したがって、キューブ４００に関連する地理次元テーブルは以下の行を含む。
【０１２１】
＜１，ＳＦ，ＣＡ，…＞
＜２，ＳＪ，ＣＡ，…＞
＜３，ＬＡ，ＣＡ，…＞
＜４，シアトル，ＷＡ，…＞
＜５，スポーカン，ＷＡ，…＞
図４Ａに示す例において、市の値“ＳＦ”、“ＳＪ”および“ＬＡ”は州の値“ＣＡ”にマップし、市の値“シアトル”および“スポーカン”は州の値“ＷＡ”にマップする。
【０１２２】
キューブ４００をタイルに分割するために、階層的次元「地理」が非最微細レベル「州」に基づいて分割されてもよい。すなわち、キューブ４００を同数の市の値を有するタイルに分割する代わりに、キューブ４００は州の値に基づくタイルに分割される。特定的には、市の値および州の値の間のマッピングに基づいて地理次元のタイリング範囲が確立され、ここで同じ州の値にマップするすべての市は同じタイリング範囲に属する。
【０１２３】
図４Ｂは、キューブ４００をどのように４つのタイル４０４、４０６、４０８および４１０に分割し得るかを例示するものであり、ここでは「地理」次元のタイリング範囲を確立するために州レベルの値が用いられる。この例において、ＣＡにマップするすべての市の値は１つのタイリング範囲として確立され、ＷＡにマップするすべての市の値は別のタイリング範囲として確立される。
【０１２４】
（階層的次元に対するタイル座標）
前述のとおり、tile＿position値はタイル座標値のＮ−タプルであり、各次元に対する１つのタイル座標値を有する。ある次元が固定された幅のタイリング範囲に分割されるとき、その次元に対するタイル座標値はグローバルセル座標値の特定の範囲に対応する。それに対して、ある次元がその次元の非最微細レベルの次元キー値に基づいてタイリング範囲に分割されるとき、その次元におけるタイル座標値は１つまたはそれ以上の非最微細次元キー値の組に対応する。
【０１２５】
図４Ｂを参照すると、選択された非最微細次元における各次元キー値にはタイル座標が割当てられる。特に、次元キー値“ＣＡ”にはタイル座標０が割当てられ、次元キー値“ＷＡ”にはタイル座標１が割当てられる。選択された非最微細レベルにおける各次元キー値は最微細レベルにおける次元キー値の組に対応する。たとえば“ＣＡ”はＳＦ、ＳＪおよびＬＡにマップし、“ＷＡ”はシアトルおよびスポーカンにマップする。キューブ４００は次元キー値のそれらの組に対応する態様で地理次元に沿って分割される。次元キー値のそれらの組は必ずしも同数のメンバーを有さないため、タイルはその次元に関して必ずしも同じ幅を有さない。
【０１２６】
（階層的次元に対するローカル位置）
前述のとおり、セルのlocal＿positionは同じタイル内の他のセルに関するそのセルの場所を示す。local＿positionはタイルの各次元に対する１つの座標値を含む。実施例の１つに従うと、階層的にタイリングされた次元に対する座標値は、階層的次元の最微細レベル次元キー値にローカル座標値を割当てることによって確立される。たとえば図４Ｂにおいて、タイリング範囲０（“ＣＡ”に関連するタイリング範囲）における市レベル次元キー値はＳＦ、ＳＪおよびＬＡである。これらの市レベル次元キー値にはそれぞれローカル座標値０、１および２が割当てられる。同様に、タイリング範囲１における市レベル次元キー値、シアトルおよびスポーカンにはそれぞれローカル座標値０および１が割当てられる。
【０１２７】
階層的次元に対するタイル座標割当およびローカル座標値割当は、その次元に対する次元テーブルに記憶されてもよい。たとえば「地理」次元テーブルは、
＜ＩＤ，CITY＿VALUE，STATE＿VALUE，TILE＿COORDINATE，LOCAL＿COORDINATE，…＞の形を有してもよい。したがって、キューブ４００に関連する地理次元テーブルは以下の行を含む。
【０１２８】
＜１，ＳＦ，ＣＡ，０，０，…＞
＜２，ＳＪ，ＣＡ，０，１，…＞
＜３，ＬＡ，ＣＡ，０，２，…＞
＜４，シアトル，ＷＡ，１，０，…＞
＜５，スポーカン，ＷＡ，１，１，…＞
（階層的に定められたタイリング範囲を有するキューブにおける置換値を導く）
階層的に定められたタイリング範囲を用いて１つまたはそれ以上の次元が分割されるとき、tile＿number−オフセットの組合せをファクトテーブル中の置換値としてなおも用いてもよい。しかし、外部キー値からtile＿number−オフセットの組合せを導き、tile＿number−オフセットの組合せから外部キー値を導くために異なる技術が用いられる。
【０１２９】
実施例の１つに従うと、tile＿number−オフセットの組合せは以下のステップによって導かれる。
【０１３０】
（１）  各次元キー値に対する座標を定める。
（２）  座標値に基づいてtile＿position−local＿position値を定める。
【０１３１】
（３）  tile＿position−local＿position値に基づいてtile＿number−オフセット値を定める。
【０１３２】
（階層的に定められたタイリング範囲を有するキューブにおけるlocal＿position値を導く）
local＿position値は各次元に対する１つのローカル座標値を含む。固定された幅のタイリング範囲を有する次元に対し、次元キー値対グローバル座標値マッピングによって特定の次元キー値に関連するグローバル座標値が定められる。次いで、前述のとおり、グローバル座標値および選択された固定された幅からその次元に対するローカル座標値が導かれてもよい。
【０１３３】
たとえば、照会において特定化される外部キー値が「トーラス、ＳＪ」であると仮定する。トーラスはモデル次元に対する次元キー値であり、固定された幅のタイリング範囲に分割され、その固定された幅は２である。次元キー値「トーラス」に割当てられたグローバル座標値は２である。ローカル座標を導くために次の方程式が用いられると仮定する。
【０１３４】
local＿position［ｊ］＝ｒｊ＝ｘｊ  ＭＯＤ  Ｔｊ
トーラスに対するローカル座標は（２  ＭＯＤ  ２）＝０
階層に基づくタイリング範囲を有する次元に対し、特定の次元キー値に関連するローカル座標値は、単にその特定の次元キー値に割当てられたローカル座標値である。実施例の１つに従うと、階層的にタイリングされた次元における各次元キー値に対するローカル座標値は、その次元キー値に対する次元テーブル行に記憶される。したがって、単に適切な次元テーブル行を読取ることによって次元キー値に対するローカル座標値を得てもよい。
【０１３５】
この例において、“ＳＪ”に対する次元テーブル行は次のとおりである。
＜２，ＳＪ，ＣＡ，０，１，…＞
その行において特定化されるローカル座標値は“１”である。したがって＜モデル，地理＞の指向付けを仮定すると、「トーラス，ＳＪ」に対するlocal＿positionは＜０，１＞である。
【０１３６】
（階層的に定められたタイリング範囲を有するキューブにおけるtile＿position値を導く）
local＿position値と同様、tile＿position値は各次元に対する１つの座標値を含む。しかし、tile＿position値の場合には、その座標値はキューブ中の他のタイルに関するあるタイルの位置を示す「タイル座標値」である。
【０１３７】
前述のとおり、固定された幅のタイル範囲を用いる次元に対するタイル座標値は次の方程式によって計算されてもよい。
【０１３８】
tile＿position［ｊ］＝ｑｊ＝ｘｊ  ＤＩＶ  Ｔｊ
ここでＴｊはタイルの幅（端部タイルを除くタイルによって次元ｊに沿って張られる次元キー値の数）である。
【０１３９】
この例において、「トーラス」は「モデル」次元に対する次元キー値であり、固定された幅のタイル範囲を用いて分割され、その固定された幅は２である。よって、トーラスに関連するタイル座標値は２ＤＩＶ２＝１として計算されてもよい。
【０１４０】
階層に基づくタイリング範囲を有する次元に対し、特定の次元キー値に関連するタイル座標値は、単にその特定の次元キー値がマップする非最微細次元キー値に割当てられたタイル座標値である。たとえばＳＪはＣＡにマップするため、ＳＪのタイル座標値はＣＡに割当てられたタイル座標値である。実施例の１つに従うと、階層的にタイリングされた次元における各次元キー値に対するタイル座標値は、その次元キー値に対する次元テーブル行に記憶される。したがって次元キー値に対するタイル座標値は、単に適切な次元テーブル行を読取ることによって得られてもよい。
【０１４１】
この例において、“ＳＪ”に対する次元テーブル行は次のとおりである。
＜２，ＳＪ，ＣＡ，０，１，…＞
その行において特定化されたタイル座標値は“０”である。したがって＜モデル，地理＞の指向付けを仮定すると、「トーラス，ＳＪ」に対するtile＿positionは＜１，０＞である。
【０１４２】
実施例の１つに従うと、階層的にタイリングされた次元に対し、次元テーブルは、付加的な列に位置情報を組込むのではなく、＜tile＿position，local＿position＞からなる複合次元キーによって構築される。よってキューブ４００に関連する地理テーブルに対する複合次元キーは、＜state＿code，city＿code＞という形を有し得る。このアプローチによって、位置情報は各行に組込まれ、各行をマップするときに次元テーブルを読取る必要性をなくす。
【０１４３】
（階層的に定められたタイリング範囲を有するキューブにおけるtile＿number値を導く）
実施例の１つに従うと、tile＿number値は以下の方程式を用いてtile＿position値から導かれてもよい。
【０１４４】
tile＿number＝sum（Ｎ−１，１，ｐ１*…*ｐｊ*ｑ［ｊ＋１］）＋ｑ１＋１
ここで
ｑｊ＝ｊ番目のtile＿position座標（前述のとおり）
ｐｊ＝次元ｊに沿ったページの数
＝（Ｄｉｍ［ｊ］からカウント（相異なるｉｄ）を選択）ＤＩＶ  Ｔｊ＋ｒ／ｍａｘ（ｒ，１）
ここでｒ＝（Ｄｉｍ［ｊ］からカウント（相異なるｉｄ）を選択）ＭＯＤ  Ｔｊであり、固定された幅のタイリング範囲を有する次元ｊに沿い、また
ｐｊ＝Ｄｉｍ［ｊ］からのカウント（相異なるｉｄ＿parent＿col）の選択であり、可変幅のタイリング範囲を有する次元ｊに沿う。
【０１４５】
よって、そのタイル幅を階層的関係によって定められる次元に沿って、タイルの数も定められる。特に、タイルの数は単に親（parent）属性の相異なる値の数である。
【０１４６】
（階層的に定められたタイリング範囲を有するキューブにおけるオフセット値を導く）
この発明の実施例の１つに従うと、オフセット値は次の方程式を用いてlocal＿position値から導かれる。
【０１４７】
オフセット＝sum（Ｎ−１，１，Ｔ１*…*Ｔｊ*ｒ［ｊ＋１］）＋ｒ１＋１
ここでｒｊ＝ｘｊ  ＭＯＤ  Ｔｊであり、Ｔｊは固定された幅のタイルを有する次元に沿って前述のとおりに定められる。タイル幅が階層的構造によって定められている次元に沿って、ｒｊは単に次元テーブルから読取られ、Ｔｊ＝Ｄｉｍ［ｊ］からのカウント（相異なるｉｄ）の選択であり、ここでparent＝（ｉｄ＝“key＿value”のときにＤｉｍ［ｊ］からparentを選択）である。
【０１４８】
上記の例において、‘ＳＦ’を含むタイルに対し、Ｔ１＝地方からのカウント（相異なる市）の選択であり、ここで
州＝（市＝‘ＳＦ…’のときに地方から州を選択）＝３、およびＴ２＝２である。
【０１４９】
（階層的に定められたタイリング範囲を有するキューブにおける外部キー値を導く）
多くの動作においては、tile＿number−オフセット値に基づいて次元キー値を導くことが必要である。実施例の１つに従うと、その導出は最初にtile＿number−オフセット値からtile＿position−local＿position値を導き、次にtile＿position−local＿position値から次元キー値を導くことによって行なわれる。
【０１５０】
実施例の１つに従うと、tile＿positionは次の方程式に従ってtile＿numberから導かれる。
【０１５１】
ｊ＝Ｎから２までに対し｛ｑｊ＝（tile＿number−１）ＤＩＶ  ｐ１*…*ｐ［ｊ−１］−sum（ｋ＝ｊ＋１，Ｎ，ｐｊ*…*ｐ［ｋ−１］*ｑｋ）｝
ここでｑ１は前述のtile＿numberに対する方程式を用いて導かれる。
【０１５２】
local＿position値は次の方程式に従ってオフセット値から導かれる。
ｊ＝Ｎから２までに対し｛ｒｊ＝（オフセット−１）ＤＩＶ  Ｔ１*…*Ｔ［ｊ−１］−sum（ｋ＝ｊ＋１，Ｎ，Ｔｊ*…*Ｔ［ｋ−１］*ｒｋ）｝
ここでｒ１は前述のオフセットに対する方程式を用いて導かれる。
【０１５３】
固定されたタイル幅を有する次元に沿って、次元キー値に関連するグローバル座標値は次の方程式を用いて導かれてもよい。
【０１５４】
ｘｊ＝Ｔｊ*ｑｊ＋ｒｊ
次いで、グローバル座標値対次元値マッピングを用いて対応する次元キー値を識別してもよい。
【０１５５】
タイル幅が階層的関係によって定められる次元に沿って、次元キー値にはグローバル座標が割当てられていない。その代わりに（tile＿position，local＿position）対が「グローバル座標」として働き、それによって次元テーブルから次元キーを得ることができる。
【０１５６】
（多重レベルタイリング）
別のタイリングアプローチに従うと、タイル自体がより小さいタイルに細分化されてもよい。これはタイルの階層を生じ、ここでタイルの１つのレベルに対して用いられる細分化の基準は、タイルを異なるレベルで細分化するために用いられる基準と全く異なっていてもよい。
【０１５７】
特定的には、タイリングが階層的関係によって定められるとき、Ｌレベルの入れ子状または「多重レベル」タイリングを有することが可能であり、ここでＬは定める階層におけるレベルの数である。たとえば、階層が「市が定める州が定める地方」であるとき、地方グラニュールに「外側」タイリングが確立されてもよく、各地方内で州レベルのサブタイリングが確立されてもよい。次にファクトテーブル行がこれらのタイリングレベルに基づいて分類された順序で記憶されてもよい。特定的には、同じ地方に対応するすべての行がともにクラスタリングされ、各地方クラスタ内では、同じ州に対応するすべての行がともにクラスタリングされる。
【０１５８】
多重レベルタイリング技術を用いると、ＣＡにおけるすべての市を要求する照会を最小限の数のＩ／Ｏによって満足させることができ、また太平洋岸地方におけるすべての州を要求する照会を最小限の数のＩ／Ｏによって満足させることができる。言換えると、ここに記載する技術はＩ／Ｏ最適化を多重レベル、すなわちこの例においては州レベルおよび地方レベルに拡張する。
【０１５９】
簡単にするため、タイリングのレベルの数がすべての次元にわたって同じである場合に対してのみ方程式を提供する。たとえばタイリングのレベルの数がキューブを定める次元の中の階層レベルの最小数になるように設定することによって、すべての次元が同じ数のタイリングレベルを有するようになる。たとえばキューブが３次元を有し、その次元が３、４および５レベルを有するとき、各次元は３レベルタイリングスキームに分割されてもよい。
【０１６０】
【表１】
0003979846.tif 000002
【０１６１】
キューブＣ１はモデルおよび市ごとの販売データを含み、階層的関係が定められることによって、市が州を定め、州が地方を定め、またモデルがメーカーを定め、メーカーが製造国を定める。
【０１６２】
多重レベルタイリングを実現するために、さまざまな技術を用いて座標値を最微細レベル次元キー値に割当ててもよい。
【０１６３】
ここで「複合キー」技術と呼ばれる１つの技術に従うと、各次元テーブルはＬ列複合キーによって構築でき、ここでＬは階層レベルの数であり、次の形のエントリを有する。
【０１６４】
＜tile＿position［Ｌ］，…，tile＿position［１］＞
ここでtile＿position［Ｌ］は０から階層の最高レベルにおける相異なるエントリの数までの範囲であり、tile＿position［Ｌ−１］は０からレベルＬにおける同じ値にマップするレベルＬ−１における構成要素の数までの範囲であり、以下同様である。たとえば、この技術をキューブＣ１に用いると、地方次元は次の形を有する複合キーによって構築される。
【０１６５】
＜region＿code，state＿code，city＿code＞
また製品次元は次の形を有する複合キーによって構築される。
【０１６６】
＜nation＿code，manufacturer＿code，model＿code＞
ここで「分類されるタプル」技術と呼ばれる別の技術に従うと、いくつかの基準および分類された結果に割当てられる整数タプルに従って（次元キー，parent，…，parent）タプルを分類できる。この整数タプルは次元テーブル中の隠れた列に記憶される。次に座標マッピングが、（次元キー，parent，…，parent）タプルと関連する隠れた列との関係に密封される。この技術を用いると、新たな行の各々のマッピングは、次元テーブルにアクセスして（次元キー，parent，…，parent）列値を位置に変換することを必要とする。次元テーブルが大きすぎなければ、参照テーブルがメモリ中にキャッシュされてもよい。
【０１６７】
例示の目的のために、前述の分類されたタプル技術を用いて座標が割当てられると仮定する。この技術を用いると、キューブＣ１に関連する「地方」次元テーブルは次のようになる。ｑ［１］［１］などのラベルについては以下に説明する。
【０１６８】
【表２】
0003979846.tif 000003
【０１６９】
「モデル」次元テーブルは次のようになる。
【０１７０】
【表３】
0003979846.tif 000004
【０１７１】
（多重レベルタイリングに基づいて置換値を導く）
すべての次元のＬレベル階層に基づいて多重レベルタイリングスキームが行なわれるとき、前述のとおり、セルに関連する＜tile＿position，local＿position＞の組合せはＮ−タプル＜tile＿position［Ｌ］，…，tile＿position［１］＞によって置換され、ここでtile＿position［１］は単一レベルタイリングスキームにおいて用いられる“local＿position”に類似のものである。この列挙によると、１レベルタイリングはトリビアルなタイリングである。すなわち、各タイルは単一のセルからなる。このことは、１レベル階層が各メンバーがそれ自身のみを定めるトリビアルな階層であることに対応する。
【０１７２】
（タイル−位置Ｎ−タプルを導く）
多重レベルタイリングを用いる実施例に従うと、各次元に対する座標値は＜tile＿position［Ｌ］，…，tile＿position［２］，tile＿position［１］＞の形を有する。実施例の１つに従うと、あらゆるタイリングレベルｋに対して、tile＿position［ｋ］＝＜ｑ［ｋ］［１］，ｑ［ｋ］［２］，…，ｑ［ｋ］［Ｎ］＞であり、ここでＮは次元の数である。各次元に沿ったタイル位置「座標」は次元テーブル中に組込まれる。
【０１７３】
代替的には、複合キー技術を用いると、ｑ［ｋ］［ｊ］は単にタイリングされる行におけるキーとなる。たとえば、＜ｑ［２］［１］，ｑ［２］［２］＞＝＜state＿code，manufacturer＿code＞である。
【０１７４】
（tile＿number  Ｎ−タプルを導く）
この発明の実施例の１つに従うと、多重レベルタイリングスキームにおいて、tile＿number  Ｎ−タプル＜tile＿number［Ｌ］，…，tile＿number［１］＞はtile＿position  Ｎ−タプルから導かれる。＜tile＿position［Ｌ］，…，tile＿position［１］＞は次の方程式に従う。
【０１７５】
ｋ＝１，…，Ｌに対し、tile＿number［ｋ］＝sum（Ｎ−１，１，ｐ［ｋ］［１］*…*ｐ［ｋ］［ｊ］*ｑ［ｋ］［ｊ＋１］）＋ｑ［ｋ］［１］＋１
ここでｑ［ｋ］［ｊ］＝タイリングレベルｋにおけるタイルの次元ｊに沿った位置、
ｐ［ｋ］［ｊ］＝タイリングレベルｋにおける次元ｊに沿ったページの数であり、これは次の照会を発行することによって定められてもよい。すなわち、Ｄｉｍ［ｊ］からカウント（相異なるlevel＿ｋ＿col）を選択、ここでlevel＿ｋ＋１＿col＝（level＿ｋ＿col＝“key＿value”のときにＤｉｍ［ｊ］からlevel＿ｋ＋１＿colを選択）。
【０１７６】
ｐ［ｋ］［ｊ］を定める必要があるたびごとに次元テーブルにアクセスすることを避けるために、ｐ［ｋ］［ｊ］は一旦計算されて計算の持続時間に対してメモリに記憶されてもよい。
【０１７７】
（tile＿number  Ｎ−タプルからtile＿position  Ｎ−タプルを導く）
特定の動作に対しては、ある行に記憶されるtile＿numberタプルに基づいてその行に関連する実際の次元キー値を定める必要がある。実施例の１つに従うと、行に関連する次元キー値は、（１）tile＿number  Ｎ−タプルからtile＿positionタプルを導き、（２）tile＿position  Ｎ−タプルに基づいて次元キー値を定めることによって導かれる。実施例の１つに従うと、tile＿number［ｋ］は次の方程式に従ってtile＿position［ｋ］に変換される。
【０１７８】
ｊ＝Ｎから２までに対し｛ｑ［ｋ］［ｊ］＝（tile＿number［ｋ］−１）ＤＩＶ  ｐ［ｋ］［１］*…*ｐ［ｋ］［ｊ−１］−sum（ｎ＝ｊ＋１，Ｎ，ｐ［ｋ］［ｊ］*…*ｐ［ｋ］［ｎ−１］*ｑ［ｋ］［ｎ］）｝
ここでｑ［ｋ］［１］は前述の方程式を用いて解かれる。
【０１７９】
tile＿positionベクトルＮ−タプルは次元キー値の「座標」の働きをし、それによって次元テーブルから次元キー値を得ることができる。
【０１８０】
（ハードウェアの概観）
図５は、この発明の実施例を実現し得るコンピュータシステム５００を例示するブロック図である。コンピュータシステム５００は情報を通信するためのバス５０２またはその他の通信機構と、情報を処理するためのバス５０２に結合されるプロセッサ５０４とを含む。コンピュータシステム５００はまた、ランダムアクセスメモリ（ＲＡＭ）またはその他の動的記憶装置などのメインメモリ５０６を含み、これはプロセッサ５０４によって実行される情報および命令を記憶するためにバス５０２に結合される。メインメモリ５０６はまた、プロセッサ５０４によって実行される命令の実行の際に一時的変数またはその他の中間情報を記憶するために用いられてもよい。コンピュータシステム５００はさらに、プロセッサ５０４に対する静的情報および命令を記憶するためにバス５０２に結合される読取専用メモリ（ＲＯＭ）５０８またはその他の静的記憶装置を含む。情報および命令を記憶するために磁気ディスクまたは光ディスクなどの記憶装置５１０が与えられてバス５０２に結合される。
【０１８１】
コンピュータシステム５００は、コンピュータユーザに情報を表示するためにバス５０２を介して陰極線管（ＣＲＴ）などのディスプレイ５１２に結合されてもよい。プロセッサ５０４に情報およびコマンド選択を通信するために、英数字およびその他のキーを含む入力装置５１４がバス５０２に結合される。別の種類のユーザ入力装置は、プロセッサ５０４に方向情報およびコマンド選択を通信し、かつディスプレイ５１２上のカーソルの動きを制御するための、マウス、トラックボールまたはカーソル方向キーなどのカーソル制御５１６である。この入力装置は典型的に、その装置が面における位置を特定化できるようにする２つの軸、第１の軸（たとえばｘ）および第２の軸（たとえばｙ）における２次の自由度を有する。
【０１８２】
この発明は、ここに記載する技術を実現するためのコンピュータシステム５００の用法に関する。この発明の実施例の１つに従うと、それらの技術は、メインメモリ５０６に含まれる１つまたはそれ以上の命令の１つまたはそれ以上の配列を実行するプロセッサ５０４に応答してコンピュータシステム５００によって実現される。このような命令は記憶装置５１０などの別のコンピュータ読取可能媒体からメインメモリ５０６に読込まれてもよい。メインメモリ５０６に含まれる命令の配列を実行することによって、プロセッサ５０４はここに記載されるプロセスステップを行なう。代替的な実施例においては、この発明を実現するために、ソフトウェア命令の代わりに、またはそれと組合せてハードワイヤード回路が用いられてもよい。すなわち、この発明の実施例はハードウェア回路およびソフトウェアのいかなる特定の組合せにも制限されない。
【０１８３】
ここに用いられる「コンピュータ読取可能媒体」という用語は、実行のためにプロセッサ５０４に命令を与えることに関わるあらゆる媒体を示す。このような媒体は多くの形を取ってもよく、それには不揮発性媒体、揮発性媒体、および伝送媒体が含まれるがこれに制限されない。不揮発性媒体は、たとえば記憶装置５１０などの光または磁気ディスクを含む。揮発性媒体は、メインメモリ５０６などの動的メモリを含む。伝送媒体はバス５０２を含むワイヤを含む、同軸ケーブル、銅線および光ファイバを含む。伝送媒体はまた、電波および赤外線データ通信の際に生じるものなどの音波または光波の形を取ることもできる。
【０１８４】
コンピュータ読取可能媒体の一般的な形はたとえば、フロッピー（Ｒ）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、またはあらゆるその他の磁気媒体、ＣＤ−ＲＯＭ、あらゆるその他の光媒体、パンチカード、紙テープ、あらゆるその他の孔のパターンを有する物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、フラッシュ−ＥＰＲＯＭ、あらゆるその他のメモリチップまたはカートリッジ、以下に記載されるような搬送波、またはコンピュータが読取ることのできるあらゆるその他の媒体を含む。
【０１８５】
実行のためにプロセッサ５０４に１つまたはそれ以上の命令の１つまたはそれ以上の配列を運ぶステップにはさまざまな形のコンピュータ読取可能媒体が含まれてもよい。たとえば、命令は最初に遠隔コンピュータの磁気ディスクに運ばれてもよい。遠隔コンピュータは命令をその動的メモリにロードすることができ、その命令をモデムを用いて電話線上に送ることができる。コンピュータシステム５００に対してローカルなモデムはその電話線上のデータを受取ることができ、赤外線送信器を用いてそのデータを赤外線信号に変換する。赤外線検出器はその赤外線信号の有するデータを受取ることができ、適切な回路がそのデータをバス５０２に置くことができる。バス５０２はそのデータをメインメモリ５０６に運び、そこからプロセッサ５０４が命令を検索および実行する。メインメモリ５０６が受取った命令は、プロセッサ５０４による実行の前または後に記憶装置５１０に任意に記憶されてもよい。
【０１８６】
コンピュータシステム５００はまた、バス５０２に結合される通信インターフェイス５１８を含む。通信インターフェイス５１８はローカルネットワーク５２２に接続されるネットワークリンク５２０に対する双方向データ通信結合を与える。たとえば、通信インターフェイス５１８は対応する種類の電話線にデータ通信接続を与えるための統合サービスデジタルネットワーク（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス５１８はコンパチブルＬＡＮにデータ通信接続を与えるためのローカルエリアネットワーク（ＬＡＮ）カードであってもよい。また、ワイヤレスリンクを実現してもよい。あらゆるこうした実現例において、通信インターフェイス５１８はさまざまな種類の情報を表わすデジタルデータストリームを有する電気、電磁気または光信号を送信および受信する。
【０１８７】
ネットワークリンク５２０は典型的に、１つまたはそれ以上のネットワークを通じて他のデータ装置にデータ通信を与える。たとえば、ネットワークリンク５２０はローカルネットワーク５２２を通じてホストコンピュータ５２４またはインターネットサービスプロバイダ（ＩＳＰ）５２６によって動作されるデータ設備への接続を与えてもよい。次にＩＳＰ５２６が、現在「インターネット」５２８と一般的に呼ばれるワールドワイドパケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク５２２およびインターネット５２８はどちらもデジタルデータストリームを有する電気、電磁気または光信号を用いる。コンピュータシステム５００に、およびそこからデジタルデータを運ぶ、さまざまなネットワークを通る信号ならびにネットワークリンク５２０上の信号および通信インターフェイス５１８を通る信号は、情報を伝達する搬送波の例示的な形である。
【０１８８】
コンピュータシステム５００はネットワーク、ネットワークリンク５２０および通信インターフェイス５１８を通じて、メッセージを送り、プログラムコードを含むデータを受取ることができる。インターネットの例において、サーバ５３０は、インターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２および通信インターフェイス５１８を通じてアプリケーションプログラムに対する要求されたコードを伝送してもよい。この発明に従うと、このようなダウンロードされたアプリケーションの１つがここに記載される技術を実現する。
【０１８９】
受取られたコードは、受取られたときにプロセッサ５０４によって実行されても、および／または記憶装置５１０もしくはその他の不揮発性記憶装置にその後の実行のために記憶されてもよい。この態様で、コンピュータシステム５００は搬送波の形のアプリケーションコードを得てもよい。
【０１９０】
（利益および利点）
ここに記載される技術は多数の利益を提供する。たとえば、ここに記載される技術はデータの多次元特性および関連する性能利益を反映する態様で多次元データを編成するが、その下にある記憶、運営およびアクセス機構は厳密にリレーショナルなままで残り得るため、多次元およびリレーショナルシステムの利点が組合される。
【０１９１】
加えてここに記載する技術を、スター照会準結合技術を利用するために用いることができる。さらにこの技術は、繰返される次元キー値を圧縮し、典型的な多次元照会におけるＩ／Ｏを劇的に減少させ得るクラスタリングを提供することによって、伝統的なリレーショナルスタースキーマ概念に重大な利点を提供する。
【０１９２】
データに対するリレーショナルインターフェイスが保存されるため、現存するＲＯＬＡＰアプリケーションは多次元データ編成に関連するすべての利益を得ながら変わらず働き続ける。加えて、ここに記載される技術は、関連する次元テーブル中にのみ表わされる次元キー列を有するファクトテーブルにビットマップ（またはバランス木）索引を生成可能にする。したがって、多次元編成および圧縮によるファクトテーブルに対する劇的に減少したＩ／Ｏの利益を得ながらも、スター照会処理技術が保存される。
【０１９３】
ここに記載される技術はリレーショナルスキーマに「座標」の概念を導入し、これはリレーショナルファクトテーブル中の対応する測定の場所を定めるための情報を含む。さまざまな実施例において、次元とファクトテーブルとの１次外部キー関係は、座標への次元キー値のマッピングによって置換される。この機構は次元キー値をファクトテーブルの外に圧縮することを可能にし、記憶およびＩ／Ｏ要求を減少させる。
【０１９４】
ここに記載される技術は、キューブを記述する次元の「性能対称指向付け」の概念を導入する。指向付けはキューブのセルを移動するために用いられてもよい。これらの技術によって導入される指向付けは、集合を次元のあらゆる順序付けに沿って同等に処理するという点において性能対称であり、その結果あらゆる先行技術の方法よりもかなり無矛盾の性能が得られる。
【０１９５】
ここに記載される技術は、多次元キューブのその次元による完全な記述を導入する。特定的には、次元を用いてキューブの多次元およびジオメトリの局面を記述し、キューブのリレーショナルシステムへの真の組込みおよびすべての関連する性能利益をもたらす。
【０１９６】
キューブの占有、疎の減少および改善された性能における利益を得るために、ここに記載される技術は分割技術と組合されてもよい。
【０１９７】
ここに記載される技術は、リレーショナルシステムにおけるＳＱＬ「キューブ」オペレータの出力のコンパクトな多次元表示、および（ベース「グループバイ」によって計算されるものを超えて）オペレータによって計算される拡張された集合にアクセスするやり方を定める。
【０１９８】
さらに、ここに記載される階層的タイリング技術は、グラニュール（タイル）に含まれるセルがスキーマ中の階層的関係によって定められるという点において、本来関係するセルをともに記憶する。よって「関係する」データ（たとえばＣＡにおけるすべての市）を、ファクトテーブルに対する最小限の数のＩ／Ｏによって検索できる。
【０１９９】
ここに記載される技術は、固定された幅のタイルに加えて、各次元に沿って可変の幅のタイルを扱う。よってこの技術は次元に沿った階層的な関係が一般的である多次元環境において有効であり、自然な変数−幅タイリングスキームを提供する。
【０２００】
ここに記載される多重レベルタイリング技術は、スキーマ中の階層的関係によって定められるとおりにグラニュール（タイル）中に含まれるという点において本来関係するセルをともに記憶し、またそれを多重レベルで行なう。よって「関係する」データ（たとえばＣＡにおけるすべての市）をファクトテーブルに対する最小限の数のＩ／Ｏによって検索でき、この最適化は多重レベルにおいて適用する。たとえば、その階層が（市が定める州が定める地方）であるとき、「ＣＡにおけるすべての市」を最小限の数のＩ／Ｏによって検索できるだけでなく、「太平洋岸地方のすべての州」も同様にできる。
【図面の簡単な説明】
【図１】  スタースキーマを例示するブロック図である。
【図２】  この発明の実施例に従ってタイルに分割された２次元キューブを例示するブロック図である。
【図３】  キューブの次元Ａに新たな次元キー値が付加された後の図２のキューブを例示するブロック図である。
【図４Ａ】  階層的次元を有するキューブを例示するブロック図である。
【図４Ｂ】  階層的次元の特定のレベルのメンバーに基づいて図４のキューブをどのようにタイリングし得るかを例示するブロック図である。
【図５】  この発明の実施例を実現し得るコンピュータシステムを例示するブロック図である。
【図１】
0003979846.tif 000005
【図２】
0003979846.tif 000006
【図３】
0003979846.tif 000007
【図４Ａ】
0003979846.tif 000008
【図４Ｂ】
0003979846.tif 000009
【図５】
0003979846.tif 000010