JP2011203899A - データ処理プログラム、データ処理装置およびデータ処理方法 - Google Patents

データ処理プログラム、データ処理装置およびデータ処理方法 Download PDF

Info

Publication number
JP2011203899A
JP2011203899A JP2010069235A JP2010069235A JP2011203899A JP 2011203899 A JP2011203899 A JP 2011203899A JP 2010069235 A JP2010069235 A JP 2010069235A JP 2010069235 A JP2010069235 A JP 2010069235A JP 2011203899 A JP2011203899 A JP 2011203899A
Authority
JP
Japan
Prior art keywords
item
value
data
array
record
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.)
Pending
Application number
JP2010069235A
Other languages
English (en)
Inventor
Masayuki Ishiyama
正幸 石山
Toshiharu Sudo
逸晴 須藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Broad Solution and Consulting Inc
Original Assignee
Fujitsu Broad Solution and Consulting Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Broad Solution and Consulting Inc filed Critical Fujitsu Broad Solution and Consulting Inc
Priority to JP2010069235A priority Critical patent/JP2011203899A/ja
Publication of JP2011203899A publication Critical patent/JP2011203899A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値に対する演算を効率的に行うこと。
【解決手段】参照項目、第1の処理項目を含む第1の関係データの順序集合を参照項目値で整列する。被参照項目、第2の処理項目を含む第2の関係データのレコード中、各参照項目値を被参照項目に含むレコード数を参照項目値の順に累計し第1累計配列を得る。第2の関係データのレコード中、各被参照項目値を含むレコード数を参照項目値の順に累計し第2累計配列を得る。第2の処理項目値を第1の関係データの順序集合のレコード順に対応させ作業用記憶領域に設定する。第1累計配列と第2累計配列により、第1の関係データの各レコードに対応する作業用記憶領域中の項目値を特定して演算を行い、演算結果を当該レコードに対応付けて記録する。記録内容により当レコードの第1の処理項目の値リストとポインタ配列を更新する。
【選択図】図1

Description

