データベース検証方法及び装置
【課題】DBデータの内容について業務上の整合がとれているか自動的に検証する。
【解決手段】DBについての制約情報と、解析用雛形とを照合して、当該制約情報にマッチする解析用雛形を特定すると共に、当該制約情報から、上記解析用雛形における変数の値を特定し、上記解析用雛形に対応するパラメータ取得用SQL雛形と、上記変数の値のうち該当するものと組み合わせることによってSQL文を生成し、当該SQL文をDBに出力して、検索結果をパラメータとして取得し、上記解析用雛形に対応する検証用SQL雛形と、上記変数の値のうち該当するものと、上記パラメータのいずれかとが組み合わせられた検証用SQL文をDBに出力して、検索結果を検証結果として取得し、上記検証結果が、上記解析用雛形に対応する検証文雛形から生成される検証文を充足するか判断し、充足する場合に、検証用SQL文に組み合わされた上記パラメータを含むログを生成する。
【解決手段】DBについての制約情報と、解析用雛形とを照合して、当該制約情報にマッチする解析用雛形を特定すると共に、当該制約情報から、上記解析用雛形における変数の値を特定し、上記解析用雛形に対応するパラメータ取得用SQL雛形と、上記変数の値のうち該当するものと組み合わせることによってSQL文を生成し、当該SQL文をDBに出力して、検索結果をパラメータとして取得し、上記解析用雛形に対応する検証用SQL雛形と、上記変数の値のうち該当するものと、上記パラメータのいずれかとが組み合わせられた検証用SQL文をDBに出力して、検索結果を検証結果として取得し、上記検証結果が、上記解析用雛形に対応する検証文雛形から生成される検証文を充足するか判断し、充足する場合に、検証用SQL文に組み合わされた上記パラメータを含むログを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースに格納されているデータの内容について業務上の整合がとれているか検証するための技術に関する。
【背景技術】
【0002】
従来、業務アプリケーションのテストや運用環境において、データベース(DB)に格納されているDBデータについて業務上の整合性がとれているかどうかを検証する場合、例えば以下のような2つの方法が存在していた。
【0003】
(a)例えば、SQL等を使ってDBデータが業務上の整合性を保っているかどうかを、カラム毎、又はテーブル間に渡ってユーザが1つ1つ検証する方法がある。しかし、この方法では検証のためのSQL文をいちいち記述しなければならず、工数がかかり、内容によっては記述自体が困難な場合がある。特に、規模が大きいDBにおいて、設計の制約条件事項毎に、ユーザがSQL文を記述して実行するのは非常に困難な作業である。
【0004】
(b)これに対して、データベース間の関係情報を利用して項目間の関連するデータを取得する方法がある。このような方法に類似するものとしては、例えば特開2007−4447号公報記載の技術がある。具体的には、入力された1の項目名に基づいて、テーブル名と当該テーブルが有する1以上の項目名とを対応付けて記憶しているテーブル定義テーブルを参照して、上記1の項目名を有する第一のテーブル名を抽出する第一テーブル抽出ステップと、共通の項目を有することにより関係付けられている2つのテーブルを対応付けて記憶しているテーブルリンクテーブルを参照して、第一のテーブル名に基づいて、対応付けられている関連テーブルを抽出し、さらに当該関連テーブルに対応付けられている他の関連テーブルがある場合にはすべての当該関連テーブルを抽出する関連テーブル抽出ステップと、上記1の項目名に対応付けられて入力されたデータ値に、第一テーブルにおいて対応付けられているすべての項目のデータ値を取得し、関連テーブル抽出機能により抽出した1以上の関連テーブルから、共通の項目を介して上記入力されたデータ値に対応づけられているすべてのデータ値を取得するデータ取得ステップとが実行される。しかしながら、制約条件がないために業務上の整合性まで検証することはできない。
【特許文献1】特開2007−4447号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
アプリケーション・プログラムをテストする場合、データベースを必要とする場合があるが、当該データベースに業務上の整合性のとれたデータを格納しておかないと、正しいテスト結果を得られない。しかし、上で述べたようにデータベースに業務上の整合性のとれたデータが格納されているか否かを検証することは、非常に手間が掛かる作業となる。
【0006】
従って、本発明の目的は、データベースに格納されているデータの内容について業務上の整合がとれているか自動的に検証するための技術を提供することである。
【課題を解決するための手段】
【0007】
本発明に係るデータベース検証方法は、検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行される。そして、本データベース検証方法は、制約情報格納部に格納されている制約情報と、テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された上記解析用テンプレートにおける変数の値を特定するステップと、特定された上記解析用テンプレートに対応するパラメータ取得用SQLテンプレートと、特定された上記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文をデータベースに対して実行して、当該検索結果をパラメータとして取得するステップと、特定された上記解析用テンプレートに対応する検証用SQLテンプレートと、特定された上記変数の値のうち該当するものと、取得された上記パラメータのいずれかとが組み合わせられた検証用SQL文をデータベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、取得された上記第2の検索結果が、特定された上記解析用テンプレートに対応する検証文テンプレートと検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、第2の検索結果をもたらした検証用SQL文に組み合わされたパラメータを含むログを生成するログ生成ステップとを含む。
【0008】
このような構成によれば、機械読取り可能な設計情報における制約情報を有効活用して、自動的にデータベースに対する検証処理を実施することができるようになる。
【0009】
また、上で述べたログ生成ステップにおいて、特定された上記解析用テンプレート及び特定された上記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる場合もある。制約情報に応じた様々なテンプレートが用意されれば、自動的に検証を行うことができるデータベースを増やすことができる。
【0010】
なお、本方法をコンピュータに実行させるためのプログラムを作成することができ、このプログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークなどを介してデジタル信号として配信される場合もある。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【発明の効果】
【0011】
本発明によれば、データベースに格納されているデータの内容について業務上の整合がとれているか自動的に検証することができるようになる。
【発明を実施するための最良の形態】
【0012】
本発明の一実施の形態に係るデータベース検証装置の機能ブロック図を図1に示す。本実施の形態に係るデータベース検証装置100は、設計情報に含まれる制約情報を格納する制約情報格納部1と、以下で説明する各種テンプレートを格納するテンプレート格納部3と、制約情報格納部1及びテンプレート格納部3に格納されたデータを用いて処理を行う制約情報読み取り部5と、制約情報読み取り部5の処理結果である変数データを格納する変数データ格納部7と、変数データ格納部7及びテンプレート格納部3に格納されているデータを用い且つ制約情報読み取り部5の処理結果に応じて処理を実施する検証文生成部9と、検証文生成部9による処理結果を格納する検証文データ格納部13と、変数データ格納部7及びテンプレート格納部3に格納されているデータを用い且つ制約情報読み取り部5の処理結果に応じて処理を実施し、検証対象データベースを含むDB200に対して検索を実施するパラメータ検出部11と、パラメータ検出部11の検索結果であるパラメータを格納するパラメータ格納部15と、検証文データ格納部13及びパラメータ格納部15に格納されているデータを用いて処理を実施し、DB200に対して検索を実施する検証実行部17と、検証実行部17の処理結果である評価ログを格納する評価ログ格納部19と、評価ログ格納部19に格納されているデータを出力する出力部21とを有する。
【0013】
次に、図2に制約情報格納部1に格納されるデータの一例を示す。本実施の形態では、3つのカラムのうち、一番左のカラムには検証対象データベース名(テーブル名)、左から二番目のカラムには検証対象カラム名、一番右のカラムにはチェック内容が登録されるようになっている。図2の例では、検証対象データベースが「注文DB」であり、検証対象カラムが「商品コード」であり、チェック内容が「商品DB.商品コードに存在する」となっている。制約情報は、このようにテーブル間に渡る制約条件を記述する場合(関連チェックと呼ぶ)もあれば、1つのカラムについての制約条件を記述する場合(単項チェックと呼ぶ)もあれば、1つのテーブルにおけるカラム間の制約条件を記述する場合(単関連チェックと呼ぶ)もある。制約情報は、制約情報読み取り部5が処理できるような形式で記述される。なお、制約情報は、設計情報に含まれるものであり、設計情報を有効活用するものである。
【0014】
図3乃至図6にテンプレート格納部3に格納されるデータの一例を示す。図3は、制約情報とマッチングを行う文法パターン(制約情報の解析を行うためのテンプレートであり、解析用テンプレートとも呼ぶ)の一例を示す。本実施の形態では、(1)乃至(3)の3つの文法パターンを示しており、(1)は検証対象テーブルが「AA」で、検証対象カラムが「BB」で、チェック内容が「YY.ZZに存在する」というパターンであり、(2)は検証対象テーブルが「AA」で、検証対象カラムが「BB」で、チェック内容が「YY.ZZに存在しない」というパターンであり、(3)は検証対象テーブルが「EE」で、検証対象カラムが「II」で、チェック内容が「CC.DD=EE.FF&&CC.GG[H]EE.II」([H]は<、>、=、≦、≧、≠のいずれか)というパターンである。「AA」「BB」「CC」「DD」「EE」「FF」「GG」「II」は、変数であり、マッチングの際にはどのような値(データ)であってもよい。
【0015】
(1)は、例えば「注文DBの商品コードが商品DB.商品コードに存在する」というような制約に対してマッチングをとるためのパターンであり、(2)は、「新規お客さまDBのお客さまIDが得意先DB.利用者IDに存在しない」というような制約に対してマッチングをとるためのパターンであり、(3)は、「DB1.伝票番号=DB3.注文伝票番号である時、そのDB1.注文日はDB3.購入日以降である」や「広告DB.お客さまID=購入履歴DB.お客さまIDである時、その広告DB.お勧め商品は購入履歴DB.購入済み商品とは異なる」というような制約に対してマッチングをとるためのパターンである。
【0016】
図4は、テンプレート格納部3に格納される擬似SQL文テンプレートの一例を示す。図4の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。擬似SQL文テンプレートは、最終的にDB200に対して実行する検証のための検索におけるSQL文のテンプレートである。(1)は、Select YY.ZZ where AA.BB=[X]であり、[X]は後にパラメータとして抽出される値を代入する部分を示す。(2)も同様である。(3)は、Select EE.FF from EE where EE.FF=[X] and CC.GG[H]EE.IIであり、[X]は後にパラメータとして抽出される値を代入する部分を示す。[H]は上で述べたものと同様である。当然ながら、「AA」「BB」「CC」「DD」「EE」「FF」「GG」「II」は、変数であり、文法パターンによってマッチングを取る際に特定された変数値が代入される。
【0017】
図5は、テンプレート格納部3に格納されるカラム値(パラメータ)取得テンプレートの一例を示す。図5の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。カラム値取得テンプレートは、パラメータ(擬似SQL文テンプレートの[X]に代入される値)をDB200から取得するためのSQL文テンプレートである。(1)は、Select AA.BBであり、(2)も同様である。(3)は、Select CC.DDである。当然ながら、「AA」「BB」「CC」「DD」は、変数であり、文法パターンによってマッチングを取る際に特定された変数値が代入される。
【0018】
図6は、テンプレート格納部3に格納される検証文テンプレートの一例を示す。図6の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。また、[H]も上で述べたものと同様であり、文法パターンによってマッチングを取る際に特定された値が用いられる。(1)は、空(empty)である場合にログを出力することを意味するassert(empty)であり、(2)は、空でない(not empty)である場合にログを出力することを意味するassert(not empty)である。(3)は、[H]に依存しており、≠以外は、空である場合にログを出力することを意味するassert(empty)であり、≠であれば、空でない場合にログを出力することを意味するassert(not empty)である。
【0019】
以下の説明を分かりやすくするためにDB200には、図7及び図8のようなデータが格納されているものとする。すなわち、図7に示すように注文DBには、伝票番号と、商品コードと、数量と、注文日とが登録されるようになっている。また、図8に示すように商品DBには、商品コードと、商品名とが登録されるようになっている。
【0020】
以下、図9乃至図12を用いてデータベース検証装置100の処理内容について説明する。制約情報読み取り部5は、処理対象の制約情報を制約情報格納部1から読み出す(ステップS1)。例えば図2の第1行目の制約情報を読み出す。そして、制約情報読み取り部5は、制約情報とテンプレート格納部3に格納されている各文法パターン(例えば図3の各行に示された文法パターン)とのパターンマッチングを実施し、当該制約情報が該当する文法パターンを特定する(ステップS3)。図2の第1行目の制約情報の場合、図3の第1行目(1)の文法パターンがマッチするので、(1)が特定される。
【0021】
制約情報読み取り部5は、該当する文法パターンにおける各変数の値を抽出し、変数データ格納部7に格納する(ステップS5)。(1)の文法パターンにおいては、「AA」「BB」「YY」及び「ZZ」という変数があり、図2の第1行目の制約情報とマッチングさせると、図10(a)に示すように、「AA」=「注文DB」であり、「BB」=「商品コード」であり、「YY」=「商品DB」であり、「ZZ」=「商品コード」である。これらの変数及びその値を、変数データ格納部7に格納する。なお、制約情報読み取り部5は、検証文生成部9及びパラメータ検出部11に、該当する文法パターンのID(上の例では(1))を出力する。
【0022】
そして、検証文生成部9は、制約情報読み取り部5から受信した文法パターンのIDを用いて、該当する文法パターンに対応する擬似SQL文テンプレートを、テンプレート格納部3から読み出す(ステップS7)。図4の例では、(1)の擬似SQL文テンプレート「Select YY.ZZ where AA.BB=[X]」が読み出される。そして、擬似SQL文テンプレートの変数に値を代入して、擬似SQL文を生成し、例えば検証文データ格納部13に格納する(ステップS9)。図10(b)に示すような擬似SQL文が生成される。すなわち、「Select 商品DB.商品コード where 注文DB.商品コード=[X]」が生成され、検証文データ格納部13に格納される。なお、現段階では[X]は確定しないので、「擬似」SQL文となっている。
【0023】
さらに、検証文生成部9は、テンプレート格納部3から該当する文法パターンに対応する検証文テンプレートを読み出し、当該検証文テンプレートと擬似SQL文とを組み合わせて検証文を生成し、検証文データ格納部13に格納する(ステップS11)。図6の例では、(1)assert(empty)が抽出され、ステップS9で生成された擬似SQL文と組み合わされて、図10(c)に示すような検証文「Select 商品DB.商品コード where 注文DB.商品コード=[X]−>assert(empty)」が生成される。そして処理は端子Aを介して図11の処理に移行する。
【0024】
図11の処理の説明に移行して、パラメータ検出部11は、制約情報読み取り部5から受信した文法パターンのIDを用いて、該当する文法パターンに対応するカラム値取得テンプレートを、テンプレート格納部3から読み出す(ステップS13)。図5の例では、(1)「Select AA.BB」を読み出す。そして、当該カラム値取得テンプレートの変数に、変数データ格納部7に格納されている当該変数の値を代入し、パラメータ取得用のSQL文を生成し、例えばメインメモリなどの記憶装置に格納する(ステップS15)。図12(a)に示すように、「Select 注文DB.商品コード」というパラメータ取得用のSQL文を生成する。その後、パラメータ取得用のSQL文をDB200に対して実行し、検索結果であるパラメータを取得し、パラメータ格納部15に格納する(ステップS17)。図7のような注文DBの場合には、図12(b)に示すように商品コードの列の値「ZZ1」及び「ZZ2」が、パラメータとして抽出され、パラメータ格納部15に格納される。
【0025】
次に、検証実行部17は、パラメータ格納部15に格納されている未処理のパラメータを1つ選択し(ステップS19)、検証文データ格納部13に格納されている検証文の擬似SQL文部分の変数[X]に選択パラメータを代入し、検証用のSQL文を生成し、例えばメインメモリなどの記憶装置に格納する(ステップS21)。例えば、「ZZ1」を選択した場合には、図12(c)に示すように、検証用のSQL文「Select 商品DB.商品コード where 注文DB.商品コード=”ZZ1”」が生成される。そして、生成された検証用のSQL文をDB200に対して実行し、検索結果を取得する(ステップS23)。図8のような商品DBに対して、上記のようなSQL文を実行して検索を行うと、該当するレコードが存在するので、図12(d)に示すように「商品DB.ZZ1」が検索結果として得られる。
【0026】
検証実行部17は、検索結果が検証文におけるassertの内容とマッチするか判断する(ステップS25)。図10(c)に示したように、本例における検証文においては「assert(empty)」となっているので、emptyの場合にはマッチしたと判断される。図12(d)のような検索結果の場合には、マッチしたとは言えない。ステップS25でマッチしたとは言えない場合には、ステップS29に移行する。一方、検索結果がemptyの場合には、assertの内容とマッチするので、評価ログを生成し、評価ログ格納部19に格納する(ステップS27)。
【0027】
そして、検証実行部17は、パラメータ格納部15に未処理のパラメータが存在しているか判断し(ステップS29)、未処理のパラメータが存在している場合にはステップS19に戻る。
【0028】
ここでは「ZZ2」が残っているので、ステップS21で、図12(e)に示すように、検証用のSQL文「Select 商品DB.商品コード where 注文DB.商品コード=”ZZ2”」が生成される。そして、図8のような商品DBに対して、このようなSQL文を実行して検索を行うと、該当するレコードが存在しないので、図12(f)に示すように、「empty」という検索結果が得られる。そうすると、ステップS25で評価文のassertの内容とマッチすることになるので、評価ログを生成する。評価ログは、図13に示すように、「NG:注文DB.商品コード=”ZZ2”」となる。すなわち、評価ログを生成させることとなったパラメータ「ZZ2」を含み、業務上の整合性がとれなかった、検証対象データベースにおけるレコードを特定するためのデータである。
【0029】
このような処理を行って、未処理のパラメータが存在しないと判断された場合には、出力部21は、評価ログ格納部19に格納されている評価ログを表示装置や印刷装置などから出力する(ステップS31)。このようにすれば、ユーザは、検証対象データベースにおいてどの部分がテストを行う上で業務上の整合性がとれていないかを特定することができ、修正など対処を行うことができるようになる。
【0030】
以上のような処理を実施すれば、自動的に業務上の整合性についてデータベースの検証を実施することができるようになり、システムのテストなどにおいて問題の発生を未然に防止することができるようになる。
【0031】
次に、図14乃至図17を用いて第2の具体例について説明しておく。例えば、図14に示すようなデータが制約情報格納部1に格納されているものとする。すなわち、検証対象データベースは「DB3」であり、検証対象カラムは「購入日」であり、チェック内容は「DB1.伝票番号=DB3.注文伝票番号&&DB1.注文日≦DB3.購入日」となっている。これは、DB1とDB3の同じ伝票番号の注文について、DB1の注文日はDB3の購入日以前でなければならないということを表す制約情報である。また、DB1には図15に示すようなデータが格納されているものとする。すなわち、伝票番号と、商品コードと、数量と、注文日とが登録されている。同様に、DB3には図16に示すようなデータが格納されているものとする。すなわち、商品コードと、購入日と、数量と、注文伝票番号とが登録されるようになっている。
【0032】
図9及び図11の処理フローに従うと、まず図3の文法パターンとマッチングさせて、(3)が該当する文法パターンとして特定される。ここで、図17(a)に示すように、「CC」=「DB1」、「DD」=「伝票番号」、「EE」=「DB3」、「FF」=「注文伝票番号」、「GG」=「注文日」、「II」=「購入日」という変数値が特定される。なお、[H]は「≦」である。
【0033】
そうすると、検証文は、図4及び図6の(3)から、図17(b)に示すように、「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=[X] and DB1.注文日≦DB3.購入日−>assert(empty)」となる。
【0034】
また、パラメータ取得用のSQL文は、図5の(3)から、図17(c)に示すように、「Select DB1.伝票番号」となる。そして、このSQL文をDB1(図15)に対して実行すると、検索結果として図17(d)に示すように「A1234」及び「B1234」を取得する。
【0035】
そして、検証用のSQL文は、図17(f)に示すように「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=”A1234” and DB1.注文日≦DB3.購入日」となり、これをDB200に対して実行すると、図17(g)に示すように「empty」となる。これは、伝票番号「A1234」の購入日は注文日より前であるので、上記検証用SQL文に合致するレコードが存在しないことになる。従って、図17(h)に示すように「NG:X=”A1234”」というような評価ログが生成される。
【0036】
また、次に、図17(i)に示すように「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=”B1234” and DB1.注文日≦DB3.購入日」という検証用のSQL文を生成し、DB200に対して実行すると、図17(j)に示すように「B1234」を得る。emptyではないので、評価ログは生成されない。
【0037】
このように、「A1234」という伝票番号について、業務上の整合性がとれないレコードが登録されていることが分かるようになる。
【0038】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、図1に示した機能ブロック図は、実際のプログラムモジュール構成と同一ではない場合もある。また、ステップS7乃至S11と、ステップS13乃至S17は、独立した処理であるから、並列に実行しても良いし、実行する順番を入れ替えても良い。
【0039】
なお、データベース検証装置100は、例えばコンピュータ装置であって、図18に示すように当該コンピュータ装置においては、メモリ2501(記憶部)とCPU2503(処理部)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS)及びWebブラウザを含むアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。このようなコンピュータは、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0040】
(付記1)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能なコンピュータに、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を実行させるためのデータベース検証プログラム。
【0041】
(付記2)
前記ログ生成ステップにおいて、
特定された前記解析用テンプレート及び特定された前記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる
付記1記載のデータベース検証プログラム。
【0042】
(付記3)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行されるデータベース検証方法であって、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を含むデータベース検証方法。
【0043】
(付記4)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、
前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部と、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定する手段と、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得する手段と、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得手段と、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成手段と、
を有するデータベース検証装置。
【図面の簡単な説明】
【0044】
【図1】本発明の実施の形態に係るシステム概要を示す図である。
【図2】制約情報格納部に格納されるデータの一例を示す図である。
【図3】テンプレート格納部に格納されるデータ(文法パターン)の一例を示す図である。
【図4】テンプレート格納部に格納されるデータ(擬似SQL文テンプレート)の一例を示す図である。
【図5】テンプレート格納部に格納されるデータ(カラム値取得用SQL文テンプレート)の一例を示す図である。
【図6】テンプレート格納部に格納されるデータ(検証文テンプレート)の一例を示す図である。
【図7】注文DBに格納されるデータの一例を示す図である。
【図8】商品DBに格納されるデータの一例を示す図である。
【図9】本発明の実施の形態における処理フローを示す図である。
【図10】(a)乃至(c)は、処理フローにおける途中結果を示す図である。
【図11】本発明の実施の形態における処理フローを示す図である。
【図12】(a)乃至(f)は、処理フローにおける途中結果を示す図である。
【図13】評価ログ格納部に格納されるデータの一例を示す図である。
【図14】制約情報格納部に格納されるデータの一例を示す図である。
【図15】DB1に格納されるデータの一例を示す図である。
【図16】DB3に格納されるデータの一例を示す図である。
【図17】(a)乃至(j)は、第2の具体例における処理の途中結果を示す図である。
【図18】コンピュータの機能ブロック図である。
【符号の説明】
【0045】
1 制約情報格納部
3 テンプレート格納部
5 制約情報読み取り部
7 変数データ格納部
9 検証文生成部
11 パラメータ検出部
13 検証文データ格納部
15 パラメータ格納部
17 検証実行部
19 評価ログ格納部
21 出力部
100 データベース検証装置
200 DB
【技術分野】
【0001】
本発明は、データベースに格納されているデータの内容について業務上の整合がとれているか検証するための技術に関する。
【背景技術】
【0002】
従来、業務アプリケーションのテストや運用環境において、データベース(DB)に格納されているDBデータについて業務上の整合性がとれているかどうかを検証する場合、例えば以下のような2つの方法が存在していた。
【0003】
(a)例えば、SQL等を使ってDBデータが業務上の整合性を保っているかどうかを、カラム毎、又はテーブル間に渡ってユーザが1つ1つ検証する方法がある。しかし、この方法では検証のためのSQL文をいちいち記述しなければならず、工数がかかり、内容によっては記述自体が困難な場合がある。特に、規模が大きいDBにおいて、設計の制約条件事項毎に、ユーザがSQL文を記述して実行するのは非常に困難な作業である。
【0004】
(b)これに対して、データベース間の関係情報を利用して項目間の関連するデータを取得する方法がある。このような方法に類似するものとしては、例えば特開2007−4447号公報記載の技術がある。具体的には、入力された1の項目名に基づいて、テーブル名と当該テーブルが有する1以上の項目名とを対応付けて記憶しているテーブル定義テーブルを参照して、上記1の項目名を有する第一のテーブル名を抽出する第一テーブル抽出ステップと、共通の項目を有することにより関係付けられている2つのテーブルを対応付けて記憶しているテーブルリンクテーブルを参照して、第一のテーブル名に基づいて、対応付けられている関連テーブルを抽出し、さらに当該関連テーブルに対応付けられている他の関連テーブルがある場合にはすべての当該関連テーブルを抽出する関連テーブル抽出ステップと、上記1の項目名に対応付けられて入力されたデータ値に、第一テーブルにおいて対応付けられているすべての項目のデータ値を取得し、関連テーブル抽出機能により抽出した1以上の関連テーブルから、共通の項目を介して上記入力されたデータ値に対応づけられているすべてのデータ値を取得するデータ取得ステップとが実行される。しかしながら、制約条件がないために業務上の整合性まで検証することはできない。
【特許文献1】特開2007−4447号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
アプリケーション・プログラムをテストする場合、データベースを必要とする場合があるが、当該データベースに業務上の整合性のとれたデータを格納しておかないと、正しいテスト結果を得られない。しかし、上で述べたようにデータベースに業務上の整合性のとれたデータが格納されているか否かを検証することは、非常に手間が掛かる作業となる。
【0006】
従って、本発明の目的は、データベースに格納されているデータの内容について業務上の整合がとれているか自動的に検証するための技術を提供することである。
【課題を解決するための手段】
【0007】
本発明に係るデータベース検証方法は、検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行される。そして、本データベース検証方法は、制約情報格納部に格納されている制約情報と、テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された上記解析用テンプレートにおける変数の値を特定するステップと、特定された上記解析用テンプレートに対応するパラメータ取得用SQLテンプレートと、特定された上記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文をデータベースに対して実行して、当該検索結果をパラメータとして取得するステップと、特定された上記解析用テンプレートに対応する検証用SQLテンプレートと、特定された上記変数の値のうち該当するものと、取得された上記パラメータのいずれかとが組み合わせられた検証用SQL文をデータベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、取得された上記第2の検索結果が、特定された上記解析用テンプレートに対応する検証文テンプレートと検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、第2の検索結果をもたらした検証用SQL文に組み合わされたパラメータを含むログを生成するログ生成ステップとを含む。
【0008】
このような構成によれば、機械読取り可能な設計情報における制約情報を有効活用して、自動的にデータベースに対する検証処理を実施することができるようになる。
【0009】
また、上で述べたログ生成ステップにおいて、特定された上記解析用テンプレート及び特定された上記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる場合もある。制約情報に応じた様々なテンプレートが用意されれば、自動的に検証を行うことができるデータベースを増やすことができる。
【0010】
なお、本方法をコンピュータに実行させるためのプログラムを作成することができ、このプログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークなどを介してデジタル信号として配信される場合もある。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【発明の効果】
【0011】
本発明によれば、データベースに格納されているデータの内容について業務上の整合がとれているか自動的に検証することができるようになる。
【発明を実施するための最良の形態】
【0012】
本発明の一実施の形態に係るデータベース検証装置の機能ブロック図を図1に示す。本実施の形態に係るデータベース検証装置100は、設計情報に含まれる制約情報を格納する制約情報格納部1と、以下で説明する各種テンプレートを格納するテンプレート格納部3と、制約情報格納部1及びテンプレート格納部3に格納されたデータを用いて処理を行う制約情報読み取り部5と、制約情報読み取り部5の処理結果である変数データを格納する変数データ格納部7と、変数データ格納部7及びテンプレート格納部3に格納されているデータを用い且つ制約情報読み取り部5の処理結果に応じて処理を実施する検証文生成部9と、検証文生成部9による処理結果を格納する検証文データ格納部13と、変数データ格納部7及びテンプレート格納部3に格納されているデータを用い且つ制約情報読み取り部5の処理結果に応じて処理を実施し、検証対象データベースを含むDB200に対して検索を実施するパラメータ検出部11と、パラメータ検出部11の検索結果であるパラメータを格納するパラメータ格納部15と、検証文データ格納部13及びパラメータ格納部15に格納されているデータを用いて処理を実施し、DB200に対して検索を実施する検証実行部17と、検証実行部17の処理結果である評価ログを格納する評価ログ格納部19と、評価ログ格納部19に格納されているデータを出力する出力部21とを有する。
【0013】
次に、図2に制約情報格納部1に格納されるデータの一例を示す。本実施の形態では、3つのカラムのうち、一番左のカラムには検証対象データベース名(テーブル名)、左から二番目のカラムには検証対象カラム名、一番右のカラムにはチェック内容が登録されるようになっている。図2の例では、検証対象データベースが「注文DB」であり、検証対象カラムが「商品コード」であり、チェック内容が「商品DB.商品コードに存在する」となっている。制約情報は、このようにテーブル間に渡る制約条件を記述する場合(関連チェックと呼ぶ)もあれば、1つのカラムについての制約条件を記述する場合(単項チェックと呼ぶ)もあれば、1つのテーブルにおけるカラム間の制約条件を記述する場合(単関連チェックと呼ぶ)もある。制約情報は、制約情報読み取り部5が処理できるような形式で記述される。なお、制約情報は、設計情報に含まれるものであり、設計情報を有効活用するものである。
【0014】
図3乃至図6にテンプレート格納部3に格納されるデータの一例を示す。図3は、制約情報とマッチングを行う文法パターン(制約情報の解析を行うためのテンプレートであり、解析用テンプレートとも呼ぶ)の一例を示す。本実施の形態では、(1)乃至(3)の3つの文法パターンを示しており、(1)は検証対象テーブルが「AA」で、検証対象カラムが「BB」で、チェック内容が「YY.ZZに存在する」というパターンであり、(2)は検証対象テーブルが「AA」で、検証対象カラムが「BB」で、チェック内容が「YY.ZZに存在しない」というパターンであり、(3)は検証対象テーブルが「EE」で、検証対象カラムが「II」で、チェック内容が「CC.DD=EE.FF&&CC.GG[H]EE.II」([H]は<、>、=、≦、≧、≠のいずれか)というパターンである。「AA」「BB」「CC」「DD」「EE」「FF」「GG」「II」は、変数であり、マッチングの際にはどのような値(データ)であってもよい。
【0015】
(1)は、例えば「注文DBの商品コードが商品DB.商品コードに存在する」というような制約に対してマッチングをとるためのパターンであり、(2)は、「新規お客さまDBのお客さまIDが得意先DB.利用者IDに存在しない」というような制約に対してマッチングをとるためのパターンであり、(3)は、「DB1.伝票番号=DB3.注文伝票番号である時、そのDB1.注文日はDB3.購入日以降である」や「広告DB.お客さまID=購入履歴DB.お客さまIDである時、その広告DB.お勧め商品は購入履歴DB.購入済み商品とは異なる」というような制約に対してマッチングをとるためのパターンである。
【0016】
図4は、テンプレート格納部3に格納される擬似SQL文テンプレートの一例を示す。図4の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。擬似SQL文テンプレートは、最終的にDB200に対して実行する検証のための検索におけるSQL文のテンプレートである。(1)は、Select YY.ZZ where AA.BB=[X]であり、[X]は後にパラメータとして抽出される値を代入する部分を示す。(2)も同様である。(3)は、Select EE.FF from EE where EE.FF=[X] and CC.GG[H]EE.IIであり、[X]は後にパラメータとして抽出される値を代入する部分を示す。[H]は上で述べたものと同様である。当然ながら、「AA」「BB」「CC」「DD」「EE」「FF」「GG」「II」は、変数であり、文法パターンによってマッチングを取る際に特定された変数値が代入される。
【0017】
図5は、テンプレート格納部3に格納されるカラム値(パラメータ)取得テンプレートの一例を示す。図5の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。カラム値取得テンプレートは、パラメータ(擬似SQL文テンプレートの[X]に代入される値)をDB200から取得するためのSQL文テンプレートである。(1)は、Select AA.BBであり、(2)も同様である。(3)は、Select CC.DDである。当然ながら、「AA」「BB」「CC」「DD」は、変数であり、文法パターンによってマッチングを取る際に特定された変数値が代入される。
【0018】
図6は、テンプレート格納部3に格納される検証文テンプレートの一例を示す。図6の(1)乃至(3)は、図3における(1)乃至(3)との対応関係を示す。また、[H]も上で述べたものと同様であり、文法パターンによってマッチングを取る際に特定された値が用いられる。(1)は、空(empty)である場合にログを出力することを意味するassert(empty)であり、(2)は、空でない(not empty)である場合にログを出力することを意味するassert(not empty)である。(3)は、[H]に依存しており、≠以外は、空である場合にログを出力することを意味するassert(empty)であり、≠であれば、空でない場合にログを出力することを意味するassert(not empty)である。
【0019】
以下の説明を分かりやすくするためにDB200には、図7及び図8のようなデータが格納されているものとする。すなわち、図7に示すように注文DBには、伝票番号と、商品コードと、数量と、注文日とが登録されるようになっている。また、図8に示すように商品DBには、商品コードと、商品名とが登録されるようになっている。
【0020】
以下、図9乃至図12を用いてデータベース検証装置100の処理内容について説明する。制約情報読み取り部5は、処理対象の制約情報を制約情報格納部1から読み出す(ステップS1)。例えば図2の第1行目の制約情報を読み出す。そして、制約情報読み取り部5は、制約情報とテンプレート格納部3に格納されている各文法パターン(例えば図3の各行に示された文法パターン)とのパターンマッチングを実施し、当該制約情報が該当する文法パターンを特定する(ステップS3)。図2の第1行目の制約情報の場合、図3の第1行目(1)の文法パターンがマッチするので、(1)が特定される。
【0021】
制約情報読み取り部5は、該当する文法パターンにおける各変数の値を抽出し、変数データ格納部7に格納する(ステップS5)。(1)の文法パターンにおいては、「AA」「BB」「YY」及び「ZZ」という変数があり、図2の第1行目の制約情報とマッチングさせると、図10(a)に示すように、「AA」=「注文DB」であり、「BB」=「商品コード」であり、「YY」=「商品DB」であり、「ZZ」=「商品コード」である。これらの変数及びその値を、変数データ格納部7に格納する。なお、制約情報読み取り部5は、検証文生成部9及びパラメータ検出部11に、該当する文法パターンのID(上の例では(1))を出力する。
【0022】
そして、検証文生成部9は、制約情報読み取り部5から受信した文法パターンのIDを用いて、該当する文法パターンに対応する擬似SQL文テンプレートを、テンプレート格納部3から読み出す(ステップS7)。図4の例では、(1)の擬似SQL文テンプレート「Select YY.ZZ where AA.BB=[X]」が読み出される。そして、擬似SQL文テンプレートの変数に値を代入して、擬似SQL文を生成し、例えば検証文データ格納部13に格納する(ステップS9)。図10(b)に示すような擬似SQL文が生成される。すなわち、「Select 商品DB.商品コード where 注文DB.商品コード=[X]」が生成され、検証文データ格納部13に格納される。なお、現段階では[X]は確定しないので、「擬似」SQL文となっている。
【0023】
さらに、検証文生成部9は、テンプレート格納部3から該当する文法パターンに対応する検証文テンプレートを読み出し、当該検証文テンプレートと擬似SQL文とを組み合わせて検証文を生成し、検証文データ格納部13に格納する(ステップS11)。図6の例では、(1)assert(empty)が抽出され、ステップS9で生成された擬似SQL文と組み合わされて、図10(c)に示すような検証文「Select 商品DB.商品コード where 注文DB.商品コード=[X]−>assert(empty)」が生成される。そして処理は端子Aを介して図11の処理に移行する。
【0024】
図11の処理の説明に移行して、パラメータ検出部11は、制約情報読み取り部5から受信した文法パターンのIDを用いて、該当する文法パターンに対応するカラム値取得テンプレートを、テンプレート格納部3から読み出す(ステップS13)。図5の例では、(1)「Select AA.BB」を読み出す。そして、当該カラム値取得テンプレートの変数に、変数データ格納部7に格納されている当該変数の値を代入し、パラメータ取得用のSQL文を生成し、例えばメインメモリなどの記憶装置に格納する(ステップS15)。図12(a)に示すように、「Select 注文DB.商品コード」というパラメータ取得用のSQL文を生成する。その後、パラメータ取得用のSQL文をDB200に対して実行し、検索結果であるパラメータを取得し、パラメータ格納部15に格納する(ステップS17)。図7のような注文DBの場合には、図12(b)に示すように商品コードの列の値「ZZ1」及び「ZZ2」が、パラメータとして抽出され、パラメータ格納部15に格納される。
【0025】
次に、検証実行部17は、パラメータ格納部15に格納されている未処理のパラメータを1つ選択し(ステップS19)、検証文データ格納部13に格納されている検証文の擬似SQL文部分の変数[X]に選択パラメータを代入し、検証用のSQL文を生成し、例えばメインメモリなどの記憶装置に格納する(ステップS21)。例えば、「ZZ1」を選択した場合には、図12(c)に示すように、検証用のSQL文「Select 商品DB.商品コード where 注文DB.商品コード=”ZZ1”」が生成される。そして、生成された検証用のSQL文をDB200に対して実行し、検索結果を取得する(ステップS23)。図8のような商品DBに対して、上記のようなSQL文を実行して検索を行うと、該当するレコードが存在するので、図12(d)に示すように「商品DB.ZZ1」が検索結果として得られる。
【0026】
検証実行部17は、検索結果が検証文におけるassertの内容とマッチするか判断する(ステップS25)。図10(c)に示したように、本例における検証文においては「assert(empty)」となっているので、emptyの場合にはマッチしたと判断される。図12(d)のような検索結果の場合には、マッチしたとは言えない。ステップS25でマッチしたとは言えない場合には、ステップS29に移行する。一方、検索結果がemptyの場合には、assertの内容とマッチするので、評価ログを生成し、評価ログ格納部19に格納する(ステップS27)。
【0027】
そして、検証実行部17は、パラメータ格納部15に未処理のパラメータが存在しているか判断し(ステップS29)、未処理のパラメータが存在している場合にはステップS19に戻る。
【0028】
ここでは「ZZ2」が残っているので、ステップS21で、図12(e)に示すように、検証用のSQL文「Select 商品DB.商品コード where 注文DB.商品コード=”ZZ2”」が生成される。そして、図8のような商品DBに対して、このようなSQL文を実行して検索を行うと、該当するレコードが存在しないので、図12(f)に示すように、「empty」という検索結果が得られる。そうすると、ステップS25で評価文のassertの内容とマッチすることになるので、評価ログを生成する。評価ログは、図13に示すように、「NG:注文DB.商品コード=”ZZ2”」となる。すなわち、評価ログを生成させることとなったパラメータ「ZZ2」を含み、業務上の整合性がとれなかった、検証対象データベースにおけるレコードを特定するためのデータである。
【0029】
このような処理を行って、未処理のパラメータが存在しないと判断された場合には、出力部21は、評価ログ格納部19に格納されている評価ログを表示装置や印刷装置などから出力する(ステップS31)。このようにすれば、ユーザは、検証対象データベースにおいてどの部分がテストを行う上で業務上の整合性がとれていないかを特定することができ、修正など対処を行うことができるようになる。
【0030】
以上のような処理を実施すれば、自動的に業務上の整合性についてデータベースの検証を実施することができるようになり、システムのテストなどにおいて問題の発生を未然に防止することができるようになる。
【0031】
次に、図14乃至図17を用いて第2の具体例について説明しておく。例えば、図14に示すようなデータが制約情報格納部1に格納されているものとする。すなわち、検証対象データベースは「DB3」であり、検証対象カラムは「購入日」であり、チェック内容は「DB1.伝票番号=DB3.注文伝票番号&&DB1.注文日≦DB3.購入日」となっている。これは、DB1とDB3の同じ伝票番号の注文について、DB1の注文日はDB3の購入日以前でなければならないということを表す制約情報である。また、DB1には図15に示すようなデータが格納されているものとする。すなわち、伝票番号と、商品コードと、数量と、注文日とが登録されている。同様に、DB3には図16に示すようなデータが格納されているものとする。すなわち、商品コードと、購入日と、数量と、注文伝票番号とが登録されるようになっている。
【0032】
図9及び図11の処理フローに従うと、まず図3の文法パターンとマッチングさせて、(3)が該当する文法パターンとして特定される。ここで、図17(a)に示すように、「CC」=「DB1」、「DD」=「伝票番号」、「EE」=「DB3」、「FF」=「注文伝票番号」、「GG」=「注文日」、「II」=「購入日」という変数値が特定される。なお、[H]は「≦」である。
【0033】
そうすると、検証文は、図4及び図6の(3)から、図17(b)に示すように、「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=[X] and DB1.注文日≦DB3.購入日−>assert(empty)」となる。
【0034】
また、パラメータ取得用のSQL文は、図5の(3)から、図17(c)に示すように、「Select DB1.伝票番号」となる。そして、このSQL文をDB1(図15)に対して実行すると、検索結果として図17(d)に示すように「A1234」及び「B1234」を取得する。
【0035】
そして、検証用のSQL文は、図17(f)に示すように「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=”A1234” and DB1.注文日≦DB3.購入日」となり、これをDB200に対して実行すると、図17(g)に示すように「empty」となる。これは、伝票番号「A1234」の購入日は注文日より前であるので、上記検証用SQL文に合致するレコードが存在しないことになる。従って、図17(h)に示すように「NG:X=”A1234”」というような評価ログが生成される。
【0036】
また、次に、図17(i)に示すように「Select DB3.注文伝票番号 from DB3 where DB3.注文伝票番号=”B1234” and DB1.注文日≦DB3.購入日」という検証用のSQL文を生成し、DB200に対して実行すると、図17(j)に示すように「B1234」を得る。emptyではないので、評価ログは生成されない。
【0037】
このように、「A1234」という伝票番号について、業務上の整合性がとれないレコードが登録されていることが分かるようになる。
【0038】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、図1に示した機能ブロック図は、実際のプログラムモジュール構成と同一ではない場合もある。また、ステップS7乃至S11と、ステップS13乃至S17は、独立した処理であるから、並列に実行しても良いし、実行する順番を入れ替えても良い。
【0039】
なお、データベース検証装置100は、例えばコンピュータ装置であって、図18に示すように当該コンピュータ装置においては、メモリ2501(記憶部)とCPU2503(処理部)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS)及びWebブラウザを含むアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。このようなコンピュータは、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0040】
(付記1)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能なコンピュータに、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を実行させるためのデータベース検証プログラム。
【0041】
(付記2)
前記ログ生成ステップにおいて、
特定された前記解析用テンプレート及び特定された前記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる
付記1記載のデータベース検証プログラム。
【0042】
(付記3)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行されるデータベース検証方法であって、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を含むデータベース検証方法。
【0043】
(付記4)
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、
前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部と、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定する手段と、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得する手段と、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得手段と、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成手段と、
を有するデータベース検証装置。
【図面の簡単な説明】
【0044】
【図1】本発明の実施の形態に係るシステム概要を示す図である。
【図2】制約情報格納部に格納されるデータの一例を示す図である。
【図3】テンプレート格納部に格納されるデータ(文法パターン)の一例を示す図である。
【図4】テンプレート格納部に格納されるデータ(擬似SQL文テンプレート)の一例を示す図である。
【図5】テンプレート格納部に格納されるデータ(カラム値取得用SQL文テンプレート)の一例を示す図である。
【図6】テンプレート格納部に格納されるデータ(検証文テンプレート)の一例を示す図である。
【図7】注文DBに格納されるデータの一例を示す図である。
【図8】商品DBに格納されるデータの一例を示す図である。
【図9】本発明の実施の形態における処理フローを示す図である。
【図10】(a)乃至(c)は、処理フローにおける途中結果を示す図である。
【図11】本発明の実施の形態における処理フローを示す図である。
【図12】(a)乃至(f)は、処理フローにおける途中結果を示す図である。
【図13】評価ログ格納部に格納されるデータの一例を示す図である。
【図14】制約情報格納部に格納されるデータの一例を示す図である。
【図15】DB1に格納されるデータの一例を示す図である。
【図16】DB3に格納されるデータの一例を示す図である。
【図17】(a)乃至(j)は、第2の具体例における処理の途中結果を示す図である。
【図18】コンピュータの機能ブロック図である。
【符号の説明】
【0045】
1 制約情報格納部
3 テンプレート格納部
5 制約情報読み取り部
7 変数データ格納部
9 検証文生成部
11 パラメータ検出部
13 検証文データ格納部
15 パラメータ格納部
17 検証実行部
19 評価ログ格納部
21 出力部
100 データベース検証装置
200 DB
【特許請求の範囲】
【請求項1】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能なコンピュータに、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を実行させるためのデータベース検証プログラム。
【請求項2】
前記ログ生成ステップにおいて、
特定された前記解析用テンプレート及び特定された前記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる
請求項1記載のデータベース検証プログラム。
【請求項3】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行されるデータベース検証方法であって、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を含むデータベース検証方法。
【請求項4】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、
前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部と、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定する手段と、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得する手段と、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得手段と、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成手段と、
を有するデータベース検証装置。
【請求項1】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能なコンピュータに、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を実行させるためのデータベース検証プログラム。
【請求項2】
前記ログ生成ステップにおいて、
特定された前記解析用テンプレート及び特定された前記変数の値のうち特定の変数の値に対応する検証文テンプレートが用いられる
請求項1記載のデータベース検証プログラム。
【請求項3】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部とにアクセス可能であり、処理部を有するコンピュータに実行されるデータベース検証方法であって、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定するステップと、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得するステップと、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得ステップと、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成ステップと、
を含むデータベース検証方法。
【請求項4】
検証対象データベースを含むデータベースに格納されるデータ項目についての制約条件についての制約情報を格納する制約情報格納部と、
前記制約情報の解析用テンプレートと当該解析用テンプレートに対応する検証用SQLテンプレート、パラメータ取得用SQLテンプレート及び検証文テンプレートとを格納するテンプレート格納部と、
前記制約情報格納部に格納されている制約情報と、前記テンプレート格納部に格納されている解析用テンプレートとをマッチングさせて、当該制約情報にマッチする解析用テンプレートを特定すると共に、当該制約情報から、特定された前記解析用テンプレートにおける変数の値を特定する手段と、
特定された前記解析用テンプレートに対応する前記パラメータ取得用SQLテンプレートと、特定された前記変数の値のうち該当するものとを組み合わせることによってパラメータ取得用SQL文を生成し、当該パラメータ取得用SQL文を前記データベースに対して実行して、当該検索結果をパラメータとして取得する手段と、
特定された前記解析用テンプレートに対応する前記検証用SQLテンプレートと、特定された前記変数の値のうち該当するものと、取得された前記パラメータのいずれかとが組み合わせられた検証用SQL文を前記データベースに対して実行して、検索結果を第2の検索結果として取得する検索結果取得手段と、
取得された前記第2の検索結果が、特定された前記解析用テンプレートに対応する前記検証文テンプレートと前記検証用SQL文とが組み合わされた検証文を充足するものであるか判断し、充足する場合に、前記第2の検索結果をもたらした前記検証用SQL文に組み合わされた前記パラメータを含むログを生成するログ生成手段と、
を有するデータベース検証装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2009−26163(P2009−26163A)
【公開日】平成21年2月5日(2009.2.5)
【国際特許分類】
【出願番号】特願2007−190368(P2007−190368)
【出願日】平成19年7月23日(2007.7.23)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成21年2月5日(2009.2.5)
【国際特許分類】
【出願日】平成19年7月23日(2007.7.23)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]