(57)【特許請求の範囲】
【請求項１】
表形式データの項目毎の情報ブロックが値リストおよび値リストへのポインタ配列を含み、値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、前記値リストおよびポインタ配列をメモリに格納したコンピュータにおいて、前記情報ブロックの集合体として構築された第１および第２の２つの表形式データを結合する方法であって、
前記コンピュータのＣＰＵが、前記２つの表形式データの間で、値リストを共有化すべき項目の値リストについて、前記共有化すべき値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化するステップと、
前記ＣＰＵが、当該値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するステップと、
前記ＣＰＵが、前記２つの表形式データのうちの第１の表形式データのレコード番号が前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成するステップと、を備え、
前記２つの表形式データを結合することを特徴とする方法。
【請求項２】
表形式データの項目毎の情報ブロックが値リストおよび値リストへのポインタ配列を含み、値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、前記値リストおよびポインタ配列をメモリに格納したコンピュータにおいて、前記情報ブロックの集合体として構築された第１および第２の２つの表形式データを結合する方法を実行可能なプログラムを記憶した記憶媒体であって、
前記コンピュータに、
前記コンピュータのＣＰＵが、前記２つの表形式データの間で、値リストを共有化すべき項目の値リストについて、前記共有化すべき値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化するステップと、
前記ＣＰＵが、当該値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するステップと、
前記ＣＰＵが、前記２つの表形式データのうちの第１の表形式データのレコード番号が前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成するステップと、を実行させ、
前記２つの表形式データを結合することを特徴とするプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【請求項３】
表形式データの項目毎に情報ブロックを構成する値リストおよび値リストへのポインタ配列をメモリに格納した装置において、前記情報ブロックの集合体として構築された第１および第２の２つの表形式データを結合する装置であって、
値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、
前記装置が、
前記２つの表形式データの間で、値リストを共有化すべき項目の値リストについて、当該値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化する値リスト共有化手段と、
前記値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するポインタ値更新手段と、
前記２つの表形式データのうちの第１の表形式データのレコード番号が、前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成する手段と、を備え、
前記２つの表形式データを結合することを特徴とする装置。
【発明の詳細な説明】
【０００１】
【産業上の技術分野】
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理するデータ処理方法およびデータ処理装置に関し、より詳細には、リレーショナルデータベースにおいて、複数の表形式データを結合して、所望のレコード等の項目値を検索、集計し、および、ソートする方法および装置に関する。
【０００２】
【従来の技術】
データベースは種々の用途に用いられているが、中規模ないし大規模システムにおいては、論理的な矛盾が排除できるリレーショナルデータベース（ＲＤＢ）の使用が主流となっている。たとえば、ＲＤＢは飛行機の座席予約等のシステムに利用されている。この場合、キー項目を指定することにより、（多くの場合１件の）ターゲットを迅速に検索することもでき、或いは、予約の確定、キャンセル或いは変更などを行うことができる。また、各便の座席数はせいぜい数百であるため、特定の航空便の空席数を求めることも可能である。
ところが、このＲＤＢを用いて、年度ごと、曜日ごと、月ごと、路線ごと、時間帯ごと或いは機種ごとなどで、特定の演算（たとえば、搭乗率の計算）をなそうとすると、非常に時間がかかることが知られている。すなわち、ＲＤＢは、処理を矛盾なく実現することに優れている反面、相当数のレコードを検索、集計或いはソートする性能が低い。
【０００３】
そこで、近年、検索や集計のために、ＲＤＢとは別に、データウェアハウス（ＤＷＨ）と称するデータベースをシステムに構築することが一般化している。すなわち、エンドユーザの特定の目的に合わせて、特定のデータ形式およびデータ項目名を備えた極めて大規模なデータベースを構築し、エンドユーザはこれを用いて特定の検索や集計をなすことができるようになっている。
【０００４】
【発明が解決しようとする課題】
しかしながら、ＲＤＢのほかに、他のＤＷＨを設けること、すなわち、複数のデータベースを設けることは、本来、データを集中管理できるためにデータベース、特に、ＲＤＢが考案されたという本来あるべき姿とは乖離しており、これに由来して、たとえば、以下に述べるような様々な問題点が生じている。
（１）ＤＷＨは固定的なものであるため、予めＤＷＨに設けられた項目以外の検索や集計をすることが困難である。
（２）ＲＤＢのほかに、固定的なＤＷＨを設けるため、データ容量が極めて大きくなるほか、ＲＤＢの更新等に対応することができない。
本発明は、複数の表形式データを、所望のように高速にジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データを極めて高速に提示方法を提供することを目的とする。
【０００５】
【課題を解決するための手段】
本発明の目的は、各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合する方法であって、各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成し、複数の表形式データの間で、等価な項目を見出し、前記等価な項目に関する情報ブロックを特定し、前記複数の表形式データの各々において、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストの項目値を同値にし、前記値リストを同値にする際に、その項目値が追加された情報ブロックにおいて、関連するポインタ配列のポインタ値を追加し、前記複数の表形式データにおいて、特定の項目に関する情報ブロックに含まれる値リストを等価とすることにより、表形式データを結合することを特徴とする結合方法により達成される。
【０００６】
本発明によれば、実際の項目値が格納された値リストと、当該値リストの項目値を指定するためのポインタ値を格納したポインタ配列とにより、ある項目に関する情報ブロックを構成し、種々の項目にかかる情報ブロックの集合体として表形式データを表現している。したがって、複数の表形式データを結合（すなわちジョイン）する際に、表形式データ間の情報ブロック中の値リストに着目し、値リストの項目値を同値にして、これに応答して、関連するポインタ配列を変更している。したがって、煩雑な処理を要することなく、値リストの項目値の追加およびこれにともなうポインタ値の追加をなすこと（すなわち、値リストを共有化すること）により、二つの表形式データを結合することが可能となる。
【０００７】
本発明の好ましい実施態様においては、等価となった値リストを備えた情報ブロックに関して、単一の値リストのみが現実に保持される。すなわち共有化された値リストに関しては、何れか一方を保持していれば足りる。これにより、必要なメモリ容量を削減することが可能となる。また、ジョインのために多大な処理を必要としないため、表形式データの結合（ジョイン）を極めて高速に実現することが可能となる。
【０００８】
本発明の目的は、上記結合方法により、特定の項目に関する情報ブロックに含まれる値リストが等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、ポインタ配列のポインタ値が重複しないキー項目に関する情報ブロックを特定し、当該情報ブロックを備えた表形式データを、サブ表形式データと決定し、何れかの情報ブロックにおいて、値リストの項目値の順に、前記サブ表形式データのレコード番号を特定する第２のポインタ配列を生成し、前記複数の表形式データに含まれる情報ブロックのうち、提示すべき項目に関する情報ブロックを特定し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式データ以外の表形式データであるメイン表形式データを構成する情報ブロックに関して、所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応した前記第２のポインタ配列中のサブ表形式に関するレコード番号を特定し、前記サブ表形式データを構成する情報ブロックにおいて、当該サブ表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示することを特徴とする結合された表形式データの提示方法によっても達成される。
【０００９】
本発明によれば、たとえば、複数の表形式データに関して、ユーザにより特定の項目が選択され、その提示が求められた場合に、複数の表形式データを結合し、サブ表形式データにおいては、メイン表形式データのレコード番号から、サブ表形式データのレコード番号を特定できるような（すなわち、逆引きができるような）第２のポインタ配列を生成する。メイン表形式データに関しては、メイン表形式データのレコード番号から、ポインタ配列中のポインタ値を特定し、さらに、当該ポインタ値により指示された項目値を特定することにより、所望の項目値を求めることができる。その一方、サブ表形式データに関しては、メイン表形式データのレコード番号から、サブ表形式データのレコード番号を特定し、次いで、ポインタ配列中のポインタ値および当該ポインタ値により指示された項目値を順次特定することにより、所望の項目値を求めることができる。したがって、複数の表形式データから、所望の項目を選択して、ジョインした表（ビュー）を高速に実現することが可能となる。
【００１０】
上記サブ表形式データのレコード番号を特定するために、前記キー項目に関する情報ブロックに、当該情報ブロックに含まれる値リストの項目値の順に、レコード番号を指示するためのポインタ値が格納された第２のポインタ配列を生成しても良い。この場合には、提示すべき項目に関する情報ブロックのうち、サブ表形式データを構成する情報ブロックにおいて、前記所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、対応する第２のポインタ配列中のサブ表形式データに関するレコード番号を特定し、当該サブ表形式データを構成する情報ブロックにおいて、当該第２のポインタ配列中のレコード番号に対応した、ポインタ配列中のポインタ値を参照することにより、所定の項目値を取得する。この手法はより具体的には第１の実施の形態にて説明がなされている。
【００１１】
或いは、前記メイン表形式データを構成する情報ブロックであって、その値リストが等価になった情報ブロック中に、値リストの項目値の順に、前記サブ表形式データのレコード番号を指示するためのポインタ値が格納された第２のポインタ配列を生成し、前記所定のレコード番号に対応した、前記第２のポインタ配列中のサブ表形式データに関するレコード番号を特定し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式データを構成する情報ブロックにおいて、前記サブ表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得するように構成しても良いし（第２の実施の形態参照）、前記サブ表形式データを構成する情報ブロックのうち、少なくとも提示すべき項目に関する情報ブロックに、値リストの項目値の順に、当該サブ表形式データのレコード番号を指示するためのポインタ値が格納された第２のポインタ配列を生成し、前記提示すべき項目に関する情報ブロックのうち、サブ表形式データを構成する情報ブロックにおいて、前記所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、対応する第２のポインタ配列中のサブ表形式データに関するレコード番号を特定し、当該サブ表形式データを構成する情報ブロックにおいて、当該第２のポインタ配列中のレコード番号に対応した、ポインタ配列中のポインタ値を参照することにより、所定の項目値を取得するように構成しても良い（第３の実施の形態参照）。
【００１２】
本発明の別の実施態様においては、さらに、所定の順序にしたがって、その項目値をソートすべき情報ブロックに、メイン表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納する存在数配列を生成し、前記存在数配列にしたがって、前記メイン表形式データに関するレコード番号を格納する位置の初期値を示す位置指示配列を生成し、前記メイン表形式データのレコード番号を、対応するポインタ値により示される位置の位置指示配列にしたがって配置するとともに、当該位置指示配列の対応する値をインクリメントすることにより、メイン表形式データのレコード番号がソートされて格納されたソート配列を生成し、前記ソート配列に格納されたレコード番号の順に、必要な項目値を取得して、当該キー項目に基づいてソートされた項目値を提示するように構成されている。この実施の形態によれば、メイン表形式データのレコード番号が、ソートされた形態で格納されたようなソート配列を生成し、当該ソート配列に格納されたレコード番号に基づいて、ポインタ値および項目値を特定するため、煩雑な処理をなすことなく、所望の項目についてソートしたような表（ビュー）を求めることができる。
【００１３】
たとえば、ソートすべき項目がキー項目である場合には、キー項目に関する情報ブロックに、メイン表形式データを構成する情報ブロックであって当該情報ブロックと等価な値リストを有する情報ブロックのポインタ配列中のポインタ値の個数を示す存在数を、当該キー項目の情報ブロック中の値リストの順にしたがって格納する存在数配列を生成する。それ以外の場合には、キー項目に関する情報ブロックと等価な、メイン表形式データを構成する情報ブロック中のポインタ配列と、前記第２のポインタ配列とを用いて、前記項目値をソートすべき情報ブロックに、メイン表形式データに関するレコードの数を示す存在数を格納する存在数配列を生成すれば良い。
【００１４】
本発明のさらに別の実施態様においては、結合された表形式データを提示する方法は、特定の項目に関する情報ブロックに含まれる値リストが等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記従表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックに、従表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納する第１の存在数配列を生成し、前記第１の存在数配列にしたがって、前記従表形式データのレコード番号をソートした状態で配置する初期位置を決定する第１の位置指示配列を生成し、前記従表形式データのレコード番号を、対応するポインタ値により示される位置の第１の位置指示配列にしたがって配置するとともに、当該位置指示配列の対応する値をインクリメントすることにより、従表形式データのレコード番号がソートされて格納された第１のソート配列を生成し、前記位置指示配列の初期値および最終値と、前記主表形式データに関してその値リストが等価となった情報ブロック中のポインタ配列とを参照して、前記主表形式データに関する他の情報ブロックのポインタ配列の重複度を算出し、当該重複度にしたがってポインタ配列を拡張し、前記位置指示配列の初期値および最終値と、前記ソート配列とを参照して、前記従表形式データに関する情報ブロックのポインタ配列の重複度を参照して、当該重複度にしたがってポインタ配列を拡張し、当該拡張されたポインタ配列に基づき、必要な項目値を取得して提示するように構成されている。これについては、第４の実施の形態においてより具体的な説明が加えられている。
【００１５】
この実施態様は、表形式データに関してキー項目を見出すことができない場合に適用され得る。この場合には、デフォルトのソード順が反映される項目を特定して、この項目を含む表形式データを主表形式データ、それ以外の表形式データを従表形式データとする。本実施態様によれば、ポインタ配列の重複度にしたがって、これを拡張し、拡張されたポインタ配列にしたがって、項目値を特定している。したがって、ある項目値が重複して用いられている表形式データをジョインする場合であっても、煩雑な処理の必要なく、ソート配列やポインタ配列の操作のみで、適切に表（ビュー）を作成することが可能となる。
主表形式データのメモリ容量を削減するためには、前記重複度に基づき、主表形式データのレコード番号が重複して配置された第１の変換配列を生成し、前記主表形式データに関して、前記第１の変換配列にしたがって情報ブロックの値リストへのポインタ配列を参照して、値リストの項目値を取り出すのが好ましい。また、従表形式データのメモリ容量を削減するためには、前記主表形式データのレコード番号と、関連する前記重複度に基づき、従表形式データのレコード番号が重複して配置された第２の変換配列を生成し、前記従表形式データに関して、前記第２の変換配列にしたがって情報ブロックの値リストへのポインタ配列を参照して、値リストの項目値を取り出すのが好ましい（第５の実施の形態参照）。
【００１６】
本発明のさらに別の実施形態において、結合された表形式データを提示する方法は、特定の二以上の項目に関する情報ブロックに含まれる値リストが、それぞれ等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される項目を含む表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記主表形式データに関して、二以上の等価となった値リストの積集合である仮想の値リストへのポインタ配列を生成し、前記従表形式データに関して、前記仮想の値リストへの第２のポインタ配列を生成し、前記仮想の値リストの項目値の順に、前記従表形式データのレコード番号を特定する第３のポインタ配列を作成し、前記複数の表形式データに含まれる情報ブロックのうち、提示すべき項目に関する情報ブロックを特定し、前記提示すべき項目に関する情報ブロックのうち、表形式データを構成する情報ブロックに関して、所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応したレコード番号を参照して、対応する前記仮想の値リストへのポインタ配列中のポインタ値に基づき、前記第３のポインタ配列中の前記従表形式データのレコード番号を特定し、前記従表形式データを構成する情報ブロックにおいて、当該従表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示するように構成されている。
【００１７】
この実施態様は、複数の表形式データにおいて、複数項目をジョインして、所定の表（ビュー）の提示が求められた場合に適用することができる。この実施態様によれば、現実には作成されない、複数項目の項目値の積集合である値リストに対するポインタ配列を作成している。したがって、莫大な容量となることが予想される積集合である値リストを実際に作成することなく、ポインタ配列を生成するのみで、極めて高速に、複数項目をジョインした状態の表（ビュー）を得ることができる。
たとえば、ジョインすべき項目が二つの場合には、一方の情報ブロックに関する、等価となった値リストの項目値の数がｐ、かつ、他方の情報ブロックに関する、等価となった値リストの項目値の数がｑとすると、
前記主表形式データに関する前記仮想の値リストへのポインタ値Ｐｍｉ（０≦ｊ≦ｐ−１）が、
Ｐｍｉ＝Ｐｍ１ｉ＊ｑ＋Ｐｍ２ｉ
（ただし、Ｐｍ１ｉは、一方の情報ブロックに関する値リストの項目値、Ｐｍ２ｉは、他方の情報ブロックに関する値リストの項目値）
と表わされ、かつ、
前記従表形式データに関する前記仮想の値リストへのポインタ値Ｐｓｊ（０≦ｊ≦ｐ−１）が、
Ｐｓｊ＝Ｐｓ１ｊ＊ｑ＋Ｐｓ２ｊ
（ただし、Ｐｓ１ｉは、一方の情報ブロックに関する値リストの項目値、Ｐｓ２ｉは、他方の情報ブロックに関する値リストの項目値）
と表わされる。
【００１８】
複数の表形式データにおける複数の項目を結合（ジョイン）して、所望の項目の項目値を提示するためのさらに他の方法は、特定の二以上の項目に関する情報ブロックに含まれる値リストが、それぞれ等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される項目を含む表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記主表形式データおよび主表形式レコードのそれぞれに関して、デフォルトのソート順が反映される項目以外の項目にて、前記レコード番号をソートし、最後に上記ソート順が反映される項目にて前記レコード番号をソートすることにより、第１のソート配列を生成し、前記第１のソート配列中のレコード番号を参照して、前記二以上の項目に関する二以上の値リストの、対応する項目値をそれぞれ取り出し、二以上の項目値の多次元配列からなる項目値を備えた多次元値リスト中の対応する位置に、取り出された項目値の多次元配列を格納し、前記多次元値リストの多次元配列を特定するためのポインタ配列の、前記レコード番号に対応する位置に、前記レコード番号を格納し、何れかの情報ブロックにおいて、値リストの項目値の順に、前記従表形式データのレコード番号を特定する第２のポインタ配列を生成し、前記提示すべき項目に関する情報ブロックのうち、前記主表形式データを構成する情報ブロックに関して、所定のレコード番号に対応した多次元値リストを特定するためのポインタ配列のポインタ値、および／または、他のポインタ配列のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記従表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応したレコード番号を参照して、対応する前記第２のポインタ配列中の従表形式に関するレコード番号を特定し、前記サブ表形式データを構成する情報ブロックにおいて、当該従表形式データに関するレコード番号に対応した、多次元値リストを特定するためのポインタ配列のポインタ値、および／または、ポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示するように構成されている。これに関しては、第７の実施の形態により具体的な説明がなされている。
この実施態様によれば、仮想の値リストへのポインタ配列を設ける必要がないため、必要なメモリ容量をさらに削減することが可能となる。
また、本発明の目的は、上記方法を実現するプログラムを記憶した記憶媒体、上記方法のステップを実現する手段からなる表形式データの結合装置、表形式データの提示装置によっても実現される。
【００１９】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。図１は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図１に示すように、このコンピュータシステム１０は、通常のものと同様の構成であり、プログラムを実行することにより、システム全体および個々の構成部分を制御するＣＰＵ１２、ワークデータなどを記憶するＲＡＭ(Random Access Memory)１４、プログラム等を記憶するＲＯＭ(Read Only Memory)１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。
本実施の形態にかかる表形式データを結合（ジョイン）するプログラム、結合した表形式データから所定の項目の表（ビュー）を作成するプログラム、検索プログラム、集計プログラムおよびソートプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。
【００２０】
また、本実施の形態においては、検索、集計およびソートを高速に実現するために、後述するように所定のデータ形式の情報ブロックを生成する必要がある。この情報ブロック生成プログラムも同様に、ＣＤ−ＲＯＭ１９に収容され、ＲＯＭ１６に記憶され、或いは、外部記憶媒体１８に記憶されても良い。或いは、これらプログラムは、ネットワーク（図示せず）を介して、外部から供給されても良いことはいうまでもない。また、本実施の形態において、情報ブロック生成プログラムにて生成されたデータ（情報ブロック）は、ＲＡＭ１４に記憶され、或いは、外部記憶媒体１８の所定の領域に記憶される。
【００２１】
次に、本発明の前提となるデータ形式や、検索、集計およびソートの原理につき説明を加える。本発明者は、昨年、処理の超高速化を図るため、特定のデータ形式を有する表形式データの構築と、検索、集計およびソート方法とを考案した（特願平１０−２２７２７８号）。本発明においても、基本的には、この出願に基づいて、表形式データを所定の情報ブロックの集合体として構築し、これを用いて検索、集計およびソートを実現している。
図２は、本実施の形態にて用いる情報ブロックを示す図である。図２に示すように、情報ブロック１００は、値リスト１１０と値リストへのポインタ配列１２０とを含んでいる。値リスト１１０は、表形式データの各項目に対して、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値１１１が格納されたテーブルである。値リストへのポインタ配列１２０は、表形式データのある列（すなわち項目）の項目値番号、つまり値リスト１１０へのポインタが表形式データのレコード番号順に格納された配列である。
【００２２】
上記値リストへのポインタ配列１２０と値リスト１１０とを組み合わせることにより、あるレコード番号が与えられたときに、所定の項目に関する値リストへのポインタ配列１２０からそのレコード番号に対応して格納された項目値番号を取り出し、次いで、値リスト１１０内でその項目値番号に対応して格納された項目値を取り出すことにより、レコード番号から項目値を得ることができる。したがって、従来のデータ表と同様に、レコード番号（行）と項目（列）という座標を用いてすべてのデータ（項目値）を参照することができる。
たとえば、図３（ａ）に示す表形式データを考える。この例では、顧客ＩＤ、顧客名、電話番号という項目に種々の項目値が与えられている。本実施の形態においては、このような表形式データを、図３（ｂ）ないし（ｄ）に示す形式の情報ブロックとして保持している。たとえば、図３（ｂ）において、ポインタ配列１２０−１は、顧客ＩＤを示す項目値を格納した値リスト１１０−１に関連付けられている。すなわち、先頭レコード（レコード番号“０”）のポインタ配列のポインタ値は０であり、これに対応して、顧客ＩＤを示す項目値“１”が得られる。図３（ｂ）において、ポインタ配列１２０−２は、顧客名を示す項目値を格納した値リスト１１０−２に関連付けられている。たとえば先頭レコード（レコード番号“０”）のポインタ配列におけるポインタ値は“５”であり、これに対応して、顧客名を示す項目値“山田  ○男”が得られる。図３（ｃ）においても、同様に、ポインタ配列１２０−３が、電話番号を示す項目値を格納した値リスト１１０−３に関連付けられていることが理解できよう。また、各値リストにおいては、項目値が順序付けられて（この例では昇順）いることが理解できよう。
【００２３】
さらに、本実施の形態においては、情報ブロック１００の値管理テーブルは、値リスト１１０のほか、検索や集計のために用いる分類番号フラグ配列、項目値に対応するポインタを格納すべきメモリ空間の先頭アドレスを示す開始位置配列、および、存在数配列が含まれている。分類番号フラグ配列の各フラグ、および、存在数配列の各存在数は、項目値の各々に対応付けられている。分類番号フラグのフラグ値は、通常 “０”であり、検索や集計の際に見出すべき項目値に対応して“１”にセットされる。また、存在数は、その項目値を有するレコードの個数に対応する。なお、開始位置は、対応するポインタ値よりも小さなポインタ値に対応する存在数を加算したものに対応するため、必ずしも設ける必要はない。
図４（ａ）は、表形式データの他の例を示す図、図４（ｂ）および（ｃ）は、それぞれ、「性別」および「年令」に関する情報ブロックを示す図である。図４（ｂ）に示すように、性別に関する情報ブロック２００−１の値管理テーブル２１０−１には、ポインタ配列２２０の各ポインタ値に対応する項目値（「男性」および「女性」）と、各項目値に対応する分類番号、開始位置および存在数が示されている。たとえば、ポインタ値が“０”（つまり、値リストの項目値が「男性」）であるようなレコードの数は６３２５６４個であり、その一方、ポインタ値が“１”（つまり、値リストの項目値が「女性」）であるようなレコードの数は３６７４２６個となっている。また、各項目値に対応する開始位置は、後述するレコードへのポインタ配列２３０−１の先頭アドレスを示している。図４（ｃ）においても、同様のことが理解できよう。
【００２４】
このようなデータ構造を有する情報ブロックを用いた検索の一例および情報ブロックの生成処理につき、以下に説明する。図５は、単一項目に関する検索手法を示すフローチャートである。この処理は、ＣＰＵ１２（図１参照）が所定の検索プログラムを実行することにより実現される。この例では、「年令」の項目値が１６歳または１９歳であるレコードが検索される。まず、表形式データに関する情報ブロックのうち、図４（ｃ）に示す「年令」に関する情報ブロック２００−２が特定される（ステップ５０１）。
【００２５】
次いで、特定された情報ブロック（以下、「特定情報ブロック」と称する。）の値リスト２１０−２において、項目値が上記検索条件に合致するもの（１６歳または１９歳）に対応する行の分類番号が“１”にセットされる（ステップ５０２）。本例の場合には、項目値番号“０”および項目値番号“３”に対応する行の分類番号が１にセットされる。次いで、分類番号が“１”にセットされている行に対応した開始位置および存在数が取得される（ステップ５０３）。これら情報をポインタ取り出し情報と称する。レコードへのポインタ配列において、ステップ５０３にて取得されたポインタ取り出し情報に基づき、検索条件に合致したレコードへのポインタを示すレコード番号が取り出される（ステップ５０４）。本例においては、項目値番号“０”に対応したレコードのポインタは、レコードへのポインタ配列の開始位置“０”すなわち先頭から、４５８９８個目までの領域に格納され、その一方、項目値番号“３”に対応したレコードのポインタは、レコードへのポインタ配列の２３８３１３７番目から１８９６５３個分の領域に格納されていることがわかる。最後に、後の処理にて利用できるようにするために、取り出されたレコード番号の配列が、結果集合として作成され、これが保持される（ステップ５０５）。
また、集計およびソートも、分類番号、開始位置および存在数を利用することにより実現することができる。
【００２６】
次に、上述したような検索処理等に利用するための情報ブロックの生成処理につき説明を加える。図６は、表形式データに基づき情報ブロックを作成するための処理を説明するフローチャートである。まず、システム１０は、表形式の原データを取得し、これを項目別のものに分解する（ステップ６０１）。この原データは、たとえば、図７（ａ）に示すものでも良いし、或いは、図７（ｂ）に示すものでも良い。これら原データは、外部から供給されるものであっても良いし、或いは、固定記憶媒体１８に記憶されたものであっても良い。以下に述べるステップ６０２ないしステップ６０４からなる処理ブロック６１０は、ある一つの項目に関する情報ブロックの生成を示す。したがって、複数の項目に関する情報ブロックを生成する場合には、項目の数だけ処理ブロック６１０に対応する処理が実行される。以下、「性別」に関する項目の情報ブロックを例にとって説明を加える。
【００２７】
まず、「性別」に関する項目の情報ブロック用の領域が、たとえば、ＲＡＭ１４中に確保される（ステップ６０２）。次いで、この確保された領域中に、値管理テーブルが生成される。より詳細には、まず、値管理テーブルが初期化される。次いで、原データのうち、「性別」に関するデータを先頭から末尾まで操作することにより、どのような項目名が、それぞれいくつ存在するかが見出される。本例では、「女性」および「男性」という項目名が、それぞれ、３６７４３６個および６３２５６４個だけあることが見出される。これにより、値リストに、「女性」および「男性」という項目値がセットされ、また、存在数配列にも所定の数がセットされる。その後に、項目値が所定の基準にしたがってソートされる。ソートの際には、項目数の並び替えにしたがって存在数も並びかえられる。次いで、開始位置配列の値が決定される。これは、ソートにより自己より上位に位置する存在数を累算することにより求められる。また、開始位置配列の値を、対応する分類番号配列の値に割り当てる。この値は次のステップにて用いられる。このようにして値管理テーブルが生成された後に、レコードへのポインタ配列が生成される。このポインタ配列の領域の大きさは、存在数の総和に対応する。
このようにして、所定の項目に関する情報ブロックを作り出すことが可能となる。この情報ブロックの生成を予め行っておき、生成された情報ブロックを用いて検索、集計およびソートの処理が実行される。
【００２８】
さて、２つの表形式データを組み合わせて（ＪＯＩＮ（ジョイン）処理の実行）、一つの表（ビュー）を作成する処理、および、作成したものから所望の項目を検索、集計およびソートする処理につき以下に説明する。
たとえば、図８に示すような２つの表形式データを考える。図８（ａ）においては、顧客ＩＤごとに、顧客名、電話番号、SVC−ID（サービスＩＤ）が対応付けられており、その一方、図８（ｂ）においては、サービスＩＤごとに年会費が対応付けられている。顧客ＩＤが“１”である「山田  ○男」のSVC−IDは“Ｄ”であり、サービステーブルのサービスＩＤの“Ｄ”項を参照すると、彼の年会費が“12,000”円であることが理解できる。同様に、他の顧客についても、SVC−IDおよびサービスＩＤを参照することにより、その年会費を知ることができる。顧客ＩＤ、顧客名および年会費を表形式のビューにて表わしたものが図８（ｃ）である。図８（ｃ）から理解できるように、このビューでは、重複値をもつ項目である「SVC−ID」（たとえば、「SVC−ID」では、項目値“Ｃ”や“Ｄ”が複数出現している。）から、重複値を持たないいわゆるキー項目である「サービスＩＤ」を経由して請求額が表示されている。重複値を持つ項目（＝「多」）から重複値を持たない項目（＝「１」）を経由するものであることを考慮して、これを「多：１」のタイプと称する。また、本明細書において、上記「多」の側の表形式データを、メイン表形式データ、「１」の側の表形式データをサブ表形式データとも称する。
【００２９】
「多：１」のタイプである２つの表形式データをジョインする手法につき以下に説明する。本実施の形態においては、図６に示す手法により、予め、図８に示す２つの表形式のデータから、図９に示すような情報ブロックが生成されている。なお、図９（ａ）ないし（ｄ）は、図８（ａ）に示す顧客テーブルに関する情報ブロックであり、図９（ｅ）および（ｆ）は、図８（ｂ）に示すサービステーブルに関する情報ブロックである。また、これらの図においては、値リストのみを図示している。
【００３０】
顧客テーブルにおいては、Ｂ、ＣおよびＤの「SVC−ID」のみが用いられているのに対して、サービステーブルにおいては、Ａ、Ｂ、ＣおよびＤのサービスＩＤが用いられている。したがって、「SVC−ID」の情報ブロック内の値リストと、「サービスＩＤ」の情報ブロック内の値リストとを共通化する必要がある。図１０は、本実施の形態にかかるＣＰＵ１２の機能ブロックダイヤグラム、図１１は、値リストの共有化のための処理を示すフローチャートである。図１０に示すように、ＣＰＵ１２は、情報ブロックを参照して、共有化すべき値リストを見出すテーブル抽出部３２と、値リストを共有化する値リスト変換部３４と、値リストへのポインタ配列の各ポインタ値を変換するとともに、必要な他のポインタ配列を生成するポインタ処理部３６と、ＲＡＭ１４等とのデータの授受を行う情報ブロック管理部３８とを備えている。
図１１に示すように、まず、情報ブロック管理部３８が、双方の表形式データに関する情報ブロックをＲＡＭ１４から取り出す（ステップ１１０１）。次いで、テーブル抽出部３２が、情報ブロックの値リストを参照して、共有化すべき値リストを抽出する（ステップ１１０２）。たとえば、図８および図９を示す例では、顧客テーブルに関して、「SVC−ID」の情報ブロックの値リストが抽出され、サービステーブルに関して、「サービスＩＤ」の情報リストの値ブロックが抽出される。
【００３１】
その後に、値リスト変換部３４が、共有化すべき２つの値リストのうち、項目値等の変換が必要なものを選択し（ステップ１１０３）、他方の値リストを参照して、項目値の挿入を行う。図８および図９に示す例では、重複値を持つ項目である「SVC−ID」に関する値リストの項目値の変換が必要となる。値リスト変換部３４は、キー項目である「サービスＩＤ」に関する値リストの項目値のうち、「SVC−ID」の値リストに含まれない項目値を見出す。次いで、値リスト変換部３４は、所定の順序にしたがって、「SVC−ID」に関する値リストに、見出された項目値を挿入する（ステップ１１０４）。その一方、値リストの項目値の挿入にしたがって、値リストへのポインタ値を含むポインタ配列を変更する必要がある。したがって、ポインタ処理部３６は、値リストの変換にしたがって、項目値の変換がなされた値リストに対応するポインタ配列のポインタ値を生成する（ステップ１１０５）。図１２は、図８および図９に示す例に関して、ステップ１１０４およびステップ１１０５にて実行される処理を説明する図である。値リストの項目値の挿入、および、ポインタ配列中のポインタ値の変更をなすべき「SVC−ID」の情報ブロックにおいて、値リストの項目値「Ａ」が挿入される。この実施の形態では昇順にて項目値が配列されているため、項目値「Ａ」は先頭の行に挿入される。先頭の行に新たに項目値が作られたため、ポインタ配列中のポインタ値には、それぞれ“１”が加算される。上記例では、先頭に一つの項目値が挿入されているが、複数の項目値が任意の位置に挿入されても良いことは言うまでもない。このばあいに、ポインタ値は、先頭から自己の位置までの間に挿入された項目値の数だけ、その値を増大させれば良い。
【００３２】
このようにして、値リストの共有化が終了した後に、２つの表形式データがジョインしたようなビューを生成するため、あるいは検索、集計およびソート処理を高速に実行可能にするために、サービステーブルに関する情報ブロックに所定の処理が施される。ポインタ処理部３６は、他方のテーブル（すなわち、値リストやポインタ配列の変更を行っていないテーブル）の値リストから、レコード番号を指示するようなポインタ配列（レコード番号へのポインタ配列）を生成する（ステップ１１０６）。このレコード番号へのポインタ配列は、ジョインされた表（ビュー）にて表示すべき項目のうち、他方のテーブルにおいて、値リストの共有化がなされなかったものを含む情報ブロック中に生成される。
【００３３】
より詳細には、まず、ポインタ処理部３６は、値リストへのポインタ配列と同じ大きさの配列を用意し、値リストへのポインタ配列の先頭からポインタ値をスキャンし、“ｉ”番目のポインタ値が“ｊ”である場合に、用意した配列において、“ｊ”番目の要素に値“ｉ”を格納するような処理を実行する。このようにして、レコード番号へのポインタが生成される。情報ブロック管理部３８は、その項目値等が変更された情報ブロックや、新たなポインタ配列が加えられた情報ブロックを、ＲＡＭ１４の所定の領域に記憶する（ステップ１１０７）。
なお、上述した共有化の処理では、２つのテーブルの値リストが共通の意味合いを持つため、何れかの値リストのみを保持すれば良いことは言うまでもない。
このようにして、所定の値リストを共有化、すなわち、２つの表形式データの双方に関して、値リストの持つ意味合いを同一にした後に、所望の項目を取り出したビューを作成する「ビュー作成処理」、検索処理、集計処理、或いは、ソート処理が実行される。
【００３４】
ビュー作成処理につき、以下に説明する。図１３は、ビュー作成処理を示すフローチャート、図１４は、具体的に、「顧客ＩＤ」、「顧客名」および「年会費」に関するビューを表示する処理を説明するための図である。
ここで、図１３（ａ）は、ポインタ配列に基づき、値リスト中に関する項目値を表示する場合の処理を示し、図１３（ｂ）は、共有化した値リストに基づき、さらに他の値リストに関する項目値を表示すべき場合の処理を示す。たとえば、図１４に示す「顧客ＩＤ」の表示に関する処理を述べると、まず、レコード番号が初期化される（ステップ１３０１）。次いで、「顧客ＩＤ」の情報ブロックにおいて、値リストへのポインタ配列中、レコード番号“０”に対応する行のポインタ値“０”が参照され（ステップ１３０２）、対応する項目値“１”が読み出される（ステップ１３０３）。したがって、顧客ＩＤの一番上側の項目が“１”となる（ステップ１３０４）。全てのレコード番号について、上記ステップ１３０２〜１３０４の処理が繰り返される（ステップ１３０５、１３０６参照）。「顧客名」の表示についても同様の処理が行われる。より詳細には、レコード番号“０”に対応する行に位置するポインタ値“５”が参照され、対応する項目値“山田  ○男”が読み出される。これにより、表（ビュー）において、先頭の項目が“山田  ○男”となる。
【００３５】
その一方、共有化された値リストに関する場合、すなわち、「SVC−ID」および「サービスＩＤ」のポインタ等を利用する場合には、図１３（ｂ）に示すように、レコード番号が初期化され（ステップ１３１１）、レコード番号“０”に対応する行の値リストへのポインタ値“３”が参照される（ステップ１３１２）。次いで、共有化された情報ブロック（この場合には、「サービスＩＤ」の情報ブロック）に関して先に生成したレコード番号へのポインタ配列（図１１のステップ１１０６参照）において、ポインタ値“３”により示された行に位置するポインタ値が参照される（ステップ１３１４）。ステップ１３１４にて参照されるポインタ値は、値リストからレコード番号へ「逆引き」するものであり、このポインタ値に対応する行に位置する、他の情報ブロックの値リストへのポインタを経ることにより、必要な項目値を得ることが可能となる。
上記例では、レコード番号へのポインタ値“３”に基づき、「年会費」の情報ブロックにおいて、レコード番号“３”に対応する行の値リストへのポインタ配列中のポインタ値“０”が見出され、対応する項目値“１２，０００”を取り出すことができる。したがって、表において一番上側の項目が“１２，０００”となる。全てのレコード番号について、上記ステップ１３１２〜１３１５の処理を繰り返すことにより（ステップ１３１６、１３１７参照）、年会費の欄の項目をすべて得ることができる。このようにして、図８（ｃ）に示すような表（請求額ビュー）を得ることが可能となる。
【００３６】
次に、必要な項目に関してソートした表を得る処理につき説明を加える。図１５は、この処理の内容を示すフローチャート、図１６は、具体的に、「顧客ＩＤ」、「顧客名」および「年会費」に関するビューであって、かつ、「サービスＩＤ」に基づきソートされたビューを表示する処理を説明するための図である。この処理は、存在数配列等の生成（ステップ１５０１〜ステップ１５０７）と、ソート配列の生成（ステップ１５０８〜ステップ１５１３）とから構成されている。まず、レコード番号が初期化され（ステップ１５０１）、値リストの行数（項目数）と同じ行数を有する存在数配列が確保される（ステップ１５０２）。次いで、あるレコード番号について、値リストのポインタ配列が参照されて（ステップ１５０３）、ポインタ値に対応する行の存在数配列中の値（存在数）がインクリメントされる（ステップ１５０４）。たとえば、図１６（ａ）において、「SVC−ID」の情報ブロックに関して、レコード番号“０”に対応する値リストへのポインタ配列中のポインタ値は“３”であり、したがって、存在数配列中の対応する行（４行目）の値（存在数）が“０”から“１”となる。或いは、レコード番号“２”に対応する値リストへのポインタ配列中のポインタ値は“１”であり、これにより、存在数配列中の対応する行（２行目）の値が“０”から“１”となる。このようにして全てのレコード番号に対して、ステップ１５０３およびステップ１５０４に示す処理を施すことにより（ステップ１５０５およびステップ１５０６参照）、図１６（ａ）の符号１６０１に示すような存在数配列が作成される。
【００３７】
存在数配列が完成すると、これに基づいて、累計数配列、および、ソートによりレコード番号が位置すべきメモリ空間中の位置を示す開始位置配列が生成される（ステップ１５０７）。この累計数配列は、初期的な開始位置配列と等しいものであり、後述する種々の処理にて利用される。なお、本明細書において、累計数配列或いは初期的な開始位置配列を初期値を示す位置指示配列或いは初期的な位置指示配列とも称する。
より詳細には、存在数配列中のある存在数が位置する行に対応する位置にある累計数および開始位置は、当該存在数の位置する行より番号の小さな行（図１６では上側の行）にある存在数の総和となる。たとえば、第１行目の累計数および開始位置は“０”であり、第２行目の累計数および開始位置も、第１行目の存在数が“０”であるため、“０”となる。その一方、第３行目の累計数および開始位置は、第１行目の存在数が“０”、かつ、第２行目の存在数が“２”であるため、“（０＋２＝）２”となる。
【００３８】
このようにして、存在数配列、累計数配列および開始位置配列が作成されると、作られた開始位置配列を利用して、各レコード番号をソートされた位置に配列する処理が実行される。まず、レコード番号が初期化され（ステップ１５０８）、レコード番号を格納すべき配列が確保される（ステップ１５０９）と、あるレコード番号について、値リストのポインタ配列が参照される（ステップ１５１０）。次いで、開始位置配列において、ステップ１５１０にて得られたポインタ値が示す行の開始位置が調べられ、レコード番号配列において、得られた開始位置に対応する領域に、当該レコード番号が格納される（ステップ１５１１）。たとえば、図１６（ｂ）において、「SVC−ID」の情報ブロックにおいて、レコード番号“０”に対応する値リストへのポインタ配列中のポインタ値は“３”であるため、対応する開始位置（４行目の開始位置）が参照される。この値は“５”であるため、レコード番号配列において、“５”に対応する位置（すなわち６行目）に、レコード番号“０”が格納される。
レコード番号の格納が終了すると、参照された開始位置をインクリメントする（ステップ１５１２）。これは、次に、この開始位置が参照されたときに、レコード番号中の、レコード番号を格納すべき位置をインクリメントしておく必要があるからである。このような処理を、必要な全てのレコード番号について実行する（ステップ１５１２、１５１３参照）ことにより、ソートされたレコード番号配列を得ることが可能となる（図１７参照）。
【００３９】
ソート処理が終了すると、図１２に示す処理にて得られたレコード番号に対応する顧客ＩＤ、顧客名、年会費などの表示項目と、図１５により得られたソートされたレコード番号配列とに基づき、所望の項目にてソートされた表（ビュー）を得ることができる。図１８（ａ）は、このようにして得られた表（「サービスＩＤ」にてソートした請求額ビュー）を示す図である。たとえば、他の項目（たとえば「年会費」）にてソートする場合にも、同じ手法を用いて図１８（ｂ）に示すような表（「年会費」にてソートした請求額ビュー）を得られることが理解できよう。
このように、本実施の形態によれば、二つの表形式データにおいて、個々の表形式データを構成する情報ブロック中、共有化すべき値リストを見出し、当該値リストのもつ意味合いを共通にすることにより、二つの表形式データのジョインを実現することが可能となる。
【００４０】
次に、本発明の第２の実施の形態につき説明を加える。第１の実施の形態では、共有化した情報ブロックにおいて、まず、一方の情報ブロック（「多：１」における「多」の側の情報ブロック）の値リストへのポインタ値を参照し、次いで、このポインタ値により示される、他方の情報ブロック（「多：１」における「１」の側の情報ブロック）レコード番号へのポインタ値を参照し、さらに、レコード番号へのポインタ値が示すレコード番号に対応する値リストへのポインタ値を参照している。たとえば、図１４に示す例では、▲１▼「SVC−ID」の情報ブロック中の値リストへのポインタ配列、▲２▼「サービスＩＤ」の情報ブロック中のレコード番号へのポインタ配列、および、▲３▼「年会費」の情報ブロック中の値リストへのポインタ配列が用いられ、それぞれのポインタ値が順次参照されている。これに対して、第２の実施の形態では、一方の情報ブロック（「多：１」における「多」の側の情報ブロック）に、他方の情報ブロックのレコード番号へのポインタ配列を用意している。すなわち、上記▲１▼〜▲３▼のうち、▲１▼および▲２▼を統合したポインタ配列を、当該一方の情報ブロックに構築している。これにより、「多」の側の情報ブロックから、１側のレコード番号を特定することが可能となる。なお、第２の実施の形態において、情報処理装置１０の構成、実行される処理等は、以下に述べる点を除き、第１の実施の形態のものと同様である。
【００４１】
図１９は、値リストの共有化のための処理を説明するための図である。図１９（ａ）では、第１の実施の形態に関する顧客テーブルおよびサービステーブルに関する情報ブロックの一部を示し、図１９（ｂ）では、第２の実施の形態に関する情報ブロックの一部を示している。図１９から理解できるように、第１の実施の形態では、ポインタ処理部３６（図１０参照）は、「サービスＩＤ」の情報ブロックの側に、「年会費」の情報ブロック中の、値リストへのポインタ配列を参照するためのポインタ配列（レコード番号へのポインタ配列）を生成した。これに対して、第２の実施の形態においては、ポインタ処理部３６は、「SVC−ID」の情報ブロックの側に、最終的に参照したい情報ブロックである「年会費」の情報ブロックの値リストへのポインタ配列を参照するための、レコード番号へのポインタ配列を生成する。
より具体的には、第１の実施の形態において、共有化された値リストを含む情報ブロックのうち、「１」の側の情報ブロック（たとえば、図１９（ａ）においては「サービスＩＤ」の情報ブロック）に関して作成されたレコード番号へのポインタ配列と等価なものを仮想的に作成し、「多」の側の情報ブロックから、直接「１」の側のレコード番号を指し示すことができるようなポインタ配列を作れば良い。
【００４２】
なお、図１９（ｂ）に示す例では、「サービスＩＤ」の情報ブロックにおいて、レコード番号へのポインタ配列中のポインタ値が昇順で並んでいるため、「SVC−ID」の情報ブロックにおいて、値リストへのポインタ配列中のポインタ値と、レコード番号へのポインタ配列中のポインタ値とが一致しているが、必ずしも一致しないことは言うまでもない。
【００４３】
本実施の形態によれば、「多：１」における多の側の情報ブロックに、レコード番号へのポインタ配列を作成するため、第１の実施の形態と比較して、ポインタ配列のサイズが大きくなる。しかしながら、ビューを作成したり、ソートを実行する場合に、参照するポインタ配列の数を減少させることができ、これにより、処理をさらに高速化することが可能となる。
【００４４】
次に、本発明の第３の実施の形態につき説明を加える。この実施の形態においては、「多：１」における「１」の側で、最終的に項目値を表示すべき情報ブロック（図９に示す例では、「年会費」の情報ブロック）中に、ポインタ配列を設けている（図２０参照）。すなわち、第２の実施の形態では「多」の側の情報ブロックに設けられていた、レコード番号へのポインタ配列（図１９（ｂ）参照）が、表（ビュー）にて示すべき項目に関する「１」の側の情報ブロックに設けられている。
この実施の形態によれば、「多」の側のテーブルに関するレコード番号から、直接、「１」の側のテーブルに関するレコード番号を特定することができるため、さらに処理を高速化することが可能となる。
【００４５】
次に、本発明の第４の実施の形態につき説明を加える。第１ないし第３の実施の形態においては、重複値を持つ項目（＝「多」）から重複値を持たない項目（＝「１」）を経由するようなタイプ（「多：１」のタイプ）に関していたが、第４の実施の形態では、「多：多」のタイプにおいて、値リストを共有化する処理を実行している。
たとえば、図２１に示すような２つの表形式のデータを考える。図２１（ａ）においては、会員名と、会員が好きな野球チーム名が対応付けられており、図２１（ｂ）においては、球団名と試合日が対応付けられている。ここで、図２１（ａ）を参照すると、「田中」さんは、「Ａチーム」のファンであり、さらに、図２０（ｂ）を参照することにより、「Ａチーム」の試合は、「５／１０」および「５／１１」であることがわかる。また、「鈴木」さんも「Ａチーム」のファンであり、その試合が、「５／１０」および「５／１１」であることがわかる。
したがって、各会員が所望のチケットを示す表（チケット確認ビュー）は、図２１（ｃ）に示すようなものとなる。このビューでは、「ファン」ないし「球団名」という項目をジョインしているが、「ファン」という項目は重複値を持ち（つまり、「Ａチーム」という項目値が重複して出現し）、その一方、「球団」という項目も重複値を持っている（つまり、「Ａチーム」という項目値が重複して出現している）。重複値を持つ項目（＝「多」）から重複値を持つ項目（＝「多」）を経由するものであることを考慮して、このようなものを「多：多」のタイプと称する。
【００４６】
また、「多：多」のタイプでは、論理的には、２つのテーブル（図２１においては「野球愛好会会員テーブル」および「試合予定テーブル」）は対等であるが、ここでは、出力される表（ビュー）のデフォルトのソート順が反映されているテーブル（図２１においては「野球愛好会会員テーブル」）を「主テーブル」、他方のテーブルを「従テーブル」と称する。また、本明細書において、上記主テーブルを場合によっては主表形式データ、従テーブルを従表形式データと称することもある。第１ないし第３の実施の形態と同様に、第４の実施の形態においても、ＣＰＵ１２は、図１０に示すような構成を備え、ＣＰＵ１２により、図２２に示すような処理が実行される。
【００４７】
図２２において、値リスト共有化の処理（ステップ２２０１）は、図１１に示す処理に対応し、従テーブルに関する存在数配列等を生成する処理（ステップ２２０２）は、図１５に示す処理の前段（ステップ１５０１〜ステップ１５０７）に略対応し、かつ、従テーブルのソート配列を生成する処理（ステップ２２０３）は、図１５に示す処理の後段（ステップ１５０８〜ステップ１５１３）に略対応する。
ステップ２２０１においては、共有化すべき値リストが抽出され（図１１のステップ１１０２）、項目値の変換が必要なものが選択されると（ステップ１１０３）、値リスト中の必要な項目値が挿入される（図１１のステップ１１０４、並びに、図２３の符号２３０１および２３０２参照）。次いで、変換された値リストを含む情報ブロックにおける、値リストへのポインタ配列中のポインタ値が更新される（図１１のステップ１１０５、並びに、図２３の符号２３０３および２３０４参照）。図２３の例では、主テーブルの値リストおよび値リストへのポインタ配列の変換ないし更新が行われているが、必ずしも主テーブルに関する変換等のみが行われるものではなく、従テーブルに関する変換等や双方のテーブルに関する変換等が行われても良い。
【００４８】
次いで、ステップ２２０２において、従テーブルに関して、存在数配列（図示せず）、累計数配列（図示せず）および開始位置配列（図２４の符号２４０２参照）が生成される。ステップ２４０１が終了した状態では、累計数配列中のある行の値と、開始位置配列の対応する位置の値とは等しくなっている。従テーブルにおいて、共有された値リストと対応する存在数配列、開始位置配列ができた後に、従テーブルに関するソート配列が生成される（ステップ２２０３）。図２４では、「球団」の情報ブロックにおいて、レコード番号“０”に対応する値リストへのポインタ配列中のポインタ値は“２”であるため、対応する開始位置（開始位置配列の３行目）が参照され（図１５のステップ１５１０参照）、この値“３”にしたがって、ソート配列（レコード番号配列）の対応する位置（すなわち４行目）に、レコード番号“０”が配置される（図１５のステップ１５１１参照）。また、参照された開始位置にある値がインクリメントされ、“３”から“４”に変化する。
【００４９】
従テーブルに関する各レコード番号が、ソート配列（レコード番号配列）の所定の位置に配置された（図２４の符号２４０１参照）後に、主テーブルの値リストへのポインタ配列を新たに生成する。これは、本実施の形態のような「多：多」のタイプでは、主テーブルの側の情報ブロック中の項目値が複数回出現するため、これに対応できるようにするためのものである。
より詳細には、図２５に示すように、レコード番号の初期化（ステップ２５０１）の後、あるレコード番号に関して、共有化した値リストを含む情報ブロック内の値リストへのポインタ配列が見出され、レコード番号に対応する位置（行）のポインタ値が参照される（ステップ２５０２）。次いで、従テーブルのソート（ステップ２２０３参照）により作成された累計数配列および開始位置配列が見出され、ポインタ値が示す位置の開始位置と累計数との差が算出される（ステップ２５０３）。
【００５０】
この差は、従テーブルにおいて、共有化された値リストを含む情報ブロックの値リスト中の項目値が、主テーブルのあるレコード番号について、何回重複して現れるかを表わしている。したがって、ジョインした表（ビュー）において、本来主テーブル側にあった項目に関する情報ブロック中の値リストへのポインタ配列が、上記重複度を示す差に基づき拡張される（ステップ２５０４）。すなわち、あるレコード番号に関して、算出された差が“ｄ”であった場合には、新たに生成すべき値リストへのポインタ配列において、レコード番号に対応したポインタ値が“ｄ”個に増加する。
【００５１】
図２６において、たとえば、レコード番号“０”に関して、共有化した値リストを含む「ファン」の情報ブロック中の値リストへのポインタ配列が見出される。このポインタ配列において、レコード番号“０”に対応する位置（１行目）のポインタ値は“０”であるため、従テーブルの側にて共有化された値リストを含む「球団」の情報ブロック中の累計数配列および開始位置配列のうち、１行目の累計数および開始位置が参照され、開始位置と累計数との差（２−０＝２）が算出される。次いで、ジョインした表（ビュー）を作成するため、主テーブルにおける「会員名」の情報ブロックの値リストへのポインタ配列を拡張した新たなポインタ配列が作成される。なお、新たなポインタ配列を含む情報ブロック（「チケット・会員名」の情報ブロック中の値リストは、主テーブルの「会員名」の情報ブロックに含まれるものと同一である。これは、「会員名」の項目値自体は両者において共通だからである。このようにして、ポインタ値が“２”であるようなポインタが２つ作られることになる。
同様に、レコード番号“１”に関して、「ファン」の情報ブロック中の、レコード番号“１”に対応する位置（２行目）のポインタ値は２であるため、「球団」の情報ブロックにおいて、対応する位置（３行目）の累計数および開始位置が取り出され、後者から前者を引いた値（４−３＝１）が算出される。したがって、「チケット・会員名」の情報ブロックにおいて、先に作られたポインタに引き続いて、「会員名」の情報ブロックの対応する値“０”をもつポインタが作成される。
【００５２】
また、同じ手法により、主テーブルの「ファン」も表（ビュー）に表示すべき項目であるため、当該「ファン」の情報ブロックに関しても、「チケット・ファン」という新たな情報ブロックが生成される（図２９（ｂ）参照）。
このようにして主テーブル側の値リストのポインタ配列が生成された後に、従テーブル側の値リストのポインタ配列が生成される（ステップ２２０５）。これは、主テーブル側において項目値が複数回出現するのにしたがって、従テーブル側でも、これに対応した項目値を表示するための処理である。より詳細には、図２７に示すように、レコード番号の初期化（ステップ２７０１）の後に、ある主テーブル側のレコード番号に関して、当該主テーブル側において共有化された情報ブロックの値リストへのポインタ配列中、当該レコード番号に対応する位置（行）のポインタ値が参照される（ステップ２７０２）。次いで、従テーブルのソート（ステップ２２０３参照）により作成された累計数配列および開始位置配列とが見出され、上記ポインタ値にて示される位置（行）の累計数および開始位置が参照される（ステップ２７０３）。ここで、ソート後のレコード番号配列、つまり、ソート配列（図２４の符号２４０１参照）において、どの位置からどれだけの数のレコード番号が、主テーブルのレコード番号に関連しているかを、それぞれ、累計数および開始位置から見出すことができる。すなわち、上記位置は、累計数に示す位置に一致し、上記数は、開始位置と累計数との差に一致する。
【００５３】
したがって、ステップ２７０３にて参照した累計数および開始位置にしたがって、レコード番号が取り出され、ジョインした表（ビュー）にて表示すべき項目を備えた情報ブロック中の値リストへのポインタ配列において、各レコード番号が示すポインタ値が取り出され、新たなポインタ配列として順に並べられる（ステップ２７０３）。これにより、ジョインすべき情報ブロック群のうち、主テーブルに由来すべきものはその作成を完了したことになる。
【００５４】
図２８において、レコード番号“０”に関して、「ファン」の情報ブロックにある値リストのポインタ配列中の対応する位置（１行目）のポインタ値は“０”であるため、ソート処理を施した従テーブル側の情報ブロック（「球団」の情報ブロック）において、上記ポインタ値“０”に対応する位置（１行目）の累計数“０”および開始位置“２”が取り出される。これら値により、ソート後の集合（ソート配列）において“０”に対応する位置（１行目）から“２−０＝２”個のレコード番号“１”および“３”が、主テーブルのレコード番号“０”に関連する従テーブルのレコード番号であることが理解できる。したがって、従テーブル側で、表（ビュー）に表示すべき項目である「試合日」の情報ブロック中、レコード番号“１”および“３”の示す位置（２行目および４行目）のポインタ値“０”および“１”が順次取り出され、新たなポインタとして、ジョインした表（ビュー）用の情報ブロックである「チケット・試合日」の情報ブロックの値リストに配置される。なお、この「チケット・試合日」の情報ブロックに含まれる値リストは、従テーブルにおける「試合日」の情報ブロックに含まれる値リストと共通である。
【００５５】
同様に、レコード番号“１”に関して、「ファン」の情報ブロックにある値リストのポインタ配列中の対応する位置（２行目）のポインタ値は“２”であるため、「球団」の情報ブロックの、対応する位置（３行目）の累計数“３”および開始位置“４”が取り出される。これにより、ソート後の集合（ソート配列）において、累計数“２”に対応する位置（４行目）から“３−２＝１”個のレコード番号“０”が、主テーブルのレコード番号“１”に対応する従テーブルのレコード番号であることが理解できる。したがって、「試合日」の情報ブロック中の値リストへのポインタ配列において、レコード番号の示す位置（１行目）のポインタ値“０”が取り出され、これが、「チケット・試合日」の情報ブロックに含まれる値リストへのポインタとして、先に作られたポインタ（主テーブルのレコード番号“０”に対応して作られたポインタ）に引き続いて配置される。
【００５６】
図２９は、上述した処理により得られた、ジョインされた表（ビュー）の作成のための情報ブロックを示す図である。図２９（ａ）および（ｂ）は、主テーブル側の情報ブロックに基づき、図２５に示す処理によって作成されたものであり、図２９（ｃ）は、従テーブル側の情報ブロックに基づき、図２７に示す処理によって作成されたものである。上述した処理により、各情報ブロックにおいて、重複して現われる項目値に対応することができる。したがって、先頭（第１行目）から順に、値リストのポインタ値にて示される項目値を取り出すことにより、表（ビュー）に示すべき項目値を得ることが可能となる。これは、仮想的な配列（ビューのための拡張されたレコード番号配列）が作られ、各レコード番号ごとに対応するポインタ配列中のポインタ値に基づき、項目値が得られていることを意味している。
たとえば、先頭（第１行目）に関して、「チケット・会員」の情報ブロックのポインタ配列における対応するポインタ値は“２”であるため、項目値「田中」を表示すべきと決定することができ、「チケット・ファン」の情報ブロックのポインタ配列における対応するポインタ値は“０”であるため、項目値「Ａチーム」を表示すべきと決定することができ、かつ、「チケット・試合日」の情報ブロックのポインタ配列における対応するポインタ値は“０”であるため、項目値「５／１０」を表示すべきと決定することができる。
【００５７】
以上詳細に説明したように、本実施の形態においては、２つの表をジョインする場合に、出力される表（ビュー）のデフォルトのソート順が反映されているテーブルを「主テーブル」と定義し、他方の側のテーブルを「従テーブル」と定義している。また、双方のテーブルにおいて、情報ブロック中の値リストを共有化した後、従テーブル側の共有化された値リストを含む情報ブロックに基づき、従テーブル側のレコード番号をソートする。すなわち、従テーブルのリンク項目でソートする。次いで、主テーブルおよび従テーブルの双方に関して、「多：多」による重複を考慮したポインタ配列を、前記ソートにより得られた各項目値の累計数および最終的な開始位置に基いて、その重複度を知ることにより生成する。その後、重複を考慮した変換配列（仮想的なレコード番号）に基づき、対向する項目値を取り出すことにより、適切なビューを得ることが可能となる。
【００５８】
このように、表（ビュー）を作成するための情報ブロック（たとえば、図２９における「チケット・会員」、「チケット・ファン」および「チケット・試合日」の情報ブロック）を作成すれば、各情報ブロックに、図４（ｂ）、（ｃ）等を参照して説明した分類番号配列、存在数配列、開始位置配列を設けることにより、値リスト中の単一或いは複数項目を用いた検索、集計或いはソートを容易にできることは明らかである。この場合、図４等に関して説明したものでは、「レコード番号」を利用していたが、本実施の形態では、その代わりに上記「変換配列（仮想的なレコード番号）」を利用すれば良い。
【００５９】
次に、本発明の第５の実施の形態につき説明を加える。第５の実施の形態においても、「多：多」のタイプに関するジョインを実現しているが、主テーブルおよび／または従テーブルの側にて必要なメモリ容量を削減している。
まず、主テーブル側のメモリ容量の削減手法につき説明を加える。図２５のステップ２５０４および図２６を参照すると、従テーブルにおいて、共有化された値リストを含む情報ブロック中の項目値が、主テーブルのレコード番号について、何回重複して現われるかが算出され、これにより、主テーブル側で、表（ビュー）にて表わすべき項目の各情報ブロック内に、拡張された値リストへのポインタ配列が生成されている。ところで、従テーブル側における重複度にしたがって、ポインタが拡張されているため、その重複度は、主テーブル中の各レコード番号で共通である。たとえば、図２９（ａ）、（ｂ）に示すように、双方の情報ブロックにおける値リストへのポインタ配列中のポインタ値に着目すると、第１行目および第２行目のポインタ値が共通している。同様に、第４行目および第５行目も共通している。これらは、従テーブル側の重複度にしたがって共通しているものであり、したがって、主テーブル側に、上記重複度を考慮した配列を一つ設けておくことにより、各情報ブロック中の値リストへのポインタ配列を設ける必要がなくなる。
【００６０】
図３０は、主テーブル側に設けられた変換配列（仮想的なレコード番号）を説明するための図である。図３０から明らかなように、このような変換配列を作っておけば、主テーブル側に関して、図２９と同じようなビュー項目を得ることが可能となる。このような変換配列は、図２５のステップ２５０４の処理を若干変更することにより生成され得る。すなわち、主テーブルのレコード番号に対応するポインタ配列中のポインタ値を経ることにより、従テーブル側のソートされた情報ブロックの累計数配列および開始位置配列に到達することができる。ここで、上記レコード番号に対応する開始位置と累計数との差を算出することにより、レコード番号の重複度を得ることができる。そこで、重複数だけレコード番号を繰り返すような新たな変換配列を得ることが可能となる。
この実施の形態では、仮想的な情報ブロック（図３０の符号３００１、３００２参照）を、実際に作成する必要がないことが理解できよう。つまり、仮想的なレコードである変換配列のみを作ることにより、主テーブル側の情報ブロックの値リストへのポインタ配列を参照することにより、表（ビュー）作成のたびに、仮想的な情報ブロックの値リストへのポインタ配列を得ることが可能となる。したがって、主テーブル側において変換配列を作成し、これを保持するのみで、ジョインされた表（ビュー）の生成が可能となる。
【００６１】
次に、従テーブルのメモリ容量の削減手法につき説明を加える。従テーブル側でも、全ての項目に共通の変換配列を作成することにより、保持すべきメモリ容量の削減が可能となる。図３１は、従レコード側の変換配列作成の処理を示すフローチャートである。ステップ３１０１ないしステップ３１０３の処理は、図２７のステップ２７０１ないし２７０３の処理と類似している。より詳細には、主テーブル側のあるレコード番号に関して、主テーブル側において共有化された情報ブロックの値リストへのポインタ中、当該レコード番号に対応する位置（行）のポインタ値が参照され（ステップ３１０２）、次いで、このポインタ値に対応する累計数および開始位置が特定され、開始位置と累計数との差を算出することにより、ソート後のレコード番号の集合（ソート配列）において、対応するレコード番号が格納されている範囲が特定される（ステップ３１０３）。その後、特定されたレコード番号が、変換配列中に順次格納される。
【００６２】
図３２は、従テーブル側の変換配列作成の一例を示す図である。図３２（ａ）において、主テーブルのレコード番号“０”に対応して、共有化された「ファン」の情報ブロックの対応するポインタ値“０”が参照される。従ブロック側にてソート処理が施された「球団」の情報ブロックの対応する位置（１行目）の開始位置と累計数との差は“２”であるため、ソート後のレコード番号の集合（ソート配列）において、先頭から２つのレコード番号“１”および“３”が、上記主テーブルのレコード番号“０”に関連するものと理解できる。したがって、先頭から“１”および“３”という値が変換配列に格納される。同様に、図３２（ｂ）において、主テーブルのレコード番号“１”に対応して参照される「ファン」の情報ブロックのポインタ値“２”に基づき、「球団」の情報ブロックの対応する位置（３行目）の開始位置“４”および累計数“３”が特定される。これらの差が“１”であるため、ソート配列において、累計数“３”にて示される位置（４行目）から“１”つのレコード番号“０”が、主テーブルのレコード番号“１”に対応するレコード番号であることが理解できる。したがって、上記図３２（ａ）に示す変換配列において、主レコード番号“０”に関して格納された領域に引き続く領域に、レコード番号“０”が格納される。このような処理を繰り返すことにより、従テーブルにて共通の変換配列を得ることが可能となる。
図３３は、上述した処理により得られた従テーブル側の変換配列に基づき、仮想的な「試合日」の情報ブロックを得る手順を説明する図である。図３３に示すように、変換配列中の値から、値リストへのポインタ配列中の対応するポインタ値を経ることにより、ジョインされた表（ビュー）にて利用し得る仮想的な情報ブロックを作成することができる。主テーブルに関する説明と同様に、この仮想的な情報ブロックは、表（ビュー）の作成のたびに生成すれば良い。すなわち、変換配列のみを作っておけば、作成すべき表（ビュー）にしたがって、所望のように仮想的な情報ブロックを生成することが可能となる。
【００６３】
なお、主テーブル側の変換配列或いは従テーブル側の変換配列の何れか一方のみを作っておいても良い。たとえば、何れか一方のテーブル側のみに関して、メモリ容量が増大する場合には、一方のテーブル側に関してのみ、変換配列を作っても良い。無論、双方のテーブルに関する変換配列を作成しても良いことは言うまでもない。
また、この実施の形態でも、検索やソートは第４の実施の形態と同様の手法を用いることが可能である。
本実施の形態によれば、「多：多」のタイプにおいて、主テーブルおよび／または従テーブルに、変換配列を一つずつ保持することにより、新たに情報ブロックを作成することなくジョインした表（ビュー）を得ることが可能となる。したがって、必要なメモリ容量を削減することが可能となる。
【００６４】
次に、本発明の第６の実施の形態につき説明を加える。第４および第５の実施の形態においては、主テーブルおよび従テーブル中の、単一の項目（情報ブロック）に関して、その値リストを共有化したが、第６の実施の形態においては、複数の項目のジョインを実現している。
たとえば、図３４（ａ）および（ｂ）に示すような、２つのテーブル（人名テーブルおよび年齢テーブル）を考える。まず、人名テーブルに着目すると、「会員姓」という項目と「会員名」という項目とを見出すことができる。その一方、年齢テーブルに着目すると、「年・会員姓」という項目、「年・会員名」という項目および「年齢」という項目を見出すことができる。したがって、人名と年齢とを含む人名年齢ビューという表（ビュー）を作成するためには、「会員姓」と「年・会員姓」とをジョインするとともに、「会員名」と「年・会員名」とをジョインする必要がある（図３４（ｃ）参照）。なお、上記例では、人名テーブルを、項目の順序が維持されるもの（主テーブル）としている。
【００６５】
上述したような複数の項目をジョインした表（ビュー）を作成する手法につき以下に説明を加える。図３５は、第６の実施の形態にかかる処理を示すフローチャートである。図３５に示すように、まず、共有化すべきすべての値リストに関して、共有化の処理が実行される（ステップ３５０１）。各共有化は、図１１に示す処理に対応する。図３４に示す例では、人名テーブルにおける「会員姓」の情報ブロック中の値リストと、年令テーブルにおける「年・会員姓」の情報ブロック中の値リストとが共有化されるとともに、人名テーブルにおける「会員名」の情報ブロック中の値リストと、年令テーブルにおける「年・会員姓」の情報ブロック中の値リストとが共有化される（図３６参照）。
次いで、主テーブルに関して、ジョインした表（ビュー）を得る際に必要な項目を結合した仮想の値リストに対するポインタ配列が作成される（ステップ３５０２）。たとえば、共有化したテーブルが２つであり、その一方の値リストにおいて“ｐ”個の項目値が格納され、かつ、他方の値リストにおいて“ｑ”個の項目値が格納されている場合には、これらの組み合わせとして、“ｐ×ｑ”個の項目値を持つ仮想の値リストが考えられる。その一方、実際に作成される値リストへのポインタ配列には、主テーブルのレコード番号の数と、同じ数のポインタ値が格納される。
【００６６】
より詳細には、“ｉ”番のポインタ値Ｐｍｉ（０≦ｉ≦ｐ−１、ｐ：一方の値リストにおける項目値の数）は、以下のようにして算出される。ジョインすべき項目の一方の情報ブロックに関して、値リストへのポインタ配列中、“ｉ”番目のポインタ値をＰｍ１ｉ、他方の情報ブロックに関して、値リストへのポインタ配列中、“ｉ”番目のポインタ値をＰｍ２ｉとすると、（１）式により得られる。
ポインタ値Ｐｍｉ＝Ｐｍ１ｉ＊ｑ＋Ｐｍ２ｉ          ……（１）
（ｑ：他方の値リストにおける項目値の数）
また、従テーブルに関して、ジョインした表（ビュー）を得る際に必要な項目を結合した仮想の値リストに対するポインタ配列が作成される（ステップ３５０３）。このポインタ配列には、従テーブルのレコード番号の数と、同じ数のポインタ値が格納される。
“ｊ”番のポインタ値Ｐｓｊ（０≦ｊ≦ｐ−１、ｐ：一方の値リストにおける項目値の数）も、上記主テーブルに関するポインタ値と同様に算出される。すなわち、ジョインすべき項目の一方の情報ブロックに関して、値リストへのポインタ配列中、“ｊ”番目のポインタ値をＰｓ１ｊ、他方の情報ブロックに関して、値リストへのポインタ配列中、“ｊ”番目のポインタ値をＰｓ２ｊとすると、（２）式により得られる。
ポインタ値Ｐｓｊ＝Ｐｓ１ｊ＊ｑ＋Ｐｓ２ｊ        ……（２）
（ｑ：他方の値リストにおける項目値の数）
なお、ジョインすべき項目が３つの場合には、“ｉ”番のポインタ値Ｐｍｉ（０≦ｉ≦ｐ−１、ｐ：何れかの値リストにおける項目値の数）は、（３）式にしたがって求めることができる。
ポインタ値Ｐｍｉ＝Ｐｍ１ｉ＊ｑ＋Ｐｍ２ｉ＊ｒ＋Ｐｍ３ｉ    …（３）
なお、ここで、Ｐｍ１ｉは、ジョインすべき項目のうち、第１の情報ブロックに関して、値リストへのポインタ配列中、“ｉ”番目のポインタ値、Ｐｍ２ｉは、第２の情報ブロックに関して、値リストへのポインタ配列中、“ｉ”番目のポインタ値、Ｐｍ３ｉは、第３の情報ブロックに関して、“ｉ”番目のポインタ値であり、また、“ｑ”は、第２の値リストにおける項目値の数、“ｒ”は第３の値リストにおける項目値の数である。項目が４つ以上の場合にも同様の手法にて、ポインタ値を求めることができることは言うまでもない。
【００６７】
図３７は、上記人名テーブルおよび年令テーブルに関して、仮想の値リストに対する値リストへのポインタ配列を説明する図である。主テーブルである「人名テーブル」において、「会員姓」の情報ブロックに着目すると、値リストへのポインタ配列中、レコード番号“０”に対応する（すなわち１行目の）ポインタ値は“１”であり、その一方、「会員名」の情報ブロックに着目すると、値リストへのポインタ配列中、１行目のポインタ値は“０”である。したがって、仮想の値リストへのポインタ配列において、レコード番号“０”に対応する（すなわち１行目の）ポインタ値は、１＊ｑ（ここでは４）＋０＝４となる。また、レコード番号“１”に関して、仮想の値リストへのポインタ配列において、対応するポインタ値は、０＊４＋３＝３となる。
【００６８】
ここで、上記仮想の値リストへのポインタ配列におけるポインタ値の意味につき以下に説明する。上記例では、「人名テーブル」において、「会員姓」の情報ブロックに関するポインタ値の数ｐが３であり、「会員名」の情報ブロックに関するポインタ値の数ｑが４であった。
レコード番号“０”に着目すると、仮想の値リストへのポインタ配列におけるポインタ値は“４”である。この値は、“４／ｑ＝４／４＝１”であることから、「会員姓」の情報ブロックの値リストを参照すると、「鈴木」姓であることが理解できる。また、“４ｍｏｄ（ｑ）＝４ｍｏｄ４＝０”であることから、「会員名」の情報ブロックの値リストを参照すると、名前が「一郎」であることが理解できる。また、レコード番号“１”および“２”にそれぞれ着目すると、仮想の値リストへのポインタ配列におけるポインタ値が“３”および“５”である。これら値は、それぞれ、“３／ｑ＝３／４＝０”および“５／ｑ＝５／４＝１”であることから、「会員姓」の情報ブロックの値リストを参照すると、それぞれ、「佐藤」姓および「鈴木」姓であることが理解できる。また、それぞれ、“３ｍｏｄ（ｑ）＝３ｍｏｄ４＝３”および“５ｍｏｄ（ｑ）＝５ｍｏｄ４＝１”であることから、「会員名」の情報ブロックの値リストを参照すると、それぞれの名前が「ヨサク」および「大拙」であることが理解できる（図３８参照）。
従テーブルである「年齢テーブル」に関しても、同様の手法により、仮想の値リストへのポインタ配列中のポインタ値が得られている。得られたポインタ配列中のポインタ値の持つ意味も、主テーブルのものと同様である（図３９参照）。
【００６９】
ステップ３５０２およびステップ３５０３の処理により、複数項目を単一項目と同様に考えることができる。したがって、従テーブルの情報ブロックにおいて、仮想の値リストへのポインタ配列を用いて、レコード番号へのポインタ配列のポインタ値が生成されて、これらが所定の位置に格納される（ステップ３５０４）。この手法は、図１１のステップ１１０５にて用いたものと同様である。再度説明すると、まず、従テーブルの仮想的な情報ブロックにおいて、仮想の値リストと同じ大きさの配列が用意される。次いで、値リストへのポインタ配列の先頭からポインタ値をスキャンし、“ｉ”番目のポインタ値が“ｊ”である場合に、用意した配列において、“ｊ”番目の要素として、値“ｉ”を格納するような処理が実行される。
【００７０】
図４０においては、従テーブルである「年齢テーブル」に関して、共有化により得られた仮想的な値リストを含む「年・会員姓＋年・会員名」という仮想的な情報ブロック中の値リストへのポインタ配列（ステップ３５０３参照）に格納された各ポインタ値が参照される。たとえば、レコード番号“０”に対応するポインタ値は“３”であるため、レコード番号へのポインタ配列においては、対応する位置（４行目）にレコード番号“０”が格納される。
このようにしてレコード番号へのポインタ配列が作られた後に、ジョインした表（ビュー）が得られる（ステップ３５０５）。より詳細には、主テーブルのレコード番号により、主テーブルの情報ブロックにおいて、その項目値を取り出すべき値リストへのポインタ配列中のポインタ値が指定される。また、仮想の値リストを含む情報ブロックにおける値リストへのポインタ配列中のポインタ値を参照し、このポインタ値に基づき、ステップ３５０４にて得られたレコード番号へのポインタ値が特定される。このポインタ値により示されるレコード番号は、従テーブルのものであるため、表示すべき項目を備えた値リストを含む情報ブロックにおいて、対応する位置のポインタ値が見出され、これにより値リスト中の項目値が特定される。
【００７１】
図４１において、主テーブルのレコード番号（たとえば、“０”）から、主テーブルにおける「会員姓」の情報ブロック、および、「会員名」の情報ブロック中の値リストから、項目値（たとえば、“鈴木”および“一郎”）が得られる。その一方、上記レコード番号から、仮想の値リストを含む「会員姓＋会員名」の情報ブロックの値リストへのポインタ配列における対応するポインタ値（たとえば、“４”）が得られ、これにより、従テーブルのレコード番号（たとえば、“１”）が見出される。したがって、従テーブル中の表示すべき項目を有する「年齢」の情報ブロックの値リストから、対応する項目値（たとえば、“２２”）を取り出すことが可能となる。
【００７２】
本実施の形態によれば、ジョインすべき複数の項目を単一の項目として取り扱うために、複数の項目を結合した状態の情報ブロックを形成し、この情報ブロックにてとり得る仮想的な項目値に対応するポインタ配列を用いて、必要なレコード番号やポインタ値を特定している。また、上記仮想的な項目値を含む値リストを実際に作ることなく、この値リスト中の項目値を指定するためのポインタ配列のみを作成している。たとえば、２つの項目の項目値が、それぞれ、“ｐ”、“ｑ”であった場合には、“ｐ×ｑ”のサイズのレコード番号へのポインタ配列を作成すれば足りる。したがって、実際に結合された項目値を備えた莫大な量の値リストを作成することなく、複数項目のジョインを実現することができる。
【００７３】
次に、本発明の第７の実施の形態につき説明を加える。上記第６の実施の形態では、複数の項目を結合した状態の情報ブロックを作成し、この情報ブロックに関して、レコード番号へのポインタ配列を作成した。しかしながら、上記２つの項目の項目値を“ｐ”、“ｑ”とした場合、それぞれが非常に大きい場合（たとえば、１００，０００であった場合）に、レコード番号へのポインタ配列だけでも非常に大きなものとなってしまう。そこで、第７の実施の形態においては、仮想的な値リストへのポインタ配列を生成することなく、複数項目を多次元的（たとえば、二次元的）に記述した値リストを生成することにより、ポインタ配列を巨大化することを防止している。上記複数項目を記述した値リストの項目値を、本明細書において、場合によっては多次元配列と称する。
図４２は、第７の実施の形態にかかる処理を示すフローチャートである。この処理においても、図３５のものと同様に、まず、共有化処理が実行される（ステップ４２０１）。次いで、主テーブルに関して、ジョインすべき複数の項目のそれぞれについて、レコード番号がソートされる（ステップ４２０２）。これによりソートされたレコード番号が格納された配列（ソート配列或いはソート後レコード番号リスト）が生成される。
【００７４】
ジョインすべき項目が２つの場合には、２回のソート処理が実行される。たとえば、図４３に示すように、主テーブルに関して、「会員名」および「会員姓」の双方の項目をジョインすべき場合には、共有化の後に、レコード番号が、「会員名」の情報ブロック中の値リストの順序にしたがってソートされ、次いで、「会員姓」の情報ブロック中の値リストの順序にしたがってソートされる。
次いで、ソート配列中のレコード番号を参照することにより、複数項目を結合した値リスト、および、値リストへのポインタ配列が生成される（ステップ４２０３）。より詳細には、図４４に示すように、ソート配列の番号を初期化した（ステップ４４０１）後に、複数項目のうちの何れかに対応する情報ブロック中の値リストへのポインタ配列に着目し、ソート配列中に格納されたレコード番号が示す位置に格納されたポインタ値が特定される（ステップ４４０２）。上記複数項目の全てに対して、ステップ４４０２の処理が施されると（ステップ４４０３、４４０４参照）、新たな値リストにおいて、ソート配列の番号に対応する位置に、複数のポインタ値が、所定の順序で配置される（ステップ４４０５）。このようにして配置された複数のポインタ値（多次元配列であるポインタ値）が、値リスト中の項目値となる。
【００７５】
さらに、上記新たな値リストの項目値を指定するためのポインタ配列の対応するポインタ値が生成される（ステップ４４０６）。すなわち、上記値リストへのポインタ配列において、レコード番号に対応する位置に、項目値が格納された位置を示す値が格納される。これにより、レコード番号から、値リストへのポインタ配列中の対応するポインタ値が取り出され、かつ、多次元配列のポインタ値を項目値として格納している値リストにおいてポインタ値が示す項目値が取り出され得る。
上記ステップ４４０２〜ステップ４４０７の処理を全てのソート配列の番号に関して実行して（ステップ４４０７、４４０８参照）、処理が終了する。
【００７６】
図４５および図４６は、図４３に示すソート処理の後に、「会員姓＋会員名」という情報ブロックを作成した例を示す図である。図４５に示すように、ソート配列（ソート後レコード番号リスト）において先頭（第１番目）に格納されたレコード番号は“１”であるため、各情報ブロックの値リストへのポインタ配列において、対応する位置（２行目）のポインタ値が取り出され、このポインタ値“０”および“３”が決められた順序で、「会員姓＋会員名」の新たな情報ブロックの値リストにおいて、先頭の位置に二次元配列“０  ３”として格納される。また、当該値リストが格納されている位置が、値リストへのポインタ値として、ポインタ配列中のレコード番号が示す位置に配置される。ソート配列に格納された他のレコード番号についても、同様の手順で、二次元配列である項目値および値リストへのポインタ配列中のポインタ値が格納される。
従テーブルに関しても、ステップ４２０２およびステップ４２０３と同様の処理が実行される（ステップ４２０４、４２０５）。上述した例に関して、「年齢テーブル」の「年・会員姓＋年・会員名」の情報ブロックが生成され、必要な値リストへのポインタ配列および二次元配列の項目値を有する値リストが作られる（図４７参照）。
【００７７】
このようにして、主テーブルおよび従テーブルにおいて、複数項目を二次元配列の項目値にて表わしたような値リストが得られると、これら値リストを含む情報ブロック、および、表（ビュー）に示すべき項目に関する他の情報ブロックを用いて、図１１と同様な処理が実行される。すなわち、複数項目を二次元配列の項目値にて表わしたような値リストが共有化される（ステップ１１０１〜ステップ１１０５参照）。次いで、上記他の情報ブロック中の値リストの項目値を特定するために、レコード番号へのポインタ配列が生成される（ステップ１１０６）。このようにして、所定のポインタ配列や値リストの更新や生成をした後に、図１２に示す処理を実行して、項目値を取り出すことにより所望の表（ビュー）が作成される。
【００７８】
図４８は、第７の実施の形態において、図１２に示す処理による表（ビュー）の作成を説明するための図である。たとえば、レコード番号“０”に関して、複数項目を二次元配列の項目値にて表わした値リストを含む情報ブロック（「会員姓＋会員名」の情報ブロック）において、対応する値リストへのポインタ配列中のポインタ値は“０  ３”である。これら値のうち前者（すなわち“０”）は、項目値“鈴木”を意味しており、後者（すなわち“３”）は、項目値“一郎”を意味している。したがって、表（ビュー）において、先頭の行に“鈴木”および“一郎”が表示される。その一方、レコード番号“０”について、他のテーブルへのレコード番号へのポインタ配列において、対応する値は“１”である。したがって、「年齢」の情報ブロック中、値リストへのポインタ配列の対応する位置のポインタ値“０”が見出される。したがって、ポインタ値が示す位置の項目値“２２”が、先頭の行に表示される。他のレコード番号についても、同様な手順で、項目値が得られることは言うまでもない。
本実施の形態によれば、必要なメモリ容量を削減しつつ、複数項目のジョインを実現することが可能となる。
【００７９】
次に、本発明の実施の形態にかかる手法を用いて、表形式データをジョインし、かつ、ジョインされた表形式データのうち所定の項目を含む表（ビュー）を作成する処理と、従来の手法を用いて同様の表（ビュー）を作成する処理との比較について簡単に述べる。
本発明の実施の形態に関しては、プロセッサとして、ＰｅｎｔｉｕｍＰｒｏ（登録商標）を２００ＭＨＺにて作動させ、ＲＡＭ上に、表形式データを構成する収集の情報ブロックを作成した。表形式データとして、ユーザＩＤ（０〜９９９９：項目１）および贔屓の野球球団名（１２球団：項目２）を備えたユーザテーブル（１００００レコード）と、試合番号（０〜１１９：項目１）、野球球団名（１２球団：項目２）、各試合の得点（０〜１９点）を備えた試合テーブル（１２０×１２＝１４４０レコード）とを考え、各ユーザごとに、ユーザが贔屓にしている球団の得点の一覧表を作成した。この場合に、総レコード数は、１００００（ユーザ）×１２０（試合）＝１２０万レコードとなる。上記レコードを第５の実施の形態に基づき、かつ、主テーブルおよび従テーブルの双方のメモリを節約するような手法で一覧表を作成するために、平均で０．１９５秒を要した。
これに対して、従来の手法にしたがって、市販のデータベースとしてＩｎｔｅｒＢａｓｅ４．２（登録商標）を利用し、クライアントとしてＰａｒａｄｏｘ７（登録商標）を利用したマシン（プロセッサとしてＰｅｎｔｉｕｍＰｒｏ（登録商標）を上記処理と同一条件で作動させた）にて、上記表形式データをジョインさせ、ビューを作成すると５１０秒を要した。したがって、本発明によれば、従来のものの略３０００倍の速度で、表形式データのジョインおよび表（ビュー）の作成が実現できることがわかった。
【００８０】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、前記第１の実施の形態において、図１８（ｂ）のように、キー項目以外の項目にてソートした表（ビュー）を表示する場合につき説明を加える。図１８（ａ）に示すように、キー項目にてソートして表（ビュー）を表示する場合には、キー項目となる情報ブロック（上記例では「サービスＩＤ」の情報ブロック）に関して、値リストの項目値ごとの、メイン表形式データのレコード数が算出され（存在数配列）、これに基づきメイン表形式データのレコード番号をソートした状態で再配置している（図１７参照）が、それ以外の項目によるソートのためには、若干の手順が加えられる。
【００８１】
第１の実施の形態にしたがった手法においては、図４９（ａ）に示すように、キー項目に関する情報ブロック（この場合には「サービスＩＤ」の情報ブロック）を介して、他の情報ブロック（このばあいには「年会費」の情報ブロック）に存在数配列や累計数配列等が生成される。すなわち、共有化された値リストを有する情報ブロックを介して、ソートされたメイン表形式データに関するレコード番号（親レコード番号）の配列が生成される（図４９（ｂ）参照）。
【００８２】
また、前記実施の形態においては、ジョインおよび表（ビュー）の作成毎に、値リストを共有化させるべき情報ブロックの特定や、存在数配列および／または開始位置配列の算出、変換配列の生成等を実行しているが、予め必要と思われるものをジョインし、或いは、必要な配列を生成しておいても良い。さらに、表形式データに基づく所定の形態の情報ブロックの構築は、表形式データを受け入れた時点で予め実行しても良いし、表（ビュー）の作成の指示に応答して実行しても良い。
【００８３】
さらに、前記第６および第７の実施の形態においては、複数の表形式データにおいて、２つの項目をジョインして、所定の項目に関する項目値を提示する手法について述べたが、３つ以上の項目をジョインすることも可能であることは言うまでもない。たとえば、前記第６の実施の形態に関しては、上述したように（ｐ×ｑ×ｒ）個のポインタ値を備えた仮想の値リストへのポインタ配列を作成し、当該仮想の値リストへの対応を決定しておけば良い。或いは、第７の実施の形態に関しては、各々が３個以上の値からなる多次元配列の集合となるような値リストを設ければ良い。
【００８４】
さらに、前記実施の形態においては、一般のコンピュータシステム１０内に、所定のプログラムを読み込み、当該プログラムを実行することにより、複数の表形式データのジョインおよびジョインされた表形式データに関する処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データベース処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアによって実現される場合も包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【００８５】
【発明の効果】
本発明によれば、複数の表形式データを、所望のようにジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データの提示方法を提供することが可能となる。
【図面の簡単な説明】
【図１】  図１は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。
【図２】  図２は、本実施の形態にて用いる情報ブロックを示す図である。
【図３】  図３は、表形式データの例、および、当該表形式データに基づく情報ブロックの例を示す図である。
【図４】  図４は、表形式データの他の例、および、当該表形式データに基づく情報ブロックの他の例を示す図である。
【図５】  図５は、単一項目に関する検索手法を示すフローチャートである。
【図６】  図６は、表形式データに基づき情報ブロックを作成するための処理を説明するフローチャートである。
【図７】  図７は、情報ブロックを作成するための原データの例を示す図である。
【図８】  図８は、二つの表形式データの例を示す図である。
【図９】  図９は、図８に示す表形式データに基づく情報ブロックを示す図である。
【図１０】  図１０は、本発明の実施の形態にかかるＣＰＵにて実行される機能の一例を示すブロックダイヤグラムである。
【図１１】  図１１は、本実施の形態にかかる値リストの共有化のための処理を示すフローチャートである。
【図１２】  図１２（ａ）は、図８および図９に示す例に関して、図１１にて示される処理の一部をより詳細に示す図である。
【図１３】  図１３は、本実施の形態にかかるビュー作成処理を示すフローチャートである。
【図１４】  図１４は、図１３により生成されるビューを説明するための図である。
【図１５】  図１５は、本実施の形態にかかる必要な項目に関してソートした表を得る処理を示すフローチャートである。
【図１６】  図１６は、「顧客ＩＤ」、「顧客名」および「年会費」に関するビューであって、かつ、「サービスＩＤ」に基づきソートされたビューを表示する処理を説明するための図である。
【図１７】  図１７は、本実施の形態にかかるレコード番号のソートを説明するための図である。
【図１８】  図１８は、所定の項目にてソートされたビューの例を示す図である。
【図１９】  図１９は、第２の実施の形態にかかるポインタ配列を示す図である。
【図２０】  図２０は、第３の実施の形態にかかるポインタ配列を示す図である。
【図２１】  図２１は、第４の実施の形態にて利用される表形式データ（テーブル）の例を示す図である。
【図２２】  図２２は、第４の実施の形態にかかる処理を示すフローチャートである。
【図２３】  図２３は、第４の実施の形態にかかる値リストの共有化を説明するための図である。
【図２４】  図２４は、第４の実施の形態にかかる従テーブルのソートを説明するための図である。
【図２５】  図２５は、第４の実施の形態にかかる主テーブルの値リストへのポインタ配列の拡張処理を示すフローチャートである。
【図２６】  図２６は、第４の実施の形態にかかる主テーブルの値リストへのポインタ配列の拡張を説明するための図である。
【図２７】  図２７は、第４の実施の形態にかかる従テーブルの値リストへのポインタ配列の拡張（生成）処理を示すフローチャートである。
【図２８】  図２８は、第４の実施の形態にかかる従テーブルの値リストへのポインタ配列の拡張を説明するための図である。
【図２９】  図２９は、第４の実施の形態にかかるジョインされた表（ビュー）を作成するための情報ブロックを示す図である。
【図３０】  図３０は、第５の実施の形態にかかる主テーブル側に設けられた変換配列を説明するための図である。
【図３１】  図３１は、第５の実施の形態にかかる従レコード側の変換配列作成の処理を示すフローチャートである。
【図３２】  図３２は、第５の実施の形態にかかる従テーブル側の変換配列作成の一例を示す図である。
【図３３】  図３３は、第５の実施の形態にかかる処理により得られた従テーブル側の変換配列に基づき、仮想的な「試合日」の情報ブロックを得る手順を説明する図である。
【図３４】  図３４は、第６の実施の形態にて利用される表形式データ（テーブル）の例を示す図である。
【図３５】  図３５は、第６の実施の形態にかかる処理を示すフローチャートである。
【図３６】  図３６は、第６の実施の形態にかかる共有化処理を説明するための図である。
【図３７】  図３７は、第６の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図３８】  図３８は、第６の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図３９】  図３９は、第６の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図４０】  図４０は、第６の実施の形態にかかる仮想的な値リスト、および、レコード番号へのポインタ配列を説明するための図である。
【図４１】  図４１は、第６の実施の形態にかかる処理にしたがった表（ビュー）の作成を説明するための図である。
【図４２】  図４２は、第７の実施の形態にかかる処理を示すフローチャートである。
【図４３】  図４３は、第７の実施の形態にかかる主テーブルの二次ソートを説明するための図である。
【図４４】  図４４は、第７の実施の形態にかかる複数項目を結合した多次元配列であるポインタ値を有する値リスト、および、ポインタ配列の生々処理を示すフローチャートである。
【図４５】  図４５は、図４３に示すソート処理を施した主テーブルに、第７の実施の形態にかかる新たな情報ブロックを作成した状態を示す図である。
【図４６】  図４６は、図４３に示すソート処理を施した主テーブルに、第７の実施の形態にかかる新たな情報ブロックを作成した状態を示す図である。
【図４７】  図４７は、第７の実施の形態にかかる従テーブルに関する、新たな情報ブロックを示す図である。
【図４８】  図４８は、第７の実施の形態にかかる表（ビュー）の作成処理を説明するための図である。
【図４９】  図４９は、第１の実施の形態において、他の項目にてソートされた表（ビュー）を得るための処理を説明するための図である。
【符号の説明】
１０        コンピュータシステム
１２        ＣＰＵ
１４        ＲＡＭ
１６        ＲＯＭ
１８        固定記憶装置
２０        ＣＤ−ＲＯＭドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
【図１】
0004428488.tif 000002
【図２】
0004428488.tif 000003
【図３】
0004428488.tif 000004
【図４】
0004428488.tif 000005
【図５】
0004428488.tif 000006
【図６】
0004428488.tif 000007
【図７】
0004428488.tif 000008
【図８】
0004428488.tif 000009
【図９】
0004428488.tif 000010
【図１０】
0004428488.tif 000011
【図１１】
0004428488.tif 000012
【図１２】
0004428488.tif 000013
【図１３】
0004428488.tif 000014
【図１４】
0004428488.tif 000015
【図１５】
0004428488.tif 000016
【図１６】
0004428488.tif 000017
【図１７】
0004428488.tif 000018
【図１８】
0004428488.tif 000019
【図１９】
0004428488.tif 000020
【図２０】
0004428488.tif 000021
【図２１】
0004428488.tif 000022
【図２２】
0004428488.tif 000023
【図２３】
0004428488.tif 000024
【図２４】
0004428488.tif 000025
【図２５】
0004428488.tif 000026
【図２６】
0004428488.tif 000027
【図２７】
0004428488.tif 000028
【図２８】
0004428488.tif 000029
【図２９】
0004428488.tif 000030
【図３０】
0004428488.tif 000031
【図３１】
0004428488.tif 000032
【図３２】
0004428488.tif 000033
【図３３】
0004428488.tif 000034
【図３４】
0004428488.tif 000035
【図３５】
0004428488.tif 000036
【図３６】
0004428488.tif 000037
【図３７】
0004428488.tif 000038
【図３８】
0004428488.tif 000039
【図３９】
0004428488.tif 000040
【図４０】
0004428488.tif 000041
【図４１】
0004428488.tif 000042
【図４２】
0004428488.tif 000043
【図４３】
0004428488.tif 000044
【図４４】
0004428488.tif 000045
【図４５】
0004428488.tif 000046
【図４６】
0004428488.tif 000047
【図４７】
0004428488.tif 000048
【図４８】
0004428488.tif 000049
【図４９】
0004428488.tif 000050