本発明は複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラム、データ処理装置およびデータ処理方法に関する。
従来、情報処理システムでは様々なデータが扱われている。データの管理には関係データベース(RDB:Relational DataBase)を用いるものがある。
しかし、RDBは、矛盾なくデータ処理を行うことができる反面、扱うデータ量が大量になるほど、処理遅延が増大する。
そこで、レコードに含まれる各項目を複数の一次元配列に分解した情報ブロックとして管理し、当該情報ブロックに対する操作を行うことで、大量なデータに対する項目値の検索、ソートおよび結合などの処理を高速に実行する技術がある(例えば、特許文献1,2,3参照)。
特開2000−339390号公報 特開2001−043290号公報 特開2003−150633号公報
しかしながら、上記特許文献1〜3記載の方法では、ある項目値に対して演算処理を行う場合、レコード単位でしか行うことができない。より具体的には、レコードを情報ブロックに分解した状態で演算を行おうとすると、単一のレコードに含まれる項目値同士の演算処理が行えるのみである。すなわち、あるレコード中の所定の項目値に対して、他のレコードの項目値を参照した演算を行うことが困難であった。
これに対し、このような演算機能をサポートする所定のアプリケーションに当該演算処理を委譲することが考えられる。しかし、そのようなアプリケーションでは、入力されるデータ形式として通常用いられているデータ形式(例えば、RDB)が予定されているのが一般的である。
このため、従来では当該演算に際して、情報ブロックで管理されるテーブルをRDB等のデータ形式に読み込み可能に変換し、上記アプリケーションに当該変換データを引き渡す等の処理を行っていた。この場合、データ形式の変換やデータ入出力等のために余計な処理コストやメモリ利用を伴い、処理効率が悪いという問題があった。
本発明はこのような点に鑑みてなされたものであり、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行うデータ処理プログラム、データ処理装置およびデータ処理方法を提供することを目的とする。
本発明では上記課題を解決するために、複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラムが提供される。このデータ処理プログラムは、コンピュータに、複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、順序集合で定義されたレコードと値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって関係データを記憶する記憶手段から、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとを取得し、参照項目に対応するポインタ配列を用いて、参照項目に対応する値リストに記載された項目値をキーとして第1の関係データの順序集合を整列し、第2の関係データのレコードのうち参照項目に対応する値リストに記載された各項目値を被参照項目として含む第1のレコードの数を、被参照項目に対応するポインタ配列を用いて算出し、参照項目に対応する値リストに記載された項目値の順に第1のレコードの数を累計した第1の累計配列を生成すると共に、第2の関係データのレコードのうち被参照項目に対応する値リストに記載された各項目値を含む第2のレコードの数を算出し、参照項目に対応する値リストに記載された項目値の順に第2のレコードの数を累計した第2の累計配列を生成し、第2の処理項目に対応する値リストに記載された項目値を、第1の関係データの順序集合が示すレコードの順序に対応させて第1の作業用記憶領域に設定し、第1および第2の累計配列を用いることで、第1の関係データの各レコードに対応する第1の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる第1の処理項目の項目値を用いて当該レコードに対応する第1の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域に設定し、第2の作業用記憶領域に設定された情報に基づいて、第1の処理項目に対応する値リストとポインタ配列とを更新する、処理を実行させる。
また、上記課題を解決するために、上記データ処理プログラムを実行するコンピュータと同様の機能を有するデータ処理装置が提供される。
また、上記課題を解決するために、上記データ処理プログラムを実行するコンピュータと同様の処理を行うデータ処理方法が提供される。
上記データ処理プログラム、データ処理装置およびデータ処理方法によれば、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行う。
第1の実施の形態に係るデータ処理装置を示す図である。 第2の実施の形態に係る情報処理システムの構成を示す図である。 第2の実施の形態に係るデータ処理サーバのハードウェア構成を示す図である。 第2の実施の形態に係るコンピュータの機能構成を示す図である。 商品テーブルのデータ構造例である。 出庫テーブルのデータ構造例を示す図である。 商品テーブルの情報ブロックを示す図である。 出庫テーブルの情報ブロックを示す図である。 テーブルの取得処理を示すフローチャートである。 引当処理を示すフローチャートである。 商品テーブルのソート処理の具体例を示す図である。 出庫テーブルのソート処理の具体例を示す図である。 結合テーブルにおけるマスタ側配列要素の累計配列を示す図である。 引当値設定処理を示すフローチャートである。 引当値設定処理の具体例を示す図である。 変換テーブル生成処理を示すフローチャートである。 変換テーブル生成処理の具体例を示す第1の図である。 変換テーブル生成処理の具体例を示す第2の図である。 変換テーブル生成処理の具体例を示す第3の図である。 変換テーブル生成処理の具体例を示す第4の図である。 フィールド更新処理を示すフローチャートである。 フィールド更新処理を示すフローチャートである。 累計配列の取得処理の具体例を示す図である。 フィールド更新処理の具体例を示す第1の図である。 フィールド更新処理の具体例を示す第2の図である。 フィールド更新処理の具体例を示す第3の図である。 フィールド更新処理の具体例を示す第4の図である。 フィールド更新処理の具体例を示す第5の図である。 フィールド更新処理の具体例を示す第6の図である。 フィールド更新処理の具体例を示す第7の図である。 フィールド更新後の商品テーブルの例を示す図である。 入力コマンドおよび結果表示内容の例を示す図である。 従来のデータ処理方法との比較を示す図である。 データ処理方法の第1の変形例を示す第1の図である。 データ処理方法の第1の変形例を示す第2の図である。 データ処理方法の第2の変形例を示す第1の図である。 データ処理方法の第2の変形例を示す第2の図である。
以下、本実施の形態を図面を参照して詳細に説明する。
[第1の実施の形態]
図1は、第1の実施の形態に係るデータ処理装置を示す図である。データ処理装置1は、複数の項目が定義された複数のレコードを含む関係データを処理する。データ処理装置1は、記憶手段1a、データ取得手段1b、累計配列生成手段1c、演算手段1dおよび更新手段1eを有する。
記憶手段1aは、複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、順序集合で定義されたレコードと値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって関係データを記憶する。ここで、項目毎のポインタ配列および値リストの組を情報ブロックと称する。
データ取得手段1bは、記憶手段1aから、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとを取得する。
具体的には、第1の関係データは、順序集合2、参照項目を示す情報ブロック(ポインタ配列2a、値リスト2b)および第1の処理項目を示す情報ブロック(ポインタ配列2c、値リスト2d)を含む。また、第2の関係データは、順序集合3、被参照項目を示す情報ブロック(ポインタ配列3a、値リスト3b)および第2の処理項目(ポインタ配列3c、値リスト3d)を含む。
累計配列生成手段1cは、参照項目に対応するポインタ配列2aを用いて、参照項目に対応する値リスト2bに記載された項目値をキーとして第1の関係データの順序集合2を整列する。
累計配列生成手段1cは、第2の関係データのレコードのうち参照項目に対応する値リスト2bに記載された各項目値を被参照項目として含む第1のレコードの数を、被参照項目に対応するポインタ配列3aを用いて算出する。累計配列生成手段1cは、参照項目に対応する値リスト2bに記載された項目値の順に第1のレコードの数を累計した第1の累計配列4を生成する。累計配列生成手段1cは、第2の関係データのレコードのうち被参照項目に対応する値リスト3bに記載された各項目値を含む第2のレコードの数を算出する。累計配列生成手段1cは、参照項目に対応する値リストに記載された項目値の順に第2のレコードの数を累計した第2の累計配列5を生成する。
演算手段1dは、第2の処理項目に対応する値リスト3dに記載された項目値を、第1の関係データの順序集合2が示すレコードの順序に対応させて第1の作業用記憶領域6に設定する。
そして、演算手段1dは、第1の累計配列4および第2の累計配列5を用いることで、第1の関係データの各レコードに対応する第1の作業用記憶領域6に設定された何れかの項目値を特定する。
更に、演算手段1dは、特定した項目値と各レコードに含まれる第1の処理項目の項目値とを用いて当該レコードに対応する第1の作業用記憶領域6の項目値を更新する演算を行う。このとき、演算手段1dは当該演算に伴う第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域7に設定する。
更新手段1eは、第2の作業用記憶領域7に設定された情報に基づいて、第1の処理項目に対応する値リスト2dとポインタ配列2cとを更新する。
データ処理装置1によれば、データ取得手段1bにより、記憶手段1aから、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとが取得される。累計配列生成手段1cにより、参照項目に対応するポインタ配列2aを用いて、参照項目に対応する値リスト2bに記載された項目値をキーとして第1の関係データの順序集合2が整列される。累計配列生成手段1cにより、第2の関係データのレコードのうち参照項目に対応する値リスト2bに記載された各項目値を被参照項目として含む第1のレコードの数が、被参照項目に対応するポインタ配列3aを用いて算出される。累計配列生成手段1cにより、参照項目に対応する値リスト2bに記載された項目値の順に第1のレコードの数を累計した第1の累計配列4が生成される。累計配列生成手段1cにより、第2の関係データのレコードのうち被参照項目に対応する値リスト3bに記載された各項目値を含む第2のレコードの数が算出される。累計配列生成手段1cにより、参照項目に対応する値リスト2bに記載された項目値の順に第2のレコードの数を累計した第2の累計配列5が生成される。そして、演算手段1dにより、第2の処理項目に対応する値リスト3dに記憶された項目値が、第1の関係データの順序集合2が示すレコードの順序に対応させて第1の作業用記憶領域6に設定される。演算手段1dにより、第1の累計配列4および第2の累計配列5を用いることで、第1の関係データの各レコードに対応する第1の作業用記憶領域6に設定された何れかの項目値が特定される。演算手段1dにより、各レコードに含まれる第1の処理項目の項目値を用いて当該レコードに対応する第1の作業用記憶領域6の項目値を更新する演算が行われると共に、当該演算に伴う第1の処理項目の項目値の変化を示す情報が第2の作業用記憶領域7に設定される。更に、更新手段1eにより、第2の作業用記憶領域7に設定された情報に基づいて、第1の処理項目に対応する値リスト2dとポインタ配列2cとが更新される。
これにより、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行うことができる。具体的には、第1の累計配列4および第2の累計配列5を用いて、第1の作業用記憶領域6の項目値のうち、第1の関係データの各レコードに対応する項目値を適正に特定することができる。より具体的には、値リスト2b中、ある参照項目の項目値に対して、第1の作業用記憶領域6の所定の位置を固定的に参照することができる。よって、第1の作業用記憶領域6の当該固定位置に設定した値を用いて、参照項目の各項目値に対応する第1の処理項目の項目値に対する演算が可能となる。
また、演算手段1dは、当該演算に伴う第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域7に格納する。第1の処理項目に値リスト2dを第2の作業用記憶領域7の情報に基づいて、適正に変更することができる。
このようにして、関係データを情報ブロックで管理した状態でレコードと関連のない固定領域を参照した各種の演算を行うことができる。したがって、従来のように所定のアプリケーションに当該演算処理を委譲する方法に比べて、委譲に伴うデータ形式の変換やデータ入出力等が発生しない。よって、データ処理装置1はあるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に実行することができる。
以下の実施の形態では、商品在庫の引当処理にデータ処理装置1の機能を適用する場合を例に採り、更に具体的に説明する。
[第2の実施の形態]
図2は、第2の実施の形態に係る情報処理システムの構成を示す図である。この情報処理システムは、複数の倉庫に保管された種々の商品の在庫を管理するシステムである。この情報処理システムは、ネットワーク10を介して、DBサーバ20、端末装置30およびデータ処理サーバ100が接続されている。
DBサーバ20は、複数の倉庫に保管された商品の在庫を管理するための関係データを記憶する。関係データは、DBサーバ20ではRDBの表形式データとして管理される。
端末装置30は、ユーザの操作を受け付ける情報処理装置である。ユーザは、端末装置30を操作して、データ処理サーバ100に所望の処理を実行させることができる。
データ処理サーバ100は、DBサーバ20が記憶する表形式データを取得する。データ処理サーバ100は、当該表形式データに含まれる複数のレコードの順序を示す順序集合および順序集合に関連付けられた情報ブロックに分割したデータ構造により当該関係データを管理する。データ処理サーバ100は、情報ブロックを半導体メモリ上に配置する。そして、データ処理サーバ100は、情報ブロックに対して端末装置30から受け付けた処理を実行する。データ処理サーバ100は、半導体メモリ上に配置した情報ブロックに対して処理を行うことができる。このため、HDD(Hard Disk Drive)にデータを格納して処理を行うよりも、処理速度を向上できる。
図3は、第2の実施の形態に係るデータ処理サーバのハードウェア構成を示す図である。データ処理サーバ100は、CPU(Central Processing Unit)101、ROM(Read Only Memory)102、RAM(Random Access Memory)103、HDD104、グラフィック処理装置105、入力インタフェース106、記録媒体読取装置107および通信インタフェース108を有する。
CPU101は、データ処理サーバ100全体を制御する。
ROM102は、データ処理サーバ100上のBIOS(Basic Input / Output System)のプログラムなどを記憶する。
RAM103は、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションソフトウェア(以下、アプリケーションという)のプログラムの少なくとも一部を一時的に記憶する。また、RAM103は、CPU101による処理に必要な各種データを記憶する。RAM103は、表形式データを分解して生成された情報ブロックを記憶する。
HDD104は、OSのプログラム、アプリケーションのプログラムを記憶する。また、HDD104はCPU101による処理に必要な各種データを記憶する。なお、HDD104に代えてSSD(Solid State Drive)など他の種類の記憶装置を用いてもよい。
グラフィック処理装置105は、モニタ11と接続される。グラフィック処理装置105は、CPU101からの命令にしたがって画像をモニタ11の画面に表示させる。
入力インタフェース106は、キーボード12とマウス13と接続される。入力インタフェース106は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。
記録媒体読取装置107は、記録媒体14に記憶されたデータを読み取る読取装置である。例えば、データ処理サーバ100が有すべき機能は、その機能の処理内容を記述したプログラムをコンピュータに実行させることで実現できる。そのようなプログラムは、コンピュータ読み取り可能な記録媒体14に記録して配布することができる。また、ネットワーク10に接続されたプログラム配信サーバ(図示せず)に、そのプログラムを格納してもよい。この場合、データ処理サーバ100は、ネットワーク10を介してプログラム配信サーバからプログラムをダウンロードすることができる。
記録媒体14としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリを使用できる。磁気記録装置には、HDD、フレキシブルディスク(FD:Flexible Disk)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、CD−R(Recordable)/RW(ReWritable)、DVD(Digital Versatile Disc)、DVD−R/RW/RAMなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。半導体メモリには、USB(Universal Serial Bus)メモリなどのフラッシュメモリがある。
通信インタフェース108は、ネットワーク10と接続される。通信インタフェース108は、ネットワーク10を介してDBサーバ20および端末装置30とデータ通信する。
なお、DBサーバ20および端末装置30もデータ処理サーバ100と同様のハードウェア構成により実現することができる。
図4は、第2の実施の形態に係るコンピュータの機能構成を示す図である。データ処理サーバ100は、データ記憶部110、変換用データ記憶部120、データ管理部130、処理要求受付部140、テーブル抽出部150、累計配列生成部160、演算処理部170、データ更新部180および表示処理部190を有する。これらの機能は、CPU101が所定のプログラムを実行することで実現される。あるいは、これらの機能の全部または少なくとも一部を専用のハードウェアにより実現してもよい。
データ記憶部110は、DBサーバ20が記憶する表形式データを順序集合および項目毎に分解した情報ブロックを記憶する。
変換用データ記憶部120は、情報ブロックに含まれる所定の処理項目に対する演算に用いる作業用領域を記憶する。また、変換用データ記憶部120は、情報ブロックに含まれる項目値を変換するための変換用データを記憶する。
データ管理部130は、DBサーバ20から表形式データを取得し、順序集合や情報ブロックを生成してデータ記憶部110に格納する。データ管理部130は、各部の要求に応じてデータ記憶部110に記憶された情報ブロックを読み出し、各部へ出力する。
処理要求受付部140は、端末装置30からの処理要求あるいはキーボード12やマウス13の操作入力に基づく処理要求を受け付ける。処理要求は、データ処理サーバ100が実行すべき処理内容を記述したコマンドである。当該コマンドには、処理の対象とする関係データ(以下、テーブルという)、参照項目や被参照項目および演算処理の内容(例えば、引当処理)を指定する情報などが含まれる。
テーブル抽出部150は、処理要求受付部140が受け付けたコマンドに基づき、データ管理部130を介して処理対象とするテーブルを抽出する。テーブル抽出部150は、抽出した各テーブルを参照項目でソートする。テーブル抽出部150はソート後の各テーブルを累計配列生成部160に出力する。
累計配列生成部160は、テーブル抽出部150から取得した各テーブルにつき所定の複数の累計配列を得る。演算処理部170は、取得した当該複数の累計配列を演算処理部170に出力する。
演算処理部170は、当該複数の累計配列および変換用データ記憶部120に記憶された作業用領域を用いて、上記コマンドで指定された演算処理(例えば、引当処理)を実行する。演算処理部170は、演算処理の過程で、データ管理部130が管理するテーブルの項目値につき演算処理の結果を反映すべきレコードとその内容とを記録した変換用データを生成する。演算処理部170は、生成した変換用データを変換用データ記憶部120に格納する。
データ更新部180は、演算処理部170による一連の演算処理が完了すると、変換用データ記憶部120に記憶された変換用データに基づいて、データ管理部130が管理するテーブルに含まれる項目値を変換する。
表示処理部190は、データ管理部130から情報ブロックを取得し、当該情報ブロックで示される表形式データを生成する。表示処理部190は、生成した表形式データをモニタ11や端末装置30に表示させる。
図5は、商品テーブルのデータ構造例である。商品テーブル200は、表形式データであり、DBサーバ20に格納される。商品テーブル200には、商品名、仕入日、A倉庫およびB倉庫を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、1つの商品に関する情報を示す。
商品名の項目には、商品の名称が設定される。仕入日の項目には、その商品の仕入日が設定される。A倉庫の項目には、A倉庫の在庫数が設定される。B倉庫の項目には、B倉庫の在庫数が設定される。なお、“A倉庫”および“B倉庫”は、倉庫の名称である。
商品テーブル200には、例えば、商品名“りんご”、仕入日“2009/11/16”、A倉庫“10”、B倉庫“10”という情報が設定される。これは、商品名“りんご”につき仕入日“2009/11/16”に仕入れた在庫がA倉庫に“10”個、B倉庫に“10”個存在することを示している。
なお、引当元となる倉庫として、A倉庫、B倉庫が存在するが、A倉庫からはB倉庫よりも優先して引当を行うものとする。例えば、ある商品について、A倉庫およびB倉庫の何れにも在庫が存在する場合には、まず、A倉庫の在庫から引当を行う。
また、A倉庫、B倉庫には、列番号を示すインデックス値が予め設定される。A倉庫にはインデックス値“1”が設定されている。また、B倉庫にはインデックス値“2”が設定されている。
図6は、出庫テーブルのデータ構造例を示す図である。出庫テーブル300は、表形式データであり、DBサーバ20に格納される。出庫テーブル300には、商品名および出庫数を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、1つの商品に関する情報を示す。
商品名の項目には、商品の名称が設定される。出庫数の項目には、当該商品につき出庫すべき数量(すなわち、引当るべき数量)が設定される。
出庫テーブル300には、例えば、商品名“りんご”、出庫数“25”という情報が設定される。これは、商品名“りんご”につき、“25”個出庫が必要(すなわち、在庫からの引当が必要)であることを示している。
図7は、商品テーブルの情報ブロックを示す図である。データ管理部130は、商品テーブル200について順序集合210および情報ブロック220,230,240,250を生成し、データ記憶部110に格納する。
順序集合210は、商品テーブル200の各レコードの順序を定義する配列である。順序集合210には、オーダーセット(OS:Order Set)を示す値が設定される。OS値は、後述するポインタ配列の要素番号を指定する値である。
情報ブロック220は、商品テーブル200に含まれる商品名の項目を示す。情報ブロック220は、ポインタ配列(PV:Pointer ValueあるいはPosition Value)221および値リスト(VL:Value List)222を有する。
ポインタ配列221は、値リストの要素番号を示すポインタを格納する配列である。
値リスト222は、商品名を示す項目値を格納する配列である。値リスト222には、重複した項目値は存在しない。また、値リスト222に格納される項目値は、昇順にソートされている。
情報ブロック230,240,250に含まれる各配列に関しても同様である。ここで、情報ブロック230は、商品テーブル200に含まれる仕入日の項目を示す。情報ブロック240は、商品テーブル200に含まれるA倉庫の項目を示す。情報ブロック250は、商品テーブル200に含まれるB倉庫の項目を示す。また、ポインタ配列231,241,251は、ポインタ配列221に対応する。また、値リスト232,242,252は、値リスト222に対応する。
このような順序集合210および各情報ブロックを用いることで、商品テーブル200の各レコードを表現することができる。
例えば、順序集合210の要素番号“0”には、OS値“1”が設定されている。この場合、当該レコードの商品名を得るためには、次のように情報ブロック220の参照を行う。まず、OS値“1”に基づき情報ブロック220のポインタ配列221の要素番号“1”を参照し、PV“2”を得る。そして、PV“2”に基づき値リスト222の要素番号“2”を参照し、商品名“りんご”を得る。
また、OS値“1”に対応する仕入日を得るためには、情報ブロック230を同様に参照すればよい。OS値“1”に対応するA倉庫およびB倉庫の在庫数を得るためには、情報ブロック240,250を同様に参照すればよい。
このようにして、商品テーブル200の1行目のレコードを表現することができる。また、OS値“2”のレコードは、商品テーブル200の2行目のレコードに対応する。また、OS値“3”のレコードは、商品テーブル200の3行目のレコードに対応する。
ここで、ポインタ配列221,231,241,251には、配列要素の先頭(要素番号“0”)に“0”が設定されている。また、値リスト222,232,242,252には、配列要素の先頭(要素番号“0”)が“−”(設定なし)となっている。これらは、システムの便宜上設けられているものであり、特に必要とならない場合は各配列中に設けなくてもよい。
図8は、出庫テーブルの情報ブロックを示す図である。データ管理部130は、出庫テーブル300について順序集合310および情報ブロック320,330を生成し、データ記憶部110に格納する。
順序集合310は、図7で説明した順序集合210に対応する。
情報ブロック320は、出庫テーブル300に含まれる商品名の項目を示す。情報ブロック320は、ポインタ配列321および値リスト322を有する。
また、情報ブロック330は、出庫テーブル300に含まれる出庫数の項目を示す。情報ブロック330は、ポインタ配列331および値リスト332を有する。
ポインタ配列321,331および値リスト322,332に関しては、上述のポインタ配列221および値リスト222と同様である。
このような順序集合310および各情報ブロックを用いることで、出庫テーブル300の各レコードを表現することができる。
例えば、順序集合310の要素番号“0”には、OS値“1”が設定されている。よって、当該レコードの商品名として、情報ブロック320に基づき“りんご”を取得できる。また、当該レコードの出庫数として情報ブロック330に基づき“25”個を取得できる。
なお、ポインタ配列321,331および値リスト322,332の配列要素の先頭(要素番号“0”)および“−”(設定なし)に関しては、図7で説明したように、システムの便宜上設けられたものである。
更に、上記図5〜8の説明では、説明を容易とするために商品テーブル200に2種類の商品のみが設定されている場合を示したが、それ以上の商品が設定されていてもよい。
次に、以上のような構成を備えるデータ処理サーバ100の処理手順に関して説明する。
まず、DBサーバ20が記憶する表形式データに基づくテーブルの取得処理に関して説明する。テーブルの取得は、例えばDBサーバ20およびデータ処理サーバ100が起動したタイミング、情報処理システムによる業務が開始したタイミングなどにデータ管理部130により実行される。
図9は、テーブルの取得処理を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
[ステップS11]データ管理部130は、DBサーバ20から表形式データを取得する。上述の例では、商品テーブル200および出庫テーブル300を取得する。
[ステップS12]データ管理部130は、表形式データに含まれる各項目を情報ブロックに分解する。上述の例では、商品テーブル200に含まれる商品名、仕入日、A倉庫およびB倉庫の各項目につき順序集合210および情報ブロック220,230,240,250が生成される。また、出庫テーブル300に含まれる商品名および個数の各項目につき順序集合310および情報ブロック320,330が生成される。
[ステップS13]データ管理部130は、生成した各順序集合および各情報ブロックをRAM103に設けられたデータ記憶部110に格納する。
このようにして、データ管理部130は、DBサーバ20から取得した表形式データに基づいて各順序集合および各情報ブロックを生成することができる。なお、上記ステップS12の処理は、より詳細には特開2000−339390号公報に記載の方法により行うことができる。
次に、このようにして生成された各情報ブロックに基づく引当処理の手順を説明する。
図10は、引当処理を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。
[ステップS21]処理要求受付部140は、キーボード12またはマウス13の操作入力により受け付けた処理要求(コマンド)、あるいは、端末装置30から受信したコマンドに含まれる引当対象の商品、出庫数を示す情報を受け付ける。例えば、ユーザは、データ処理サーバ100が提供する所定のGUI(Graphical User Interface)を端末装置30に表示させ、これらの情報を入力することができる。ユーザは、例えば項目値リストとして情報ブロック330に設定された商品(“みかん”および“りんご”)を選択することができる。端末装置30は、当該入力を受け付けると入力内容に応じたコマンドを生成し、処理要求受付部140に送信する。例えば、当該コマンドには、関係データとして、商品テーブルおよび出庫テーブルを指定する情報が含まれる。また、例えば、参照項目や被参照項目として“商品名”を指定する情報が含まれる。更に、例えば、演算処理の内容として処理項目“A倉庫”、“B倉庫”および“出庫数”を指定する情報が含まれる。この場合、商品テーブルは第1の実施の形態における第1の関係データに対応する。また、出庫テーブルは第1の実施の形態における第2の関係データに対応する。更に、処理項目“A倉庫”、“B倉庫”は第1の実施の形態における第1の処理項目に対応する。処理項目“出庫数”は第1の実施の形態の第2の処理項目に対応する。
処理要求受付部140は、受け付けたコマンドをテーブル抽出部150に出力する。
[ステップS22]テーブル抽出部150は、データ管理部130を介して処理対象のテーブルを取得する。ここでは、商品テーブル200を示す順序集合210や出庫テーブル300を示す順序集合310を取得する。なお、以下では、順序集合210および情報ブロック220,230,240,250が示すテーブルを表形式の商品テーブル200と区別するため、単に商品テーブルと称する。また、順序集合310および情報ブロック320,330が示すテーブルを表形式の出庫テーブル300と区別するため、単に出庫テーブルと称する。
[ステップS23]テーブル抽出部150は、両テーブルに含まれる値リストにつき双方の値リストを同値にする(共通化)。テーブル抽出部150は、取得した各テーブルを結合キーでソートする。具体的には、順序集合210,310のOS値を結合キーである商品名でソートする。また、順序集合310のOS値を結合キーである商品名でソートする。テーブル抽出部150は、ソート後の商品テーブルおよび出庫テーブルを累計配列生成部160に出力する。
[ステップS24]累計配列生成部160は、ソート後の各テーブルを結合キーで結合し、結合テーブルを得る。ここで、“結合テーブル”とは各テーブルにつきソート後の順序集合と所定の累計配列とで表されるテーブルを示している。累計配列生成部160は取得した累計配列を演算処理部170に出力する。当該累計配列の詳細は図13で説明する。
[ステップS25]演算処理部170は、出庫テーブルに基づいて、引当値を設定した引当作業領域を生成する。当該引当値設定処理の詳細は図14で説明する。
[ステップS26]演算処理部170は、商品テーブルおよび引当作業領域に基づいて、引当演算を行うと共に、商品テーブルの項目値を変換するための変換テーブルを生成する。当該変換テーブル生成処理の詳細は図16で説明する。
[ステップS27]演算処理部170は、引当処理の対象となった各フィールドの項目値、すなわち、情報ブロック240,250のポインタ配列241,251および値リスト242,252の変換処理を行う。当該フィールド更新処理の詳細は図21,22で説明する。
このようにして、データ処理サーバ100は商品の引当処理を行う。
以下、上記ステップS23のソート処理を具体的に説明する。なお、上記ステップS23において、本例では商品テーブルと出庫テーブルとの結合項目は同一であるため、共通化処理前後で各テーブルの構造は変化しない。したがって、以降の説明において共通化処理については説明を省略するが、その処理手順には特開2003−150633号公報に記載された方法を適用することができる。
図11は、商品テーブルのソート処理の具体例を示す図である。テーブル抽出部150は、結合キーとなる商品名を示す情報ブロック220に基づいて、順序集合210のOS値をソートする。テーブル抽出部150は、以下の手順によって当該ソート処理を行うことができる。
(1)テーブル抽出部150は、値リスト222の各項目値に対応するレコードが商品テーブル中に何個存在するかを示す存在数配列260を値リスト222の各項目値の要素番号に対応づけて生成する。
例えば、ポインタ配列221には、順序集合210のOS値で参照されるPVとして、“1”であるものが1つ存在する。したがって、存在数配列260の要素番号“1”の位置には“1”が設定される。また、ポインタ配列221には、順序集合210のOS値で参照されるPVとして、“2”であるものが2つ存在する。したがって、存在数配列260の要素番号“2”の位置には“2”が設定される。
(2)テーブル抽出部150は、存在数配列260に基づいて累計配列270を生成する。累計配列270の要素番号“n”(nは1以上の整数)の要素は、存在数配列260の要素番号“0〜(n−1)”の要素の累積値である。ただし、累計配列270の要素番号“0”の要素は“0”とする。
例えば、累計配列270の要素番号“1”の要素は存在数配列260の要素番号“0”の要素と等しく“0”である。また、累計配列270の要素番号“2”の要素は存在数配列260の要素番号“0”,“1”の要素の和であり“0+1=1”である。また、累計配列270の要素番号“2”の要素は存在数配列260の要素番号“0”〜“2”の要素の和であり“0+1+2=3”である。
(3)テーブル抽出部150は、終了位置配列280を生成する。終了位置配列280は、初期の段階では累計配列270と同一である。終了位置配列280は、ソート用配列290の生成に用いる配列である。
(4)テーブル抽出部150は、順序集合210および終了位置配列280に基づいてソート用配列290を生成する。具体的には、テーブル抽出部150は、順序集合210のOS値を要素番号の順に取り出す。そのOS値が示すポインタ配列221中のPVにより終了位置配列280を参照し、その要素を取得する。テーブル抽出部150は、取得した要素を、ソート用配列290の順序集合210の要素番号と同一の要素番号における要素として設定する。そして、終了位置配列280の当該要素をインクリメントする。
例えば、テーブル抽出部150は、順序集合210の要素番号“0”のOS値“1”によりポインタ配列221の要素番号“1”に対応するPV“2”を特定する。次に、PV“2”により、終了位置配列280の要素番号“2”を参照し、その要素“1”を取得する。そして、ソート用配列290の要素番号“0”の位置に、取得した要素“1”を設定する。更に、終了位置配列280の要素番号“2”の要素“1”をインクリメントして“2”とする。
順序集合210の要素番号“1”に関しても同様にして、ソート用配列290の要素番号“1”の位置に“0”を設定する。そして、終了位置配列280の要素番号“1”の要素“0”をインクリメントして“1”とする。また、順序集合210の要素番号“2”に関しても同様にして、ソート用配列290の要素番号“2”の位置に“2”を設定する。そして、終了位置配列280の要素番号“2”の要素“2”をインクリメントして“3”とする。
(5)テーブル抽出部150は、ソート用配列290を利用して順序集合210の配列要素の順序を変換して順序集合211を生成する。具体的には、まず、順序集合210の要素番号と同一の要素番号に対応するソート用配列290の要素を変換後要素番号として取得する。そして、順序集合210の当該要素番号に対応する要素を、順序集合211の変換後要素番号と同一の要素番号の位置に設定する。
例えば、順序集合210の要素番号“0”で示されるレコードに対応するソート用配列290の要素は“1”である。よって、順序集合210の要素番号“0”に対応するOS値“1”を順序集合211の要素番号“1”の位置に設定する。また、順序集合210の要素番号“1”で示されるレコードに対応するソート用配列290の要素は“0”である。よって、順序集合210の要素番号“1”に対応するOS値“2”を順序集合211の要素番号“0”に設定する。また、順序集合210の要素番号“2”で示されるレコードに対応するソート用配列290の要素は“2”である。よって、順序集合210の要素番号“2”に対応するOS値“3”を順序集合211の要素番号“2”の位置に設定する。
このようにして、テーブル抽出部150は、順序集合210を商品名を示す値リスト222に関してソートした配列である順序集合211を得ることができる。
図12は、出庫テーブルのソート処理の具体例を示す図である。なお、具体的な手順に関しては、商品テーブルのソート処理と同一であるため、その説明を省略する。そのソート処理の過程において、存在数配列340、累計配列350、終了位置配列360およびソート用配列370が生成される。ここで、存在数配列340は、図11で説明した存在数配列260に対応する。累計配列350は、累計配列270に対応する。終了位置配列360は、終了位置配列280に対応する。ソート用配列370は、ソート用配列290に対応する。
テーブル抽出部150は、ソート用配列370に基づいて、順序集合310を商品名を示す値リスト322に関してソートした配列である順序集合311を得ることができる。
テーブル抽出部150は、順序集合211,311および累計配列350を累計配列生成部160に出力する。
図13は、結合テーブルにおけるマスタ側配列要素の累計配列を示す図である。累計配列生成部160は、テーブル抽出部150からソート処理により得られた順序集合211,311および累計配列350を結合テーブルを構成する配列の一部として取得する。ただし、累計配列生成部160は累計配列350を新たに生成してもよい。
また、累計配列生成部160は、結合時にマスタ側となる順序集合(マスタ側配列)の各レコードにつき、スレイブ側となる順序集合(スレイブ側配列)のレコードが何個存在するかを示し、順序集合211と同サイズである存在数配列260aを生成する。また、累計配列生成部160は、存在数配列260aを累計化した累計配列270aを生成する。
ここで、マスタ側配列は引当処理の対象とする処理項目を含むレコードの各配列を示している。本例では、商品テーブルを示す配列がマスタ側となる。他方、出庫テーブルを示す配列はスレイブ側となる。
累計配列生成部160は、次のようにして存在数配列260aおよび累計配列270aを生成することができる。
(1)累計配列生成部160は、順序集合211の各要素番号に対応するOS値を順次取得し、当該OS値で示される商品名の値リスト222へのポインタ配列221のPVを参照する。そして、当該PVで示されるスレイブ側の存在数配列340の要素を取得し、取得した要素を存在数配列260aの順序集合211の要素番号に対応する要素番号の位置に設定する。
例えば、累計配列生成部160は、順序集合211の要素番号“0”のOS値“2”を取得する。次に、当該OS値“2”で示されるポインタ配列221のPV“1”を取得する。そして、PV“1”で示される存在数配列340の要素“1”を取得する。更に取得した要素を存在数配列260aの要素番号“0”の位置に設定する。順序集合211の要素番号“1”に関しても同様の参照を行うことにより、存在数配列260aの要素番号“1”の位置に“1”が設定される。また、順序集合211の要素番号“2”に関しても同様の参照を行うことにより、存在数配列260aの要素番号“2”の位置に“1”が設定される。
(2)累計配列生成部160は、存在数配列260aに基づいて、累計配列270aを生成する。生成方法は、図11で説明した累計配列270の生成方法と同一である。すなわち、累計配列270aの要素番号“0”の要素は“0”となる。累計配列270aの要素番号“1”の要素は存在数配列260aの要素番号“0”の要素と等しく“1”である。累計配列270aの要素番号“2”の要素は存在数配列260aの要素番号“0”,“1”の要素の和であり“1+1=2”である。累計配列270aの要素番号“3”の要素は存在数配列260aの要素番号“0”〜“2”の要素の和であり“1+1+1=3”である。
累計配列生成部160は、このようにして累計配列270aを取得する。累計配列270aは結合テーブルを構成する配列の一部である。
累計配列生成部160は、このようにして順序集合211,311および累計配列270a,350を結合テーブルを構成する配列として取得することができる。
演算処理部170は、これらの配列を用いて引当のための演算を実行する。
次に、当該演算の前処理となる引当値設定処理を説明する。以下の引当値設定処理は、図10のステップS25に対応する。
図14は、引当値設定処理を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
[ステップS31]演算処理部170は、作業領域となる引当値配列を生成する。引当値配列は、各商品につき総引当数量から引当済数量を引いた残引当数量を記憶するための配列である。
[ステップS32]演算処理部170は、出庫テーブルからレコード(出庫レコードと称する)を1つ取得する。例えば、出庫テーブルを示す順序集合311の要素番号“0”に対応する出庫レコードを取得する。
[ステップS33]演算処理部170は、引当値配列の対応する要素番号の位置に出庫レコードに設定された出庫数を設定する。例えば、出庫テーブルを示す順序集合311の要素番号“0”に対応する出庫レコードに含まれる出庫数“10”を引当値配列の要素番号“0”の位置に設定する。
[ステップS34]演算処理部170は、出庫テーブルに含まれる全ての出庫レコードにつき引当値配列の設定処理が終了したか否かを判定する。終了した場合、本処理を終了する。終了していない場合、処理をステップS32に進める。演算処理部170は、例えば順序集合311の要素番号の昇順に本処理を実行し、最後の要素番号に到達したか否かを検知することで、ステップS34の判定を行うことができる。
このようにして、演算処理部170は引当値を設定した引当値配列を生成する。
図15は、引当値設定処理の具体例を示す図である。図15中(A)は上記ステップS31に対応する。(B)は上記ステップS32,33に対応する。(C)は引当値設定処理の結果を示す。以下、順を追って説明する。
(A)演算処理部170は、順序集合311と同サイズの引当値配列400を作業領域として生成する。
(B)演算処理部170は、順序集合311に基づいて、出庫数を示す情報ブロック330の値リスト332の設定値を取得する。そして、参照した順序集合311の要素番号と同一の要素番号で示される引当値配列400内の配列要素に値リスト332の設定値を設定する。
例えば、演算処理部170は、順序集合311の要素番号“0”に対応するOS値“2”により、ポインタ配列331のPV“1”を取得する。そして、当該PV“1”で示される値リスト332のVL“10”を取得する。更に、演算処理部170は、当該VL“10”を引当値配列400の要素番号“0”の位置に設定する。また、演算処理部170は、順序集合311の要素番号“1”に対応するレコードに関しても、同様に値リスト332の参照を行うことで、引当値配列400の要素番号“1”の位置に“25”を設定する。
その結果、演算処理部170は、(C)に示す引当値配列400を取得できる。
演算処理部170は、引当値配列400と商品テーブルとに基づいて、以下に示す変換テーブル生成処理を行う。
次に、図10のステップS26の変換テーブル生成処理を詳細に説明する。
図16は、変換テーブル生成処理を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
[ステップS41]演算処理部170は、処理レコード数を示す変数NをN=1に設定する。
[ステップS42]演算処理部170は、累計配列270aを参照して、結合テーブル中、次に処理すべきレコードを特定する。演算処理部170は、例えば累計配列270aの要素を要素番号にしたがって昇順に参照する。演算処理部170は、順序集合211について、累計配列270aの要素と等しい要素番号に対応するレコードを次に処理すべきレコードとして特定できる。
[ステップS43]演算処理部170は、Nが同一の値である間は所定の優先順位に基づいて、引当元とする倉庫を選択する。ここで、上述した通りA倉庫はB倉庫よりも優先して処理対象となる。例えば、N=1で最初にA倉庫につき処理を行った後、N=1の状態で次に当該ステップの処理を行う際にはB倉庫を選択する。また、演算処理部170は、Nをインクリメントした後、初めて当該ステップの処理を行う際は、A倉庫を選択する。
[ステップS44]演算処理部170は、ステップS42で特定したレコードにつき、ステップS43で選択した倉庫から在庫数を取得する。
[ステップS45]演算処理部170は、引当値配列400の要素番号I(N)を算出する。ここで、引当値配列400につき要素番号I(N)に対応する位置に設定された値は、ステップS42で選択したレコードに含まれる商品についての引当値であり、それまでの引当結果を反映した残引当数量である。演算処理部170は、I(N)を算出するために、次の値を取得する。
(1)ステップS42で取得した累計配列270aの要素値M。
(2)処理レコード数N。
(3)ステップS42で選択した順序集合211のOS値が指し示すポインタ配列221のPVによって参照される累計配列350の要素値S。
そして、演算処理部170は、これらの値を用いて、
I(N)=M−N+1+S ・・・ (式1)
を算出する。
[ステップS46]演算処理部170は、引当値配列400の要素番号I(N)に対応する引当値を取得する。
[ステップS47]演算処理部170は、ステップS44で取得した在庫値がステップS46で取得した引当値よりも小さいか否かを判定する。小さい場合、処理をステップS48に進める。在庫値が引当値以上である場合、処理をステップS50に進める。
[ステップS48]演算処理部170は、引当値配列400の要素番号I(N)に対応する位置に“残引当値=引当値−在庫値”の値を設定する。
[ステップS49]演算処理部170は、ステップS42で選択したレコードに含まれる全ての引当元について処理を完了しており、同レコードに含まれる次の引当元の選択が不可であるかを判定する。不可である場合、処理をステップS53に進める。次の引当元の選択が可能である場合、処理をステップS43に進める。なお、演算処理部170は、本例では同一のNにつきB倉庫まで処理を行った場合には、全ての引当元について処理を完了しているので、次の引当元の選択が不可であると判定する。一方、A倉庫について処理を行った場合には、次にB倉庫を選択できるので次の引当元の選択が不可ではないと判定する。
[ステップS50]演算処理部170は、引当値配列400の要素番号I(N)に対応する引当値を“0”に設定する。
[ステップS51]演算処理部170は、在庫値の変換後の値を算出する。すなわち、“変換後在庫値=在庫値−引当値”を算出する。
[ステップS52]演算処理部170は、変換テーブルに変換内容を記録する。具体的には、演算処理部170は、ステップS42で選択したレコードを示す順序集合211のOS値、ステップS43で引当元として選択した倉庫を示すインデックス値(IDXと表記する)およびステップS51で算出した変換後在庫値を変換テーブルに設定する。
[ステップS53]演算処理部170は、結合テーブルの全レコードを処理済であるか否かを判定する。処理済である場合、処理を終了する。処理済でない場合、処理をステップS54に進める。
[ステップS54]演算処理部170は、Nをインクリメントする。そして、処理をステップS42に進める。
このようにして、演算処理部170は引当値配列400を更新しながら在庫数の更新内容を変換テーブルに記録する。演算処理部170は、上記(式1)で算出された要素番号I(N)により引当値配列400を参照することで、ある商品につき引当値配列400の当該商品に対応する要素を固定的に取得することができる。
なお、上記ステップS49からステップS53に遷移し、ステップS53で全レコードを処理済と判定する場合、最後に処理を行った引当元およびNの値に対応付けて変換テーブルに変換後在庫値“0”を設定する。
また、上記ステップS53において、引当値配列400において、全ての引当値が“0”となった時点で処理を完了してもよい。このようにすれば、処理コストをより軽減できる。
次に上記変換テーブル生成処理の具体例を説明する。
図17は、変換テーブル生成処理の具体例を示す第1の図である。演算処理部170は、次のようにして引当処理の履歴を記録することで、変換用データとして変換テーブル500を生成する。以下の具体例は、図15までの説明で得られた結合テーブルおよび引当値配列400に基づく処理である。
(1)演算処理部170は、累計配列270aの要素番号位置を昇順に参照し、累計値Mにより順序集合211を参照して、OS値を取得する。まず、演算処理部170は、累計配列270aの要素番号“0”の要素につき累計値“M=0”を取得する。そして、順序集合211につき要素番号“M=0”の位置のOS値“2”を取得する。なお、この場合、最初のレコードの処理となるので、処理レコード数“N=1”である。
(2)演算処理部170は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずA倉庫を引当元として選択する。
(3)演算処理部170は、取得したOS値によりA倉庫の情報ブロック240から対応する在庫値を取得する。演算処理部170は、OS値“2”によりポインタ配列241を参照し、PV“2”を取得する。演算処理部170は、PV“2”により値リスト242を参照し、在庫値“20”を取得する。
(4)演算処理部170は、商品名の情報ブロック220のポインタ配列221からOS値に対応するPVを取得する。そして、当該PVにより累計配列350を参照し、累計値Sを取得する。具体的には、演算処理部170は、OS値“2”によりポインタ配列221を参照し、PV“1”を取得する。演算処理部170は、PV“1”により累計配列350を参照し、累計値“S=0”を取得する。
(5)演算処理部170は、上記(式1)によりI(N)を算出する。具体的には、I(1)=M−N+1+S=0−1+1+0=0と算出できる。
(6)演算処理部170は、I(N)を要素番号として、引当値配列400を参照し、引当値を取得する。具体的には、I(1)=0の要素番号で示される引当値“10”を取得する。
(7)演算処理部170は、(3)で取得した在庫値と(6)で取得した引当値とを比較する。ここでは、在庫値“20”は引当値“10”よりも大きい、すなわち、在庫値は引当値よりも小さくない。よって、引当値配列400の要素番号I(1)=0で示される位置に引当値“0”を設定する。そして、“変換後在庫値=20−10=10”を算出し、変換テーブル500に、(1)で取得したOS値“2”、A倉庫のIDX“1”、変換後在庫値(VL)“10”を設定する。
そして、次のレコードに遷移する。
図18は、変換テーブル生成処理の具体例を示す第2の図である。演算処理部170は、図17の処理に引き続き図18の処理を実行する。
(1)演算処理部170は、次に累計配列270aの要素番号“1”の要素につき累計値“M=1”を取得する。そして、順序集合211につき要素番号“M=1”の位置のOS値“1”を取得する。なお、この場合、2つ目のレコードの処理となるので、処理レコード数“N=2”である。
(2)演算処理部170は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずA倉庫を引当元として選択する。
(3)演算処理部170は、取得したOS値によりA倉庫の情報ブロック240から対応する在庫値を取得する。演算処理部170は、OS値“1”によりポインタ配列241を参照し、PV“1”を取得する。演算処理部170は、PV“1”により値リスト242を参照し、在庫値“10”を取得する。
(4)演算処理部170は、商品名の情報ブロック220のポインタ配列221からOS値に対応するPVを取得する。そして、当該PVにより累計配列350を参照し、累計値Sを取得する。具体的には、演算処理部170は、OS値“1”によりポインタ配列221を参照し、PV“2”を取得する。演算処理部170は、PV“2”により累計配列350を参照し、累計値“S=1”を取得する。
(5)演算処理部170は、上記(式1)によりI(N)を算出する。具体的には、I(2)=M−N+1+S=1−2+1+1=1と算出できる。
(6)演算処理部170は、I(N)を要素番号として、引当値配列400を参照し、引当値を取得する。具体的には、I(2)=1の要素番号で示される引当値“25”を取得する。
(7)演算処理部170は、(3)で取得した在庫値と(6)で取得した引当値とを比較する。ここでは、在庫値“10”は引当値“25”よりも小さい。よって、引当値配列400の要素番号I(2)=1で示される位置に引当値“25−10=15”を設定する。ここで、在庫値が引当値よりも小さい場合には変換テーブル500に設定を行わない。これにより、メモリ資源の使用量を軽減できる。また、後段のフィールド更新処理を効率的に行うことができる。
そして、次に選択可能な引当元が存在するので、同一レコードの次の引当元による処理に遷移する。
図19は、変換テーブル生成処理の具体例を示す第3の図である。演算処理部170は、図18の処理に引き続き図19の処理を実行する。
(1)演算処理部170は、累計配列270aの要素番号“1”の要素につき累計値“M=1”を取得している。そして、順序集合211につき要素番号“M=1”の位置のOS値“1”を取得している。なお、図18に引き続き2つ目のレコードの処理となるので、依然として処理レコード数“N=2”である。
(2)演算処理部170は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、A倉庫は処理済なので次の引当元としてB倉庫を選択する。
(3)演算処理部170は、取得したOS値によりB倉庫の情報ブロック250から対応する在庫値を取得する。演算処理部170は、OS値“1”によりポインタ配列251を参照し、PV“1”を取得する。演算処理部170は、PV“1”により値リスト252を参照し、在庫値“10”を取得する。
(4)演算処理部170は、商品名の情報ブロック220のポインタ配列221からOS値に対応するPVを取得する。そして、当該PVにより累計配列350を参照し、累計値Sを取得する。具体的には、演算処理部170は、OS値“1”によりポインタ配列221を参照し、PV“2”を取得する。演算処理部170は、PV“2”により累計配列350を参照し、累計値“S=1”を取得する。
(5)演算処理部170は、上記(式1)によりI(N)を算出する。具体的には、I(2)=M−N+1+S=1−2+1+1=1と算出できる。
(6)演算処理部170は、I(N)を要素番号として、引当値配列400を参照し、引当値を取得する。具体的には、I(2)=1の要素番号で示される引当値“15”を取得する。
(7)演算処理部170は、(3)で取得した在庫値と(6)で取得した引当値とを比較する。ここでは、在庫値“10”は引当値“15”よりも小さい。よって、引当値配列400の要素番号I(2)=1で示される位置に引当値“15−10=5”を設定する。
そして、次に選択可能な引当元が存在しないので、次のレコードに遷移する。
図20は、変換テーブル生成処理の具体例を示す第4の図である。演算処理部170は、図19の処理に引き続き図20の処理を実行する。
(1)演算処理部170は、次に累計配列270aの要素番号“2”の要素につき累計値“M=2”を取得する。そして、順序集合211につき要素番号“M=2”の位置のOS値“3”を取得する。なお、この場合、3つ目のレコードの処理となるので、処理レコード数“N=3”である。
(2)演算処理部170は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずA倉庫を引当元として選択する。
(3)演算処理部170は、取得したOS値によりA倉庫の情報ブロック240から対応する在庫値を取得する。演算処理部170は、OS値“3”によりポインタ配列241を参照し、PV“2”を取得する。演算処理部170は、PV“2”により値リスト242を参照し、在庫値“20”を取得する。
(4)演算処理部170は、商品名の情報ブロック220のポインタ配列221からOS値に対応するPVを取得する。そして、当該PVにより累計配列350を参照し、累計値Sを取得する。具体的には、演算処理部170は、OS値“3”によりポインタ配列221を参照し、PV“2”を取得する。演算処理部170は、PV“2”により累計配列350を参照し、累計値“S=1”を取得する。
(5)演算処理部170は、上記(式1)によりI(N)を算出する。具体的には、I(3)=M−N+1+S=2−3+1+1=1と算出できる。
(6)演算処理部170は、I(N)を要素番号として、引当値配列400を参照し、引当値を取得する。具体的には、I(3)=1の要素番号で示される引当値“5”を取得する。
(7)演算処理部170は、(3)で取得した在庫値と(6)で取得した引当値とを比較する。ここでは、在庫値“20”は引当値“5”よりも大きい、すなわち、在庫値は引当値よりも小さくない。よって、引当値配列400の要素番号I(3)=1で示される位置に引当値“0”を設定する。そして、“変換後在庫値=20−5=15”を算出し、変換テーブル500に、(1)で取得したOS値“3”、A倉庫のIDX“1”、変換後在庫値(VL)“15”を設定する。
そして、演算処理部170は、全てのレコードにつき処理を完了したので、変換テーブル生成処理を終了する。演算処理部170は、生成した変換テーブル500を変換用データ記憶部120に格納する。
次に、データ更新部180は演算処理部170による変換テーブル生成処理が完了すると、変換用データ記憶部120に記憶された変換テーブル500に基づいて、フィールド更新処理を行う。以下、図10のステップS27のフィールド更新処理を詳細に説明する。
図21,22は、フィールド更新処理を示すフローチャートである。以下、図21,22に示す処理をステップ番号に沿って説明する。
[ステップS61]データ更新部180は、累計配列270を取得する。データ更新部180は、テーブル抽出部150がソート処理の際に生成した累計配列270を保持してもよいし、再度生成してもよい。
[ステップS62]データ更新部180は、変換テーブル500に基づき、各引当元について値リストの補完を行う。具体的には、データ更新部180は、変換テーブル500に存在してA倉庫やB倉庫の値リスト242,252に存在しない値を各値リストに追加する。なお、このとき、各値リストに基底値“0”が存在しない場合、“0”を追加する。
[ステップS63]データ更新部180は、各引当元の値リストの補完に応じて、ポインタ配列を更新する。具体的には、データ更新部180は、同一レコードの項目値(在庫値)が補完前後で同一となるようポインタ配列の値を変更する。
[ステップS64]データ更新部180は、変換テーブル500に設定された変換後在庫値のポインタ配列(以下、変換用ポインタ配列と称する)を生成する。当該生成処理の詳細は後述する。
[ステップS65]データ更新部180は、商品テーブルを示す順序集合211の最初の要素番号を示すR1の値を初期化する。すなわち、“R1=0”を設定する。
[ステップS66]データ更新部180は、変換テーブル500の最初の処理対象レコードを指定する行番号R2に“R2=0”を設定する。
[ステップS67]データ更新部180は、順序集合211の要素番号R1に対応するOS値(OS値(R1)と称する)を取得する。また、データ更新部180は、変換テーブル500の行番号R2に対応するOS値(OS値(R2)と称する)を取得する。データ更新部180は、OS値(R1)がOS値(R2)よりも小さいか否かを判定する。小さい場合、処理をステップS68に進める。小さくない場合、処理をステップS70に進める。
[ステップS68]データ更新部180は、順序集合211のOS値(R1)でA倉庫、B倉庫を示す情報ブロック240,250に含まれるポインタ配列241,251を参照する。データ更新部180は、参照したポインタ配列241,251のPVを値リスト242,252中のVL“0”を指し示すPVに変更する。
[ステップS69]データ更新部180は、R1をインクリメントする。そして、処理をステップS67に進める。
[ステップS70]データ更新部180は、変数C=1を設定する。変数Cは、商品テーブルにおいて、A倉庫、B倉庫に対応する列を示す変数である。
[ステップS71]データ更新部180は、変換テーブル500の行番号R2に対応するIDX値を取得する。そして、データ更新部180は、CがIDXと等しいか否かを判定する。等しい場合、処理をステップS72に進める。等しくない場合、処理をステップS76に進める。ここで、本例では上述したようにIDX=1は、A倉庫に対応する。また、IDX=2はB倉庫に対応する。
[ステップS72]データ更新部180は、変換用ポインタ配列に基づいて、当該IDXに対応する引当元のポインタ配列の要素番号“R1”の位置のPVを変更する。
[ステップS73]データ更新部180は、累計配列270に含まれる累計値のうち、R1より大きい最小の累計値を取得する。そして、R1に取得した累計値を設定する。
[ステップS74]データ更新部180は、順序集合211につき要素番号“R1”に対応する順序集合211の要素(すなわち、OS値)が存在するか否かを判定する。存在する場合、処理をステップS75に進める。存在しない場合、処理を終了する。
[ステップS75]データ更新部180は、行番号R2をインクリメントする。そして、処理をステップS67に進める。
[ステップS76]データ更新部180は、引当元の情報ブロックであって、Cの値のIDXに対応する情報ブロックに含まれるポインタ配列のOS値(R1)で指示される位置のPVを値リスト中のVL“0”を指し示すPVに変更する。なお、上記ステップS68では、A倉庫、B倉庫の情報ブロック240,250に含まれるポインタ配列241,251を共に変更するが、本ステップS76では、何れかのポインタ配列のみが処理対象である点が異なっている。本例では、ステップS76においてA倉庫のポインタ配列241のみが処理対象となる。
[ステップS77]データ更新部180は、Cをインクリメントする。そして、処理をステップS71に進める。
このように、データ更新部180は変換テーブル500を参照して、情報ブロック240,250に引当の演算結果を反映する。
ここで、ステップS68のように、OS値(R1)がOS値(R2)よりも小さい場合に、全ての倉庫を“0”に設定するよう処理することで、処理を効率化できる。また、変換テーブル500で保持すべきデータ量を軽減できる。
なお、上記ステップS74において、データ更新部180は処理完了の判定を、変換テーブル500に未処理のレコードが存在するか否かによって判定してもよい。その判定の結果、未処理のレコードが存在する場合、処理をステップS75に進める。そして、未処理のレコードが存在しない、すなわち、全レコードについて処理を終了したと判定する場合、処理を完了する。本判定は、例えば行番号R2が最大値であるか否かによって行うことができる。ここで、行番号R2の最大値とは、変換テーブル500に含まれる行数−1である。変換テーブル500の例では、当該最大値は“1”である。行番号R2が最大値に達している場合、全レコードについて処理を終了したと検知できる。
以下では、上記フィールド更新処理の具体例を説明する。
図23は、累計配列の取得処理の具体例を示す図である。データ更新部180は、累計配列270を取得する。ここで、累計配列270の生成方法は、図11の(1)、(2)で説明した、累計配列生成部160の手順と同様である。このため、ここではその説明を省略する。なお、データ更新部180は、累計配列生成部160が生成した累計配列270を累計配列生成部160から予め取得して保持してもよい。
次に、変換テーブル500および累計配列270を用いた情報ブロックの変換処理の具体例を説明する。
以下に示す図24〜30は、フィールド更新処理の具体例を示している。以下では、図24〜30に示す処理をステップ番号に沿って説明する。
図24は、フィールド更新処理の具体例を示す第1の図である。
[ステップST11]データ更新部180は、変換用データ記憶部120を参照して、変換テーブル500を取得する。なお、本例では、変換テーブル500にはIDX“1”のレコードが含まれる。このため、以降の処理の流れを把握し易いように、A倉庫を示す情報ブロック240も図示している。
[ステップST12]データ更新部180は、変換テーブル500に含まれる在庫値(VL)のうち、値リスト242に含まれていない値を取得する。本例では、そのようなVLとして“15”が存在する。よって、データ更新部180は値リスト242に“15”を追加する。また、値リスト242には、基底値“0”が含まれていないので、データ更新部180は値リスト242に“0”を追加する。ここで、B倉庫に関する値リスト252にも基底値“0”が存在しないので、データ更新部180はA倉庫と同様に値リスト252に“0”を追加する。
図25は、フィールド更新処理の具体例を示す第2の図である。以下、図24に引き続き実行される処理を説明する。
[ステップST13]データ更新部180は、値リスト242のVLの補完前後で、ポインタ配列241の各PVで指示される在庫値が同一となるようPVを変更する。具体的には、データ更新部180はポインタ配列241の要素番号“1”のPVにつき、VL補完前に指示していた“10”を、VL補完後にも指示するように当該PVを“1”から“2”に変更する。同様に、ポインタ配列241の要素番号“2”のPVにつき、VL補完前に指示していた“20”を、VL補完後にも指示するように当該PVを“2”から“4”に変更する。また、ポインタ配列241の要素番号“3”のPVにつき、VL補完前に指示していた“20”を、VL補完後にも指示するように当該PVを“2”から“4”に変更する。
なお、ステップST12においてデータ更新部180は、値リスト252にも“0”を追加しているので、ポインタ配列251に対しても同様にPVの変更を行う。
[ステップST14]データ更新部180は、変換テーブル500および値リスト242に基づいて、変換用ポインタ配列600を生成する。具体的には、データ更新部180は、まず、変換テーブル500の行番号“R2=0”の変換レコードを参照する。そして、同変換レコードにつきIDX“1”およびVL“10”を特定する。更に、IDX“1”に対応する情報ブロック240を参照し、値リスト242からVL“10”の位置を示す要素番号“2”を取得する。そして、変換用ポインタ配列600の要素番号“R2=0”の位置に当該要素番号“2”をPVとして設定する。これにより、変換テーブル500の行番号“R2=0”の変換レコードのための変換用ポインタ配列600の要素が決定される。そして、データ更新部180は、変換テーブル500の次の行の変換レコードを処理する。すなわち、行番号“R2=1”の変換レコードにつきIDX“1”およびVL“15”を特定する。更に、IDX“1”に対応する情報ブロック240を参照し、値リスト242からVL“15”の位置を示す要素番号“3”を取得する。そして、変換用ポインタ配列600の要素番号“R2=1”の位置に当該要素番号“3”をPVとして設定する。これにより、変換テーブル500の行番号“R2=1”の変換レコードのための変換用ポインタ配列600の要素が決定される。
当該ステップST14までの処理によって、図21に示したステップS64までの処理が完了する。以降、データ更新部180は、情報ブロック240,250の各ポインタ配列におけるPVを更新する。
図26は、フィールド更新処理の具体例を示す第3の図である。以下、図25に引き続き実行される処理を説明する。
[ステップST15]データ更新部180は、最初の商品の在庫値のフィールド更新を行う。フィールド更新は、順序集合211の要素番号の昇順に行う。また、フィールド更新は同一レコード内においては、IDXの昇順に行う。まず、データ更新部180は、順序集合211の要素番号“R1=0”を取得し、その位置のOS値“2”を取得する。更に、データ更新部180は、変換テーブル500の最初の行番号を示す“R2=0”を取得し、当該レコードに含まれるOS値“2”を取得する。そして、データ更新部180は、両OS値を比較する。
“OS値(R1)=2”と“OS値(R2)=2”とが等しい、すなわち、OS値(R1)はOS値(R2)よりも小さくない。また、変換テーブル500の当該レコードのIDX“1”は、現在対象としている情報ブロック240のIDX“1”と一致する。よって、データ更新部180は、変換用ポインタ配列600の要素番号“R2=0”に設定された変換用PV“2”を取得する。データ更新部180は、“R1=0”に対応するOS値“2”で指示されるIDX“1”のポインタ配列241のPV“4”を変換用PV“2”に変更する。
図27は、フィールド更新処理の具体例を示す第4の図である。以下、図26に引き続き実行される処理を説明する。
[ステップST16]データ更新部180は、累計配列270を参照して、次の商品のレコードに遷移する。具体的には、データ更新部180は累計配列270の累計値“1,3”のうち、現在の“R1=0”よりも大きく、かつ、最小の累計値“1”を取得する。そして、データ更新部180は“R1=1”とする。また、データ更新部180は、変換テーブル500の処理対象の行番号R2をインクリメントし、“R2=0+1=1”とする。
図28は、フィールド更新処理の具体例を示す第5の図である。以下、図27に引き続き実行される処理を説明する。
[ステップST17]データ更新部180は、次の商品の在庫値のフィールド更新を行う。データ更新部180は、順序集合211の要素番号“R1=1”の位置のOS値“1”を取得する。更に、データ更新部180は、変換テーブル500の行番号“R2=1”に対応するレコードに含まれるOS値“3”を取得する。そして、データ更新部180は、両OS値を比較する。
“OS値(R1)=1”は“OS値(R2)=3”よりも小さいため、データ更新部180は、“R1=1”に対応するOS値“1”で指示されるIDX“1”のポインタ配列241のPV“2”を値リスト242中“0”を示す要素番号“1”に変更する。また、データ更新部180は、“R1=1”に対応するOS値“1”で指示されるIDX“2”のポインタ配列251のPV“2”を値リスト252中“0”を示す要素番号“1”に変更する。
そして、データ更新部180はR1をインクリメントし“R1=1+1=2”とする。
図29は、フィールド更新処理の具体例を示す第6の図である。以下、図28に引き続き実行される処理を説明する。
[ステップST18]データ更新部180は、次のレコードの在庫値のフィールド更新を行う。データ更新部180は、順序集合211の要素番号“R1=2”の位置のOS値“3”を取得する。更に、データ更新部180は、変換テーブル500の行番号“R2=1”に対応するレコードに含まれるOS値“3”を取得する。そして、データ更新部180は、両OS値を比較する。
“OS値(R1)=3”と“OS値(R2)=3”とが等しい、すなわち、OS値(R1)はOS値(R2)よりも小さくない。また、変換テーブル500の当該レコードのIDX“1”は、現在対象としている情報ブロック240のIDX“1”と一致する。よって、データ更新部180は、変換用ポインタ配列600の要素番号“R2=1”に設定された変換用PV“3”を取得する。データ更新部180は、“R1=2”に対応するOS値“3”で指示されるIDX“1”のポインタ配列241のPV“4”を変換用PV“3”に変更する。
図30は、フィールド更新処理の具体例を示す第7の図である。以下、図29に引き続き実行される処理を説明する。
[ステップST19]データ更新部180は、累計配列270を参照して、次の商品のレコードへの遷移を試みる。具体的には、データ更新部180は累計配列270の累計値“1,3”のうち、現在の“R1=2”よりも大きく、かつ、最小の累計値“3”を取得する。そして、データ更新部180は“R1=3”とする。ここで、データ更新部180は、順序集合211において“R1=3”に対応する要素が存在しないことから、当該フィールド更新処理を終了する。
このようにして、データ更新部180は、情報ブロック240,250に含まれるポインタ配列241,251および値リスト242,252の変換を行う。
図31は、フィールド更新後の商品テーブルの例を示す図である。図31では、順序集合210によって表される商品テーブルを示している。図7と比較すると、1レコード目の商品名“りんご”につき、引当が行われた結果、A倉庫の項目値が引当前の値“10”から引当後の値“0”へ変更されたことが分かる。また、B倉庫の項目値が引当前の値“10”から引当後の値“0”へ変更されたことが分かる。同様に、2レコード目の商品名“みかん”につき、引当が行われた結果、A倉庫の項目値が引当前の値“20”から引当後の値“10”に変更されたことが分かる。更に、3レコード目の商品名“りんご”につき、引当が行われた結果、A倉庫の項目値が引当前の値“20”から引当後の値“15”に変更されたことが分かる。
このように、データ更新部180は、A倉庫の情報ブロック240およびB倉庫の情報ブロック250につき引当後の項目値を適正に取得することができる。
データ更新部180は、更新後の商品テーブルをデータ管理部130に出力する。データ管理部130は、更新後の商品テーブルにより、引当処理後の商品の在庫状態を管理することができる。
データ管理部130は、表示処理部190からの要求に応じて当該更新後の商品テーブルの表形式データを出力する。表示処理部190は、当該表形式データをモニタ11や端末装置30に表示させる。
図32は、入力コマンドおよび結果表示内容の例を示す図である。(A)は処理要求受付部140が受け付けるコマンド50の引数の例を示している。(B)は引当処理の結果得られた表形式データである商品テーブル200aを例示している。
(A)に示すコマンド50では、例えば引数51,52,53,54,55を指定することができる。
引数51は、演算処理の対象とし、演算の結果、変換を施すテーブル(マスタテーブル)を指定する情報を入力するための引数である。本実施の形態の例では、“商品テーブル”を指定する情報である。
引数52は、演算処理の対象とするもう一方のテーブル(スレイブテーブル)を指定する情報を入力するための引数である。本実施の形態では、“出庫テーブル”を指定する情報である。
引数53は、マスタテーブルの項目のうち参照項目を指定するための引数である。本実施の形態では、“商品名”の項目を指定する情報である。
引数54は、スレイブテーブルの項目のうち被参照項目を指定するための引数である。本実施の形態では、“商品名”の項目を指定する情報である。
引数55は、演算処理の内容(計算式)および処理項目を指定する引数である。本実施の形態では、例えば、“Reserve(RANGE(@A倉庫,@B倉庫),基底値,@出庫テーブル.出庫数)”という関数が設定される。なお、本例において基底値は“0”である。
コマンド50は、例えばユーザが端末装置30の表示する所定のGUIを操作して、引当対象とすべきテーブルや項目を選択した際に端末装置30あるいはデータ処理サーバ100で生成され、処理要求受付部140に送信される。なお、ユーザがキーボード12やマウス13を用いて直接コマンド50を入力してもよい。
また、引数55に、他の関数等を設定することで、異なる処理を実行することもできる。異なる計算式による変形例に関しては後述する。
(B)に示す商品テーブル200aは、図31の商品テーブルを表形式に示したものである。表示処理部190は、コマンド50の入力内容により引当処理が完了すると商品テーブル200aをモニタ11あるいは端末装置30に表示させる。ユーザは、商品テーブル200aを視認して、引当結果を確認することができる。
図33は、従来のデータ処理方法との比較を示す図である。データ処理サーバ100では、商品テーブル700および出庫テーブル800を管理しているものとする。商品テーブル700は、表形式の商品テーブル200を順序集合210および情報ブロック220,230,240,250に分解したものである。また、出庫テーブル800は、表形式の出庫テーブル300を順序集合310および情報ブロック320,330に分解したものである。
ここで、従来では、レコード単位でしか演算処理を行うことができなかったため、商品テーブル700から出庫テーブル800に設定された出庫数で引当処理を行う場合、以下のようにしてその処理を行っていた。
まず、商品テーブル700と出庫テーブル800とを結合して結合テーブル900を生成する。次に、結合テーブル900を例えばCSV(Comma Separated Values)形式のテキストデータなどで出力した結合データファイル910を取得する。次に、結合データファイル910をDBサーバ20のRDBに読み込んでRDB上の結合テーブル920に所定のアプリケーションによる引当処理を行う。次に、その結果を例えばCSV形式のテキストデータなどで出力した引当後データファイル930を取得する。そして、引当後データファイル930を各成分に分解したテーブルとしてデータ処理サーバ100に読み込む。そして、引当後の商品テーブル700aを得る。
しかしながら、従来の方法では上記のようにディスク入出力、データ変換および外部アプリケーションでの引当といった複数の処理を実行する必要があるため、その処理コストが問題となっていた。特に、近年では情報システムで扱うデータ量も従来に比べて大量となっており、当該処理コストが過大になっていた。
これに対し、本実施の形態では、データ処理サーバ100は、結合テーブル900からディスクI/Oやデータ形式の変換等の処理を行うことなく引当後テーブル940を取得することができる。
これにより、処理コストが軽減され、引当処理に要する時間を短縮することができる。また、上述したように引当処理に用いる引当値配列400を複数の商品や出庫元(A倉庫やB倉庫)で共通して利用できるので、演算の途中結果を保持するために必要なメモリ量を軽減することができる。その結果、引当処理を従来よりも効率的に実行することができる。
図34は、データ処理方法の第1の変形例を示す第1の図である。図34では、当日のサービスの利用数の履歴を顧客毎に取得し、それを前日までの履歴に累積して、当日までの顧客毎のサービスの利用数を得るための計算方法を示している。
当日データテーブル200bには、顧客ID(IDentifier)に対応付けて複数のサービスを示す項目、そのサービスの当日の利用数を示す履歴通番の項目が設けられている。例えば、1レコード目は、顧客ID“00001”で示される顧客が当日に“Bサービス”を“1”回利用したことを示す。同様に、2レコード目は、顧客ID“00002”で示される顧客が当日に“Aサービス”および“Bサービス”を組み合わせたサービスを“1”回利用したことを示す。更に、3レコード目は、顧客ID“00001”で示される顧客が当日に“Aサービス”を“1”回利用したことを示す。
また、前日までの最終履歴通番テーブル300bには、顧客IDに対応付けて前日までの顧客のサービスの利用数を示す履歴通番の項目が設けられている。例えば、1レコード目は顧客ID“00001”で示される顧客が前日までに何れかあるいは両方のサービスを計“5回”利用したことを示す。同様に2レコード目は、顧客ID“00002”で示される顧客が前日までに何れかあるいは両方のサービスを計“3回”利用したことを示す。
データ処理サーバ100は、前日までの最終履歴通番テーブル300bを用いて当日データテーブル200bを更新し、当日データテーブル200bの履歴通番に、前日までの履歴通番を累積した結果を得ることができる。
データ処理サーバ100は、計算式として例えば“Accum(RANGE(@履歴通番),@前日までの最終履歴通番.履歴通番)”を受け付ける。すると、当日データテーブル200bの履歴通番の値に、前日までの最終履歴通番の値を累積する処理を行う。ここで、上記の例では、引当処理であったため、作業領域に設けた配列の値との差をとったが、本変形例では、和をとり、その結果で作業領域の配列を更新する点が異なっている。
具体的には、前日までの最終履歴通番テーブル300bに基づいて履歴通番配列400bを生成する。履歴通番配列400bが作業領域の配列であり、引当値配列400に対応する。そして、当日データテーブル200bの各レコードの履歴通番の更新が必要であることを検知するたびに履歴通番配列400bを更新する。
例えば、当日データテーブル200bの1番目のレコードの履歴通番“1”には“5”を加算する必要があるので、履歴通番配列400bの要素番号“0”の位置を“1+5=6”で更新する。そして、変換テーブル500bの第1レコードを示すOS値“1”に対応するVLに“6”を設定する。続いて、当日データテーブル200bの2番目のレコードの履歴通番“1”には“3”を加算する必要があるので、履歴通番配列400bの要素番号“1”の位置を“1+3=4”で更新する。そして、変換テーブル500bの第2レコードを示すOS値“2”に対応するVLに“4”を設定する。続いて、当日データテーブル200bの3番目のレコードの履歴通番“1”には、“6”を加算する必要があるので、履歴通番配列400bの要素番号“0”の位置を“1+6=7”で更新する。そして、変換テーブル500bの第3レコードを示すOS値“3”に対応するVLに“7”を設定する。
データ処理サーバ100は、生成した変換テーブル500bによって、当日データテーブル200bの履歴通番の値を更新することができる。
図35は、データ処理方法の第1の変形例を示す第2の図である。データ処理サーバ100は、上記変換テーブル500bにより当日データテーブル200bを更新して、当日データテーブル200cを生成する。具体的には、変換テーブル500bの各OS値に対応するレコードに含まれる履歴通番の値を、変換テーブル500bの当該レコードを示すOS値に対応するVLに変更する。
また、データ処理サーバ100は、履歴通番配列400bの各要素を顧客IDに対応付けることで、当日までの最終履歴通番テーブル300cを得ることができる。
このように、データ処理サーバ100は、コマンド50の計算式55に所定の累積処理用関数が設定されることで、マスタテーブルの所定の項目値にスレイブテーブルの当該項目値の累積和をとる演算を行うことができる。
なお、上記の処理は、当日データテーブル200bおよび前日までの最終履歴通番テーブル300bを複数の情報ブロックに分解した状態で実行できるので、前述の引当処理と同様、各処理を効率的に実行することができる。
図36は、データ処理方法の第2の変形例を示す第1の図である。図36では、当日の顧客の(あるサービスに対する)契約状態と、その契約状態の変更状況を得るための計算方法を示している。ここで、具体的に取り得る契約状態は“新規”状態、“更新”状態とする。そして、当該状態が何れか一方の状態から他方の状態となった場合に変更があったものとする。
当日データテーブル200dには、顧客IDに対応付けて契約状態の項目および変更フラグの項目が設けられている。変更フラグの項目には、直前のレコードで示される契約状態から変更があった場合に、それを示すフラグが設定される。例えば、1レコード目には顧客ID“00001”で示される顧客が契約状態“新規”で登録されたことを示す設定がなされている。また、2レコード目には顧客ID“00001”で示される顧客が契約状態“新規”で登録されたことを示す設定がなされている。更に、3レコード目には顧客ID“00001”で示される顧客が契約状態“更新”で登録されたことを示す設定がなされている。なお、初期状態では、変更フラグは“−”(設定なし)である。
また、前日の状態テーブル300dには、顧客IDに対応付けて前日の顧客の契約状態を示す項目が設けられている。例えば、顧客ID“00001”で示される顧客が前日に契約状態“新規”で登録されたことを示す設定がなされている。
データ処理サーバ100は、前日の状態テーブル300dを用いて当日データテーブル200dの変更フラグを更新することができる。
データ処理サーバ100は、計算式として例えば“Set(RANGE(@契約状態),LAG(<>(@契約状態,@前日の状態.契約状態),1,0))”を受け付ける。すると、当日データテーブル200dの直前のレコードとの契約状態の比較を行い、変更フラグへの設定を行う。
具体的には、前日の状態テーブル300dに基づいて、契約状態配列400dを生成する。契約状態配列400dは前述の作業領域の配列である。前日の状態テーブル300dには、前日の状態として“新規”が設定されているので契約状態配列400dにも“新規”が設定される。
そして、当日データテーブル200dの各レコードの契約状態の設定内容で契約状態配列400dを更新する。
例えば、当日データテーブル200dの1番目のレコードの契約状態は“新規”であるので、当該値を契約状態配列400dに設定する。また、設定前の契約状態“新規”と設定後の契約状態“新規”とは等しい。よって、上記計算式に基づき、変換テーブル500dの第1レコードを示すOS値“1”に対応するVLに“0”を設定する。続いて、当日データテーブル200dの2番目のレコードの契約状態は“新規”であるので、当該値を契約状態配列400dに設定する。また、設定前の契約状態“新規”と設定後の契約状態“新規”とは等しい。よって、変換テーブル500dの第2レコードを示すOS値“2”に対応するVLに“0”を設定する。更に、当日データテーブル200dの3番目のレコードの契約状態は“更新”であるので、当該値を契約状態配列400dに設定する。また、設定前の契約状態“新規”と設定後の契約状態“更新”とは異なる。よって、上記計算式に基づき、変換テーブル500dの第3レコードを示すOS値“3”に対応するVLに“1”を設定する。
データ処理サーバ100は、生成した変換テーブル500dによって、当日データテーブル200dの変更フラグの値を設定することができる。
図37は、データ処理方法の第2の変形例を示す第2の図である。データ処理サーバ100は、上記変換テーブル500dにより当日データテーブル200dを更新して、当日データテーブル200eを生成する。具体的には、変換テーブル500dの各OS値に対応するレコードに含まれる変更フラグの値を、変換テーブル500dの当該レコードを示すOS値に対応するVLに変更する。
また、データ処理サーバ100は、契約状態配列400dの要素を顧客IDに対応付けることで、当日の状態テーブル300eを得ることができる。
このように、データ処理サーバ100は、コマンド50の計算式55に所定の比較処理用関数が設定されることで、マスタテーブルの所定の項目値に直前のレコードとの比較結果を入力する演算を行うことができる。
なお、上記の処理は、当日データテーブル200dおよび前日までの状態テーブル300dを複数の情報ブロックに分解した状態で実行できるので、前述の引当処理等と同様、各処理を効率的に実行することができる。
更に、作業領域の固定位置を参照して演算を行うような処理方法は上述した例に限られない。具体的には、処理対象の複数の項目値に対して、ある係数による演算を一括して行う場合に利用することができる。これは、作業領域の値を演算に伴って変更しないよう制御することで実現できる。このような演算機能は、例えば複数の通貨値を為替レートにより他国の通貨値へ一括変換する処理に利用可能である。また、例えば、複数の商品価格に対して割引率を一括反映する処理に利用可能である。
以上、本発明のデータ処理プログラム、データ処理装置およびデータ処理方法を図示の実施の形態に基づいて説明したが、これらに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。更に、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
1 データ処理装置
1a 記憶手段
1b データ取得手段
1c 累計配列生成手段
1d 演算手段
1e 更新手段
2,3 順序集合
2a,2c,3a,3c ポインタ配列
2b,2d,3b,3d 値リスト
4 第1の累計配列
5 第2の累計配列
6 第1の作業用記憶領域
7 第2の作業用記憶領域

