JP4428488B2 - 表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 - Google Patents
表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 Download PDFInfo
- Publication number
- JP4428488B2 JP4428488B2 JP15115699A JP15115699A JP4428488B2 JP 4428488 B2 JP4428488 B2 JP 4428488B2 JP 15115699 A JP15115699 A JP 15115699A JP 15115699 A JP15115699 A JP 15115699A JP 4428488 B2 JP4428488 B2 JP 4428488B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- item
- pointer
- array
- value list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
- Y10S707/99945—Object-oriented database structure processing
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
Description
【産業上の技術分野】
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理するデータ処理方法およびデータ処理装置に関し、より詳細には、リレーショナルデータベースにおいて、複数の表形式データを結合して、所望のレコード等の項目値を検索、集計し、および、ソートする方法および装置に関する。
【0002】
【従来の技術】
データベースは種々の用途に用いられているが、中規模ないし大規模システムにおいては、論理的な矛盾が排除できるリレーショナルデータベース(RDB)の使用が主流となっている。たとえば、RDBは飛行機の座席予約等のシステムに利用されている。この場合、キー項目を指定することにより、(多くの場合1件の)ターゲットを迅速に検索することもでき、或いは、予約の確定、キャンセル或いは変更などを行うことができる。また、各便の座席数はせいぜい数百であるため、特定の航空便の空席数を求めることも可能である。
ところが、このRDBを用いて、年度ごと、曜日ごと、月ごと、路線ごと、時間帯ごと或いは機種ごとなどで、特定の演算(たとえば、搭乗率の計算)をなそうとすると、非常に時間がかかることが知られている。すなわち、RDBは、処理を矛盾なく実現することに優れている反面、相当数のレコードを検索、集計或いはソートする性能が低い。
【0003】
そこで、近年、検索や集計のために、RDBとは別に、データウェアハウス(DWH)と称するデータベースをシステムに構築することが一般化している。すなわち、エンドユーザの特定の目的に合わせて、特定のデータ形式およびデータ項目名を備えた極めて大規模なデータベースを構築し、エンドユーザはこれを用いて特定の検索や集計をなすことができるようになっている。
【0004】
【発明が解決しようとする課題】
しかしながら、RDBのほかに、他のDWHを設けること、すなわち、複数のデータベースを設けることは、本来、データを集中管理できるためにデータベース、特に、RDBが考案されたという本来あるべき姿とは乖離しており、これに由来して、たとえば、以下に述べるような様々な問題点が生じている。
(1)DWHは固定的なものであるため、予めDWHに設けられた項目以外の検索や集計をすることが困難である。
(2)RDBのほかに、固定的なDWHを設けるため、データ容量が極めて大きくなるほか、RDBの更新等に対応することができない。
本発明は、複数の表形式データを、所望のように高速にジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データを極めて高速に提示方法を提供することを目的とする。
【0005】
【課題を解決するための手段】
本発明の目的は、各々が、項目とこれに含まれる項目値とを含むレコードの配列として表わされる複数の表形式データを結合する方法であって、各表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる一以上の情報ブロックに分割するように構成し、複数の表形式データの間で、等価な項目を見出し、前記等価な項目に関する情報ブロックを特定し、前記複数の表形式データの各々において、前記特定された情報ブロックに含まれる値リストを比較して、双方の値リストの項目値を同値にし、前記値リストを同値にする際に、その項目値が追加された情報ブロックにおいて、関連するポインタ配列のポインタ値を追加し、前記複数の表形式データにおいて、特定の項目に関する情報ブロックに含まれる値リストを等価とすることにより、表形式データを結合することを特徴とする結合方法により達成される。
【0006】
本発明によれば、実際の項目値が格納された値リストと、当該値リストの項目値を指定するためのポインタ値を格納したポインタ配列とにより、ある項目に関する情報ブロックを構成し、種々の項目にかかる情報ブロックの集合体として表形式データを表現している。したがって、複数の表形式データを結合(すなわちジョイン)する際に、表形式データ間の情報ブロック中の値リストに着目し、値リストの項目値を同値にして、これに応答して、関連するポインタ配列を変更している。したがって、煩雑な処理を要することなく、値リストの項目値の追加およびこれにともなうポインタ値の追加をなすこと(すなわち、値リストを共有化すること)により、二つの表形式データを結合することが可能となる。
【0007】
本発明の好ましい実施態様においては、等価となった値リストを備えた情報ブロックに関して、単一の値リストのみが現実に保持される。すなわち共有化された値リストに関しては、何れか一方を保持していれば足りる。これにより、必要なメモリ容量を削減することが可能となる。また、ジョインのために多大な処理を必要としないため、表形式データの結合(ジョイン)を極めて高速に実現することが可能となる。
【0008】
本発明の目的は、上記結合方法により、特定の項目に関する情報ブロックに含まれる値リストが等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、ポインタ配列のポインタ値が重複しないキー項目に関する情報ブロックを特定し、当該情報ブロックを備えた表形式データを、サブ表形式データと決定し、何れかの情報ブロックにおいて、値リストの項目値の順に、前記サブ表形式データのレコード番号を特定する第2のポインタ配列を生成し、前記複数の表形式データに含まれる情報ブロックのうち、提示すべき項目に関する情報ブロックを特定し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式データ以外の表形式データであるメイン表形式データを構成する情報ブロックに関して、所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応した前記第2のポインタ配列中のサブ表形式に関するレコード番号を特定し、前記サブ表形式データを構成する情報ブロックにおいて、当該サブ表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示することを特徴とする結合された表形式データの提示方法によっても達成される。
【0009】
本発明によれば、たとえば、複数の表形式データに関して、ユーザにより特定の項目が選択され、その提示が求められた場合に、複数の表形式データを結合し、サブ表形式データにおいては、メイン表形式データのレコード番号から、サブ表形式データのレコード番号を特定できるような(すなわち、逆引きができるような)第2のポインタ配列を生成する。メイン表形式データに関しては、メイン表形式データのレコード番号から、ポインタ配列中のポインタ値を特定し、さらに、当該ポインタ値により指示された項目値を特定することにより、所望の項目値を求めることができる。その一方、サブ表形式データに関しては、メイン表形式データのレコード番号から、サブ表形式データのレコード番号を特定し、次いで、ポインタ配列中のポインタ値および当該ポインタ値により指示された項目値を順次特定することにより、所望の項目値を求めることができる。したがって、複数の表形式データから、所望の項目を選択して、ジョインした表(ビュー)を高速に実現することが可能となる。
【0010】
上記サブ表形式データのレコード番号を特定するために、前記キー項目に関する情報ブロックに、当該情報ブロックに含まれる値リストの項目値の順に、レコード番号を指示するためのポインタ値が格納された第2のポインタ配列を生成しても良い。この場合には、提示すべき項目に関する情報ブロックのうち、サブ表形式データを構成する情報ブロックにおいて、前記所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、対応する第2のポインタ配列中のサブ表形式データに関するレコード番号を特定し、当該サブ表形式データを構成する情報ブロックにおいて、当該第2のポインタ配列中のレコード番号に対応した、ポインタ配列中のポインタ値を参照することにより、所定の項目値を取得する。この手法はより具体的には第1の実施の形態にて説明がなされている。
【0011】
或いは、前記メイン表形式データを構成する情報ブロックであって、その値リストが等価になった情報ブロック中に、値リストの項目値の順に、前記サブ表形式データのレコード番号を指示するためのポインタ値が格納された第2のポインタ配列を生成し、前記所定のレコード番号に対応した、前記第2のポインタ配列中のサブ表形式データに関するレコード番号を特定し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式データを構成する情報ブロックにおいて、前記サブ表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得するように構成しても良いし(第2の実施の形態参照)、前記サブ表形式データを構成する情報ブロックのうち、少なくとも提示すべき項目に関する情報ブロックに、値リストの項目値の順に、当該サブ表形式データのレコード番号を指示するためのポインタ値が格納された第2のポインタ配列を生成し、前記提示すべき項目に関する情報ブロックのうち、サブ表形式データを構成する情報ブロックにおいて、前記所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、対応する第2のポインタ配列中のサブ表形式データに関するレコード番号を特定し、当該サブ表形式データを構成する情報ブロックにおいて、当該第2のポインタ配列中のレコード番号に対応した、ポインタ配列中のポインタ値を参照することにより、所定の項目値を取得するように構成しても良い(第3の実施の形態参照)。
【0012】
本発明の別の実施態様においては、さらに、所定の順序にしたがって、その項目値をソートすべき情報ブロックに、メイン表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納する存在数配列を生成し、前記存在数配列にしたがって、前記メイン表形式データに関するレコード番号を格納する位置の初期値を示す位置指示配列を生成し、前記メイン表形式データのレコード番号を、対応するポインタ値により示される位置の位置指示配列にしたがって配置するとともに、当該位置指示配列の対応する値をインクリメントすることにより、メイン表形式データのレコード番号がソートされて格納されたソート配列を生成し、前記ソート配列に格納されたレコード番号の順に、必要な項目値を取得して、当該キー項目に基づいてソートされた項目値を提示するように構成されている。この実施の形態によれば、メイン表形式データのレコード番号が、ソートされた形態で格納されたようなソート配列を生成し、当該ソート配列に格納されたレコード番号に基づいて、ポインタ値および項目値を特定するため、煩雑な処理をなすことなく、所望の項目についてソートしたような表(ビュー)を求めることができる。
【0013】
たとえば、ソートすべき項目がキー項目である場合には、キー項目に関する情報ブロックに、メイン表形式データを構成する情報ブロックであって当該情報ブロックと等価な値リストを有する情報ブロックのポインタ配列中のポインタ値の個数を示す存在数を、当該キー項目の情報ブロック中の値リストの順にしたがって格納する存在数配列を生成する。それ以外の場合には、キー項目に関する情報ブロックと等価な、メイン表形式データを構成する情報ブロック中のポインタ配列と、前記第2のポインタ配列とを用いて、前記項目値をソートすべき情報ブロックに、メイン表形式データに関するレコードの数を示す存在数を格納する存在数配列を生成すれば良い。
【0014】
本発明のさらに別の実施態様においては、結合された表形式データを提示する方法は、特定の項目に関する情報ブロックに含まれる値リストが等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記従表形式データを構成する情報ブロックであって、その項目値が等価となった情報ブロックに、従表形式データに関するレコードの個数を示す存在数を、項目値に対応して格納する第1の存在数配列を生成し、前記第1の存在数配列にしたがって、前記従表形式データのレコード番号をソートした状態で配置する初期位置を決定する第1の位置指示配列を生成し、前記従表形式データのレコード番号を、対応するポインタ値により示される位置の第1の位置指示配列にしたがって配置するとともに、当該位置指示配列の対応する値をインクリメントすることにより、従表形式データのレコード番号がソートされて格納された第1のソート配列を生成し、前記位置指示配列の初期値および最終値と、前記主表形式データに関してその値リストが等価となった情報ブロック中のポインタ配列とを参照して、前記主表形式データに関する他の情報ブロックのポインタ配列の重複度を算出し、当該重複度にしたがってポインタ配列を拡張し、前記位置指示配列の初期値および最終値と、前記ソート配列とを参照して、前記従表形式データに関する情報ブロックのポインタ配列の重複度を参照して、当該重複度にしたがってポインタ配列を拡張し、当該拡張されたポインタ配列に基づき、必要な項目値を取得して提示するように構成されている。これについては、第4の実施の形態においてより具体的な説明が加えられている。
【0015】
この実施態様は、表形式データに関してキー項目を見出すことができない場合に適用され得る。この場合には、デフォルトのソード順が反映される項目を特定して、この項目を含む表形式データを主表形式データ、それ以外の表形式データを従表形式データとする。本実施態様によれば、ポインタ配列の重複度にしたがって、これを拡張し、拡張されたポインタ配列にしたがって、項目値を特定している。したがって、ある項目値が重複して用いられている表形式データをジョインする場合であっても、煩雑な処理の必要なく、ソート配列やポインタ配列の操作のみで、適切に表(ビュー)を作成することが可能となる。
主表形式データのメモリ容量を削減するためには、前記重複度に基づき、主表形式データのレコード番号が重複して配置された第1の変換配列を生成し、前記主表形式データに関して、前記第1の変換配列にしたがって情報ブロックの値リストへのポインタ配列を参照して、値リストの項目値を取り出すのが好ましい。また、従表形式データのメモリ容量を削減するためには、前記主表形式データのレコード番号と、関連する前記重複度に基づき、従表形式データのレコード番号が重複して配置された第2の変換配列を生成し、前記従表形式データに関して、前記第2の変換配列にしたがって情報ブロックの値リストへのポインタ配列を参照して、値リストの項目値を取り出すのが好ましい(第5の実施の形態参照)。
【0016】
本発明のさらに別の実施形態において、結合された表形式データを提示する方法は、特定の二以上の項目に関する情報ブロックに含まれる値リストが、それぞれ等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される項目を含む表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記主表形式データに関して、二以上の等価となった値リストの積集合である仮想の値リストへのポインタ配列を生成し、前記従表形式データに関して、前記仮想の値リストへの第2のポインタ配列を生成し、前記仮想の値リストの項目値の順に、前記従表形式データのレコード番号を特定する第3のポインタ配列を作成し、前記複数の表形式データに含まれる情報ブロックのうち、提示すべき項目に関する情報ブロックを特定し、前記提示すべき項目に関する情報ブロックのうち、表形式データを構成する情報ブロックに関して、所定のレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記サブ表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応したレコード番号を参照して、対応する前記仮想の値リストへのポインタ配列中のポインタ値に基づき、前記第3のポインタ配列中の前記従表形式データのレコード番号を特定し、前記従表形式データを構成する情報ブロックにおいて、当該従表形式データに関するレコード番号に対応したポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示するように構成されている。
【0017】
この実施態様は、複数の表形式データにおいて、複数項目をジョインして、所定の表(ビュー)の提示が求められた場合に適用することができる。この実施態様によれば、現実には作成されない、複数項目の項目値の積集合である値リストに対するポインタ配列を作成している。したがって、莫大な容量となることが予想される積集合である値リストを実際に作成することなく、ポインタ配列を生成するのみで、極めて高速に、複数項目をジョインした状態の表(ビュー)を得ることができる。
たとえば、ジョインすべき項目が二つの場合には、一方の情報ブロックに関する、等価となった値リストの項目値の数がp、かつ、他方の情報ブロックに関する、等価となった値リストの項目値の数がqとすると、
前記主表形式データに関する前記仮想の値リストへのポインタ値Pmi(0≦j≦p−1)が、
Pmi=Pm1i*q+Pm2i
(ただし、Pm1iは、一方の情報ブロックに関する値リストの項目値、Pm2iは、他方の情報ブロックに関する値リストの項目値)
と表わされ、かつ、
前記従表形式データに関する前記仮想の値リストへのポインタ値Psj(0≦j≦p−1)が、
Psj=Ps1j*q+Ps2j
(ただし、Ps1iは、一方の情報ブロックに関する値リストの項目値、Ps2iは、他方の情報ブロックに関する値リストの項目値)
と表わされる。
【0018】
複数の表形式データにおける複数の項目を結合(ジョイン)して、所望の項目の項目値を提示するためのさらに他の方法は、特定の二以上の項目に関する情報ブロックに含まれる値リストが、それぞれ等価となった複数の表形式データを用意し、前記複数の表形式データに関して、前記特定の項目に関する情報ブロックのうち、提示の際にデフォルトのソート順が反映される項目を含む表形式データを主表形式データと決定し、それ以外の表形式データを従表形式データと決定し、前記主表形式データおよび主表形式レコードのそれぞれに関して、デフォルトのソート順が反映される項目以外の項目にて、前記レコード番号をソートし、最後に上記ソート順が反映される項目にて前記レコード番号をソートすることにより、第1のソート配列を生成し、前記第1のソート配列中のレコード番号を参照して、前記二以上の項目に関する二以上の値リストの、対応する項目値をそれぞれ取り出し、二以上の項目値の多次元配列からなる項目値を備えた多次元値リスト中の対応する位置に、取り出された項目値の多次元配列を格納し、前記多次元値リストの多次元配列を特定するためのポインタ配列の、前記レコード番号に対応する位置に、前記レコード番号を格納し、何れかの情報ブロックにおいて、値リストの項目値の順に、前記従表形式データのレコード番号を特定する第2のポインタ配列を生成し、前記提示すべき項目に関する情報ブロックのうち、前記主表形式データを構成する情報ブロックに関して、所定のレコード番号に対応した多次元値リストを特定するためのポインタ配列のポインタ値、および/または、他のポインタ配列のポインタ値を参照して、所定の項目値を取得し、前記提示すべき項目に関する情報ブロックのうち、前記従表形式を構成する情報ブロックに関して、前記所定のレコード番号に対応したレコード番号を参照して、対応する前記第2のポインタ配列中の従表形式に関するレコード番号を特定し、前記サブ表形式データを構成する情報ブロックにおいて、当該従表形式データに関するレコード番号に対応した、多次元値リストを特定するためのポインタ配列のポインタ値、および/または、ポインタ配列中のポインタ値を参照して、所定の項目値を取得し、取得した項目値を提示するように構成されている。これに関しては、第7の実施の形態により具体的な説明がなされている。
この実施態様によれば、仮想の値リストへのポインタ配列を設ける必要がないため、必要なメモリ容量をさらに削減することが可能となる。
また、本発明の目的は、上記方法を実現するプログラムを記憶した記憶媒体、上記方法のステップを実現する手段からなる表形式データの結合装置、表形式データの提示装置によっても実現される。
【0019】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。図1は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図1に示すように、このコンピュータシステム10は、通常のものと同様の構成であり、プログラムを実行することにより、システム全体および個々の構成部分を制御するCPU12、ワークデータなどを記憶するRAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク等の固定記憶媒体18、CD−ROM19をアクセスするためのCD−ROMドライバ20、CD−ROMドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、CRT表示装置26を備えている。CPU12、RAM14、ROM16、外部記憶媒体18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。
本実施の形態にかかる表形式データを結合(ジョイン)するプログラム、結合した表形式データから所定の項目の表(ビュー)を作成するプログラム、検索プログラム、集計プログラムおよびソートプログラムは、CD−ROM19に収容され、CD−ROMドライバ20に読取られても良いし、ROM16に予め記憶されていても良い。また、いったんCD−ROM19から読み出したものを、外部記憶媒体18の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子およびI/F22を経て外部から供給されるものであっても良い。
【0020】
また、本実施の形態においては、検索、集計およびソートを高速に実現するために、後述するように所定のデータ形式の情報ブロックを生成する必要がある。この情報ブロック生成プログラムも同様に、CD−ROM19に収容され、ROM16に記憶され、或いは、外部記憶媒体18に記憶されても良い。或いは、これらプログラムは、ネットワーク(図示せず)を介して、外部から供給されても良いことはいうまでもない。また、本実施の形態において、情報ブロック生成プログラムにて生成されたデータ(情報ブロック)は、RAM14に記憶され、或いは、外部記憶媒体18の所定の領域に記憶される。
【0021】
次に、本発明の前提となるデータ形式や、検索、集計およびソートの原理につき説明を加える。本発明者は、昨年、処理の超高速化を図るため、特定のデータ形式を有する表形式データの構築と、検索、集計およびソート方法とを考案した(特願平10−227278号)。本発明においても、基本的には、この出願に基づいて、表形式データを所定の情報ブロックの集合体として構築し、これを用いて検索、集計およびソートを実現している。
図2は、本実施の形態にて用いる情報ブロックを示す図である。図2に示すように、情報ブロック100は、値リスト110と値リストへのポインタ配列120とを含んでいる。値リスト110は、表形式データの各項目に対して、その項目に属する項目値が順序付け(整数化)された項目値番号の順番に、上記項目値番号に対応した項目値111が格納されたテーブルである。値リストへのポインタ配列120は、表形式データのある列(すなわち項目)の項目値番号、つまり値リスト110へのポインタが表形式データのレコード番号順に格納された配列である。
【0022】
上記値リストへのポインタ配列120と値リスト110とを組み合わせることにより、あるレコード番号が与えられたときに、所定の項目に関する値リストへのポインタ配列120からそのレコード番号に対応して格納された項目値番号を取り出し、次いで、値リスト110内でその項目値番号に対応して格納された項目値を取り出すことにより、レコード番号から項目値を得ることができる。したがって、従来のデータ表と同様に、レコード番号(行)と項目(列)という座標を用いてすべてのデータ(項目値)を参照することができる。
たとえば、図3(a)に示す表形式データを考える。この例では、顧客ID、顧客名、電話番号という項目に種々の項目値が与えられている。本実施の形態においては、このような表形式データを、図3(b)ないし(d)に示す形式の情報ブロックとして保持している。たとえば、図3(b)において、ポインタ配列120−1は、顧客IDを示す項目値を格納した値リスト110−1に関連付けられている。すなわち、先頭レコード(レコード番号“0”)のポインタ配列のポインタ値は0であり、これに対応して、顧客IDを示す項目値“1”が得られる。図3(b)において、ポインタ配列120−2は、顧客名を示す項目値を格納した値リスト110−2に関連付けられている。たとえば先頭レコード(レコード番号“0”)のポインタ配列におけるポインタ値は“5”であり、これに対応して、顧客名を示す項目値“山田 ○男”が得られる。図3(c)においても、同様に、ポインタ配列120−3が、電話番号を示す項目値を格納した値リスト110−3に関連付けられていることが理解できよう。また、各値リストにおいては、項目値が順序付けられて(この例では昇順)いることが理解できよう。
【0023】
さらに、本実施の形態においては、情報ブロック100の値管理テーブルは、値リスト110のほか、検索や集計のために用いる分類番号フラグ配列、項目値に対応するポインタを格納すべきメモリ空間の先頭アドレスを示す開始位置配列、および、存在数配列が含まれている。分類番号フラグ配列の各フラグ、および、存在数配列の各存在数は、項目値の各々に対応付けられている。分類番号フラグのフラグ値は、通常 “0”であり、検索や集計の際に見出すべき項目値に対応して“1”にセットされる。また、存在数は、その項目値を有するレコードの個数に対応する。なお、開始位置は、対応するポインタ値よりも小さなポインタ値に対応する存在数を加算したものに対応するため、必ずしも設ける必要はない。
図4(a)は、表形式データの他の例を示す図、図4(b)および(c)は、それぞれ、「性別」および「年令」に関する情報ブロックを示す図である。図4(b)に示すように、性別に関する情報ブロック200−1の値管理テーブル210−1には、ポインタ配列220の各ポインタ値に対応する項目値(「男性」および「女性」)と、各項目値に対応する分類番号、開始位置および存在数が示されている。たとえば、ポインタ値が“0”(つまり、値リストの項目値が「男性」)であるようなレコードの数は632564個であり、その一方、ポインタ値が“1”(つまり、値リストの項目値が「女性」)であるようなレコードの数は367426個となっている。また、各項目値に対応する開始位置は、後述するレコードへのポインタ配列230−1の先頭アドレスを示している。図4(c)においても、同様のことが理解できよう。
【0024】
このようなデータ構造を有する情報ブロックを用いた検索の一例および情報ブロックの生成処理につき、以下に説明する。図5は、単一項目に関する検索手法を示すフローチャートである。この処理は、CPU12(図1参照)が所定の検索プログラムを実行することにより実現される。この例では、「年令」の項目値が16歳または19歳であるレコードが検索される。まず、表形式データに関する情報ブロックのうち、図4(c)に示す「年令」に関する情報ブロック200−2が特定される(ステップ501)。
【0025】
次いで、特定された情報ブロック(以下、「特定情報ブロック」と称する。)の値リスト210−2において、項目値が上記検索条件に合致するもの(16歳または19歳)に対応する行の分類番号が“1”にセットされる(ステップ502)。本例の場合には、項目値番号“0”および項目値番号“3”に対応する行の分類番号が1にセットされる。次いで、分類番号が“1”にセットされている行に対応した開始位置および存在数が取得される(ステップ503)。これら情報をポインタ取り出し情報と称する。レコードへのポインタ配列において、ステップ503にて取得されたポインタ取り出し情報に基づき、検索条件に合致したレコードへのポインタを示すレコード番号が取り出される(ステップ504)。本例においては、項目値番号“0”に対応したレコードのポインタは、レコードへのポインタ配列の開始位置“0”すなわち先頭から、45898個目までの領域に格納され、その一方、項目値番号“3”に対応したレコードのポインタは、レコードへのポインタ配列の2383137番目から189653個分の領域に格納されていることがわかる。最後に、後の処理にて利用できるようにするために、取り出されたレコード番号の配列が、結果集合として作成され、これが保持される(ステップ505)。
また、集計およびソートも、分類番号、開始位置および存在数を利用することにより実現することができる。
【0026】
次に、上述したような検索処理等に利用するための情報ブロックの生成処理につき説明を加える。図6は、表形式データに基づき情報ブロックを作成するための処理を説明するフローチャートである。まず、システム10は、表形式の原データを取得し、これを項目別のものに分解する(ステップ601)。この原データは、たとえば、図7(a)に示すものでも良いし、或いは、図7(b)に示すものでも良い。これら原データは、外部から供給されるものであっても良いし、或いは、固定記憶媒体18に記憶されたものであっても良い。以下に述べるステップ602ないしステップ604からなる処理ブロック610は、ある一つの項目に関する情報ブロックの生成を示す。したがって、複数の項目に関する情報ブロックを生成する場合には、項目の数だけ処理ブロック610に対応する処理が実行される。以下、「性別」に関する項目の情報ブロックを例にとって説明を加える。
【0027】
まず、「性別」に関する項目の情報ブロック用の領域が、たとえば、RAM14中に確保される(ステップ602)。次いで、この確保された領域中に、値管理テーブルが生成される。より詳細には、まず、値管理テーブルが初期化される。次いで、原データのうち、「性別」に関するデータを先頭から末尾まで操作することにより、どのような項目名が、それぞれいくつ存在するかが見出される。本例では、「女性」および「男性」という項目名が、それぞれ、367436個および632564個だけあることが見出される。これにより、値リストに、「女性」および「男性」という項目値がセットされ、また、存在数配列にも所定の数がセットされる。その後に、項目値が所定の基準にしたがってソートされる。ソートの際には、項目数の並び替えにしたがって存在数も並びかえられる。次いで、開始位置配列の値が決定される。これは、ソートにより自己より上位に位置する存在数を累算することにより求められる。また、開始位置配列の値を、対応する分類番号配列の値に割り当てる。この値は次のステップにて用いられる。このようにして値管理テーブルが生成された後に、レコードへのポインタ配列が生成される。このポインタ配列の領域の大きさは、存在数の総和に対応する。
このようにして、所定の項目に関する情報ブロックを作り出すことが可能となる。この情報ブロックの生成を予め行っておき、生成された情報ブロックを用いて検索、集計およびソートの処理が実行される。
【0028】
さて、2つの表形式データを組み合わせて(JOIN(ジョイン)処理の実行)、一つの表(ビュー)を作成する処理、および、作成したものから所望の項目を検索、集計およびソートする処理につき以下に説明する。
たとえば、図8に示すような2つの表形式データを考える。図8(a)においては、顧客IDごとに、顧客名、電話番号、SVC−ID(サービスID)が対応付けられており、その一方、図8(b)においては、サービスIDごとに年会費が対応付けられている。顧客IDが“1”である「山田 ○男」のSVC−IDは“D”であり、サービステーブルのサービスIDの“D”項を参照すると、彼の年会費が“12,000”円であることが理解できる。同様に、他の顧客についても、SVC−IDおよびサービスIDを参照することにより、その年会費を知ることができる。顧客ID、顧客名および年会費を表形式のビューにて表わしたものが図8(c)である。図8(c)から理解できるように、このビューでは、重複値をもつ項目である「SVC−ID」(たとえば、「SVC−ID」では、項目値“C”や“D”が複数出現している。)から、重複値を持たないいわゆるキー項目である「サービスID」を経由して請求額が表示されている。重複値を持つ項目(=「多」)から重複値を持たない項目(=「1」)を経由するものであることを考慮して、これを「多:1」のタイプと称する。また、本明細書において、上記「多」の側の表形式データを、メイン表形式データ、「1」の側の表形式データをサブ表形式データとも称する。
【0029】
「多:1」のタイプである2つの表形式データをジョインする手法につき以下に説明する。本実施の形態においては、図6に示す手法により、予め、図8に示す2つの表形式のデータから、図9に示すような情報ブロックが生成されている。なお、図9(a)ないし(d)は、図8(a)に示す顧客テーブルに関する情報ブロックであり、図9(e)および(f)は、図8(b)に示すサービステーブルに関する情報ブロックである。また、これらの図においては、値リストのみを図示している。
【0030】
顧客テーブルにおいては、B、CおよびDの「SVC−ID」のみが用いられているのに対して、サービステーブルにおいては、A、B、CおよびDのサービスIDが用いられている。したがって、「SVC−ID」の情報ブロック内の値リストと、「サービスID」の情報ブロック内の値リストとを共通化する必要がある。図10は、本実施の形態にかかるCPU12の機能ブロックダイヤグラム、図11は、値リストの共有化のための処理を示すフローチャートである。図10に示すように、CPU12は、情報ブロックを参照して、共有化すべき値リストを見出すテーブル抽出部32と、値リストを共有化する値リスト変換部34と、値リストへのポインタ配列の各ポインタ値を変換するとともに、必要な他のポインタ配列を生成するポインタ処理部36と、RAM14等とのデータの授受を行う情報ブロック管理部38とを備えている。
図11に示すように、まず、情報ブロック管理部38が、双方の表形式データに関する情報ブロックをRAM14から取り出す(ステップ1101)。次いで、テーブル抽出部32が、情報ブロックの値リストを参照して、共有化すべき値リストを抽出する(ステップ1102)。たとえば、図8および図9を示す例では、顧客テーブルに関して、「SVC−ID」の情報ブロックの値リストが抽出され、サービステーブルに関して、「サービスID」の情報リストの値ブロックが抽出される。
【0031】
その後に、値リスト変換部34が、共有化すべき2つの値リストのうち、項目値等の変換が必要なものを選択し(ステップ1103)、他方の値リストを参照して、項目値の挿入を行う。図8および図9に示す例では、重複値を持つ項目である「SVC−ID」に関する値リストの項目値の変換が必要となる。値リスト変換部34は、キー項目である「サービスID」に関する値リストの項目値のうち、「SVC−ID」の値リストに含まれない項目値を見出す。次いで、値リスト変換部34は、所定の順序にしたがって、「SVC−ID」に関する値リストに、見出された項目値を挿入する(ステップ1104)。その一方、値リストの項目値の挿入にしたがって、値リストへのポインタ値を含むポインタ配列を変更する必要がある。したがって、ポインタ処理部36は、値リストの変換にしたがって、項目値の変換がなされた値リストに対応するポインタ配列のポインタ値を生成する(ステップ1105)。図12は、図8および図9に示す例に関して、ステップ1104およびステップ1105にて実行される処理を説明する図である。値リストの項目値の挿入、および、ポインタ配列中のポインタ値の変更をなすべき「SVC−ID」の情報ブロックにおいて、値リストの項目値「A」が挿入される。この実施の形態では昇順にて項目値が配列されているため、項目値「A」は先頭の行に挿入される。先頭の行に新たに項目値が作られたため、ポインタ配列中のポインタ値には、それぞれ“1”が加算される。上記例では、先頭に一つの項目値が挿入されているが、複数の項目値が任意の位置に挿入されても良いことは言うまでもない。このばあいに、ポインタ値は、先頭から自己の位置までの間に挿入された項目値の数だけ、その値を増大させれば良い。
【0032】
このようにして、値リストの共有化が終了した後に、2つの表形式データがジョインしたようなビューを生成するため、あるいは検索、集計およびソート処理を高速に実行可能にするために、サービステーブルに関する情報ブロックに所定の処理が施される。ポインタ処理部36は、他方のテーブル(すなわち、値リストやポインタ配列の変更を行っていないテーブル)の値リストから、レコード番号を指示するようなポインタ配列(レコード番号へのポインタ配列)を生成する(ステップ1106)。このレコード番号へのポインタ配列は、ジョインされた表(ビュー)にて表示すべき項目のうち、他方のテーブルにおいて、値リストの共有化がなされなかったものを含む情報ブロック中に生成される。
【0033】
より詳細には、まず、ポインタ処理部36は、値リストへのポインタ配列と同じ大きさの配列を用意し、値リストへのポインタ配列の先頭からポインタ値をスキャンし、“i”番目のポインタ値が“j”である場合に、用意した配列において、“j”番目の要素に値“i”を格納するような処理を実行する。このようにして、レコード番号へのポインタが生成される。情報ブロック管理部38は、その項目値等が変更された情報ブロックや、新たなポインタ配列が加えられた情報ブロックを、RAM14の所定の領域に記憶する(ステップ1107)。
なお、上述した共有化の処理では、2つのテーブルの値リストが共通の意味合いを持つため、何れかの値リストのみを保持すれば良いことは言うまでもない。
このようにして、所定の値リストを共有化、すなわち、2つの表形式データの双方に関して、値リストの持つ意味合いを同一にした後に、所望の項目を取り出したビューを作成する「ビュー作成処理」、検索処理、集計処理、或いは、ソート処理が実行される。
【0034】
ビュー作成処理につき、以下に説明する。図13は、ビュー作成処理を示すフローチャート、図14は、具体的に、「顧客ID」、「顧客名」および「年会費」に関するビューを表示する処理を説明するための図である。
ここで、図13(a)は、ポインタ配列に基づき、値リスト中に関する項目値を表示する場合の処理を示し、図13(b)は、共有化した値リストに基づき、さらに他の値リストに関する項目値を表示すべき場合の処理を示す。たとえば、図14に示す「顧客ID」の表示に関する処理を述べると、まず、レコード番号が初期化される(ステップ1301)。次いで、「顧客ID」の情報ブロックにおいて、値リストへのポインタ配列中、レコード番号“0”に対応する行のポインタ値“0”が参照され(ステップ1302)、対応する項目値“1”が読み出される(ステップ1303)。したがって、顧客IDの一番上側の項目が“1”となる(ステップ1304)。全てのレコード番号について、上記ステップ1302〜1304の処理が繰り返される(ステップ1305、1306参照)。「顧客名」の表示についても同様の処理が行われる。より詳細には、レコード番号“0”に対応する行に位置するポインタ値“5”が参照され、対応する項目値“山田 ○男”が読み出される。これにより、表(ビュー)において、先頭の項目が“山田 ○男”となる。
【0035】
その一方、共有化された値リストに関する場合、すなわち、「SVC−ID」および「サービスID」のポインタ等を利用する場合には、図13(b)に示すように、レコード番号が初期化され(ステップ1311)、レコード番号“0”に対応する行の値リストへのポインタ値“3”が参照される(ステップ1312)。次いで、共有化された情報ブロック(この場合には、「サービスID」の情報ブロック)に関して先に生成したレコード番号へのポインタ配列(図11のステップ1106参照)において、ポインタ値“3”により示された行に位置するポインタ値が参照される(ステップ1314)。ステップ1314にて参照されるポインタ値は、値リストからレコード番号へ「逆引き」するものであり、このポインタ値に対応する行に位置する、他の情報ブロックの値リストへのポインタを経ることにより、必要な項目値を得ることが可能となる。
上記例では、レコード番号へのポインタ値“3”に基づき、「年会費」の情報ブロックにおいて、レコード番号“3”に対応する行の値リストへのポインタ配列中のポインタ値“0”が見出され、対応する項目値“12,000”を取り出すことができる。したがって、表において一番上側の項目が“12,000”となる。全てのレコード番号について、上記ステップ1312〜1315の処理を繰り返すことにより(ステップ1316、1317参照)、年会費の欄の項目をすべて得ることができる。このようにして、図8(c)に示すような表(請求額ビュー)を得ることが可能となる。
【0036】
次に、必要な項目に関してソートした表を得る処理につき説明を加える。図15は、この処理の内容を示すフローチャート、図16は、具体的に、「顧客ID」、「顧客名」および「年会費」に関するビューであって、かつ、「サービスID」に基づきソートされたビューを表示する処理を説明するための図である。この処理は、存在数配列等の生成(ステップ1501〜ステップ1507)と、ソート配列の生成(ステップ1508〜ステップ1513)とから構成されている。まず、レコード番号が初期化され(ステップ1501)、値リストの行数(項目数)と同じ行数を有する存在数配列が確保される(ステップ1502)。次いで、あるレコード番号について、値リストのポインタ配列が参照されて(ステップ1503)、ポインタ値に対応する行の存在数配列中の値(存在数)がインクリメントされる(ステップ1504)。たとえば、図16(a)において、「SVC−ID」の情報ブロックに関して、レコード番号“0”に対応する値リストへのポインタ配列中のポインタ値は“3”であり、したがって、存在数配列中の対応する行(4行目)の値(存在数)が“0”から“1”となる。或いは、レコード番号“2”に対応する値リストへのポインタ配列中のポインタ値は“1”であり、これにより、存在数配列中の対応する行(2行目)の値が“0”から“1”となる。このようにして全てのレコード番号に対して、ステップ1503およびステップ1504に示す処理を施すことにより(ステップ1505およびステップ1506参照)、図16(a)の符号1601に示すような存在数配列が作成される。
【0037】
存在数配列が完成すると、これに基づいて、累計数配列、および、ソートによりレコード番号が位置すべきメモリ空間中の位置を示す開始位置配列が生成される(ステップ1507)。この累計数配列は、初期的な開始位置配列と等しいものであり、後述する種々の処理にて利用される。なお、本明細書において、累計数配列或いは初期的な開始位置配列を初期値を示す位置指示配列或いは初期的な位置指示配列とも称する。
より詳細には、存在数配列中のある存在数が位置する行に対応する位置にある累計数および開始位置は、当該存在数の位置する行より番号の小さな行(図16では上側の行)にある存在数の総和となる。たとえば、第1行目の累計数および開始位置は“0”であり、第2行目の累計数および開始位置も、第1行目の存在数が“0”であるため、“0”となる。その一方、第3行目の累計数および開始位置は、第1行目の存在数が“0”、かつ、第2行目の存在数が“2”であるため、“(0+2=)2”となる。
【0038】
このようにして、存在数配列、累計数配列および開始位置配列が作成されると、作られた開始位置配列を利用して、各レコード番号をソートされた位置に配列する処理が実行される。まず、レコード番号が初期化され(ステップ1508)、レコード番号を格納すべき配列が確保される(ステップ1509)と、あるレコード番号について、値リストのポインタ配列が参照される(ステップ1510)。次いで、開始位置配列において、ステップ1510にて得られたポインタ値が示す行の開始位置が調べられ、レコード番号配列において、得られた開始位置に対応する領域に、当該レコード番号が格納される(ステップ1511)。たとえば、図16(b)において、「SVC−ID」の情報ブロックにおいて、レコード番号“0”に対応する値リストへのポインタ配列中のポインタ値は“3”であるため、対応する開始位置(4行目の開始位置)が参照される。この値は“5”であるため、レコード番号配列において、“5”に対応する位置(すなわち6行目)に、レコード番号“0”が格納される。
レコード番号の格納が終了すると、参照された開始位置をインクリメントする(ステップ1512)。これは、次に、この開始位置が参照されたときに、レコード番号中の、レコード番号を格納すべき位置をインクリメントしておく必要があるからである。このような処理を、必要な全てのレコード番号について実行する(ステップ1512、1513参照)ことにより、ソートされたレコード番号配列を得ることが可能となる(図17参照)。
【0039】
ソート処理が終了すると、図12に示す処理にて得られたレコード番号に対応する顧客ID、顧客名、年会費などの表示項目と、図15により得られたソートされたレコード番号配列とに基づき、所望の項目にてソートされた表(ビュー)を得ることができる。図18(a)は、このようにして得られた表(「サービスID」にてソートした請求額ビュー)を示す図である。たとえば、他の項目(たとえば「年会費」)にてソートする場合にも、同じ手法を用いて図18(b)に示すような表(「年会費」にてソートした請求額ビュー)を得られることが理解できよう。
このように、本実施の形態によれば、二つの表形式データにおいて、個々の表形式データを構成する情報ブロック中、共有化すべき値リストを見出し、当該値リストのもつ意味合いを共通にすることにより、二つの表形式データのジョインを実現することが可能となる。
【0040】
次に、本発明の第2の実施の形態につき説明を加える。第1の実施の形態では、共有化した情報ブロックにおいて、まず、一方の情報ブロック(「多:1」における「多」の側の情報ブロック)の値リストへのポインタ値を参照し、次いで、このポインタ値により示される、他方の情報ブロック(「多:1」における「1」の側の情報ブロック)レコード番号へのポインタ値を参照し、さらに、レコード番号へのポインタ値が示すレコード番号に対応する値リストへのポインタ値を参照している。たとえば、図14に示す例では、▲1▼「SVC−ID」の情報ブロック中の値リストへのポインタ配列、▲2▼「サービスID」の情報ブロック中のレコード番号へのポインタ配列、および、▲3▼「年会費」の情報ブロック中の値リストへのポインタ配列が用いられ、それぞれのポインタ値が順次参照されている。これに対して、第2の実施の形態では、一方の情報ブロック(「多:1」における「多」の側の情報ブロック)に、他方の情報ブロックのレコード番号へのポインタ配列を用意している。すなわち、上記▲1▼〜▲3▼のうち、▲1▼および▲2▼を統合したポインタ配列を、当該一方の情報ブロックに構築している。これにより、「多」の側の情報ブロックから、1側のレコード番号を特定することが可能となる。なお、第2の実施の形態において、情報処理装置10の構成、実行される処理等は、以下に述べる点を除き、第1の実施の形態のものと同様である。
【0041】
図19は、値リストの共有化のための処理を説明するための図である。図19(a)では、第1の実施の形態に関する顧客テーブルおよびサービステーブルに関する情報ブロックの一部を示し、図19(b)では、第2の実施の形態に関する情報ブロックの一部を示している。図19から理解できるように、第1の実施の形態では、ポインタ処理部36(図10参照)は、「サービスID」の情報ブロックの側に、「年会費」の情報ブロック中の、値リストへのポインタ配列を参照するためのポインタ配列(レコード番号へのポインタ配列)を生成した。これに対して、第2の実施の形態においては、ポインタ処理部36は、「SVC−ID」の情報ブロックの側に、最終的に参照したい情報ブロックである「年会費」の情報ブロックの値リストへのポインタ配列を参照するための、レコード番号へのポインタ配列を生成する。
より具体的には、第1の実施の形態において、共有化された値リストを含む情報ブロックのうち、「1」の側の情報ブロック(たとえば、図19(a)においては「サービスID」の情報ブロック)に関して作成されたレコード番号へのポインタ配列と等価なものを仮想的に作成し、「多」の側の情報ブロックから、直接「1」の側のレコード番号を指し示すことができるようなポインタ配列を作れば良い。
【0042】
なお、図19(b)に示す例では、「サービスID」の情報ブロックにおいて、レコード番号へのポインタ配列中のポインタ値が昇順で並んでいるため、「SVC−ID」の情報ブロックにおいて、値リストへのポインタ配列中のポインタ値と、レコード番号へのポインタ配列中のポインタ値とが一致しているが、必ずしも一致しないことは言うまでもない。
【0043】
本実施の形態によれば、「多:1」における多の側の情報ブロックに、レコード番号へのポインタ配列を作成するため、第1の実施の形態と比較して、ポインタ配列のサイズが大きくなる。しかしながら、ビューを作成したり、ソートを実行する場合に、参照するポインタ配列の数を減少させることができ、これにより、処理をさらに高速化することが可能となる。
【0044】
次に、本発明の第3の実施の形態につき説明を加える。この実施の形態においては、「多:1」における「1」の側で、最終的に項目値を表示すべき情報ブロック(図9に示す例では、「年会費」の情報ブロック)中に、ポインタ配列を設けている(図20参照)。すなわち、第2の実施の形態では「多」の側の情報ブロックに設けられていた、レコード番号へのポインタ配列(図19(b)参照)が、表(ビュー)にて示すべき項目に関する「1」の側の情報ブロックに設けられている。
この実施の形態によれば、「多」の側のテーブルに関するレコード番号から、直接、「1」の側のテーブルに関するレコード番号を特定することができるため、さらに処理を高速化することが可能となる。
【0045】
次に、本発明の第4の実施の形態につき説明を加える。第1ないし第3の実施の形態においては、重複値を持つ項目(=「多」)から重複値を持たない項目(=「1」)を経由するようなタイプ(「多:1」のタイプ)に関していたが、第4の実施の形態では、「多:多」のタイプにおいて、値リストを共有化する処理を実行している。
たとえば、図21に示すような2つの表形式のデータを考える。図21(a)においては、会員名と、会員が好きな野球チーム名が対応付けられており、図21(b)においては、球団名と試合日が対応付けられている。ここで、図21(a)を参照すると、「田中」さんは、「Aチーム」のファンであり、さらに、図20(b)を参照することにより、「Aチーム」の試合は、「5/10」および「5/11」であることがわかる。また、「鈴木」さんも「Aチーム」のファンであり、その試合が、「5/10」および「5/11」であることがわかる。
したがって、各会員が所望のチケットを示す表(チケット確認ビュー)は、図21(c)に示すようなものとなる。このビューでは、「ファン」ないし「球団名」という項目をジョインしているが、「ファン」という項目は重複値を持ち(つまり、「Aチーム」という項目値が重複して出現し)、その一方、「球団」という項目も重複値を持っている(つまり、「Aチーム」という項目値が重複して出現している)。重複値を持つ項目(=「多」)から重複値を持つ項目(=「多」)を経由するものであることを考慮して、このようなものを「多:多」のタイプと称する。
【0046】
また、「多:多」のタイプでは、論理的には、2つのテーブル(図21においては「野球愛好会会員テーブル」および「試合予定テーブル」)は対等であるが、ここでは、出力される表(ビュー)のデフォルトのソート順が反映されているテーブル(図21においては「野球愛好会会員テーブル」)を「主テーブル」、他方のテーブルを「従テーブル」と称する。また、本明細書において、上記主テーブルを場合によっては主表形式データ、従テーブルを従表形式データと称することもある。第1ないし第3の実施の形態と同様に、第4の実施の形態においても、CPU12は、図10に示すような構成を備え、CPU12により、図22に示すような処理が実行される。
【0047】
図22において、値リスト共有化の処理(ステップ2201)は、図11に示す処理に対応し、従テーブルに関する存在数配列等を生成する処理(ステップ2202)は、図15に示す処理の前段(ステップ1501〜ステップ1507)に略対応し、かつ、従テーブルのソート配列を生成する処理(ステップ2203)は、図15に示す処理の後段(ステップ1508〜ステップ1513)に略対応する。
ステップ2201においては、共有化すべき値リストが抽出され(図11のステップ1102)、項目値の変換が必要なものが選択されると(ステップ1103)、値リスト中の必要な項目値が挿入される(図11のステップ1104、並びに、図23の符号2301および2302参照)。次いで、変換された値リストを含む情報ブロックにおける、値リストへのポインタ配列中のポインタ値が更新される(図11のステップ1105、並びに、図23の符号2303および2304参照)。図23の例では、主テーブルの値リストおよび値リストへのポインタ配列の変換ないし更新が行われているが、必ずしも主テーブルに関する変換等のみが行われるものではなく、従テーブルに関する変換等や双方のテーブルに関する変換等が行われても良い。
【0048】
次いで、ステップ2202において、従テーブルに関して、存在数配列(図示せず)、累計数配列(図示せず)および開始位置配列(図24の符号2402参照)が生成される。ステップ2401が終了した状態では、累計数配列中のある行の値と、開始位置配列の対応する位置の値とは等しくなっている。従テーブルにおいて、共有された値リストと対応する存在数配列、開始位置配列ができた後に、従テーブルに関するソート配列が生成される(ステップ2203)。図24では、「球団」の情報ブロックにおいて、レコード番号“0”に対応する値リストへのポインタ配列中のポインタ値は“2”であるため、対応する開始位置(開始位置配列の3行目)が参照され(図15のステップ1510参照)、この値“3”にしたがって、ソート配列(レコード番号配列)の対応する位置(すなわち4行目)に、レコード番号“0”が配置される(図15のステップ1511参照)。また、参照された開始位置にある値がインクリメントされ、“3”から“4”に変化する。
【0049】
従テーブルに関する各レコード番号が、ソート配列(レコード番号配列)の所定の位置に配置された(図24の符号2401参照)後に、主テーブルの値リストへのポインタ配列を新たに生成する。これは、本実施の形態のような「多:多」のタイプでは、主テーブルの側の情報ブロック中の項目値が複数回出現するため、これに対応できるようにするためのものである。
より詳細には、図25に示すように、レコード番号の初期化(ステップ2501)の後、あるレコード番号に関して、共有化した値リストを含む情報ブロック内の値リストへのポインタ配列が見出され、レコード番号に対応する位置(行)のポインタ値が参照される(ステップ2502)。次いで、従テーブルのソート(ステップ2203参照)により作成された累計数配列および開始位置配列が見出され、ポインタ値が示す位置の開始位置と累計数との差が算出される(ステップ2503)。
【0050】
この差は、従テーブルにおいて、共有化された値リストを含む情報ブロックの値リスト中の項目値が、主テーブルのあるレコード番号について、何回重複して現れるかを表わしている。したがって、ジョインした表(ビュー)において、本来主テーブル側にあった項目に関する情報ブロック中の値リストへのポインタ配列が、上記重複度を示す差に基づき拡張される(ステップ2504)。すなわち、あるレコード番号に関して、算出された差が“d”であった場合には、新たに生成すべき値リストへのポインタ配列において、レコード番号に対応したポインタ値が“d”個に増加する。
【0051】
図26において、たとえば、レコード番号“0”に関して、共有化した値リストを含む「ファン」の情報ブロック中の値リストへのポインタ配列が見出される。このポインタ配列において、レコード番号“0”に対応する位置(1行目)のポインタ値は“0”であるため、従テーブルの側にて共有化された値リストを含む「球団」の情報ブロック中の累計数配列および開始位置配列のうち、1行目の累計数および開始位置が参照され、開始位置と累計数との差(2−0=2)が算出される。次いで、ジョインした表(ビュー)を作成するため、主テーブルにおける「会員名」の情報ブロックの値リストへのポインタ配列を拡張した新たなポインタ配列が作成される。なお、新たなポインタ配列を含む情報ブロック(「チケット・会員名」の情報ブロック中の値リストは、主テーブルの「会員名」の情報ブロックに含まれるものと同一である。これは、「会員名」の項目値自体は両者において共通だからである。このようにして、ポインタ値が“2”であるようなポインタが2つ作られることになる。
同様に、レコード番号“1”に関して、「ファン」の情報ブロック中の、レコード番号“1”に対応する位置(2行目)のポインタ値は2であるため、「球団」の情報ブロックにおいて、対応する位置(3行目)の累計数および開始位置が取り出され、後者から前者を引いた値(4−3=1)が算出される。したがって、「チケット・会員名」の情報ブロックにおいて、先に作られたポインタに引き続いて、「会員名」の情報ブロックの対応する値“0”をもつポインタが作成される。
【0052】
また、同じ手法により、主テーブルの「ファン」も表(ビュー)に表示すべき項目であるため、当該「ファン」の情報ブロックに関しても、「チケット・ファン」という新たな情報ブロックが生成される(図29(b)参照)。
このようにして主テーブル側の値リストのポインタ配列が生成された後に、従テーブル側の値リストのポインタ配列が生成される(ステップ2205)。これは、主テーブル側において項目値が複数回出現するのにしたがって、従テーブル側でも、これに対応した項目値を表示するための処理である。より詳細には、図27に示すように、レコード番号の初期化(ステップ2701)の後に、ある主テーブル側のレコード番号に関して、当該主テーブル側において共有化された情報ブロックの値リストへのポインタ配列中、当該レコード番号に対応する位置(行)のポインタ値が参照される(ステップ2702)。次いで、従テーブルのソート(ステップ2203参照)により作成された累計数配列および開始位置配列とが見出され、上記ポインタ値にて示される位置(行)の累計数および開始位置が参照される(ステップ2703)。ここで、ソート後のレコード番号配列、つまり、ソート配列(図24の符号2401参照)において、どの位置からどれだけの数のレコード番号が、主テーブルのレコード番号に関連しているかを、それぞれ、累計数および開始位置から見出すことができる。すなわち、上記位置は、累計数に示す位置に一致し、上記数は、開始位置と累計数との差に一致する。
【0053】
したがって、ステップ2703にて参照した累計数および開始位置にしたがって、レコード番号が取り出され、ジョインした表(ビュー)にて表示すべき項目を備えた情報ブロック中の値リストへのポインタ配列において、各レコード番号が示すポインタ値が取り出され、新たなポインタ配列として順に並べられる(ステップ2703)。これにより、ジョインすべき情報ブロック群のうち、主テーブルに由来すべきものはその作成を完了したことになる。
【0054】
図28において、レコード番号“0”に関して、「ファン」の情報ブロックにある値リストのポインタ配列中の対応する位置(1行目)のポインタ値は“0”であるため、ソート処理を施した従テーブル側の情報ブロック(「球団」の情報ブロック)において、上記ポインタ値“0”に対応する位置(1行目)の累計数“0”および開始位置“2”が取り出される。これら値により、ソート後の集合(ソート配列)において“0”に対応する位置(1行目)から“2−0=2”個のレコード番号“1”および“3”が、主テーブルのレコード番号“0”に関連する従テーブルのレコード番号であることが理解できる。したがって、従テーブル側で、表(ビュー)に表示すべき項目である「試合日」の情報ブロック中、レコード番号“1”および“3”の示す位置(2行目および4行目)のポインタ値“0”および“1”が順次取り出され、新たなポインタとして、ジョインした表(ビュー)用の情報ブロックである「チケット・試合日」の情報ブロックの値リストに配置される。なお、この「チケット・試合日」の情報ブロックに含まれる値リストは、従テーブルにおける「試合日」の情報ブロックに含まれる値リストと共通である。
【0055】
同様に、レコード番号“1”に関して、「ファン」の情報ブロックにある値リストのポインタ配列中の対応する位置(2行目)のポインタ値は“2”であるため、「球団」の情報ブロックの、対応する位置(3行目)の累計数“3”および開始位置“4”が取り出される。これにより、ソート後の集合(ソート配列)において、累計数“2”に対応する位置(4行目)から“3−2=1”個のレコード番号“0”が、主テーブルのレコード番号“1”に対応する従テーブルのレコード番号であることが理解できる。したがって、「試合日」の情報ブロック中の値リストへのポインタ配列において、レコード番号の示す位置(1行目)のポインタ値“0”が取り出され、これが、「チケット・試合日」の情報ブロックに含まれる値リストへのポインタとして、先に作られたポインタ(主テーブルのレコード番号“0”に対応して作られたポインタ)に引き続いて配置される。
【0056】
図29は、上述した処理により得られた、ジョインされた表(ビュー)の作成のための情報ブロックを示す図である。図29(a)および(b)は、主テーブル側の情報ブロックに基づき、図25に示す処理によって作成されたものであり、図29(c)は、従テーブル側の情報ブロックに基づき、図27に示す処理によって作成されたものである。上述した処理により、各情報ブロックにおいて、重複して現われる項目値に対応することができる。したがって、先頭(第1行目)から順に、値リストのポインタ値にて示される項目値を取り出すことにより、表(ビュー)に示すべき項目値を得ることが可能となる。これは、仮想的な配列(ビューのための拡張されたレコード番号配列)が作られ、各レコード番号ごとに対応するポインタ配列中のポインタ値に基づき、項目値が得られていることを意味している。
たとえば、先頭(第1行目)に関して、「チケット・会員」の情報ブロックのポインタ配列における対応するポインタ値は“2”であるため、項目値「田中」を表示すべきと決定することができ、「チケット・ファン」の情報ブロックのポインタ配列における対応するポインタ値は“0”であるため、項目値「Aチーム」を表示すべきと決定することができ、かつ、「チケット・試合日」の情報ブロックのポインタ配列における対応するポインタ値は“0”であるため、項目値「5/10」を表示すべきと決定することができる。
【0057】
以上詳細に説明したように、本実施の形態においては、2つの表をジョインする場合に、出力される表(ビュー)のデフォルトのソート順が反映されているテーブルを「主テーブル」と定義し、他方の側のテーブルを「従テーブル」と定義している。また、双方のテーブルにおいて、情報ブロック中の値リストを共有化した後、従テーブル側の共有化された値リストを含む情報ブロックに基づき、従テーブル側のレコード番号をソートする。すなわち、従テーブルのリンク項目でソートする。次いで、主テーブルおよび従テーブルの双方に関して、「多:多」による重複を考慮したポインタ配列を、前記ソートにより得られた各項目値の累計数および最終的な開始位置に基いて、その重複度を知ることにより生成する。その後、重複を考慮した変換配列(仮想的なレコード番号)に基づき、対向する項目値を取り出すことにより、適切なビューを得ることが可能となる。
【0058】
このように、表(ビュー)を作成するための情報ブロック(たとえば、図29における「チケット・会員」、「チケット・ファン」および「チケット・試合日」の情報ブロック)を作成すれば、各情報ブロックに、図4(b)、(c)等を参照して説明した分類番号配列、存在数配列、開始位置配列を設けることにより、値リスト中の単一或いは複数項目を用いた検索、集計或いはソートを容易にできることは明らかである。この場合、図4等に関して説明したものでは、「レコード番号」を利用していたが、本実施の形態では、その代わりに上記「変換配列(仮想的なレコード番号)」を利用すれば良い。
【0059】
次に、本発明の第5の実施の形態につき説明を加える。第5の実施の形態においても、「多:多」のタイプに関するジョインを実現しているが、主テーブルおよび/または従テーブルの側にて必要なメモリ容量を削減している。
まず、主テーブル側のメモリ容量の削減手法につき説明を加える。図25のステップ2504および図26を参照すると、従テーブルにおいて、共有化された値リストを含む情報ブロック中の項目値が、主テーブルのレコード番号について、何回重複して現われるかが算出され、これにより、主テーブル側で、表(ビュー)にて表わすべき項目の各情報ブロック内に、拡張された値リストへのポインタ配列が生成されている。ところで、従テーブル側における重複度にしたがって、ポインタが拡張されているため、その重複度は、主テーブル中の各レコード番号で共通である。たとえば、図29(a)、(b)に示すように、双方の情報ブロックにおける値リストへのポインタ配列中のポインタ値に着目すると、第1行目および第2行目のポインタ値が共通している。同様に、第4行目および第5行目も共通している。これらは、従テーブル側の重複度にしたがって共通しているものであり、したがって、主テーブル側に、上記重複度を考慮した配列を一つ設けておくことにより、各情報ブロック中の値リストへのポインタ配列を設ける必要がなくなる。
【0060】
図30は、主テーブル側に設けられた変換配列(仮想的なレコード番号)を説明するための図である。図30から明らかなように、このような変換配列を作っておけば、主テーブル側に関して、図29と同じようなビュー項目を得ることが可能となる。このような変換配列は、図25のステップ2504の処理を若干変更することにより生成され得る。すなわち、主テーブルのレコード番号に対応するポインタ配列中のポインタ値を経ることにより、従テーブル側のソートされた情報ブロックの累計数配列および開始位置配列に到達することができる。ここで、上記レコード番号に対応する開始位置と累計数との差を算出することにより、レコード番号の重複度を得ることができる。そこで、重複数だけレコード番号を繰り返すような新たな変換配列を得ることが可能となる。
この実施の形態では、仮想的な情報ブロック(図30の符号3001、3002参照)を、実際に作成する必要がないことが理解できよう。つまり、仮想的なレコードである変換配列のみを作ることにより、主テーブル側の情報ブロックの値リストへのポインタ配列を参照することにより、表(ビュー)作成のたびに、仮想的な情報ブロックの値リストへのポインタ配列を得ることが可能となる。したがって、主テーブル側において変換配列を作成し、これを保持するのみで、ジョインされた表(ビュー)の生成が可能となる。
【0061】
次に、従テーブルのメモリ容量の削減手法につき説明を加える。従テーブル側でも、全ての項目に共通の変換配列を作成することにより、保持すべきメモリ容量の削減が可能となる。図31は、従レコード側の変換配列作成の処理を示すフローチャートである。ステップ3101ないしステップ3103の処理は、図27のステップ2701ないし2703の処理と類似している。より詳細には、主テーブル側のあるレコード番号に関して、主テーブル側において共有化された情報ブロックの値リストへのポインタ中、当該レコード番号に対応する位置(行)のポインタ値が参照され(ステップ3102)、次いで、このポインタ値に対応する累計数および開始位置が特定され、開始位置と累計数との差を算出することにより、ソート後のレコード番号の集合(ソート配列)において、対応するレコード番号が格納されている範囲が特定される(ステップ3103)。その後、特定されたレコード番号が、変換配列中に順次格納される。
【0062】
図32は、従テーブル側の変換配列作成の一例を示す図である。図32(a)において、主テーブルのレコード番号“0”に対応して、共有化された「ファン」の情報ブロックの対応するポインタ値“0”が参照される。従ブロック側にてソート処理が施された「球団」の情報ブロックの対応する位置(1行目)の開始位置と累計数との差は“2”であるため、ソート後のレコード番号の集合(ソート配列)において、先頭から2つのレコード番号“1”および“3”が、上記主テーブルのレコード番号“0”に関連するものと理解できる。したがって、先頭から“1”および“3”という値が変換配列に格納される。同様に、図32(b)において、主テーブルのレコード番号“1”に対応して参照される「ファン」の情報ブロックのポインタ値“2”に基づき、「球団」の情報ブロックの対応する位置(3行目)の開始位置“4”および累計数“3”が特定される。これらの差が“1”であるため、ソート配列において、累計数“3”にて示される位置(4行目)から“1”つのレコード番号“0”が、主テーブルのレコード番号“1”に対応するレコード番号であることが理解できる。したがって、上記図32(a)に示す変換配列において、主レコード番号“0”に関して格納された領域に引き続く領域に、レコード番号“0”が格納される。このような処理を繰り返すことにより、従テーブルにて共通の変換配列を得ることが可能となる。
図33は、上述した処理により得られた従テーブル側の変換配列に基づき、仮想的な「試合日」の情報ブロックを得る手順を説明する図である。図33に示すように、変換配列中の値から、値リストへのポインタ配列中の対応するポインタ値を経ることにより、ジョインされた表(ビュー)にて利用し得る仮想的な情報ブロックを作成することができる。主テーブルに関する説明と同様に、この仮想的な情報ブロックは、表(ビュー)の作成のたびに生成すれば良い。すなわち、変換配列のみを作っておけば、作成すべき表(ビュー)にしたがって、所望のように仮想的な情報ブロックを生成することが可能となる。
【0063】
なお、主テーブル側の変換配列或いは従テーブル側の変換配列の何れか一方のみを作っておいても良い。たとえば、何れか一方のテーブル側のみに関して、メモリ容量が増大する場合には、一方のテーブル側に関してのみ、変換配列を作っても良い。無論、双方のテーブルに関する変換配列を作成しても良いことは言うまでもない。
また、この実施の形態でも、検索やソートは第4の実施の形態と同様の手法を用いることが可能である。
本実施の形態によれば、「多:多」のタイプにおいて、主テーブルおよび/または従テーブルに、変換配列を一つずつ保持することにより、新たに情報ブロックを作成することなくジョインした表(ビュー)を得ることが可能となる。したがって、必要なメモリ容量を削減することが可能となる。
【0064】
次に、本発明の第6の実施の形態につき説明を加える。第4および第5の実施の形態においては、主テーブルおよび従テーブル中の、単一の項目(情報ブロック)に関して、その値リストを共有化したが、第6の実施の形態においては、複数の項目のジョインを実現している。
たとえば、図34(a)および(b)に示すような、2つのテーブル(人名テーブルおよび年齢テーブル)を考える。まず、人名テーブルに着目すると、「会員姓」という項目と「会員名」という項目とを見出すことができる。その一方、年齢テーブルに着目すると、「年・会員姓」という項目、「年・会員名」という項目および「年齢」という項目を見出すことができる。したがって、人名と年齢とを含む人名年齢ビューという表(ビュー)を作成するためには、「会員姓」と「年・会員姓」とをジョインするとともに、「会員名」と「年・会員名」とをジョインする必要がある(図34(c)参照)。なお、上記例では、人名テーブルを、項目の順序が維持されるもの(主テーブル)としている。
【0065】
上述したような複数の項目をジョインした表(ビュー)を作成する手法につき以下に説明を加える。図35は、第6の実施の形態にかかる処理を示すフローチャートである。図35に示すように、まず、共有化すべきすべての値リストに関して、共有化の処理が実行される(ステップ3501)。各共有化は、図11に示す処理に対応する。図34に示す例では、人名テーブルにおける「会員姓」の情報ブロック中の値リストと、年令テーブルにおける「年・会員姓」の情報ブロック中の値リストとが共有化されるとともに、人名テーブルにおける「会員名」の情報ブロック中の値リストと、年令テーブルにおける「年・会員姓」の情報ブロック中の値リストとが共有化される(図36参照)。
次いで、主テーブルに関して、ジョインした表(ビュー)を得る際に必要な項目を結合した仮想の値リストに対するポインタ配列が作成される(ステップ3502)。たとえば、共有化したテーブルが2つであり、その一方の値リストにおいて“p”個の項目値が格納され、かつ、他方の値リストにおいて“q”個の項目値が格納されている場合には、これらの組み合わせとして、“p×q”個の項目値を持つ仮想の値リストが考えられる。その一方、実際に作成される値リストへのポインタ配列には、主テーブルのレコード番号の数と、同じ数のポインタ値が格納される。
【0066】
より詳細には、“i”番のポインタ値Pmi(0≦i≦p−1、p:一方の値リストにおける項目値の数)は、以下のようにして算出される。ジョインすべき項目の一方の情報ブロックに関して、値リストへのポインタ配列中、“i”番目のポインタ値をPm1i、他方の情報ブロックに関して、値リストへのポインタ配列中、“i”番目のポインタ値をPm2iとすると、(1)式により得られる。
ポインタ値Pmi=Pm1i*q+Pm2i ……(1)
(q:他方の値リストにおける項目値の数)
また、従テーブルに関して、ジョインした表(ビュー)を得る際に必要な項目を結合した仮想の値リストに対するポインタ配列が作成される(ステップ3503)。このポインタ配列には、従テーブルのレコード番号の数と、同じ数のポインタ値が格納される。
“j”番のポインタ値Psj(0≦j≦p−1、p:一方の値リストにおける項目値の数)も、上記主テーブルに関するポインタ値と同様に算出される。すなわち、ジョインすべき項目の一方の情報ブロックに関して、値リストへのポインタ配列中、“j”番目のポインタ値をPs1j、他方の情報ブロックに関して、値リストへのポインタ配列中、“j”番目のポインタ値をPs2jとすると、(2)式により得られる。
ポインタ値Psj=Ps1j*q+Ps2j ……(2)
(q:他方の値リストにおける項目値の数)
なお、ジョインすべき項目が3つの場合には、“i”番のポインタ値Pmi(0≦i≦p−1、p:何れかの値リストにおける項目値の数)は、(3)式にしたがって求めることができる。
ポインタ値Pmi=Pm1i*q+Pm2i*r+Pm3i …(3)
なお、ここで、Pm1iは、ジョインすべき項目のうち、第1の情報ブロックに関して、値リストへのポインタ配列中、“i”番目のポインタ値、Pm2iは、第2の情報ブロックに関して、値リストへのポインタ配列中、“i”番目のポインタ値、Pm3iは、第3の情報ブロックに関して、“i”番目のポインタ値であり、また、“q”は、第2の値リストにおける項目値の数、“r”は第3の値リストにおける項目値の数である。項目が4つ以上の場合にも同様の手法にて、ポインタ値を求めることができることは言うまでもない。
【0067】
図37は、上記人名テーブルおよび年令テーブルに関して、仮想の値リストに対する値リストへのポインタ配列を説明する図である。主テーブルである「人名テーブル」において、「会員姓」の情報ブロックに着目すると、値リストへのポインタ配列中、レコード番号“0”に対応する(すなわち1行目の)ポインタ値は“1”であり、その一方、「会員名」の情報ブロックに着目すると、値リストへのポインタ配列中、1行目のポインタ値は“0”である。したがって、仮想の値リストへのポインタ配列において、レコード番号“0”に対応する(すなわち1行目の)ポインタ値は、1*q(ここでは4)+0=4となる。また、レコード番号“1”に関して、仮想の値リストへのポインタ配列において、対応するポインタ値は、0*4+3=3となる。
【0068】
ここで、上記仮想の値リストへのポインタ配列におけるポインタ値の意味につき以下に説明する。上記例では、「人名テーブル」において、「会員姓」の情報ブロックに関するポインタ値の数pが3であり、「会員名」の情報ブロックに関するポインタ値の数qが4であった。
レコード番号“0”に着目すると、仮想の値リストへのポインタ配列におけるポインタ値は“4”である。この値は、“4/q=4/4=1”であることから、「会員姓」の情報ブロックの値リストを参照すると、「鈴木」姓であることが理解できる。また、“4mod(q)=4mod4=0”であることから、「会員名」の情報ブロックの値リストを参照すると、名前が「一郎」であることが理解できる。また、レコード番号“1”および“2”にそれぞれ着目すると、仮想の値リストへのポインタ配列におけるポインタ値が“3”および“5”である。これら値は、それぞれ、“3/q=3/4=0”および“5/q=5/4=1”であることから、「会員姓」の情報ブロックの値リストを参照すると、それぞれ、「佐藤」姓および「鈴木」姓であることが理解できる。また、それぞれ、“3mod(q)=3mod4=3”および“5mod(q)=5mod4=1”であることから、「会員名」の情報ブロックの値リストを参照すると、それぞれの名前が「ヨサク」および「大拙」であることが理解できる(図38参照)。
従テーブルである「年齢テーブル」に関しても、同様の手法により、仮想の値リストへのポインタ配列中のポインタ値が得られている。得られたポインタ配列中のポインタ値の持つ意味も、主テーブルのものと同様である(図39参照)。
【0069】
ステップ3502およびステップ3503の処理により、複数項目を単一項目と同様に考えることができる。したがって、従テーブルの情報ブロックにおいて、仮想の値リストへのポインタ配列を用いて、レコード番号へのポインタ配列のポインタ値が生成されて、これらが所定の位置に格納される(ステップ3504)。この手法は、図11のステップ1105にて用いたものと同様である。再度説明すると、まず、従テーブルの仮想的な情報ブロックにおいて、仮想の値リストと同じ大きさの配列が用意される。次いで、値リストへのポインタ配列の先頭からポインタ値をスキャンし、“i”番目のポインタ値が“j”である場合に、用意した配列において、“j”番目の要素として、値“i”を格納するような処理が実行される。
【0070】
図40においては、従テーブルである「年齢テーブル」に関して、共有化により得られた仮想的な値リストを含む「年・会員姓+年・会員名」という仮想的な情報ブロック中の値リストへのポインタ配列(ステップ3503参照)に格納された各ポインタ値が参照される。たとえば、レコード番号“0”に対応するポインタ値は“3”であるため、レコード番号へのポインタ配列においては、対応する位置(4行目)にレコード番号“0”が格納される。
このようにしてレコード番号へのポインタ配列が作られた後に、ジョインした表(ビュー)が得られる(ステップ3505)。より詳細には、主テーブルのレコード番号により、主テーブルの情報ブロックにおいて、その項目値を取り出すべき値リストへのポインタ配列中のポインタ値が指定される。また、仮想の値リストを含む情報ブロックにおける値リストへのポインタ配列中のポインタ値を参照し、このポインタ値に基づき、ステップ3504にて得られたレコード番号へのポインタ値が特定される。このポインタ値により示されるレコード番号は、従テーブルのものであるため、表示すべき項目を備えた値リストを含む情報ブロックにおいて、対応する位置のポインタ値が見出され、これにより値リスト中の項目値が特定される。
【0071】
図41において、主テーブルのレコード番号(たとえば、“0”)から、主テーブルにおける「会員姓」の情報ブロック、および、「会員名」の情報ブロック中の値リストから、項目値(たとえば、“鈴木”および“一郎”)が得られる。その一方、上記レコード番号から、仮想の値リストを含む「会員姓+会員名」の情報ブロックの値リストへのポインタ配列における対応するポインタ値(たとえば、“4”)が得られ、これにより、従テーブルのレコード番号(たとえば、“1”)が見出される。したがって、従テーブル中の表示すべき項目を有する「年齢」の情報ブロックの値リストから、対応する項目値(たとえば、“22”)を取り出すことが可能となる。
【0072】
本実施の形態によれば、ジョインすべき複数の項目を単一の項目として取り扱うために、複数の項目を結合した状態の情報ブロックを形成し、この情報ブロックにてとり得る仮想的な項目値に対応するポインタ配列を用いて、必要なレコード番号やポインタ値を特定している。また、上記仮想的な項目値を含む値リストを実際に作ることなく、この値リスト中の項目値を指定するためのポインタ配列のみを作成している。たとえば、2つの項目の項目値が、それぞれ、“p”、“q”であった場合には、“p×q”のサイズのレコード番号へのポインタ配列を作成すれば足りる。したがって、実際に結合された項目値を備えた莫大な量の値リストを作成することなく、複数項目のジョインを実現することができる。
【0073】
次に、本発明の第7の実施の形態につき説明を加える。上記第6の実施の形態では、複数の項目を結合した状態の情報ブロックを作成し、この情報ブロックに関して、レコード番号へのポインタ配列を作成した。しかしながら、上記2つの項目の項目値を“p”、“q”とした場合、それぞれが非常に大きい場合(たとえば、100,000であった場合)に、レコード番号へのポインタ配列だけでも非常に大きなものとなってしまう。そこで、第7の実施の形態においては、仮想的な値リストへのポインタ配列を生成することなく、複数項目を多次元的(たとえば、二次元的)に記述した値リストを生成することにより、ポインタ配列を巨大化することを防止している。上記複数項目を記述した値リストの項目値を、本明細書において、場合によっては多次元配列と称する。
図42は、第7の実施の形態にかかる処理を示すフローチャートである。この処理においても、図35のものと同様に、まず、共有化処理が実行される(ステップ4201)。次いで、主テーブルに関して、ジョインすべき複数の項目のそれぞれについて、レコード番号がソートされる(ステップ4202)。これによりソートされたレコード番号が格納された配列(ソート配列或いはソート後レコード番号リスト)が生成される。
【0074】
ジョインすべき項目が2つの場合には、2回のソート処理が実行される。たとえば、図43に示すように、主テーブルに関して、「会員名」および「会員姓」の双方の項目をジョインすべき場合には、共有化の後に、レコード番号が、「会員名」の情報ブロック中の値リストの順序にしたがってソートされ、次いで、「会員姓」の情報ブロック中の値リストの順序にしたがってソートされる。
次いで、ソート配列中のレコード番号を参照することにより、複数項目を結合した値リスト、および、値リストへのポインタ配列が生成される(ステップ4203)。より詳細には、図44に示すように、ソート配列の番号を初期化した(ステップ4401)後に、複数項目のうちの何れかに対応する情報ブロック中の値リストへのポインタ配列に着目し、ソート配列中に格納されたレコード番号が示す位置に格納されたポインタ値が特定される(ステップ4402)。上記複数項目の全てに対して、ステップ4402の処理が施されると(ステップ4403、4404参照)、新たな値リストにおいて、ソート配列の番号に対応する位置に、複数のポインタ値が、所定の順序で配置される(ステップ4405)。このようにして配置された複数のポインタ値(多次元配列であるポインタ値)が、値リスト中の項目値となる。
【0075】
さらに、上記新たな値リストの項目値を指定するためのポインタ配列の対応するポインタ値が生成される(ステップ4406)。すなわち、上記値リストへのポインタ配列において、レコード番号に対応する位置に、項目値が格納された位置を示す値が格納される。これにより、レコード番号から、値リストへのポインタ配列中の対応するポインタ値が取り出され、かつ、多次元配列のポインタ値を項目値として格納している値リストにおいてポインタ値が示す項目値が取り出され得る。
上記ステップ4402〜ステップ4407の処理を全てのソート配列の番号に関して実行して(ステップ4407、4408参照)、処理が終了する。
【0076】
図45および図46は、図43に示すソート処理の後に、「会員姓+会員名」という情報ブロックを作成した例を示す図である。図45に示すように、ソート配列(ソート後レコード番号リスト)において先頭(第1番目)に格納されたレコード番号は“1”であるため、各情報ブロックの値リストへのポインタ配列において、対応する位置(2行目)のポインタ値が取り出され、このポインタ値“0”および“3”が決められた順序で、「会員姓+会員名」の新たな情報ブロックの値リストにおいて、先頭の位置に二次元配列“0 3”として格納される。また、当該値リストが格納されている位置が、値リストへのポインタ値として、ポインタ配列中のレコード番号が示す位置に配置される。ソート配列に格納された他のレコード番号についても、同様の手順で、二次元配列である項目値および値リストへのポインタ配列中のポインタ値が格納される。
従テーブルに関しても、ステップ4202およびステップ4203と同様の処理が実行される(ステップ4204、4205)。上述した例に関して、「年齢テーブル」の「年・会員姓+年・会員名」の情報ブロックが生成され、必要な値リストへのポインタ配列および二次元配列の項目値を有する値リストが作られる(図47参照)。
【0077】
このようにして、主テーブルおよび従テーブルにおいて、複数項目を二次元配列の項目値にて表わしたような値リストが得られると、これら値リストを含む情報ブロック、および、表(ビュー)に示すべき項目に関する他の情報ブロックを用いて、図11と同様な処理が実行される。すなわち、複数項目を二次元配列の項目値にて表わしたような値リストが共有化される(ステップ1101〜ステップ1105参照)。次いで、上記他の情報ブロック中の値リストの項目値を特定するために、レコード番号へのポインタ配列が生成される(ステップ1106)。このようにして、所定のポインタ配列や値リストの更新や生成をした後に、図12に示す処理を実行して、項目値を取り出すことにより所望の表(ビュー)が作成される。
【0078】
図48は、第7の実施の形態において、図12に示す処理による表(ビュー)の作成を説明するための図である。たとえば、レコード番号“0”に関して、複数項目を二次元配列の項目値にて表わした値リストを含む情報ブロック(「会員姓+会員名」の情報ブロック)において、対応する値リストへのポインタ配列中のポインタ値は“0 3”である。これら値のうち前者(すなわち“0”)は、項目値“鈴木”を意味しており、後者(すなわち“3”)は、項目値“一郎”を意味している。したがって、表(ビュー)において、先頭の行に“鈴木”および“一郎”が表示される。その一方、レコード番号“0”について、他のテーブルへのレコード番号へのポインタ配列において、対応する値は“1”である。したがって、「年齢」の情報ブロック中、値リストへのポインタ配列の対応する位置のポインタ値“0”が見出される。したがって、ポインタ値が示す位置の項目値“22”が、先頭の行に表示される。他のレコード番号についても、同様な手順で、項目値が得られることは言うまでもない。
本実施の形態によれば、必要なメモリ容量を削減しつつ、複数項目のジョインを実現することが可能となる。
【0079】
次に、本発明の実施の形態にかかる手法を用いて、表形式データをジョインし、かつ、ジョインされた表形式データのうち所定の項目を含む表(ビュー)を作成する処理と、従来の手法を用いて同様の表(ビュー)を作成する処理との比較について簡単に述べる。
本発明の実施の形態に関しては、プロセッサとして、PentiumPro(登録商標)を200MHZにて作動させ、RAM上に、表形式データを構成する収集の情報ブロックを作成した。表形式データとして、ユーザID(0〜9999:項目1)および贔屓の野球球団名(12球団:項目2)を備えたユーザテーブル(10000レコード)と、試合番号(0〜119:項目1)、野球球団名(12球団:項目2)、各試合の得点(0〜19点)を備えた試合テーブル(120×12=1440レコード)とを考え、各ユーザごとに、ユーザが贔屓にしている球団の得点の一覧表を作成した。この場合に、総レコード数は、10000(ユーザ)×120(試合)=120万レコードとなる。上記レコードを第5の実施の形態に基づき、かつ、主テーブルおよび従テーブルの双方のメモリを節約するような手法で一覧表を作成するために、平均で0.195秒を要した。
これに対して、従来の手法にしたがって、市販のデータベースとしてInterBase4.2(登録商標)を利用し、クライアントとしてParadox7(登録商標)を利用したマシン(プロセッサとしてPentiumPro(登録商標)を上記処理と同一条件で作動させた)にて、上記表形式データをジョインさせ、ビューを作成すると510秒を要した。したがって、本発明によれば、従来のものの略3000倍の速度で、表形式データのジョインおよび表(ビュー)の作成が実現できることがわかった。
【0080】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、前記第1の実施の形態において、図18(b)のように、キー項目以外の項目にてソートした表(ビュー)を表示する場合につき説明を加える。図18(a)に示すように、キー項目にてソートして表(ビュー)を表示する場合には、キー項目となる情報ブロック(上記例では「サービスID」の情報ブロック)に関して、値リストの項目値ごとの、メイン表形式データのレコード数が算出され(存在数配列)、これに基づきメイン表形式データのレコード番号をソートした状態で再配置している(図17参照)が、それ以外の項目によるソートのためには、若干の手順が加えられる。
【0081】
第1の実施の形態にしたがった手法においては、図49(a)に示すように、キー項目に関する情報ブロック(この場合には「サービスID」の情報ブロック)を介して、他の情報ブロック(このばあいには「年会費」の情報ブロック)に存在数配列や累計数配列等が生成される。すなわち、共有化された値リストを有する情報ブロックを介して、ソートされたメイン表形式データに関するレコード番号(親レコード番号)の配列が生成される(図49(b)参照)。
【0082】
また、前記実施の形態においては、ジョインおよび表(ビュー)の作成毎に、値リストを共有化させるべき情報ブロックの特定や、存在数配列および/または開始位置配列の算出、変換配列の生成等を実行しているが、予め必要と思われるものをジョインし、或いは、必要な配列を生成しておいても良い。さらに、表形式データに基づく所定の形態の情報ブロックの構築は、表形式データを受け入れた時点で予め実行しても良いし、表(ビュー)の作成の指示に応答して実行しても良い。
【0083】
さらに、前記第6および第7の実施の形態においては、複数の表形式データにおいて、2つの項目をジョインして、所定の項目に関する項目値を提示する手法について述べたが、3つ以上の項目をジョインすることも可能であることは言うまでもない。たとえば、前記第6の実施の形態に関しては、上述したように(p×q×r)個のポインタ値を備えた仮想の値リストへのポインタ配列を作成し、当該仮想の値リストへの対応を決定しておけば良い。或いは、第7の実施の形態に関しては、各々が3個以上の値からなる多次元配列の集合となるような値リストを設ければ良い。
【0084】
さらに、前記実施の形態においては、一般のコンピュータシステム10内に、所定のプログラムを読み込み、当該プログラムを実行することにより、複数の表形式データのジョインおよびジョインされた表形式データに関する処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データベース処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアによって実現される場合も包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【0085】
【発明の効果】
本発明によれば、複数の表形式データを、所望のようにジョインすることができ、かつ、そのデータ容量も小さな表形式データの構造、その結合方法、および結合した表形式データの提示方法を提供することが可能となる。
【図面の簡単な説明】
【図1】 図1は、本発明の実施の形態にかかる検索、集計およびサーチ方法を実現できるコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。
【図2】 図2は、本実施の形態にて用いる情報ブロックを示す図である。
【図3】 図3は、表形式データの例、および、当該表形式データに基づく情報ブロックの例を示す図である。
【図4】 図4は、表形式データの他の例、および、当該表形式データに基づく情報ブロックの他の例を示す図である。
【図5】 図5は、単一項目に関する検索手法を示すフローチャートである。
【図6】 図6は、表形式データに基づき情報ブロックを作成するための処理を説明するフローチャートである。
【図7】 図7は、情報ブロックを作成するための原データの例を示す図である。
【図8】 図8は、二つの表形式データの例を示す図である。
【図9】 図9は、図8に示す表形式データに基づく情報ブロックを示す図である。
【図10】 図10は、本発明の実施の形態にかかるCPUにて実行される機能の一例を示すブロックダイヤグラムである。
【図11】 図11は、本実施の形態にかかる値リストの共有化のための処理を示すフローチャートである。
【図12】 図12(a)は、図8および図9に示す例に関して、図11にて示される処理の一部をより詳細に示す図である。
【図13】 図13は、本実施の形態にかかるビュー作成処理を示すフローチャートである。
【図14】 図14は、図13により生成されるビューを説明するための図である。
【図15】 図15は、本実施の形態にかかる必要な項目に関してソートした表を得る処理を示すフローチャートである。
【図16】 図16は、「顧客ID」、「顧客名」および「年会費」に関するビューであって、かつ、「サービスID」に基づきソートされたビューを表示する処理を説明するための図である。
【図17】 図17は、本実施の形態にかかるレコード番号のソートを説明するための図である。
【図18】 図18は、所定の項目にてソートされたビューの例を示す図である。
【図19】 図19は、第2の実施の形態にかかるポインタ配列を示す図である。
【図20】 図20は、第3の実施の形態にかかるポインタ配列を示す図である。
【図21】 図21は、第4の実施の形態にて利用される表形式データ(テーブル)の例を示す図である。
【図22】 図22は、第4の実施の形態にかかる処理を示すフローチャートである。
【図23】 図23は、第4の実施の形態にかかる値リストの共有化を説明するための図である。
【図24】 図24は、第4の実施の形態にかかる従テーブルのソートを説明するための図である。
【図25】 図25は、第4の実施の形態にかかる主テーブルの値リストへのポインタ配列の拡張処理を示すフローチャートである。
【図26】 図26は、第4の実施の形態にかかる主テーブルの値リストへのポインタ配列の拡張を説明するための図である。
【図27】 図27は、第4の実施の形態にかかる従テーブルの値リストへのポインタ配列の拡張(生成)処理を示すフローチャートである。
【図28】 図28は、第4の実施の形態にかかる従テーブルの値リストへのポインタ配列の拡張を説明するための図である。
【図29】 図29は、第4の実施の形態にかかるジョインされた表(ビュー)を作成するための情報ブロックを示す図である。
【図30】 図30は、第5の実施の形態にかかる主テーブル側に設けられた変換配列を説明するための図である。
【図31】 図31は、第5の実施の形態にかかる従レコード側の変換配列作成の処理を示すフローチャートである。
【図32】 図32は、第5の実施の形態にかかる従テーブル側の変換配列作成の一例を示す図である。
【図33】 図33は、第5の実施の形態にかかる処理により得られた従テーブル側の変換配列に基づき、仮想的な「試合日」の情報ブロックを得る手順を説明する図である。
【図34】 図34は、第6の実施の形態にて利用される表形式データ(テーブル)の例を示す図である。
【図35】 図35は、第6の実施の形態にかかる処理を示すフローチャートである。
【図36】 図36は、第6の実施の形態にかかる共有化処理を説明するための図である。
【図37】 図37は、第6の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図38】 図38は、第6の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図39】 図39は、第6の実施の形態にかかる仮想的な値リスト、および、当該値リストへのポインタ配列を説明するための図である。
【図40】 図40は、第6の実施の形態にかかる仮想的な値リスト、および、レコード番号へのポインタ配列を説明するための図である。
【図41】 図41は、第6の実施の形態にかかる処理にしたがった表(ビュー)の作成を説明するための図である。
【図42】 図42は、第7の実施の形態にかかる処理を示すフローチャートである。
【図43】 図43は、第7の実施の形態にかかる主テーブルの二次ソートを説明するための図である。
【図44】 図44は、第7の実施の形態にかかる複数項目を結合した多次元配列であるポインタ値を有する値リスト、および、ポインタ配列の生々処理を示すフローチャートである。
【図45】 図45は、図43に示すソート処理を施した主テーブルに、第7の実施の形態にかかる新たな情報ブロックを作成した状態を示す図である。
【図46】 図46は、図43に示すソート処理を施した主テーブルに、第7の実施の形態にかかる新たな情報ブロックを作成した状態を示す図である。
【図47】 図47は、第7の実施の形態にかかる従テーブルに関する、新たな情報ブロックを示す図である。
【図48】 図48は、第7の実施の形態にかかる表(ビュー)の作成処理を説明するための図である。
【図49】 図49は、第1の実施の形態において、他の項目にてソートされた表(ビュー)を得るための処理を説明するための図である。
【符号の説明】
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
Claims (3)
- 表形式データの項目毎の情報ブロックが値リストおよび値リストへのポインタ配列を含み、値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、前記値リストおよびポインタ配列をメモリに格納したコンピュータにおいて、前記情報ブロックの集合体として構築された第1および第2の2つの表形式データを結合する方法であって、
前記コンピュータのCPUが、前記2つの表形式データの間で、値リストを共有化すべき項目の値リストについて、前記共有化すべき値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化するステップと、
前記CPUが、当該値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するステップと、
前記CPUが、前記2つの表形式データのうちの第1の表形式データのレコード番号が前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成するステップと、を備え、
前記2つの表形式データを結合することを特徴とする方法。 - 表形式データの項目毎の情報ブロックが値リストおよび値リストへのポインタ配列を含み、値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、前記値リストおよびポインタ配列をメモリに格納したコンピュータにおいて、前記情報ブロックの集合体として構築された第1および第2の2つの表形式データを結合する方法を実行可能なプログラムを記憶した記憶媒体であって、
前記コンピュータに、
前記コンピュータのCPUが、前記2つの表形式データの間で、値リストを共有化すべき項目の値リストについて、前記共有化すべき値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化するステップと、
前記CPUが、当該値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するステップと、
前記CPUが、前記2つの表形式データのうちの第1の表形式データのレコード番号が前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成するステップと、を実行させ、
前記2つの表形式データを結合することを特徴とするプログラムを記憶したコンピュータ読み取り可能な記憶媒体。 - 表形式データの項目毎に情報ブロックを構成する値リストおよび値リストへのポインタ配列をメモリに格納した装置において、前記情報ブロックの集合体として構築された第1および第2の2つの表形式データを結合する装置であって、
値リストが、項目毎に、項目値に割り当てられた順序付けされた項目値番号の順に、項目値番号に対応した項目値を格納している配列であり、値リストへのポインタ配列が、項目毎に、表形式データのレコード番号の順に、レコード番号に対応した項目値番号を格納している配列であり、
前記装置が、
前記2つの表形式データの間で、値リストを共有化すべき項目の値リストについて、当該値リストの項目値を相互に比較して、一方の値リストに含まれている項目値のうち他方の値リストに含まれていない項目値を見出し、値の変換が必要な値リストについて、見出された項目値を挿入して、前記共有化すべき値リストを共有化する値リスト共有化手段と、
前記値リストへの項目値の挿入にしたがって、項目値が追加された値リストへのポインタ配列中のポインタ値を更新するポインタ値更新手段と、
前記2つの表形式データのうちの第1の表形式データのレコード番号が、前記共有化された値リスト内の前記項目値の順に配置されているさらなるポインタ配列を生成する手段と、を備え、
前記2つの表形式データを結合することを特徴とする装置。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15115699A JP4428488B2 (ja) | 1999-05-31 | 1999-05-31 | 表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 |
CNB00810008XA CN1306437C (zh) | 1999-05-31 | 2000-05-30 | 用于链接表格式数据的方法以及表现链接的表格式数据的方法 |
CA002375139A CA2375139C (en) | 1999-05-31 | 2000-05-30 | Method for combining table data |
PCT/JP2000/003465 WO2000073939A1 (fr) | 1999-05-31 | 2000-05-30 | Procede de combinaison de donnees de tableau |
KR1020017015348A KR100711567B1 (ko) | 1999-05-31 | 2000-05-30 | 표형식 데이터 결합방법 및 제시방법 |
US09/980,201 US6721751B1 (en) | 1999-05-31 | 2000-05-30 | Method of concatenating table-format data, and method of presenting concatenated table-format data |
EP00929916A EP1191462A4 (en) | 1999-05-31 | 2000-05-30 | METHOD FOR COMBINING TABLE DATA |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15115699A JP4428488B2 (ja) | 1999-05-31 | 1999-05-31 | 表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2000339390A JP2000339390A (ja) | 2000-12-08 |
JP2000339390A5 JP2000339390A5 (ja) | 2006-07-20 |
JP4428488B2 true JP4428488B2 (ja) | 2010-03-10 |
Family
ID=15512587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP15115699A Expired - Lifetime JP4428488B2 (ja) | 1999-05-31 | 1999-05-31 | 表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6721751B1 (ja) |
EP (1) | EP1191462A4 (ja) |
JP (1) | JP4428488B2 (ja) |
KR (1) | KR100711567B1 (ja) |
CN (1) | CN1306437C (ja) |
CA (1) | CA2375139C (ja) |
WO (1) | WO2000073939A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10318506B2 (en) | 2015-03-18 | 2019-06-11 | Nec Corporation | Database system |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4563558B2 (ja) | 2000-07-31 | 2010-10-13 | 株式会社ターボデータラボラトリー | データのコンパイル方法、および、コンパイル方法を記憶した記憶媒体 |
JP2002108756A (ja) * | 2000-09-28 | 2002-04-12 | Hitachi Ltd | ユーザインタフェース統合方法 |
WO2003036777A1 (en) * | 2001-10-22 | 2003-05-01 | Apple Computer, Inc. | Methods and apparatus for charging a battery in a peripheral device |
JP3860992B2 (ja) * | 2001-11-09 | 2006-12-20 | 株式会社ターボデータラボラトリー | データの結合・提示方法、および、データ結合・提示プログラム |
US7149962B1 (en) * | 2002-03-01 | 2006-12-12 | General Electric Railcar Services Corporation | System and method for providing a gauge table |
US7103608B1 (en) | 2002-05-10 | 2006-09-05 | Oracle International Corporation | Method and mechanism for storing and accessing data |
AU2003229021C1 (en) * | 2002-05-10 | 2009-09-17 | Oracle International Corporation | Storing and querying relational data in compressed storage format |
US7058783B2 (en) * | 2002-09-18 | 2006-06-06 | Oracle International Corporation | Method and mechanism for on-line data compression and in-place updates |
JP3861044B2 (ja) * | 2002-10-24 | 2006-12-20 | 株式会社ターボデータラボラトリー | 連鎖したジョインテーブルのツリー構造への変換方法、および、変換プログラム |
JP4136594B2 (ja) | 2002-10-25 | 2008-08-20 | 株式会社ターボデータラボラトリー | データ処理方法およびデータ処理プログラム |
JP2005135221A (ja) * | 2003-10-31 | 2005-05-26 | Turbo Data Laboratory:Kk | 表形式データの結合方法、結合装置およびプログラム |
JPWO2006035813A1 (ja) * | 2004-09-30 | 2008-07-31 | シャープ株式会社 | 符号化装置、符号化方法、復号装置、復号方法、プログラムおよび該プログラムを記録した機械読取り可能な記録媒体 |
US8041742B1 (en) | 2004-12-20 | 2011-10-18 | American Megatrends, Inc. | Method, system, and apparatus for providing generic database services within an extensible firmware interface environment |
US8027969B2 (en) * | 2005-12-29 | 2011-09-27 | Sap Ag | Efficient calculation of sets of distinct results in an information retrieval service |
CN100433019C (zh) * | 2007-07-26 | 2008-11-12 | 杭州华三通信技术有限公司 | 一种数据存储与检索的方法及系统 |
US8620880B2 (en) | 2008-05-30 | 2013-12-31 | Nec Corporation | Database system, method of managing database, and computer-readable storage medium |
JP5392254B2 (ja) | 2008-05-30 | 2014-01-22 | 日本電気株式会社 | データベースシステム、データベース管理方法、データベース構造およびコンピュータプログラム |
JP5199948B2 (ja) * | 2009-05-22 | 2013-05-15 | 日本電信電話株式会社 | データベース管理方法、データベース装置、およびプログラム |
JP5408442B2 (ja) * | 2010-01-21 | 2014-02-05 | 株式会社日立製作所 | 並列分散処理方法、及び、計算機システム |
WO2011099114A1 (ja) * | 2010-02-09 | 2011-08-18 | 株式会社ターボデータラボラトリー | ハイブリッド型データベースシステム及びその動作方法 |
CN101899577B (zh) * | 2010-08-27 | 2012-11-21 | 上海交通大学 | 金属熔体在线电磁净化装置 |
US8341131B2 (en) * | 2010-09-16 | 2012-12-25 | Sap Ag | Systems and methods for master data management using record and field based rules |
CN102622436A (zh) * | 2012-02-29 | 2012-08-01 | 浙江吉利汽车研究院有限公司 | 人力资源管理系统的数据表创建方法 |
US8645332B1 (en) | 2012-08-20 | 2014-02-04 | Sap Ag | Systems and methods for capturing data refinement actions based on visualized search of information |
KR101447119B1 (ko) | 2012-11-12 | 2014-10-06 | 스마트팩토리 주식회사 | 데이터 구조 통합 방법 및 이를 위한 장치 |
US9460135B2 (en) * | 2012-12-18 | 2016-10-04 | Webtrends Inc. | Methods and automated systems for testing, optimization, and analysis that use robust statistical processing of non-binomial experimental results |
JP6222923B2 (ja) * | 2012-12-28 | 2017-11-01 | 富士通株式会社 | ファイル管理プログラム、ファイル管理装置およびファイル管理方法 |
JP6459669B2 (ja) * | 2015-03-17 | 2019-01-30 | 日本電気株式会社 | カラムストア型データベース管理システム |
CN106777280B (zh) * | 2016-12-29 | 2020-07-17 | 深圳市华傲数据技术有限公司 | 基于超大数据集的数据处理方法及装置 |
CN109710611B (zh) * | 2018-12-25 | 2019-09-17 | 北京三快在线科技有限公司 | 存储表数据的方法、查询表数据的方法、装置及存储介质 |
CN110727656A (zh) * | 2019-09-25 | 2020-01-24 | 贝壳技术有限公司 | 一种数据的分表方法、装置、电子设备以及可读存储介质 |
WO2022153401A1 (ja) * | 2021-01-13 | 2022-07-21 | 株式会社エスペラントシステム | 情報処理方法、情報処理装置及びプログラム |
CN113420538B (zh) * | 2021-08-23 | 2021-12-14 | 深圳市明源云科技有限公司 | 数值格式智能显示方法、设备终端及计算机可读存储介质 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63298626A (ja) | 1987-05-29 | 1988-12-06 | Matsushita Electric Ind Co Ltd | デ−タベ−ス管理方法 |
CN1036092A (zh) * | 1989-01-12 | 1989-10-04 | 华南农业大学 | 一种计算机自动制表方法及其系统 |
US5241648A (en) * | 1990-02-13 | 1993-08-31 | International Business Machines Corporation | Hybrid technique for joining tables |
US5410693A (en) * | 1994-01-26 | 1995-04-25 | Wall Data Incorporated | Method and apparatus for accessing a database |
JPH07239850A (ja) * | 1994-02-28 | 1995-09-12 | Hitachi Ltd | 構造化文書作成支援システム |
US5548754A (en) * | 1995-02-07 | 1996-08-20 | International Business Machines Corporation | Optimization of SQL queries using early-out join transformations |
US5675784A (en) * | 1995-05-31 | 1997-10-07 | International Business Machnes Corporation | Data structure for a relational database system for collecting component and specification level data related to products |
US5778370A (en) * | 1995-08-25 | 1998-07-07 | Emerson; Mark L. | Data village system |
US5748905A (en) * | 1996-08-30 | 1998-05-05 | Fujitsu Network Communications, Inc. | Frame classification using classification keys |
US6138111A (en) * | 1997-05-02 | 2000-10-24 | Informix Software, Inc. | Cardinality-based join ordering |
US5903887A (en) * | 1997-09-15 | 1999-05-11 | International Business Machines Corporation | Method and apparatus for caching result sets from queries to a remote database in a heterogeneous database system |
JPH11120224A (ja) * | 1997-10-15 | 1999-04-30 | Fujitsu Ltd | 人事異動支援システム |
US6611274B1 (en) * | 1999-10-12 | 2003-08-26 | Microsoft Corporation | System method, and computer program product for compositing true colors and intensity-maped colors into a frame buffer |
US7173930B2 (en) * | 1999-10-26 | 2007-02-06 | Ciena Corporation | Transparent flexible concatenation |
-
1999
- 1999-05-31 JP JP15115699A patent/JP4428488B2/ja not_active Expired - Lifetime
-
2000
- 2000-05-30 CN CNB00810008XA patent/CN1306437C/zh not_active Expired - Lifetime
- 2000-05-30 US US09/980,201 patent/US6721751B1/en not_active Expired - Lifetime
- 2000-05-30 KR KR1020017015348A patent/KR100711567B1/ko not_active IP Right Cessation
- 2000-05-30 CA CA002375139A patent/CA2375139C/en not_active Expired - Lifetime
- 2000-05-30 WO PCT/JP2000/003465 patent/WO2000073939A1/ja active IP Right Grant
- 2000-05-30 EP EP00929916A patent/EP1191462A4/en not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10318506B2 (en) | 2015-03-18 | 2019-06-11 | Nec Corporation | Database system |
Also Published As
Publication number | Publication date |
---|---|
CN1306437C (zh) | 2007-03-21 |
EP1191462A1 (en) | 2002-03-27 |
CN1360700A (zh) | 2002-07-24 |
CA2375139C (en) | 2009-05-05 |
EP1191462A4 (en) | 2008-03-26 |
JP2000339390A (ja) | 2000-12-08 |
CA2375139A1 (en) | 2000-12-07 |
US6721751B1 (en) | 2004-04-13 |
KR100711567B1 (ko) | 2007-04-27 |
WO2000073939A1 (fr) | 2000-12-07 |
KR20020009623A (ko) | 2002-02-01 |
WO2000073939A8 (fr) | 2002-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4428488B2 (ja) | 表形式データの結合方法、上記方法を実現するプログラムを記憶した記憶媒体、および、表形式データを結合する装置 | |
US8898168B2 (en) | Information searching apparatus, information searching method, and computer product | |
US8190619B2 (en) | Multi-source data visualization system | |
JP2005235196A5 (ja) | ||
JPH10320423A (ja) | データベースシステムにおいて結合質問を実行する方法及び装置 | |
JP2000339390A5 (ja) | ||
CN102722531A (zh) | 一种云环境中基于分片位图索引的查询方法 | |
Chaki et al. | Virtual Data Warehouse Modeling Using Petri Nets for Distributed Decision Making. | |
JPH06274387A (ja) | データベースからのデータ抽出方法 | |
JP2001043290A (ja) | 表形式データの提示方法、挿入方法、削除方法、更新方法およびこれら方法を利用したトランザクション処理方法、並列処理方法、並びに、上記方法を実現するプログラムを記憶した記憶媒体 | |
US7184996B2 (en) | Method for concatenating table-format data | |
JP4563558B2 (ja) | データのコンパイル方法、および、コンパイル方法を記憶した記憶媒体 | |
JP3878507B2 (ja) | データベースシステム | |
WO2005043409A1 (ja) | 表形式データの結合方法、結合装置およびプログラム | |
US7882114B2 (en) | Data processing method and data processing program | |
JPH08320881A (ja) | 文書検索システム | |
JP6197578B2 (ja) | 情報処理装置、情報処理方法およびプログラム | |
JPH08329101A (ja) | データベースシステム | |
JP2015094988A (ja) | データ構造、データ生成装置、その方法及びプログラム | |
van Hoek et al. | Assessing visualization techniques for the search process in digital libraries | |
CN116644103B (zh) | 基于数据库的数据排序方法和装置、设备、存储介质 | |
JPH10301935A (ja) | データ処理方法 | |
JP2001291048A (ja) | データ集計方法、および、当該データ集計方法にかかるプログラムを記憶した記憶媒体 | |
CN117033438A (zh) | 一种基于动态属性的主子表的数据显示方法、装置及设备 | |
JP2000067135A (ja) | 多次元分析システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20020905 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20031002 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060530 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060530 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090526 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090717 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090818 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091014 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20091124 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091014 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20091209 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121225 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4428488 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121225 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20151225 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |