(57)【特許請求の範囲】
【請求項１】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示する方法であって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値が指し示す、前記スレーブ側存在数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを備え、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すことを特徴とする結合された表形式データの結合・提示方法。
【請求項２】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示する方法であって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値に基づき、前記スレーブ側累計数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数であって、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下、或いは、当該項目値未満であるような項目値のレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを備え、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すことを特徴とする結合された表形式データの結合・提示方法。
【請求項３】
前記ポインタ値が指し示す値より１つ大きな値に対応する、前記スレーブ側累計数配列中の要素を特定し、これにより、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下であるような項目値のレコード数を示すレコード数指示配列中に収容するステップを備えたことを特徴とする請求項２に記載の方法。
【請求項４】
前記第１の結果配列を生成するステップが、
その値が、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素が格納された位置を特定するステップと、
前記位置にて示される前記新たなレコード番号配列中の要素を特定して、前記第１の結果配列中の対応する位置に配置するステップとを有することを特徴とする請求項１ないし３の何れか一項に記載の方法。
【請求項５】
前記第２の結果配列を生成するステップが、
前記レコード番号配列中のレコード番号と、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素との差を算出するステップと、
前記開始アドレスとして一時的に保持された要素と、前記算出された差とを加算するステップと、
前記加算により得られた値を、前記第２の結果配列中の対応する位置に配置するステップとを有することを特徴とする請求項１ないし４の何れか一項に記載の方法。
【請求項６】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示するための結合・提示プログラムであって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値が指し示す、前記スレーブ側存在数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを、コンピュータに実行させ、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すように前記コンピュータを動作させることを特徴とする結合された表形式データの結合・提示プログラム。
【請求項７】
各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示するための結合・提示プログラムであって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値に基づき、前記スレーブ側累計数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数であって、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下、或いは、当該項目値未満であるような項目値のレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを、コンピュータに実行させ、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すように前記コンピュータを動作させることを特徴とする結合された表形式データの結合・提示プログラム。
【請求項８】
前記ポインタ値が指し示す値より１つ大きな値に対応する、前記スレーブ側累計数配列中の要素を特定し、これにより、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下であるような項目値のレコード数を示すレコード数指示配列中に収容するステップを、前記コンピュータに実行させることを特徴とする請求項７に記載のプログラム。
【請求項９】
前記第１の結果配列を生成するステップにおいて、
その値が、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素が格納された位置を特定するステップと、
前記位置にて示される前記新たなレコード番号配列中の要素を特定して、前記第１の結果配列中の対応する位置に配置するステップとを、前記コンピュータに実行させることを特徴とする請求項６ないし８の何れか一項に記載のプログラム。
【請求項１０】
前記第２の結果配列を生成するステップにおいて、
前記レコード番号配列中のレコード番号と、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素との差を算出するステップと、
前記開始アドレスとして一時的に保持された要素と、前記算出された差とを加算するステップと、
前記加算により得られた値を、前記第２の結果配列中の対応する位置に配置するステップとを、前記コンピュータに実行させることを特徴とする請求項６ないし９の何れか一項に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理するデータ処理方法およびデータ処理装置に関し、より詳細には、リレーショナルデータベースにおいて、複数の表形式データを結合して、所望のレコード等の項目値を検索、集計し、および、ソートする方法および装置に関する。
【０００２】
【従来の技術】
データベースは種々の用途に用いられているが、中規模ないし大規模システムにおいては、論理的な矛盾が排除できるリレーショナルデータベース（ＲＤＢ）の使用が主流となっている。たとえば、ＲＤＢは飛行機の座席予約等のシステムに利用されている。この場合、キー項目を指定することにより、（多くの場合１件の）ターゲットを迅速に検索することもでき、或いは、予約の確定、キャンセル或いは変更などを行うことができる。また、各便の座席数はせいぜい数百であるため、特定の航空便の空席数を求めることも可能である。
【０００３】
ところが、このＲＤＢを用いて、年度ごと、曜日ごと、月ごと、路線ごと、時間帯ごと或いは機種ごとなどで、特定の演算（たとえば、搭乗率の計算）をなそうとすると、非常に時間がかかることが知られている。すなわち、ＲＤＢは、処理を矛盾なく実現することに優れている反面、相当数のレコードを検索、集計或いはソートする性能が低い。
【０００４】
そこで、近年、検索や集計のために、ＲＤＢとは別に、データウェアハウス（ＤＷＨ）と称するデータベースをシステムに構築することが一般化している。すなわち、エンドユーザの特定の目的に合わせて、特定のデータ形式およびデータ項目名を備えた極めて大規模なデータベースを構築し、エンドユーザはこれを用いて特定の検索や集計をなすことができるようになっている。
【０００５】
【発明が解決しようとする課題】
しかしながら、ＲＤＢのほかに、他のＤＷＨを設けること、すなわち、複数のデータベースを設けることは、本来、データを集中管理できるためにデータベース、特に、ＲＤＢが考案されたという本来あるべき姿とは乖離しており、これに由来して、たとえば、以下に述べるような様々な問題点が生じている。
（１）ＤＷＨは固定的なものであるため、予めＤＷＨに設けられた項目以外の検索や集計をすることが困難である。
（２）ＲＤＢのほかに、固定的なＤＷＨを設けるため、データ容量が極めて大きくなるほか、ＲＤＢの更新等に対応することができない。
【０００６】
上記問題点に鑑みて、本発明者は、すでに、高速なジョインを実現する方法を考案し、これを出願している（特願平１１−１５１１５６：ＰＣＴ／ＪＰ００／０３４６５）。この手法においても、演算に際して必要なデータ領域を一層削減っできるのが望ましい。上記ジョインの手法においても、ジョインすべき表形式データの一部の積集合となる配列を作成するため、比較的大きなメモリ空間を要するという問題点があった。
【０００７】
本発明は、複数の表形式データを、所望のように高速にジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データを極めて高速に提示方法を提供することを目的とする。
また、本発明は、ジョインの処理に際しても、そのために大量のデータ領域を必要としない方法を提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明の目的は、各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示する方法であって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値が指し示す、前記スレーブ側存在数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを備え、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すことを特徴とする結合された表形式データの結合・提示方法により達成される。
【０００９】
本発明の原理について以下に説明を加える。表形式データを結合する場合には、マスタ側、スレーブ側の双方とも、結合前に一行で表されたものが、一或いは複数行に現れる。したがって、もとの一行を複数行に写像する手法を見出さなければならない。たとえば、これを実現するための最も原始的な手法は、当該複数だけ、レコードを複製することである。たとえば、元来、（０、１、２）というレコード番号の配列であれば、各レコードを２回ずつ複製すると、（０、０、１、１、２、２）とすることができる。しかしながら、レコードの複製には著しく時間を要する。
【００１０】
そこで、各レコードの複製すべき、つまり、リピートすべき回数を収容した配列（リピート数配列）を利用することが考えられる。上記例では、リピート数配列＝（２、２、２）となる。このリピート数配列を利用して、結合されたビュー（テーブル）の行を決定するためには、たとえば、以下のような計算が必要となる。
たとえば、結合されたテーブルの３行目を知りたければ、リピート数配列の最初の要素＝２が、「３」に達していないこと、および、上記最初の要素＋リピート数配列の２番目の要素＝４が、「３」に達していることに基づき、マスタ側の２行目のレコードが、結合されたテーブルの３行目に対応することがわかる。
【００１１】
本発明では、累計数配列を予め求めておくことで、上記計算を省略することが可能となる。つまり、累計数配列から、繰り返しの数は、極めて容易に算出することができる。より詳細には、前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めることができ、当該第１の結果配列中の値や、マスタ側累計数配列中の値などから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めることもできる。
【００１２】
また、本発明の目的は、各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合し、結合された表形式データを提示する方法であって、
各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成するステップと、
複数の表形式データの間で、共通化すべき項目を見出すステップと、
前記共通化すべき項目に関する情報ブロックを特定するステップと、
前記複数の表形式データにおいて、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストを等価にするステップと、
前記値リストを等価にする際に、その項目値が追加された情報ブロックにおいて、項目値の追加に伴ってポインタ配列を変換して、新たなポインタ配列を生成するステップと、
前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データをマスタ表形式データと決定し、それ以外の表形式データをスレーブ表形式データと決定するステップと、
前記スレーブ表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックにおいて、スレーブ表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納するスレーブ側存在数配列を生成するステップと、
前記スレーブ側存在数配列中の存在数を参照して、項目値に対応した存在数の累計数を格納したスレーブ側累計数配列を生成するステップと、
前記マスタ表形式データを構成する情報ブロックであって、前記項目値が等価となった情報ブロックにおいて、マスタ側のレコード番号が示すポインタ配列中のポインタ値を取り出すステップと、
前記ポインタ値に基づき、前記スレーブ側累計数配列中の要素を特定し、当該マスタ側のレコード番号と対応付けて、マスタ表形式データの各レコードに対応するスレーブ表形式データのレコード数であって、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下、或いは、当該項目値未満であるような項目値のレコード数を示すレコード数指示配列中に収容するステップと、
前記レコード数指示配列中のレコード数を参照して、前記マスタ側のレコード番号に対応した、レコード数の累計数を格納するマスタ側累計数配列を生成するステップと、
前記マスタ側累計数配列に関して、レコード数の累計数の総和を求め、当該総和の数だけの要素を収容可能な、結合された表形式データに関する新たなレコードを特定するための新たなレコード番号配列を生成するステップと、
前記新たなレコード番号配列中の新たなレコード番号と、前記マスタ側累計数配列中の要素とを比較することにより、重複を考慮した、マスタ表形式データにおけるレコード番号を収容した第１の結果配列を求めるステップと、
前記第１の結果配列中の要素であるマスタ表形式データにおけるレコード番号により指し示される、前記スレーブ表形式データに関するポインタ配列中の要素を特定するステップと、
前記スレーブ表形式データに関するポインタ配列中の要素が指し示す、前記スレーブ側累計数配列中の要素を特定し、これをスレーブ側の開始アドレスとして一時的に保持するステップと、
前記レコード番号配列中のレコード番号と、当該レコード番号により特定される前記マスタ累計数配列中の要素と、前記スレーブ側の開始アドレスとから、重複を考慮した、スレーブ表形式データにおけるレコード番号を収容した第２の結果配列を求めるステップとを備え、
前記第１の結果配列に収容されたレコード番号に基づき、前記マスタ側の情報ブロックに関する値リスト中の項目値を取り出すとともに、前記第２の結果配列に収容されたレコード番号に基づき、前記スレーブ側にかかる情報ブロックの値リスト中の項目値を取り出すことを特徴とする結合された表形式データの結合・提示方法によっても達成される。
【００１３】
これにより、結合された項目のソート順で、マスタ側の項目値以下となるようなスレーブ側の項目値、或いは、マスタ側の項目値未満となるようなスレーブ側の項目値を含むような表（ビュー）を作成することが可能となる。
たとえば、マスタ側の項目値以下のものを取得するためには、前記ポインタ値が指し示す値より１つ大きな値に対応する、前記スレーブ側累計数配列中の要素を特定し、これにより、マスタ側の値リストのソート順で、前記ポインタ値が示す値リスト中の項目値以下であるような項目値のレコード数を示すレコード数指示配列中に収容するステップを備える。
【００１４】
好ましい実施態様においては、前記第１の結果配列を生成するステップが、その値が、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素が格納された位置を特定するステップと、前記位置にて示される前記新たなレコード番号配列中の要素を特定して、前記第１の結果配列中の対応する位置に配置するステップとを有する。
【００１５】
また、より好ましい実施態様においては、第２の結果配列を生成するステップが、前記レコード番号配列中のレコード番号と、前記新たなレコード番号より以下であってかつ最大な、前記マスタ累計数配列中の要素との差を算出するステップと、前記開始アドレスとして一時的に保持された要素と、前記算出された差とを加算するステップと、前記加算により得られた値を、前記第２の結果配列中の対応する位置に配置するステップとを有する。
また、本発明の目的は、上記ステップをコンピュータに実行させるプログラムによっても達成される。
【００１６】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。図１は、本発明の実施の形態にかかる表形式データのジョインや、ジョインされたデータの検索、集計およびソートを実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図１に示すように、このコンピュータシステム１０は、通常のものと同様の構成であり、プログラムを実行することによりシステム全体および個々の構成部分を制御するＣＰＵ１２、ワークデータなどを記憶するＲＡＭ(Random Access Memory)１４、プログラム等を記憶するＲＯＭ(Read Only Memory)１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。
【００１７】
本実施の形態にかかる、表形式データを結合（ジョイン）するプログラム、結合した表形式データから所定の項目の表（ビュー）を作成するプログラム、検索プログラム、集計プログラムおよびソートプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。
【００１８】
また、本実施の形態においては、検索、集計およびソートを高速に実現するために、後述するように所定のデータ形式の情報ブロックを生成する必要がある。この情報ブロック生成プログラムも同様に、ＣＤ−ＲＯＭ１９に収容され、ＲＯＭ１６に記憶され、或いは、外部記憶媒体１８に記憶されても良い。或いは、これらプログラムは、ネットワーク（図示せず）を介して、外部から供給されても良いことはいうまでもない。また、本実施の形態において、情報ブロック生成プログラムにて生成されたデータ（情報ブロック）は、ＲＡＭ１４に記憶され、或いは、外部記憶媒体１８の所定の領域に記憶される。
【００１９】
次に、本発明の前提となるデータ形式や、検索、集計およびソートの原理につき説明を加える。本発明者は、昨年、処理の超高速化を図るため、特定のデータ形式を有する表形式データの構築と、検索、集計およびソート方法とを考案した（ＰＣＴ／ＪＰ９９／０４３００）。本発明においても、基本的には、この出願に基づいて、表形式データを所定の情報ブロックの集合体として構築し、これを用いて検索、集計およびソートを実現している。まず、情報ブロックの構造、および、これを利用した検索について簡単に説明を加える。
【００２０】
図２は、本実施の形態にて用いる情報ブロックを示す図である。図２に示すように、情報ブロック１００は、値リスト１１０と値リストへのポインタ配列１２０とを含んでいる。値リスト１１０は、表形式データの各項目に対して、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値１１１が格納されたテーブルである。値リストへのポインタ配列１２０は、表形式データのある列（すなわち項目）の項目値番号、つまり値リスト１１０へのポインタが表形式データのレコード番号順に格納された配列である。
【００２１】
上記値リストへのポインタ配列１２０と値リスト１１０とを組み合わせることにより、あるレコード番号が与えられたときに、所定の項目に関する値リストへのポインタ配列１２０からそのレコード番号に対応して格納された項目値番号を取り出し、次いで、値リスト１１０内でその項目値番号に対応して格納された項目値を取り出すことにより、レコード番号から項目値を得ることができる。したがって、従来のデータ表と同様に、レコード番号（行）と項目（列）という座標を用いてすべてのデータ（項目値）を参照することができる。
【００２２】
たとえば、図３（ａ）に示す表形式データを考える。この例では、顧客ＩＤ、顧客名、電話番号という項目に種々の項目値が与えられている。本実施の形態においては、このような表形式データを、図３（ｂ）ないし（ｄ）に示す形式の情報ブロックとして保持している。たとえば、図３（ｂ）において、ポインタ配列１２０−１は、顧客ＩＤを示す項目値を格納した値リスト１１０−１に関連付けられている。すなわち、先頭レコード（レコード番号「０」）のポインタ配列のポインタ値は０であり、これに対応して、顧客ＩＤを示す項目値「１」が得られる。図３（ｂ）において、ポインタ配列１２０−２は、顧客名を示す項目値を格納した値リスト１１０−２に関連付けられている。たとえば先頭レコード（レコード番号「０」）のポインタ配列におけるポインタ値は「５」であり、これに対応して、顧客名を示す項目値「Ｋｉｎｇ」が得られる。図３（ｃ）においても、同様に、ポインタ配列１２０−３が、電話番号を示す項目値を格納した値リスト１１０−３に関連付けられていることが理解できよう。また、各値リストにおいては、項目値が順序付けられて（この例では昇順）いることが理解できよう。
【００２３】
さらに、本実施の形態においては、情報ブロック１００の値管理テーブルは、値リスト１１０のほか、検索や集計のために用いる分類番号フラグ配列、項目値に対応するポインタを格納すべきメモリ空間の先頭アドレスを示す開始位置配列、および、存在数配列が含まれている。分類番号フラグ配列の各フラグ、および、存在数配列の各存在数は、項目値の各々に対応付けられている。分類番号フラグのフラグ値は、通常 「０」であり、検索や集計の際に見出すべき項目値に対応して「１」にセットされる。また、存在数は、その項目値を有するレコードの個数に対応する。なお、開始位置は、対応するポインタ値よりも小さなポインタ値に対応する存在数を加算したものに対応するため、必ずしも設ける必要はない。
【００２４】
図４（ａ）は、表形式データの他の例を示す図、図４（ｂ）および（ｃ）は、それぞれ、「性別」および「年令」に関する情報ブロックを示す図である。図４（ｂ）に示すように、性別に関する情報ブロック２００−１の値管理テーブル２１０−１には、ポインタ配列２２０の各ポインタ値に対応する項目値（「男性」および「女性」）と、各項目値に対応する分類番号、開始位置および存在数が示されている。たとえば、ポインタ値が「０」（つまり、値リストの項目値が「男性」）であるようなレコードの数は６３２５６４個であり、その一方、ポインタ値が「１」（つまり、値リストの項目値が「女性」）であるようなレコードの数は３６７４２６個となっている。また、各項目値に対応する開始位置は、レコードへのポインタ配列２３０−１の先頭アドレスを示している。図４（ｃ）においても、同様のことが理解できよう。
【００２５】
このようなデータ構造を有する情報ブロックを用いた検索の一例につき以下に説明を加える。図５は、単一項目に関する検索手法を示すフローチャートである。この処理は、ＣＰＵ１２（図１参照）が所定の検索プログラムを実行することにより実現される。この例では、「年令」の項目値が１６歳または１９歳であるレコードが検索される。まず、表形式データに関する情報ブロックのうち、図４（ｃ）に示す「年令」に関する情報ブロック２００−２が特定される（ステップ５０１）。
【００２６】
次いで、特定された情報ブロック（以下、「特定情報ブロック」と称する。）の値リスト２１０−２において、項目値が上記検索条件に合致するもの（１６歳または１９歳）に対応する行の分類番号が「１」にセットされる（ステップ５０２）。本例の場合には、項目値番号「０」および項目値番号「３」に対応する行の分類番号が１にセットされる。次いで、分類番号が「１」にセットされている行に対応した開始位置および存在数が取得される（ステップ５０３）。これら情報をポインタ取り出し情報と称する。レコードへのポインタ配列において、ステップ５０３にて取得されたポインタ取り出し情報に基づき、検索条件に合致したレコードへのポインタを示すレコード番号が取り出される（ステップ５０４）。本例においては、項目値番号「０」に対応したレコードのポインタは、レコードへのポインタ配列の開始位置「０」すなわち先頭から、４５８９８個目までの領域に格納され、その一方、項目値番号「３」に対応したレコードのポインタは、レコードへのポインタ配列の２３８３１３７番目から１８９６５３個分の領域に格納されていることがわかる。最後に、後の処理にて利用できるようにするために、取り出されたレコード番号の配列が、結果集合として作成され、これが保持される（ステップ５０５）。
また、集計およびソートも、分類番号、開始位置および存在数を利用することにより実現することができる。
【００２７】
次に、上記情報ブロックを生成するためのコンパイル処理について説明を加える。このコンパイル処理においては、ある項目について無作為に配置されたデータを、重複なくかつ所定の順序（たとえば五十音順やアルファベット順）でソートされた値リストを作り出している。図６（ａ）は、表形式データにおける、レコードとある項目（姓）の項目値とを示す図である。本実施の形態にかかるコンパイル処理においては、この図６（ａ）に示すような、項目値がランダムに並べられた項目に関して、図６（ｂ）に示すような形式の情報ブロックを生成する。図６（ｂ）において、情報ブロック６００には、値リストへのポインタ配列６０１（以下、「ＰＶ」と称する。）、および、値リスト６０２が含まれる。コンパイル処理の直後には、値リスト６０２は、元の項目値が収容された配列（オリジナル項目値配列）６０３と、当該オリジナル項目値配列６０３の格納位置番号を示す配列６０４（以下、「ＶＬＰ」と称する。）とから構成される。上記ポインタ配列（ＰＶ）は、値リスト中の項目値を指定するという意味で、位置指定配列ということができる。また、ＶＬＰは、項目値の順序を表しているという意味で、順位指定配列ということができる。コンパイル処理の直後の情報ブロックは、上述した図３（ｂ）に示す情報ブロックとは若干形式が異なっているが、後に述べる処理により同等の形式とすることができる。
【００２８】
図７は、この実施の形態にかかるコンパイル処理の概略を示すフローチャートである。図７に示すように、コンパイル処理においては、コンピュータシステム１０は、固定記憶媒体１８等に記憶された表形式データを読み出し（ステップ７０１）、情報ブロックを作成する必要がある項目を特定する（ステップ７０２）。たとえば、全ての項目について情報ブロックを作成しても良いし、指定された任意の項目に関する情報ブロックのみを作成しても良い。また、読み出した表形式データは、ＲＡＭ１４上に一時的に保存しておくのが、処理時間を考慮した場合に望ましい。
【００２９】
次いで、コンピュータシステム１０は、表形式データから所定の項目を選択して、当該項目にかかるデータ（項目値）をレコード番号と関連付けて切り出す（ステップ７０３）。これにより、たとえば、図６（ａ）に示す形式のデータを取り出すことができる。次いで、当該項目に関する情報ブロックが作成される（ステップ７０４）。この処理については後に詳述する。ステップ７０３、７０４の処理は、指定された全項目について実行される（ステップ７０５、７０６参照）。これにより、所定の項目に関する情報ブロックが完成する。
このようにして、所定の項目に関する情報ブロックを作り出すことが可能となる。この情報ブロックの生成を予め行っておき、生成された情報ブロックを用いて検索、集計およびソートの処理が実行される。
【００３０】
さて、２つの表形式データを組み合わせて（ＪＯＩＮ（ジョイン）処理の実行）、一つの表（ビュー）を作成する処理につき以下に説明する。なお、本明細書において、情報ブロック中、ある項目に関する項目値を配置した配列（項目値配列）を「値リスト」と称する。また、種々の配列に収容された値を、場合によって、「要素」と称することもある。
たとえば、図８（ａ）に示すように、テーブル（野球愛好会の会員テーブル）８００から、ある項目（ここでは、「地域」）に着目して、ある項目値を有する会員のみを抽出したテーブル８０１が作成される。その一方、図８（ｂ）に示すように、他のテーブル（たとえば、野球の試合予定テーブル）８１０から、ある項目（ここでは、「野球場」）に着目して、所定の項目値を有する野球場のみを抽出したテーブル８１１が作成されている。
【００３１】
図８（ａ）に示すように、会員テーブル８００（これから、レコードの集合が抽出され、さらに会員テーブル８０１が作られるため、「会員元テーブル」と称する。）は、レコード番号を会員ＩＤとして、「会員名」、「地域」、「会員が好きな球団名（ファン）」という項目を有し、レコードごとに、それぞれの項目に値が与えられている。その一方、図８（ｂ）に示すように、試合予定テーブル８１０（上述したものと同様に、これを「試合予定元テーブル」と称する。）は、レコード番号を球団ＩＤとして、「球団名」、「試合日」、「球場名」という項目を有し、レコードごとに、それぞれの項目に値が与えられている。
本実施の形態においては、会員テーブルにおけるファンという項目、および、試合予定テーブルにおける球団という項目をキーとして、ジョイン処理を実行し、最終的に、図９に示すように、会員が好きな球団の試合であって、会員の地域で開催される試合を示す表を、ビューとして提示できるようになっている（符号９００参照）。
【００３２】
なお、上記会員テーブル８０１と、試合予定テーブル８１１とは、基本的には対等であるが、出力される表（ビュー）のデフォルトのソート順が反映されているテーブルを「マスタテーブル」、他方のテーブルを「スレーブテーブル」と称する。図８および図９の例では、会員に付与された番号（会員ＩＤ）がソートされた状態であり、会員テーブル８０１がマスタテーブルとなり、その一方、試合予定テーブル８１１がスレーブテーブルとなる。また、本明細書において、上記マスタテーブルを場合によってはマスタ表形式データ、スレーブテーブルをスレーブ表形式データと称することもある。
【００３３】
図１０は、ジョイン処理の概略を示すフローチャートである。まず、マスタテーブルから、ある項目、たとえば、「地域」において、所定の項目値、たとえば、「Ｔｏｋｙｏ」を有するレコードが検索され（ステップ１００１）、その後、スレーブテーブルから、同様に、ある項目において所定の項目値を有するレコードが検索される（ステップ１００２）。この検索においては、図５に示す処理が実行される。ステップ１００１およびステップ１００２の処理により、野球愛好会会員元テーブル８００に基づき、野球愛好会会員テーブル８０１を作ることができ（図８（ａ）参照）、また、試合予定元テーブル８１０から試合予定テーブル８１１を作ることができる（図８（ｂ）参照）。
【００３４】
たとえば、野球愛好会会員元テーブルは、図１１（ａ）に示すようになっている。ここでは、「会員名」、「地域」および「ファン」という項目ごとの情報ブロック１１０１、１１０２、１１０３が初期的に存在している。情報ブロックにおいては、項目値を所定の順序（５０音順やアルファベット順）で格納した値リスト（たとえば、符号１１１１参照）と、レコード番号の各々に対応した、項目値テーブル中の項目値番号を指定するためのポインタ値を格納したポインタ配列（たとえば、符号１１１２参照）とが設けられている。
【００３５】
また、検索処理により、図１１（ｂ）に示すように、抽出されたレコード番号が格納された順序付き集合配列１１２１が作られる。この順序付き集合配列中のレコード番号を利用して、各情報ブロックのポインタ配列中のポインタ値、および、ポインタ値が示す項目値を指定することができる。これにより、抽出されたレコードに対応つけられた、各項目の項目値を含むビューを作ることができる（符号１１２２参照）。なお、ジョインの処理においては、ビュー１１２２を作成し、これをユーザに提示する必要はない。
【００３６】
試合予定元テーブルは、図１２（ａ）に示すようになっている。ここでは、「球団」、「試合日」および「野球場」という項目ごとの情報ブロック１２０１、１２０２、１２０３が初期的に存在している。各情報ブロックにおいては、野球愛好会会員元テーブルと同様に、ポインタ配列（たとえば、符号１２１２参照）および値リスト（たとえば符号１２１１参照）とが設けられている。また、検索処理により、図１２（ｂ）に示すように、抽出されたレコード番号が格納された順序付き集合配列１２２１が作られる。
次いで、キーとなる項目が共通化される（ステップ１００３）。図１３は、ステップ１００３に示す共通化処理をより詳細に示すフローチャートである。図１３に示すように、まず、キーとなる項目に関して、マスタテーブル側の値リストとスレーブ側の値リストとが比較される（ステップ１３０１）。
【００３７】
図８〜図１１に示した例においては、マスタテーブル側の項目「ファン」とスレーブテーブル側の項目「球団」とが共通化されることになる。図１４(ａ)に示すように、マスタテーブル側の項目「ファン」に関する情報ブロック１１０３中の値リスト１４０１に含まれる項目値と、スレーブテーブル側の項目「球団」に関する情報ブロック１２０１中の値リスト１２１１に含まれる項目値とが比較される（図１４（ａ）中の矢印１４１０参照）。
【００３８】
共通化された値リストが生成される（ステップ１３０２、図１４（ａ）の矢印１４１１）。共通化された値リスト（符号１４０２参照）においては、マスタテーブル側の値リスト中の項目値と、スレーブテーブル側の値リスト中の項目値との論理積（ＡＮＤ）をとった形態となる。
その後、マスタテーブル側の値リストと共通化された値リストとの間の変換配列（符号１４０３参照）が生成される（ステップ１３０３）。このマスタテーブル側の変換配列１４０３には、もとの値リストの各項目値に対応した共通化された値リスト中の項目値を指示する値が格納されている。同様に、スレーブテーブル側の値リストと共通化された値リストとの間の変換配列（符号１４０４参照）も生成される（ステップ１３０４）。
【００３９】
変換配列が生成されると、マスタテーブル側のポインタ配列中のポインタ値、および、スレーブテーブル側のポインタ配列中のポインタ値が、変換配列中を通すことにより書き換えられる（ステップ１３０５、１３０６）。たとえば、図１４（ｂ）に示すように、マスタテーブル側において、ポインタ配列１４２０中の、ある格納位置番号のポインタ値を参照して、当該ポインタ値が示す位置に配置された、変換配列１４０３中の値が参照される。参照した値が、ポインタ配列中の当該格納位置番号の新たなポインタ値となる。同様に、スレーブテーブル側においても、ポインタ配列１４２１中の、ある格納位置番号のポインタ値を参照して、当該ポインタ値が示す位置に配置された変換配列１４０４中の値が特定され、当該値が、格納位置番号の新たなポインタ値となる。
【００４０】
このようにして、図１５に示すような、マスタテーブル側の、そのポインタ値が更新されたポインタ配列および共通化された値リストからなる情報ブロック（符号１５０１参照）、および、スレーブテーブル側の、そのポインタ値が更新されたポインタ配列および共通化された値リストからなる情報ブロック（符号１５０２参照）が得られる。なお、図１５の状態においては、キーとなった項目に関して、値リストが共通している。したがって、２つの値リストを保持しておく必要はなく、単一の値リストを双方の情報ブロックが利用するようにしても良い。
【００４１】
値リストの共有化が終了すると、スレーブテーブル側において、キーとなった項目でソートが実行され、かつ、キーとなった項目に関して、値リスト中の各項目値を有しているレコードの数を示す存在数配列が生成される（図１０のステップ１００４）。このソートの処理について、簡単に説明を加える。本実施の形態に係る情報ブロックは、図４（ｂ）や図４（ｃ）に示すように、値リスト中の項目値の数と同じ要素数を有する複数の配列を有している。再度説明すると、開始位置配列中の数値は、レコードへのポインタ配列の先頭アドレスを示し、存在数配列中の数値は、当該項目値を指しているレコード数を示している。
【００４２】
図１６は、スレーブ側の試合予定テーブルを、球団名をキーとしてソートする際の処理を説明するための図である。図１６に示すように、球団名に関する情報ブロックにおいては、共通化された値リスト１６０１および変換後のポインタ配列１６０２が存在している。試合予定テーブルにおいては、順序付き集合内に収容されたレコード番号に示す要素だけをソートすればよい。
そこで、順序付き集合内の要素が指し示すポインタ配列中のポインタ値を参照して、存在数配列中の、ポインタ値が示す位置の要素をインクリメントすることにより、値リストが何回指示されるかを調べる。これにより存在数配列１６０３を得ることが可能となる。
【００４３】
累積数配列（これは「開始位置配列」と同じものである）１６０４中の要素は、存在数配列中の要素から決定することができる。これは、存在数配列中の要素の累積数を、開始位置配列の、格納位置が一つ下（つまり、格納位置番号が一つ大きなもの）の要素とすればよい。たとえば、累積数配列中、格納位置番号が第３番の要素は、存在数配列の格納位置番号が第２番までの要素の総和、つまり「１」となる。同様に、たとえば、累積数配列中、格納位置番号が第４番の要素は、存在数配列の格納位置番号が第３番までの要素の総和、つまり「１＋２＝３」となる。また、終了位置配列１６０５は、後述するレコードへのポインタ配列１６０６を指し示すものとなる。各要素は初期的には累積数配列のものと同じである。
【００４４】
このようにして開始位置配列や存在数配列が生成されると、順序付き集合中の各要素（レコード番号）を、格納位置番号の順で取り出す。レコード番号が示すポインタ配列中の要素から、値リスト１６０１中の項目値が特定される。値リスト中の項目値が特定されると、当該項目値が配置された格納位置番号の、終了位置配列中の要素が特定される。この要素が、レコードへのポインタ配列中の値となる。また、終了位置配列中の関連した要素がインクリメントされる。
【００４５】
たとえば、順序付き配列中、格納位置番号第０番のレコード番号は「０」であるから、ポインタ配列１６０２において、格納位置番号「０」が指定される（矢印１６１０参照）。当該格納位置番号に対応するポインタ値は「５」であり、終了位置配列中の第５番の要素「３」が、格納位置番号第０番の要素となる（符号１６１１、１６１２参照）。また、終了位置配列中の第５番の要素がインクリメントされて「４」となる（矢印１６１３参照）。このような処理を繰り返すことにより、レコードへのポインタ配列が作られる。
【００４６】
レコードへのポインタ配列を利用すれば、図１７（ａ）に示すように、レコード番号が配置された順序付き集合を変換することができる。このようにして、変換後の順序付き集合を利用して、当該格納位置番号の順に、変換後の順序付き集合中に格納されたレコード番号に基づいて、情報ブロック中の値リストへのポインタ配列および値リスト中の要素を特定することにより、図１７（ｂ）に示す、球団名でソートされたビューを得ることができる。
このようにして、存在数配列等の生成（図１０のステップ１００４）が終了した後、マスタ側に関する累計数配列が生成される（ステップ１００５）。ここでは、後述するマスタ側のレコード番号に対応して、スレーブ側のレコードが幾つあるかを示すレコード数リスト、および、レコード数を累計数化したマスタ側累計数配列が生成される。
【００４７】
より詳細には、マスタ側の順序付き集合（図１８の符号１８０１参照）中の配置されたレコード番号が示すポインタ配列（符号１８０２参照）中のポインタ値を参照して、スレーブ側の存在数配列（符号１８１０参照）中、当該ポインタ値が指し示す格納位置番号の値が特定される。次いで、特定された存在数配列中の要素（存在数）が、レコード数リスト（符号１８０３参照）中の、当初のレコード番号が配置されていた格納位置番号に関連する位置に配置される。
【００４８】
たとえば、図１８の例において、順序付き集合１８０１の第０番の要素（レコード番号）は「０」であるため、ポインタ配列１８０２において、格納位置番号が「０」に対応するポインタ値「３」が取り出される（矢印１８１１参照）。次いで、存在数配列１８１０において、格納位置番号「３」に対応して収容されている要素「２」が取り出され（矢印１８１２参照）、これがレコード数リスト１８０３の第「０」番の要素として格納される（矢印１８１３参照）。このような処理を繰り返すことにより、マスタ側の順序付き集合１８１１中のレコード番号ごとに、当該レコード番号に対応する、スレーブ側のレコード数を知ることができる。
【００４９】
存在数配列が生成されると、これに基づくマスタ側の累計数配列が生成される。より詳細には、レコード数リストの要素の累積数を、累計数配列中、格納位置が一つ下（つまり、格納位置番号が一つ大きなもの）の要素とすればよい。たとえば、累計数配列中、第１番の位置には、レコード数リストの格納位置番号第０番の要素である「２」が収容される。第２番の位置には、レコード数リストの格納位置番号第１番までの累積数である「２＋１＝３」が収容される。このようにして、マスタ側の累積数配列１８０４を得ることができる。なお、マスタ側の累積数配列１８０４には、レコード数リスト１８０３中のレコード数の総和が付加されている（符号１８０５参照）。レコード数の総和は、ジョイン後のビューのレコードの総数となる。ジョイン後のレコードの番号を、「ジョインテーブルのレコード番号」と称する。
【００５０】
このようにして生成された配列を利用して、ジョインされたビューを得るための処理が実行される。図１９は、ビューを得るために、ジョインテーブルのレコード番号に基づき、マスタ側のレコード番号およびスレーブ側のレコード番号を特定する処理を示すフローチャートである。なお、図１９に示す処理において、図１０のステップ１００４およびステップ１００５にて作られた種々の配列のうち、マスタ側の累計数配列、および、マスタ側のレコード番号を収容した順序付き集合を、それぞれ、第１の射影配列および第２の射影配列と称する。また、スレーブ側の累計数配列、および、スレーブ側のレコード番号を収容した順序付き集合を、それぞれ、第３の射影配列および第４の射影配列と称する。
【００５１】
ジョインテーブルのレコード番号を収容した配列を指定するための格納位置番号が初期化された後に（ステップ１９０１）、格納位置番号が指し示すレコード番号が取り出され（ステップ１９０２）、第１の射影配列中で、その要素が、取り出されたレコード番号以下であるような最大位置が特定される（ステップ１９０３）。
たとえば、図２０に示すように、ジョインテーブルのレコード番号を収容した配列２００１から、初期的には、第０番のレコード番号「０」が取り出され、第１の射影配列２００２中、レコード番号「０」以下である要素は、「０」であるため、上記最大位置は、当該「０」が収容されている第０番の位置となる（矢印２０１１参照）。また、図２１に示すように、ジョインテーブルのレコード番号を収容した配列２１０１から、第１番のレコード番号「１」が取り出され、第１の射影配列２１０２中、レコード番号「１」以下である要素は、「０」であるため、最大位置は、当該「０」が収容されている第０番の位置となる（矢印２１１１参照）。
【００５２】
これに対して、図２２において、ジョインテーブルのレコード番号を収容した配列２２０１から、第２番のレコード番号「２」が取り出された場合には、第１の射影配列２２０２中、レコード番号「２」以下である要素は「２」となる。したがって、最大位置は、第１の射影配列において「２」が収容されている第１番の位置となる（矢印２２１１参照）。
【００５３】
次いで、ステップ１９０３にて取得された位置に対応する、第２の射影配列中の値が取得される（ステップ１９０４）。この第２の射影配列中の値が、マスタ側のレコード番号となる。マスタ側のレコード番号が得られると、そのレコード番号を利用して、スレーブ側のポインタ配列中、当該レコード番号が指し示す位置のポインタ値が取り出される（ステップ１９０６）。次いで、第３の射影配列中、そのポインタ値が指し示す位置の値が取得される（ステップ１９０７）。
たとえば、図２０において、ステップ１９０３にて取得された位置（第０番）に対応する、第２の射影配列中の値「０」が、マスタ側のレコード番号となる（矢印２０１２参照）。また、当該マスタ側のレコード番号「０」が示す位置に配置された、ポインタ配列中のポインタ値「３」が取り出される（矢印２０１３参照）。
【００５４】
第３の射影配列中、ステップ１９０７にて取得されたポインタ値が指し示す位置に配置された値が取得される（ステップ１９０８）。図２０の例では、ポインタ値「３」に対応する位置の、第３の射影配列中の値「１」が取得される（矢印２０１４参照）。このようにして、取得された種々の値を利用して、スレーブ側のレコード番号を算出する。
【００５５】
より詳細には、ステップ１９０２で取得されたジョインテーブルのレコード番号（第１の値）、ステップ１９０３にて特定された位置に対応する、第１の射影配列中の値（第２の値）、および、ステップ１９０７にて取得された、第３の射影配列中の値（第３の値）が利用される。ここでは、
（第１の値−第２の値）＋第３の値
を算出することで、スレーブ側の順序付き集合の格納位置番号を得ている（ステップ１９０８）。ここで得られた値を格納位置番号として、順序付き集合の位置を指定することで、スレーブ側のレコード番号を取得することが可能となる（ステップ１９０９）。図２０に示す例では、第１の値として「０」（矢印２０２０参照）、第２の値として「０」（矢印２０２１参照）、第３の値として「１」（矢印２０２２参照）が得られるため、スレーブ側の順序付き集合を指定する格納位置番号は、「（０−０）＋１＝１」となる（矢印２０２３参照）。これにより、上記格納位置番号に対応したレコード番号「４」を取得することができる（矢印２０２４参照）。
【００５６】
スレーブ側における順序付き集合の格納位置番号は、以下の理由により、上記（第１の値−第２の値）＋第３の値となる。スレーブ側の集合は、ジョインのキー項目（例では、「球団」）でソートされている。したがって、第３の値は、指定されたジョインのキー項目の、スレーブ側の集合内の開始アドレスを表している。その一方、ジョインのキー項目に対して、スレーブ側の要素（つまりレコード）は複数し得る。（第１の値−第２の値）は、この複数存在する要素のうちの何番目の要素であるかを表している。つまり、第３の値＋（第１の値−第２の値）により、開始アドレス＋開始アドレスから何番目の要素であるかを知ることができる。
【００５７】
図２０〜図２４は、ジョインテーブルのレコード番号を格納した配列のうち、格納位置番号が「０」〜「４」までの各々における、マスタ側およびスレーブ側のレコード番号の取得を説明するための図である。図２０〜図２４に示すように、それぞれ、ジョインテーブルのレコード番号に基づいて、マスタ側のレコード番号およびスレーブ側のレコード番号が取得されるのが理解できるであろう。
図１９のステップ１９０２〜ステップ１９０９の処理が、ジョインテーブルのレコード番号を収容した配列の全ての格納位置番号について実行され、これにより、図２５に示すように、ジョインテーブルのレコード番号を収容した配列２５００に対応した、マスタ側のレコード番号を収容した配列（マスタ側レコード番号配列：符号２５０１参照）、および、スレーブ側のレコード番号を収容した配列（スレーブ側レコード番号配列：符号２６０２参照）が得られる。
【００５８】
配列２５００から順次、レコード番号を取り出して、マスタ側レコード番号配列中のレコード番号を特定することにより、「会員名」、「地域」および「ファン」という項目の項目値からなる、ジョインされたマスタ側テーブル２６１０が取得できる。その一方、スレーブ側レコード番号配列中のレコード番号を特定することにより、「球団」、「試合日」および「野球場」という項目の項目値からなる、ジョインされたスレーブ側テーブル２５１１が取得できる。
このように本実施の形態においては、キーとなる項目に関する値リストを共通化した後、スレーブ側をキー項目にてソートし、その過程で得られる配列を利用して、マスタ側およびスレーブ側のレコード番号の格納位置を示す数値（アドレス）を算出している。したがって、著しく高速な処理により、二つの表形式データのジョインおよびジョインされた表形式データを用いたビューの生成が可能となる。
【００５９】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、前記実施の形態においては、マスタ側とスレーブ側のジョインされた項目値が同一となるようなビューを作成されていたが、これに限定されるものではなく、ソート順で、スレーブ側の項目値がマスタ側の項目値以下、或いは、項目値未満であるような、スレーブ側の項目値を含むビューを作成することも可能である。これ以降、前者を「等号のジョイン」、後者を「不等号のジョイン」と称する。
【００６０】
図２６は、不等号のジョインにおいて提示されるビューの例を示す図である。図２６の例においては、マスタ側に関する会員の好きな球団（ファン）と、スレーブ側に関する球団との間で、マスタ側の項目値≧スレーブ側の項目値という関係が成り立つようになっている。ここで、上記不等号は、ソート順（上記例ではアルファベット順）で、マスタ側の項目値と同じ、または、項目値より小さい、つまり、前方に位置するような項目値がスレーブ側には現れることを意味している。たとえば、マスタ側の項目「ファン」が「Ｇ−ｔｅａｍ」であるような会員については、それと同値であるスレーブのレコードや、それより小さな項目値である「Ｄ−ｔｅａｍ」をもつようなレコードが列挙される。
【００６１】
このようなジョインを実現するための処理につき、以下に簡単に説明を加える。ここでも、一部を除き、図１０に示す処理と同じ処理が実行される。図１０のステップ１００１〜１００４は、上記不等号のジョインに関しても実行されるが、ステップ１００５におけるレコード数リストの生成およびこれ基づくマスタ側累計数配列の生成が、等号のジョインに関する処理と異なる。
図２７は、不等号のジョインにおけるレコード数リスト等の生成を説明する図である。これは、等号のジョインにおける図１８に対応する。不等号のジョインにおいては、ポインタ配列中のポインタ値に「１」を加えた値が指し示す、累計数配列２７１０中の要素が特定される。なお、不等号のジョインにおいては、スレーブ側の累計数配列２７１０において、その末尾に最終的な累計数を示す値が付加されている（符号２７１１参照）。上記特定された要素が、レコード数リストの所定の位置に格納される（符号２７１２参照）。次いで、レコード数リスト２７１２に基づいて、マスタ側の累計数配列２７１３が生成される。また、マスタ側累計数配列の末尾の要素（符号２７１４参照）は、レコード数リスト２７１２中のレコード数の総和となる。これらを利用してジョインされたビューを得る処理は、図１９に示すものと同様である。
【００６２】
また、前記実施の形態においては、一般のコンピュータシステム１０内に、所定のプログラムを読み込み、当該プログラムを実行することにより、複数の表形式データのジョインおよびジョインされた表形式データに関する処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データベース処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアおよび／またはハードウェアによって実現される場合を包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【００６３】
【発明の効果】
本発明によれば、複数の表形式データを、所望のように高速にジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データを極めて高速に提示方法を提供することが可能となる。また、本発明によれば、ジョインの処理に際しても、そのために大量のデータ領域を必要としない方法を提供することが可能となる。
【図面の簡単な説明】
【図１】  図１は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。
【図２】  図２は、本実施の形態にて用いる情報ブロックを示す図である。
【図３】  図３は、表形式データの例、および、当該表形式データに基づく情報ブロックの例を示す図である。
【図４】  図４は、表形式データの他の例、および、当該表形式データに基づく情報ブロックの他の例を示す図である。
【図５】  図５は、単一項目に関する検索手法を示すフローチャートである。
【図６】  図６は、ある項目に関するレコード番号と項目値との関係、および、完成した本実施の形態にかかる情報ブロックを示す図である。
【図７】  図７は、本実施の形態にかかるコンパイル処理の概略を示すフローチャートである。
【図８】  図８は、表形式データの元データと、これから抽出されたデータとを説明するための図である。
【図９】  図９は、図８に示す表形式データに基づく、ジョインされた表（ビュー）を示す図である。
【図１０】  図１０は、本実施の形態にかかる表形式データの結合処理および提示処理の概略を示すフローチャートである。
【図１１】  図１１は、本実施の形態にかかる表形式データの構造を示す図である。
【図１２】  図１２は、本実施の形態にかかる表形式データの構造を示す図である。
【図１３】  図１３は、本実施の形態にかかる共有化処理をより詳細に示すフローチャートである。
【図１４】  図１４は、本実施の形態にかかる共有化処理の際の情報ブロックを説明するための図である。
【図１５】  図１５は、本実施の形態にかかる共有化処理の際の情報ブロックを説明するための図である。
【図１６】  図１６は、本実施の形態においてスレーブ側表形式データのソートを説明するための図である。
【図１７】  図１７は、本実施の形態においてスレーブ側表形式データのソートを説明するための図である。
【図１８】  図１８は、本実施の形態において表（ビュー）作成に必要なマスタ側表形式データの配列を説明するための図である。
【図１９】  図１９は、本実施の形態において、ビューを得るために、ジョインテーブルのレコード番号に基づき、マスタ側のレコード番号およびスレーブ側のレコード番号を特定する処理を示すフローチャートである。
【図２０】  図２０は、本実施の形態においてマスタ側およびスレーブ側のレコード番号が特定される様子を示す図である。
【図２１】  図２１は、本実施の形態においてマスタ側およびスレーブ側のレコード番号が特定される様子を示す図である。
【図２２】  図２２は、本実施の形態においてマスタ側およびスレーブ側のレコード番号が特定される様子を示す図である。
【図２３】  図２３は、本実施の形態においてマスタ側およびスレーブ側のレコード番号が特定される様子を示す図である。
【図２４】  図２４は、本実施の形態においてマスタ側およびスレーブ側のレコード番号が特定される様子を示す図である。
【図２５】  図２５は、本実施の形態において、得られたレコード番号に基づき、ジョインされたビューの取得を説明するための図である。
【図２６】  図２６は、他の実施の形態にかかる不等号のジョインにおいて提示されるビューの例を示す図である。
【図２７】  図２７は、他の実施の形態にかかる不等号のジョインにおけるレコード数リスト等の生成を説明する図である。
【符号の説明】
１０        コンピュータシステム
１２        ＣＰＵ
１４        ＲＡＭ
１６        ＲＯＭ
１８        固定記憶装置
２０        ＣＤ−ＲＯＭドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
【図１】
0003860992.tif 000002
【図２】
0003860992.tif 000003
【図３】
0003860992.tif 000004
【図４】
0003860992.tif 000005
【図５】
0003860992.tif 000006
【図６】
0003860992.tif 000007
【図７】
0003860992.tif 000008
【図８】
0003860992.tif 000009
【図９】
0003860992.tif 000010
【図１０】
0003860992.tif 000011
【図１１】
0003860992.tif 000012
【図１２】
0003860992.tif 000013
【図１３】
0003860992.tif 000014
【図１４】
0003860992.tif 000015
【図１５】
0003860992.tif 000016
【図１６】
0003860992.tif 000017
【図１７】
0003860992.tif 000018
【図１８】
0003860992.tif 000019
【図１９】
0003860992.tif 000020
【図２０】
0003860992.tif 000021
【図２１】
0003860992.tif 000022
【図２２】
0003860992.tif 000023
【図２３】
0003860992.tif 000024
【図２４】
0003860992.tif 000025
【図２５】
0003860992.tif 000026
【図２６】
0003860992.tif 000027
【図２７】
0003860992.tif 000028