Claims (9)

  1. 複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラムにおいて、コンピュータに、
    前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶手段から、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとを取得し、
    前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第1の関係データの順序集合を整列し、
    前記第2の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第1のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第1のレコードの数を累計した第1の累計配列を生成すると共に、前記第2の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第2のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第2のレコードの数を累計した第2の累計配列を生成し、
    前記第2の処理項目に対応する値リストに記載された項目値を、前記第1の関係データの順序集合が示すレコードの順序に対応させて第1の作業用記憶領域に設定し、
    前記第1および前記第2の累計配列を用いることで、前記第1の関係データの各レコードに対応する前記第1の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第1の処理項目の項目値を用いて当該レコードに対応する前記第1の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域に設定し、
    前記第2の作業用記憶領域に設定された情報に基づいて、前記第1の処理項目に対応する値リストとポインタ配列とを更新する、
    処理を実行させることを特徴とするデータ処理プログラム。
  2. 前記第1の作業用記憶領域に設定された何れかの項目値を特定する処理は、前記第1の累計配列を当該第1の累計配列の各要素位置を示す要素番号の昇順に参照し、参照のたびに、当該要素番号に対応する第1の累計数M(Mは0以上の整数)を取得し、取得した前記第1の累計数Mに対応づけられた前記第1の関係データの順序集合で示されるレコードにつき前記参照項目に対応するポインタ配列のポインタ値を用いて、前記第2の累計配列に含まれる第2の累計数S(Sは0以上の整数)を取得して、I(N)=M−N+1+S(Nは1以上の整数であり、前記第1の累計配列の参照回数を示す)の計算結果I(N)に基づいて、前記第1の作業用記憶領域に設定された何れかの項目値を特定することを特徴とする請求項1記載のデータ処理プログラム。
  3. 前記演算は、各レコードに含まれる前記第1の処理項目の項目値と当該レコードに対応する前記第1の作業用記憶領域の項目値との差を求めることを特徴とする請求項1または2の何れか一項に記載のデータ処理プログラム。
  4. 前記コンピュータに、更に、
    前記第1の作業用記憶領域の項目値を0で更新する場合に前記演算に伴う前記第1の処理項目の項目値の変化後の値を第2の作業用記憶領域に設定し、前記第1の作業用記憶領域の項目値を0以外で更新する場合には前記第2の作業用記憶領域への設定を行わないよう制御する、
    処理を実行させることを特徴とする請求項3記載のデータ処理プログラム。
  5. 前記ポインタ配列を更新する処理は、前記第1の関係データの各レコードにつき、前記第2の作業用記憶領域に当該レコードに含まれる前記第1の処理項目の項目値の変化後の値が設定されている場合には、当該レコードに含まれる前記第1の処理項目に対応する値リストの項目値が前記変化後の値を示すよう当該第1の処理項目に対応するポインタ配列を更新し、前記第2の作業用記憶領域に当該レコードに対応する前記第1の処理項目の項目値の変化後の値が設定されていない場合には、当該レコードに含まれる前記第1の処理項目に対応する値リストの項目値が0を示すよう当該第1の処理項目に対応するポインタ配列を更新する処理であることを特徴とする請求項4記載のデータ処理プログラム。
  6. 前記演算は、前記第1の関係データに前記第1の処理項目を含み所定の優先度が付与された複数の処理項目が含まれる場合、前記優先度に応じた順序で、前記複数の処理項目それぞれの項目値を用いて行い、当該演算に伴う前記各処理項目の項目値の変化を示す情報を第2の作業用記憶領域に設定することを特徴とする請求項1乃至5の何れか一項に記載のデータ処理プログラム。
  7. 前記コンピュータに、更に、
    前記演算の演算内容に応じて、当該演算に伴う前記第1の関係データに定義された第3の処理項目の項目値の変化を示す情報を前記第2の作業用記憶領域に設定し、
    前記第2の作業用記憶領域に設定された情報に基づいて、前記第3の処理項目に対応する値リストとポインタ配列とを更新する、
    処理を実行させることを特徴とする請求項1乃至6の何れか一項に記載のデータ処理プログラム。
  8. 複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理装置において、
    前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶手段から、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとを取得する関係データ取得手段と、
    前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第1の関係データの順序集合を整列し、前記第2の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第1のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第1のレコードの数を累計した第1の累計配列を生成すると共に、前記第2の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第2のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第2のレコードの数を累計した第2の累計配列を生成する累計配列生成手段と、
    前記第2の処理項目に対応する値リストに記載された項目値を、前記第1の関係データの順序集合が示すレコードの順序に対応させて第1の作業用記憶領域に設定し、前記第1および前記第2の累計配列を用いることで、前記第1の関係データの各レコードに対応する前記第1の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第1の処理項目の項目値を用いて当該レコードに対応する前記第1の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域に設定する演算手段と、
    前記第2の作業用記憶領域に設定された情報に基づいて、前記第1の処理項目に対応する値リストとポインタ配列とを更新する更新手段と、
    を有することを特徴とするデータ処理装置。
  9. 複数の項目が定義された複数のレコードを含む関係データを処理するためのコンピュータのデータ処理方法において、
    前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶部から、参照項目および第1の処理項目が定義された第1の関係データと被参照項目および第2の処理項目が定義された第2の関係データとを取得し、
    前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第1の関係データの順序集合を整列し、
    前記第2の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第1のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第1のレコードの数を累計した第1の累計配列を生成すると共に、前記第2の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第2のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第2のレコードの数を累計した第2の累計配列を生成し、
    前記第2の処理項目に対応する値リストに記載された項目値を、前記第1の関係データの順序集合が示すレコードの順序に対応させて第1の作業用記憶領域に設定し、
    前記第1および前記第2の累計配列を用いることで、前記第1の関係データの各レコードに対応する前記第1の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第1の処理項目の項目値を用いて当該レコードに対応する前記第1の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第1の処理項目の項目値の変化を示す情報を第2の作業用記憶領域に設定し、
    前記第2の作業用記憶領域に設定された情報に基づいて、前記第1の処理項目に対応する値リストとポインタ配列とを更新する、
    ことを特徴とするデータ処理方法。
