(57)【要約】【課題】テーブル比較において、複数テーブルの主キーの値が相互に一致しない場合にも、わずかな計算コストで、データの比較を容易に行えるようにする。【解決手段】テーブル比較装置は、各レコードを、主キーの値に従って整列する。そして、ｉ（ｉ＝１〜テーブルＣの最終行までループ）行目のテーブルＣの主キーの値と、テーブルＡ、テーブルＢの主キーの値が全て同一でないときには、ｉ行目のテーブルＣの主キーの値と、ｉ＋１行目以降のテーブルＡ，テーブルＢの主キーの値と比較する。同一なものがあるときには、ｉ行目以降のテーブルＣのレコードを一段下げ、存在しないときには、ｉ行目以降のテーブルＡ，テーブルＢのレコードを同時に一段下げる。次に、一つのテーブルを基準として、その他のテーブルの中で、同一行に整列し、同一のカラム名のテーブルデータの相違データを検索し、強調表示する。【選択図】  図９
2020107204.tif 000002
【特許請求の範囲】
【請求項１】
行と列のマトリックスにより定義されたテーブルであって、列方向に主キーを含む複数のカラム、行方向のデータとしてレコードにより定義されたｍ個（ｍ≧２の整数）のテーブルを相互に比較するテーブル比較装置であって、
入力テーブル整形処理部と、
コンペア処理部と、
相違テーブル検索部とを有し、
前記入力テーブル整形処理部は、
テーブル１，…，テーブルｊの各レコードを、主キーの値に従って、整列し、
テーブル１，…，テーブルｊを一つのテーブルとして結合して、結合テーブルを作成し、
前記コンペア処理部は、
ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…，テーブルｊ−１の主キーの値のいずれが同一であるか否かを判定する処理と、
ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…，テーブルｊ−１の主キーの値が全て同一でないときには、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるかを判定する処理と、
ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるときには、ｉ行目以降のテーブルｊのカラムに該当するデータを一段下げる処理と、
テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブル１，…，テーブルｊ−１のカラムに該当するデータを同時に一段下げる処理とを、ｊ＝２からｊ＝ｍまで順次ｊを１インクリメントして、繰り返し行い、
前記相違テーブル検索部は、
前記ｍ個のテーブルから一つのテーブルを基準として、その他のテーブルの中で、同一行に整列し、同一のカラム名のテーブルデータの相違データを検索することを特徴とするテーブル比較装置。
【請求項２】
さらに、表示部を有し、
前記表示部は、前記ｍ個のテーブルから一つのテーブルを基準として、前記相違テーブル検索部が検索した相違データを強調表示することを特徴とする請求項１記載のテーブル比較装置。
【請求項３】
前記入力テーブル整形処理部は、
各レコードの主キーの値から、それぞれハッシュ値を生成し、
前記コンペア処理部は、
ｉ行目のテーブルｊのハッシュ値と、テーブル１，…，テーブルｊ−１のハッシュ値のいずれかが同一であるか否かを比較し、ｉ行目のハッシュ値が同一であるときにのみ、
ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値が全て同一であるか否かを判定することを特徴とする請求項１記載のテーブル比較装置。
【請求項４】
前記入力テーブル整形処理部は、
各レコードの主キーの値に割当てられる各バイトの後半４ビットの値から、それぞれハッシュ値を生成することを特徴とする請求項１記載のテーブル比較装置。
【請求項５】
情報処理装置により、行と列のマトリックスにより定義されたテーブルであって、列方向に主キーを含む複数のカラム、行方向のデータとしてレコードにより定義されたｍ個（ｍ≧２の整数）のテーブルを相互に比較するテーブル比較方法であって、
前記情報処理装置は、
入力テーブル整形処理部と、
コンペア処理部と、
相違テーブル検索部とを有し、
前記入力テーブル整形処理部が、テーブル１，…，テーブルｊの各レコードを、主キーの値に従って、整列するステップと、
前記入力テーブル整形処理部が、テーブル１，…，テーブルｊを一つのテーブルとして結合して、結合テーブルを作成するステップと、
前記コンペア処理部が、以下の（１）〜（４）を、ｊ＝２からｊ＝ｍまで順次ｊを１インクリメントして、繰り返し行うステップと、
（１）ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…，テーブルｊ−１の主キーの値のいずれかが同一であるか否かを判定するステップ、
（２）ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値が全て同一でないときには、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるかを判定するステップ、
（３）ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるときには、ｉ行目以降のテーブルｊのカラムに該当するデータを一段下げるステップ、
（４）テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブル１，…，テーブルｊ−１のカラムに該当するデータを同時に一段下げるステップ、
前記相違テーブル検索部が、前記ｍ個のテーブルから一つのテーブルを基準として、その他のテーブルの中で、同一行に整列し、同一のカラム名のテーブルデータの相違データを検索するステップとを有することを特徴とするテーブル比較方法。
【請求項６】
さらに、前記情報処理装置は、表示部を有し、
前記表示部が、前記ｍ個のテーブルから一つのテーブルを基準として、前記相違テーブル検索部が検索した相違データを強調表示するステップを有することを特徴とする請求項５記載のテーブル比較方法。
【請求項７】
さらに、前記入力テーブル整形処理部が、
各レコードの主キーの値から、それぞれハッシュ値を生成するステップと、
前記コンペア処理部は、
ｉ行目のテーブルｊのハッシュ値と、テーブル１，…，テーブルｊ−１のハッシュ値のいずれかが同一であるか否かを比較し、ｉ行目のハッシュ値が同一であるときにのみ、
ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値が全て同一であるか否かを判定することを特徴とする請求項５記載のテーブル比較方法。
【請求項８】
前記入力テーブル整形処理部は、
各レコードの主キーの値に割当てられる各バイトの後半４ビットの値から、それぞれハッシュ値を生成することを特徴とする請求項５記載のテーブル比較方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テーブル比較装置およびテーブル比較方法に係り、特に、主キーを有するレコードからなる複数のテーブルのデータ検証に用いて好適なテーブル比較装置およびテーブル比較方法に関する。
【背景技術】
【０００２】
本発明に関連する技術としては、特許文献１がある。特許文献１に開示された技術は、インフラストラクチャが、その設計仕様通りに構築されているが否かを検証する作業の効率化を向上させるための設定パラメータチェックプログラムに関するものであり、設計書から抽出した設定パラメータをそれぞれスプレッドシート上で整列し、互いに異なる部分をスプレッドシート上で強調表示するものである。これにより、インフラ構築者は、ＯＳやミドルウェアが設計書の記載どおりに設定されているかを容易に把握することができ、検証作業効率の向上に資するものとしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−０２１１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
大量のデータを蓄積、検索することを可能とするデータベースで扱われるテーブルは、ＲＤＢ（Relational DataBase）でのテーブルモデルのように、項目（カラム）を定義し、その項目に関するデータセットをレコードとして捉え、レコードを一意的に特定するために項目の一部を主キーとして定義する。このようなテーブルの使用形態は、一般に業務の目的に応じて複数のサーバ上にデータベースを構築し、そのデータベースの中に複数のテーブルを作成して利用される。そして、コンピュータ上で管理されるデータベースシステムのテーブルのデータは、通常、電子データとして記憶装置に格納されており、表示装置上に出力したり、必要ならば、紙等へ一覧として出力することもできる。
【０００５】
一方、業務が大規模になり、データベースで扱うテーブルの数が多くなって、項目の数も多くなると、テーブルに記載された情報の正当性の検証に労力がかかることになる。このようなテーブルに記載された情報の正当性の検証する業務の例としては、検索結果の正しさを確認する場合や、監査等のために外部機関へ情報を提示する場合がある。
【０００６】
検索結果の正しさを確認する業務の例としては、精密機器等の組み立て型産業における使用部品の目視点検が挙げられる。特に、医療機器など安全が求められる分野では、最終製品に使用すべき部品を間違いなく使用していることを確認する必要があり、多数の部品および取引先を設計通りに正しく利用していることを確認する業務が生じている。また監査対応の例としては、不良を一つも認めることができない医薬品・医療機器製造分野のシステム開発におけるコンピュータ化システムバリデーション（Computerized System Validation）という法規制が挙げられる。この法規制により、医薬品・医療機器の開発において導入されるシステムには、正しく設計、開発、導入、運用されていることを文書として示すことが求められている。
【０００７】
上記のような業務において単純な比較であれば一覧化して表示することは容易である。例えば、テーブルＸの主キーの値がａ，ｂ，ｃ，ｄ、テーブルＹの主キーの値もａ，ｂ，ｃ，ｄであるとき、いずれかの主キーに基づいて、一覧を作成することは簡単といえる。しかしながら、組み立て型産業など多くの産業分野においては国内や海外に拠点が複数存在することが多く、それぞれの拠点で開発したサーバ上のデータベースに格納されているデータの範囲や内容を同一とすることは困難となる。また秘密保持の観点から意図的にデータを連携しないこともあり、各拠点で保有する情報量は同一とはならない。このとき各テーブルに存在する主キーの値は様々となり、単純な比較ができないため一覧化して表示することが困難となる。例えば、テーブルＸの主キーがａ，ｃ，ｄ、テーブルＹの主キーがａ，ｂ，ｄであるとき、いずれかの主キーをもとに一覧を作成することができず、主キーの抜けを考慮することが必要となる。
【０００８】
入力テーブルと出力テーブルの比較や手入力情報と自動入力情報の比較など、複数のテーブルを比較することは通常起こりうることであるが、各テーブルの構成の違いにより、同様に主キーが過不足なく一致することはまれである。そのため、主キーの違いを考慮した検索技術および表示技術の開発が広く求められているといえる。
【０００９】
上記特許文献１のようなチェックプログラムでは、設計書と実際の設定値の差異を可視化する点においては、優れた処理を実現している。しかしながら、上記従来技術では、複数のテーブルに存在する主キーの値が過不足なく一致することがまれである場合については考慮されておらず、そのような場合においては、主キーの値の抜けを考慮しながら一覧化することができない。すなわち、主キーの値について、相互に漏れがある場合、対応関係がずれてしまい適切に比較することが困難となる。
【００１０】
また、比較処理においては、データ量が増大することで処理コストも増大するが、そのことへの対応も図られていない。とくに３テーブル以上になると組み合わせの総数も爆発的に増加することから単純な文字列比較だけでは現実的な時間内で対応することが困難な状況となる可能性がある。
【００１１】
本発明の目的は、複数テーブルの主キーの値が相互に一致しない場合にも、わずかな計算コストで、データの比較を容易に行うことができるテーブル比較装置およびテーブル比較方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明のテーブル比較装置の構成は、好ましくは、行と列のマトリックスにより定義されたテーブルであって、列方向に主キーを含む複数のカラム、行方向のデータとしてレコードにより定義されたｍ個（ｍ≧２の整数）のテーブルを相互に比較するテーブル比較装置であって、入力テーブル整形処理部と、コンペア処理部と、相違テーブル検索部とを有し、入力テーブル整形処理部は、テーブル１，…，テーブルｊの各レコードを、主キーの値に従って、整列し、テーブル１，…，テーブルｊを一つのテーブルとして結合して、結合テーブルを作成し、コンペア処理部は、ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値が全て同一であるか否かを判定し、ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…，テーブルｊ−１の主キーの値が全て同一でないものが存在するとき、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるかを判定し、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるときには、ｉ行目以降のテーブルｊのレコードを一段下げ、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるときには、ｉ行目以降のテーブルｊのカラムに該当するレコードを一段下げ、テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブル１，…，テーブルｊ−１のカラムに該当するレコードを同時に一段下げる処理を行い、コンペア処理部は、上記処理をｊ＝２からｊ＝ｍまで順次ｊを１インクリメントして、繰り返し行い、相違テーブル検索部は、ｍ個のテーブルから一つのテーブルを基準として、その他のテーブルの中で、同一行に整列し、同一のカラム名のテーブルデータの相違データを検索するようにしたものである。
【発明の効果】
【００１３】
本発明によれば、複数テーブルの主キーの値が相互に一致しない場合にも、わずかな計算コストで、データの比較を容易に行うことができるテーブル比較装置およびテーブル比較方法を提供することにある。
【図面の簡単な説明】
【００１４】
【図１】テーブル比較装置を用いた情報処理システムの全体構成図である。
【図２】テーブル比較装置のハードウェア・ソフトウェア構成図である。
【図３】テーブル比較装置がテーブル比較を行い、相違データを分かりやすい形式で表示する一連の処理の概要を示すフローチャートである。
【図４】ハッシュ計算の一例を示す図である。
【図５】各コード体系におけるハッシュの適用対象とされるコードの取りうる値を示す表である。
【図６】入力テーブル整形処理におけるテーブル操作の具体例を示す図である。
【図７】テーブルが二つの場合のコンペア処理の一例を示すフローチャートである。
【図８Ａ】テーブルＡ、テーブルＢでのコンペア処理におけるテーブル操作の具体例を示す図である（その一）。
【図８Ｂ】テーブルＡ、テーブルＢでのコンペア処理におけるテーブル操作の具体例を示す図である（その二）。
【図９】テーブルが三つの場合のコンペア処理の一例を示すフローチャートである。
【図１０Ａ】テーブルＡ、テーブルＢ、テーブルＣでのコンペア処理におけるテーブル操作の具体例を示す図である（その一）。
【図１０Ｂ】テーブルＡ、テーブルＢ、テーブルＣでのコンペア処理におけるテーブル操作の具体例を示す図である（その二）。
【図１０Ｃ】テーブルＡ、テーブルＢ、テーブルＣでのコンペア処理におけるテーブル操作の具体例を示す図である（その三）。
【図１１】テーブルがｍ個ある場合のコンペア処理の一例を示すフローチャートである。
【図１２】テーブルが三つの場合の相違データの表わす画面を示す図である。
【図１３Ａ】図１の情報システムにおいて、入力されたテーブルに基づいて、入力テーブル整形処理を行ったテーブルの一例を示す図である。
【図１３Ｂ】図１の情報システムにおいて、テーブル比較装置が出力するテーブルの相違データを表わす画面の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明に係る一実施形態を、図１ないし図１３Ｂを用いて説明する。
【００１６】
先ず、図１を用いて一実施形態に係る情報処理システムの全体構成を説明する。
図１は、テーブル比較装置を用いた情報処理システムの全体構成図である。
【００１７】
本実施形態の情報処理システムは、医療機器メーカが管理機構である本社１０と、国内に国内組立拠点２０、海外に海外開発拠点３０を有していることを想定する。本実施形態の情報処理システムは、図１に示されるように、本社１０に設置されたＤＢサーバ１２、国内組立拠点２０に設置されたＤＢサーバ２２、海外開発拠点３０に設置されたＤＢサーバ３２、テーブル比較装置１００がネットワーク５により接続された形態である。
【００１８】
このようなシステム構成の下で、本社１０に設置されたＤＢサーバ１２が部品の仕様を記述したマスターテーブルであるテーブルＡ１０ｔを、国内組立拠点２０に設置されたＤＢサーバ２２がその部品の組立時のデータが記載されたテーブルＢ２０ｔを、海外開発拠点３０に設置されたＤＢサーバ３２がその部品の開発時のデータが記載されたテーブル３０ｔを、それぞれネットワーク５を介して、テーブル比較装置１００に出力する。そして、テーブル比較装置１００は、それらのテーブルＡ〜テーブルＣに基づいて、比較用のテーブルＤ１００ｔを作成し、それをプリンタや表示装置に出力する。図では示していないが、テーブル比較装置１００は、本社１０、国内組立拠点２０、海外開発拠点３０のいずれに設置されてもよいし、別の研究所などに設置して、部品の研究開発や生産工程の管理に活用されてもよい。
【００１９】
テーブル比較装置１００は、入力テーブル整形部１１０、コンペア処理部１２０、相違データ検索部１３０、表示部１４０の各機能部からなる。入力テーブル整形部１１０は、入力されたテーブルを整形し、結合により一つのテーブルにまとめることにより、比較可能な状態にする機能部である。コンペア処理部１２０は、結合されたテーブルにおいて、一行ごとに主キーの値が揃うように整列する機能部である。相違データ検索部１３０は、ベースとなるテーブルのデータとその他のテーブルのデータを比較し、相違する箇所を検索する機能部である。表示部１４０は、比較の結果をテーブルとして表示する機能部である。
【００２０】
次に、図２を用いてテーブル比較装置のハードウェア・ソフトウェア構成について説明する。
図２は、テーブル比較装置のハードウェア・ソフトウェア構成図である。
【００２１】
テーブル比較装置１００のハードウェア構成としては、例えば、図２に示されるパーソナルコンピュータのような一般的な情報処理装置で実現される。
【００２２】
テーブル比較装置１００は、ＣＰＵ（Central Processing Unit）２０２、主記憶装置２０４、ネットワークＩ／Ｆ２０６、表示Ｉ／Ｆ２０８、入出力Ｉ／Ｆ２１０、補助記憶Ｉ／Ｆ２１２が、バスにより結合された形態になっている。
【００２３】
ＣＰＵ２０２は、テーブル比較装置１００の各部を制御し、主記憶装置２０４に必要なプログラムをロードして実行する。
【００２４】
主記憶装置２０４は、通常、ＲＡＭなどの揮発メモリで構成され、ＣＰＵ２０２が実行するプログラム、参照するデータが記憶される。
【００２５】
ネットワークＩ／Ｆ２０６は、テーブル比較装置１００とネットワーク５と接続するためのインタフェースである。
【００２６】
表示Ｉ／Ｆ２０８は、ＬＣＤ（Liquid Crystal Display）などの表示装置２２０を接続するためのインタフェースである。
【００２７】
入出力Ｉ／Ｆ２１０は、入出力装置を接続するためのインタフェースである。図２の例では、キーボード２３０とポインティングデバイスのマウス２３２、プリンタ２４０が接続されている。
【００２８】
補助記憶Ｉ／Ｆ２１２は、ＨＤＤ（Hard Disk Drive）２５０やＳＳＤ（Solid State Drive）などの補助記憶装置を接続するためのインタフェースである。
【００２９】
ＨＤＤ２５０は、大容量の記憶容量を有しており、本実施形態を実行するためのプログラムが格納されている。テーブル比較装置１００には、入力テーブル整形プログラム２６０、コンペア処理プログラム２６１、相違データ検索プログラム２６２、表示プログラム２６３がインストールされている。
【００３０】
入力テーブル整形プログラム２６０、コンペア処理プログラム２６１、相違データ検索プログラム２６２、表示プログラム２６３は、それぞれ入力テーブル整形部１１０、コンペア処理部１２０、相違データ検索部１３０、表示部１４０の機能を実行するプログラムである。
【００３１】
次に、図３ないし図１３Ｂを用いてテーブル比較装置が行う処理について説明する。
【００３２】
先ず、図３を用いて、テーブル比較装置がテーブル比較を行い、相違データを分かりやすい形式で表示する一連の処理の概要を説明する。
図３は、テーブル比較装置がテーブル比較を行い、相違データを分かりやすい形式で表示する一連の処理の概要を示すフローチャートである。
【００３３】
テーブル比較装置１００の入力テーブル整形部１１０は、入力されてきたテーブルに対して、入力テーブル整形処理を行う（Ｓ０１）。テーブルは、行と列のマトリックスにより定義されたテーブルである。入力されるテーブルの指定は、図には示さなかったが、ユーザが図２に示した表示装置２２０に表示される指定画面を参照して、キーボード２３０やマウス２３２を使用して行うことができる。入力テーブル整形処理では、入力されたテーブルの主キーの値に基づいて、主キーの値が昇順または降順になるようにレコードをソートする。次に、主キーの値に対して、ハッシュ計算を行い、そのハッシュ値を有するカラムをそれぞれのレコードに付け加えて、最後に比較するテーブルの全てのカラムを結合して、一つのテーブルとする。なお、入力テーブル整形処理の具体例と、ハッシュ計算の詳細は、後に説明する。
【００３４】
次に、テーブル比較装置１００のコンペア処理部１２０は、コンペア処理を行う（Ｓ０２）。コンペア処理は、入力テーブル整形処理により結合されたテーブルの入力されたテーブルの部分の各々のカラムの値を比較して、見やすい形式にする処理である。コンペア処理の詳細と、具体例については、後に説明する。
【００３５】
次に、テーブル比較装置１００の相違データ検索部１３０は、コンペア処理が行われたテーブルに対して、相違データ検索処理を行い、ベースとなるテーブルの部分に対して、他のテーブルの部分の相違するデータを検索する（Ｓ０３）。
【００３６】
次に、テーブル比較装置１００の表示部１４０は、相違データ検索処理が行われたテーブルに対して、相違データの部分を強調表示した表示データを作成し、表示装置２２０などに出力して、表示を行う（Ｓ０４）。なお、相違データの部分を強調表示した表示データの具体例は、後に説明する。
【００３７】
次に、図４および図５を用いて、本実施形態におけるハッシュ計算の一例を説明する。
図４は、ハッシュ計算の一例を示す図である。
図５は、各コード体系におけるハッシュの適用対象とされるコードの取りうる値を示す表である。
【００３８】
本実施形態のハッシュ計算は、主キーの値の文字列比較を高速化するために行われるものである。そのため、主キーのデータ形式が数値型ではなく、文字型で文字コードにより表現されている場合に有効である。例えば、日本語の文字コードは、１６進数表記において、各バイトで後半４ビットの方が前半４ビットよりも取りうる値のバリエーションが多い。本手法は、そのことに着目したハッシュ計算方法である。本ハッシュ計算を使うことによって、以降の比較ロジックにおいて文字列比較に要する処理コストを低減することができる。
【００３９】
本実施形態のハッシュ計算は、図４に示されるように、主キーがＮバイトのときには、ハッシュ値＝［１バイト目の後半４ビット］×１６０＋［２バイト目の後半４ビット］×１６１＋［３バイト目の後半４ビット］×１６２＋…＋［Ｎバイト目の後半４ビット］１６Ｎ−１で表される。ただし、これは一例であり、ハッシュ計算の方法は、ハッシュ値が異なれば、主キーの値が異なっていることを保障できるものであればよい。
【００４０】
なお、後半４ビットのバリエーションの多さに着目した計算方法は日本語だけでなく、その他の言語に対しても有効である。各言語のＵＴＦ−８とＳＪＩＳのコード体系におけるバリエーションを示すと図５のようになる。この表の表記は、例えば、ＵＴＦ−８の日本語における１バイト目前半のコード表記は、１通り（１６進数で表すとＥ）であり、１バイト目後半のコード表記は、７通り（１６進数で表すと３から９の値）であることを示している。この表から分かるように、日本語以外の言語においても文字コードの特性上、後半４ビットの取りうる範囲が大きい。この特徴に着目することで衝突の少ない（特性のよい）ハッシュ値を得ることができる。
【００４１】
次に、図６を用いて入力テーブル整形処理におけるテーブル操作の具体例について説明する。
図６は、入力テーブル整形処理におけるテーブル操作の具体例を示す図である。
【００４２】
本実施形態では、図６に示される５行３列のテーブルＡ、５行２列のテーブルＢ、５行２列のテーブルＣを入力とする例を説明する（図６の（１−Ｉ））。各テーブルの１カラム目は、主キーの値が格納されているものとする。先ず、入力テーブル整形処理Ｓ０１では、各テーブルの主キーの値により、ソートして整列する。図６の例では、昇順にソートしている。そして、図４により示した方法により、各テーブルの主キーのハッシュ値を求めて、主キーのカラムの左側に新たにハッシュ値を表すカラム（Ｈａｓｈ）を作成し、その値を代入する（（１−ＩＩ））。
【００４３】
そして、ソートされ、ハッシュ値のカラムが追加された各テーブルをまとめて、一つのテーブルＤとする。以下では、テーブルＤのテーブルＡに該当する部分のカラム（テーブルＤの１カラム目の「Ｈａｓｈ」、２カラム目の「主キー」、３カラム目の「データ１」、４カラム目の「データ２」、５カラム目の「データ３」）を、「テーブルＡのカラム」ということにする。「テーブルＢのカラム」、「テーブルＣのカラム」の定義も同様である。
【００４４】
次に、図７ないし図８Ｂを用いてテーブルが二つの場合のコンペア処理の処理について説明する。
図７は、テーブルが二つの場合のコンペア処理の一例を示すフローチャートである。
図８Ａ、図８Ｂは、テーブルＡ、テーブルＢでのコンペア処理におけるテーブル操作の具体例を示す図である。
【００４５】
コンペア処理の説明も、入力テーブル整形処理で採り上げたテーブルＡ、テーブルＢ、テーブルＣを例に採って説明する。
【００４６】
最初は、テーブルＡとテーブルＢについて、コンペア処理を行う。
【００４７】
テーブル比較装置１００のコンペア処理部１２０は、テーブルＢのｉ＝１行目から最終行まで、一行ごとに、ｉを１インクリメントしながら、Ｓ２０１〜Ｓ２０５の処理を実行する（Ｓ２００〜Ｓ２０６）。
【００４８】
先ず、ｉ行目のテーブルＢのハッシュ値と、テーブルＡのハッシュ値が同一であるか否かを比較し（Ｓ２０１）、ｉ行目のハッシュ値が同一であるときには（Ｓ２０１：ＹＥＳ）、Ｓ２０２に行き、同一でないときには（Ｓ２０１：ＮＯ）、Ｓ２０３に行く。
【００４９】
ｉ行目のハッシュ値が同一であるときには、ｉ行目のテーブルＢの主キーの値と、ｉ行目のテーブルＡの主キーの値が同一であるか否かを判定し（Ｓ２０２）、同一であるときには（Ｓ２０２：ＹＥＳ）、Ｓ２０６に行き、そうでないときには（Ｓ２０２：ＮＯ）、Ｓ２０３に行く。
【００５０】
ｉ行目のハッシュ値が同一でないとき、または、ｉ行目のテーブルＢの主キーの値と、ｉ行目のテーブルＡの主キーの値が同一でないときには、次に、ｉ行目のテーブルＢの主キーの値と、ｉ＋１行目以降のテーブルＡの主キーの値が同一であるか（すなわち、ｉ＋１行目以降のテーブルＡのレコードに、主キーの値が、ｉ行目のテーブルＢの主キーの値と同一であるものが存在するか）（Ｓ２０３）、テーブルＡのｉ＋１行目以降に、主キーが同一であるものが存在するとき（Ｓ２０３：ＹＥＳ）、Ｓ２０４に行き、同一であるものが存在しないときには（Ｓ２０３：ＮＯ）、Ｓ２０５に行く。
【００５１】
これは、ハッシュ値が異なる場合では、確実に主キーの値も異なることになるので、主キーの値の比較を行わないと言う趣旨である。
【００５２】
テーブルＡのｉ＋１行目以降に、主キーが同一であるものが存在するときには、ｉ行目以降のテーブルＢのレコードを一段下げる操作を行う（Ｓ２０４）。
【００５３】
テーブルＡのｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブルＡのレコードを一段下げる操作を行う（Ｓ２０５）。ただし、ｉの値が、テーブルＡの最終行の行数を超えているときには、なにもしない。
【００５４】
このＳ２０１〜Ｓ２０５の処理を、テーブルＢのｉ＝１から最終段まで繰り返すことにより、テーブルＡと主キーの値とテーブルＢと主キーの値が一致したテーブルを得ることができる。
【００５５】
次に、図８Ａ、図８Ｂを用いてテーブルＡ、テーブルＢでのコンペア処理におけるテーブル操作の具体例について説明する。
【００５６】
テーブルＢのｉ＝１のとき、テーブルＡとテーブルＢの主キーの値、ハッシュ値は、共に一致しているので、Ｓ２０１→Ｓ２０２の流れで、Ｓ２０４、Ｓ２０５の処理は実行されずに（なにも行わずに）、次のループに行く（（２−Ｉ））。
【００５７】
次に、ｉをインクリメントし、テーブルＢのｉ＝２のときに、テーブルＢの主キー「Ｋ４」のハッシュ値と、テーブルＡの主キー「Ｋ２」のハッシュ値は、一致しないので（Ｓ２０１：ＮＯ）、２行目のテーブルＢの主キーの値「Ｋ４」と、３行目以降のテーブルＡの主キーの値が同一であるか否かを判定する（Ｓ２０３）。
【００５８】
テーブルＡの４行目が主キーの値が「Ｋ４」であるので（Ｓ２０３：ＹＥＳ）、２行目以降のテーブルＢのレコードを一段下げる（Ｓ２０４）（（２−ＩＩ））。
【００５９】
次に、ｉをインクリメントし、テーブルＢのｉ＝３のときに、テーブルＢの主キー「Ｋ４」のハッシュ値と、テーブルＡの主キー「Ｋ３」のハッシュ値は、一致しないので（Ｓ２０１：ＮＯ）、３行目のテーブルＢの主キーの値「Ｋ４」と、４行目以降のテーブルＡの主キーの値が同一であるか否かを判定する（Ｓ２０３）。
【００６０】
テーブルＡの４行目が主キーの値「Ｋ４」であるので（Ｓ２０３：ＹＥＳ）、３行目以降のテーブルＢのレコードを一段下げる（Ｓ２０４）（（２−ＩＩＩ））。この段階で、テーブルＡとテーブルＢの主キーの値「Ｋ４」のレコードが揃った（同じ段のレコードになった）ことになる。
【００６１】
次に、ｉをインクリメントし、テーブルＢのｉ＝４のときに、テーブルＢの主キーの値、ハッシュ値、テーブルＡの主キーの値、ハッシュ値は、共に一致しているので、Ｓ２０１→Ｓ２０２の流れで、Ｓ２０４、Ｓ２０５の処理は実行されずに（なにも行わずに）、次のループに行く（（２−ＩＩＩ））。
【００６２】
次に、ｉをインクリメントし、テーブルＢのｉ＝５のときに、テーブルＢの主キー「Ｋ５」のハッシュ値と、テーブルＡの主キー「Ｋ６」のハッシュ値は、一致しないので（Ｓ２０１：ＮＯ）、５行目のテーブルＢの主キーの値「Ｋ５」と、６行目以降のテーブルＡの主キーの値が同一であるか否かを判定する（Ｓ２０３）。
【００６３】
テーブルＡの６行目以降には、レコードがないので（Ｓ２０３：ＮＯ）、５行目以降のテーブルＡのレコードを一段下げる（Ｓ２０５）（（２−ＩＶ））。この段階で、テーブルＢの主キー「Ｋ５」に対して、テーブルＡの主キーには対応する値がないため、空白行がくる。
【００６４】
次に、ｉをインクリメントし、テーブルＢのｉ＝６のときに、テーブルＢの主キーの値、ハッシュ値、テーブルＡの主キーの値、ハッシュ値は、共に一致しているので、Ｓ２０１→Ｓ２０２の流れで、Ｓ２０４、Ｓ２０５の処理は実行されずに（なにも行わずに）、次のループに行く（（２−ＩＶ））。
【００６５】
次に、ｉをインクリメントし、テーブルＢのｉ＝７のときに、テーブルＡのハッシュ値は、空白で（Ｓ２０１：ＮＯ）、７行目のテーブルＢの主キーに対し、８行目以降のテーブルＡの主キーは存在しないので同一になることはなく（Ｓ２０３：ＮＯ）、８行目以降のテーブルＡを一段下げる（Ｓ２０５）。ただしテーブルＡの８行目以降にデータは無いので、（２−ＩＶ）のままである。テーブルＢの最終行に達したので、ループを抜け処理を終了する。
【００６６】
次に、図９ないし図１０Ｃを用いてテーブルが三つの場合のコンペア処理の処理について説明する。
図９は、テーブルが三つの場合のコンペア処理の一例を示すフローチャートである。
図１０Ａ、図１０Ｂ、図１０Ｃは、テーブルＡ、テーブルＢ、テーブルＣでのコンペア処理におけるテーブル操作の具体例を示す図である。
【００６７】
テーブルが三つの場合は、図７、図８Ａ、図８Ｂに示したように、テーブルＡ、テーブルＢでのコンペア処理が完了していることが前提である。
【００６８】
テーブル比較装置１００のコンペア処理部１２０は、テーブルＣのｉ＝１行目から最終行まで、一行ごとに、ｉを１インクリメントしながら、Ｓ３０１〜Ｓ３０５の処理を実行する（Ｓ３００〜Ｓ３０６）。
【００６９】
先ず、ｉ行目のテーブルＣ、テーブルＡのハッシュ値またはテーブルＢのハッシュ値が同一であるか否かを比較し（Ｓ３０１）、ｉ行目のハッシュ値が同一であるときには（Ｓ３０１：ＹＥＳ）、Ｓ３０２に行き、同一でないときには（Ｓ３０１：ＮＯ）、Ｓ３０３に行く。
【００７０】
ｉ行目のハッシュ値が同一であるときには、ｉ行目のテーブルＣの主キーの値と、ｉ行目のテーブルＢの主キーの値、または、ｉ行目のテーブルＡの主キーの値が同一であるか否かを判定し（Ｓ３０２）、同一であるときには（Ｓ３０２：ＹＥＳ）、Ｓ３０６に行き、そうでないときには（Ｓ３０２：ＮＯ）、Ｓ３０３に行く。
【００７１】
ｉ行目のハッシュ値が同一でないとき、または、ｉ行目のハッシュ値が同一であり、かつ、ｉ行目のテーブルＣの主キーの値と、ｉ行目のテーブルＢの主キーの値と、ｉ行目のテーブルＡの主キーの値が全て同一でないときには、次に、ｉ行目のテーブルＣの主キーの値と、ｉ＋１行目以降のテーブルＡの主キーの値またはテーブルＢの主キーの値が同一であるか（すなわち、ｉ＋１行目以降のテーブルＡのレコードまたはｉ＋１行目以降のテーブルＢのレコードに、主キーの値が、ｉ行目のテーブルＣの主キーの値と同一であるものが存在するか）否かを判定し（Ｓ３０３）、テーブルＡまたはテーブルＢのｉ＋１行目以降に、主キーが同一であるものが存在するときには（Ｓ３０３：ＹＥＳ）、Ｓ３０４に行き、同一であるものが存在しないときには（Ｓ３０３：ＮＯ）、Ｓ３０５に行く。
【００７２】
テーブルＡまたはテーブルＢのｉ＋１行目以降に、主キーが同一であるものが存在するときには、ｉ行目以降のテーブルＣのレコードを一段下げる操作を行う（Ｓ３０４）。
【００７３】
テーブルＡのｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブルＡのレコード、および、テーブルＢのレコードを同時に一段下げる操作を行う（Ｓ３０５）。ただし、ｉの値が、テーブルＡの最終行の行数とテーブルＢの最終行の行数の大きい方を超えているときには、なにもしない。
【００７４】
このＳ３０１〜Ｓ３０５の処理を、テーブルＣのｉ＝１から最終段まで繰り返すことにより、テーブルＡ、テーブルＢと主キーの値とテーブルＣと主キーの値が一致したテーブルを得ることができる。
【００７５】
次に、図１０Ａ、図１０Ｂ、図１０Ｃを用いてテーブルＡ、テーブルＢ、テーブルＣでのコンペア処理におけるテーブル操作の具体例について説明する。
【００７６】
テーブルＢのｉ＝１のとき、テーブルＡ、テーブルＢ、テーブルＣのハッシュ値、主キーの値は、共に一致しているので、Ｓ３０１→Ｓ３０２の流れで、Ｓ３０４、Ｓ３０５の処理は実行されずに（なにも行わずに）。次のループに行く（（３−Ｉ））。
【００７７】
次に、ｉをインクリメントし、テーブルＣのｉ＝２のときに、テーブルＣの主キー「Ｋ３」のハッシュ値と、テーブルＡの主キー「Ｋ２」のハッシュ値は一致しないので（Ｓ３０１：ＮＯ）、２行目のテーブルＣの主キーの値「Ｋ３」と、３行目以降のテーブルＡの主キーの値またはテーブルＢの主キーの値が同一であるか否かを判定する（Ｓ３０３）。
【００７８】
テーブルＡの３行目が主キーの値が「Ｋ３」であるので（Ｓ３０３：ＹＥＳ）、２行目以降のテーブルＣのレコードを一段下げる（Ｓ３０５）（（３−ＩＩ））。
【００７９】
次に、ｉをインクリメントし、テーブルＣのｉ＝３のときに、テーブルＡ、テーブルＣのハッシュ値、主キーの値は、共に一致しているので、Ｓ３０１→Ｓ３０２の流れで、Ｓ３０４、Ｓ３０５の処理は実行されずに（なにも行わずに）。次のループに行く（（３−ＩＩ））。ここで、テーブルＢの主キーの値が空白であることに留意する。テーブルＡとテーブルＢのコンペア処理は終了しているが、（３−ＩＩ）の状態のように、Ａの主キーの値とテーブルＢの主キーの値のいずれかが空白で、異なることはありうる。
【００８０】
次に、ｉをインクリメントし、テーブルＣのｉ＝４の主キー「Ｋ８」は、テーブルＡの主キー、テーブルＢの主キーにないので、４行目以降のテーブルＡおよびテーブルＢのレコードを一段下げる（Ｓ３０５）（（３−ＩＩＩ））。
【００８１】
次に、ｉをインクリメントし、テーブルＣのｉ＝５の主キー「Ｋ９」は、テーブルＡの主キー、テーブルＢの主キーにないので、５行目以降のテーブルＡおよびテーブルＢのレコードを一段下げ（Ｓ３０５）、続いて、テーブルＣのｉ＝６の主キー「Ｋ１０」は、テーブルＡの主キー、テーブルＢの主キーにないので、６行目以降のテーブルＡおよびテーブルＢのレコードを一段下げる（Ｓ３０５）（（３−ＩＶ））。
【００８２】
これで、テーブルＣの最終行の処理は、終了したので、ループを抜け、処理を終了する。
【００８３】
次に、図１１を用いてテーブルがｍ個（ｍ≧２）の場合のコンペア処理について説明する。
図１１は、テーブルがｍ個ある場合のコンペア処理の一例を示すフローチャートである。
【００８４】
ここでは、テーブルｊ（ｊ＝１，…，ｍ）のテーブルがあるものとする。
【００８５】
テーブル比較装置１００のコンペア処理部１２０は、テーブルｊについて、ｊを１インクリメントしながら、ｊ＝２，…，ｍまで、Ｓ４００〜Ｓ４０６の処理を繰り返す（Ｓ１０〜Ｓ１２）。
【００８６】
テーブルｊのｉ＝１行目から最終行まで、一行ごとに、ｉを１インクリメントしながら、Ｓ４０１〜Ｓ４０５の処理を実行する（Ｓ４００〜Ｓ４０６）。
【００８７】
先ず、ｉ行目のテーブルｊのハッシュ値と、テーブル１，…，テーブルｊ−１のハッシュ値のいずれかが同一であるか否かを比較し（Ｓ４０１）、ｉ行目のハッシュ値が同一であるときには（Ｓ４０１：ＹＥＳ）、Ｓ４０２に行き、同一でないときには（Ｓ４０１：ＮＯ）、Ｓ４０３に行く。
【００８８】
ｉ行目のハッシュ値が同一でないときには、ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値のいずれかが同一であるか否かを判定し（Ｓ４０２）、同一であるときには（Ｓ４０２：ＹＥＳ）、Ｓ４０６に行き、そうでないときには（Ｓ４０２：ＮＯ）、Ｓ４０３に行く。
【００８９】
ｉ行目のハッシュ値が同一であり、ｉ行目のテーブルｊの主キーの値と、ｉ行目のテーブル１，…テーブルｊ−１の主キーの値が全て同一でないときには、次に、ｉ行目のテーブルｊの主キーの値と、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかの主キーの値が同一であるか（すなわち、ｉ＋１行目以降のテーブル１，…，テーブルｊ−１のいずれかのレコードに、主キーの値が、ｉ行目のテーブルｊの主キーの値と同一であるものが存在するか）を判定し（Ｓ４０３）、テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在するときには（Ｓ４０３：ＹＥＳ）、Ｓ４０４に行き、同一であるものが存在しないときには（Ｓ４０３：ＮＯ）、Ｓ４０５に行く。
【００９０】
テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在するとき、ｉ行目以降のテーブルｊのレコードを一段下げる操作を行う（Ｓ４０４）。
【００９１】
テーブル１，…，テーブルｊ−１のｉ＋１行目以降に、主キーが同一であるものが存在しないときには、ｉ行目以降のテーブル１，…，テーブルｊ−１のレコードを同時に一段下げる操作を行う（Ｓ４０５）。ただし、ｉの値が、テーブル１，…，テーブルｊ−１の最終行の行数の一番大きいものを超えているときには、なにもしない。
【００９２】
このＳ４０１〜Ｓ４０５の処理を、テーブルｊのｉ＝１から最終段まで繰り返すことにより、テーブル１，…，テーブルｊ−１と主キーの値とテーブルｊと主キーの値が一致したテーブルを得ることができる。
【００９３】
そして、テーブルｊ（ｊ＝２…，ｍ）まで繰り返すことにより、最終的に、テーブル１からテーブルｍまでのｍ個のテーブルの主キーの値が一致したテーブルを得ることができる。
【００９４】
次に、図１２を用いてテーブルが三つの場合のテーブルの相違データを表わす画面について説明する。
図１２は、テーブルが三つの場合の相違データを表わす画面を示す図である。
【００９５】
ここでは、図６で示した入力テーブル整形処理、図９、図１０Ａ〜図１０Ｃで示したコンペア処理で例に採ったテーブルＡ、テーブルＢ、テーブルＣからテーブルＤを結果として出力する場合を説明する。
【００９６】
テーブル比較装置１００の相違データ検索部１３０は、コンペア処理の結果出力されるテーブルＤについて、相違箇所を検索する。ここでは、テーブルＡがマスターテーブルであり、このテーブルＡをベースに相違するデータ（同じカラム名を有するカラムで異なった値を持つデータ）を検索し、ユーザに提示するものとする。そして、テーブル比較装置１００の表示部１４０は、相違データ検索部１３０の見つけた相違箇所をハイライト、背景色の色を変える、文字色を変える、ブリンクなどの手段により、強調表示することにより、ユーザに相違箇所を把握しやすい形で、画面表示や印刷表示を行う。強調表示は、その他、視覚に捉えられるものであればよい。これにより、ユーザは、テーブルが多数にわたり、主キーの値が互いに異なったテーブルでも、データの相違を迅速に把握することが可能になる。
【００９７】
ユーザが相違箇所を見つけるときには、同一の値の主キーの位置が行単位で揃っていることにより、各行のレコードをサーチして確認すればよいので、極めて容易に相違箇所を発見することができる。また、相違データを強調表示しているので、さらに、迅速に相違箇所を把握することができる。
【００９８】
次に、図１３Ａ、図１３Ｂを用いて、図１の情報システムにおいて、テーブル比較装置が出力するテーブルの一例の相違データの表わす画面について説明する。
【００９９】
図１３Ａは、図１の情報システムにおいて、入力されたテーブルに基づいて、入力テーブル整形処理を行ったテーブルの一例を示す図である。
【０１００】
図１３Ｂは、図１の情報システムにおいて、テーブル比較装置が出力するテーブルの一例の相違データの表わす画面を示す図である。
【０１０１】
例えば、組み立て型産業では拠点ごとに有する管理情報の差から、部品表において管理対象となる項目が異なることがある。整合性を確認するには、目視により１件ずつ確認していくことが確実であるが対象も多く現実的ではない。またデータベース検索により一致を確認することはできるが、一覧として視覚的に確認できるわけではなく、実際のデータ把握作業としては認識しにくいものであった。それに対し、本実施形態のテーブル比較装置が出力するテーブルでは、主キーをずらしながら、一行単位で一致させており、図１３Ａ、図１３Ｂに示されるように、一覧で視覚的に主キーやレコードの過不足や誤りを確認することができる。
【０１０２】
以上説明してきたように、本実施形態のテーブル比較装置は、互いの主キーに抜けがある複数テーブルにおいて、コンペア処理により、主キーを自動で一致させ、主キーの漏れや、相互のデータ誤りを確実に検知し、注意すべき箇所を視覚情報として提供する。
【０１０３】
とくに、文字列の比較を行う処理(主キーを検索するとき)においては、予め、文字コードの特性(後半４ビットの取りうるバリエーションが多いという点)に着目したハッシュ計算を用いて算出したハッシュ値による比較を行う。これにより、むだな文字列比較を少なくし、効率的な処理を実現している。
【０１０４】
以上のように、本実施形態のテーブル比較装置によれば、比較するテーブルと、比較されるテーブル間で主キーの値に違いが存在しても、主キーの値の抜けを考慮しながら整列し比較をすることが可能となる。一般的に３テーブル以上になると、主キーの値の不一致の取りうる場合の組み合わせが爆発的に増加し、複雑度が高く人手による評価は極めて困難となるが、本実施形態では、３テーブル以上で、主キーの値の組合せ数が多い場合にも、容易に比較可能になる。
【符号の説明】
【０１０５】
１０…本社、２０…国内組立拠点、３０…海外開発拠点、
１２，２２，３２…ＤＢサーバ、
１００…テーブル比較装置、１１０…入力テーブル整形部、１２０…コンペア処理部、１３０…相違データ検索部、１４０…表示部
【図１】
2020107204.tif 000003
【図２】
2020107204.tif 000004
【図３】
2020107204.tif 000005
【図４】
2020107204.tif 000006
【図５】
2020107204.tif 000007
【図６】
2020107204.tif 000008
【図７】
2020107204.tif 000009
【図８Ａ】
2020107204.tif 000010
【図８Ｂ】
2020107204.tif 000011
【図９】
2020107204.tif 000012
【図１０Ａ】
2020107204.tif 000013
【図１０Ｂ】
2020107204.tif 000014
【図１０Ｃ】
2020107204.tif 000015
【図１１】
2020107204.tif 000016
【図１２】
2020107204.tif 000017
【図１３Ａ】
2020107204.tif 000018
【図１３Ｂ】
2020107204.tif 000019