JP2010069235A 2010-03-25 2010-03-25 データ処理プログラム、データ処理装置およびデータ処理方法 Pending JP2011203899A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010069235A JP2011203899A (ja) 2010-03-25 2010-03-25 データ処理プログラム、データ処理装置およびデータ処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010069235A JP2011203899A (ja) 2010-03-25 2010-03-25 データ処理プログラム、データ処理装置およびデータ処理方法

Publications (1)

Publication Number Publication Date
JP2011203899A true JP2011203899A (ja) 2011-10-13

Family

ID=44880496

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010069235A Pending JP2011203899A (ja) 2010-03-25 2010-03-25 データ処理プログラム、データ処理装置およびデータ処理方法

Country Status (1)

Country Link
JP (1) JP2011203899A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015179353A (ja) * 2014-03-19 2015-10-08 日本電気株式会社 データ処理装置
CN115023714A (zh) * 2020-02-06 2022-09-06 三菱电机株式会社 数据处理装置、数据处理方法和数据处理程序

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015179353A (ja) * 2014-03-19 2015-10-08 日本電気株式会社 データ処理装置
CN115023714A (zh) * 2020-02-06 2022-09-06 三菱电机株式会社 数据处理装置、数据处理方法和数据处理程序

Similar Documents

Publication Publication Date Title
JP4287234B2 (ja) 業務プロセストラッキング装置,業務プロセストラッキング方法,業務プロセストラッキングプログラム,業務プロセストラッキングプログラムを記録した記録媒体
US20100042745A1 (en) Workflow diagram generation program, apparatus and method
CN103678585A (zh) 一种用户数据筛选的方法和系统
JP2017091397A (ja) 販売状況表示方法、販売状況表示装置、および販売状況表示プログラム
JP2007323680A (ja) 経営意思決定支援システム
JP5439275B2 (ja) 情報処理装置、原価見通し算出方法、および原価見通し算出プログラム
WO2011121703A1 (ja) 生産管理装置、生産管理プログラムおよび生産管理方法
CN112348420A (zh) 储位信息获取方法及系统、存储介质和电子设备
JP2011203899A (ja) データ処理プログラム、データ処理装置およびデータ処理方法
EP1555609A1 (en) Data processing method and data processing program
JP2018112919A (ja) テスト入力情報検索装置及び方法
JP2009245054A (ja) 生産管理プログラム、生産管理装置および生産管理方法
JP2008052444A (ja) マーケティング支援システム
JP6186797B2 (ja) 製造管理プログラム、製造管理装置および製造管理方法
US11995586B2 (en) Production planning system and production planning method
JP2019101829A (ja) ソフトウェア部品管理システム、計算機および方法
JP6555024B2 (ja) 情報処理装置及び情報処理プログラム
JP6708919B2 (ja) 情報処理プログラム、情報処理装置およびレコードデータ処理方法
JP2004178150A (ja) 生産プロセスマネジメント・チャートによる統合生産管理方法及びそのシステム
CN101174282A (zh) 图库管理系统及方法
JP2006209444A (ja) 戦略策定支援装置
JPH1125181A (ja) 資材所要展開方式
JP2008299661A (ja) 統合コンフィギュレーション装置、統合コンフィギュレーション方法、および統合コンフィギュレーションプログラム
JP2005242816A (ja) コンピュータによる受注交渉支援方法
JP7021401B1 (ja) ロギング支援装置、ロギングシステム、ロギング支援方法及びプログラム