(57)【要約】【課題】汎用的なデータに対して、データの参照関係からデータの不整合を検出し、不整合検出時にどの参照関係の範囲のデータを補正すればよいかを容易に検出する。【解決手段】データ不整合検出装置１００は、データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報および参照先のデータが必須か否かを示す参照状況情報を関連付けて記憶しているデータ定義情報１１１を記憶している記憶部１１０と、データ定義情報を参照し、データをノードとし、データ間の参照関係をリンクとして表すツリーの探索順を設定し、設定結果を探索順情報１１２として記憶部１１０に記憶する探索順判定部１２１と、データ定義情報および探索順情報を参照し、ツリーの葉ノードから探索順を逆に辿ることによって、不整合を検出し、ノードを削除する必要があるか否かやリンクに補正がいるか否かを判定する不整合判定部１２２と、を備える。【選択図】図１
2016099961.tif 000002
【特許請求の範囲】
【請求項１】
データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報および参照先のデータが必須か否かを示す参照状況情報を関連付けて記憶しているデータ定義情報を記憶している記憶部と、
前記データ定義情報を参照し、前記データをノードとし、前記データ間の参照関係をリンクとして表すツリーの探索順を設定し、設定結果を探索順情報として前記記憶部に記憶する探索順判定部と、
前記データ定義情報および前記探索順情報を参照し、前記ツリーの葉ノードから前記探索順を逆に辿ることによって不整合を検出し、前記ノードを削除する必要があるか否か、前記リンクを削除する必要があるか否か、のいずれか一方または双方について判定する不整合判定部と、
前記不整合判定部の判定結果に基づいて、前記データの再設定もしくは削除または前記リンクの削除を実行するデータ補正部と、
を備えることを特徴とするデータ不整合検出装置。
【請求項２】
前記探索順判定部は、
前記ツリーのrootが複数となる場合、rootごとに前記ツリーを分けて探索順を決定する
ことを特徴とする請求項１に記載のデータ不整合検出装置。
【請求項３】
前記不整合判定部は、前記データごとにカウント数を関連付けて、不整合検出処理時に、参照関係が存在していると判定したデータの前記カウント数を変更し、前記カウント数が変更されなかったデータを、データの浮きと判定し、
前記データ補正部は、前記データの浮きと判定されたデータを削除する
ことを特徴とする請求項１または請求項２に記載のデータ不整合検出装置。
【請求項４】
前記記憶部は、参照元のデータに関連付けて、（１）前記参照先のデータが存在せず、かつ当該参照先のデータが前記参照元にとって必須である場合に設定される必須時判定フラグ、（２）前記参照先のデータが存在せず、かつ当該参照先のデータが前記参照元にとって必須でない場合に設定される非必須時判定フラグ、（３）前記参照先のデータに前記必須時判定フラグまたは必須時影響フラグが設定されており、かつ、当該参照先のデータが前記参照元にとって必須である場合に設定される前記必須時影響フラグ、（４）前記参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されており、かつ、当該参照先のデータが前記参照元にとって必須でない場合に設定される非必須時影響フラグ、を記憶しており、
前記データ補正部は、前記必須時判定フラグ、前記非必須時判定フラグ、前記必須時影響フラグおよび前記非必須時影響フラグの設定状態と、前記参照先のデータの有無とに応じて、前記参照元のデータまたは前記参照先との間のリンクを削除する
ことを特徴とする請求項１ないし請求項３のいずれか一項に記載のデータ不整合検出装置。
【請求項５】
前記不整合判定部は、前記参照先のデータが必須の場合、前記参照先のデータが無いことを示すデータの欠けに応じて前記必須時判定フラグを前記参照元に設定し、前記参照先のデータが必須でない場合、当該参照先のデータの欠けに応じて前記非必須時判定フラグを前記参照元に設定する
ことを特徴とする請求項４に記載のデータ不整合検出装置。
【請求項６】
前記不整合判定部は、前記参照先のデータが必須であって、かつ当該参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されている場合、当該参照先のデータが無いことを示すデータの欠けに応じて前記必須時影響フラグを前記参照元に設定し、前記参照先のデータが必須でなく、かつ当該参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されている場合、当該参照先のデータの欠けに応じて前記非必須時影響フラグを前記参照元に設定する
ことを特徴とする請求項４に記載のデータ不整合検出装置。
【請求項７】
データ不整合検出装置は、
データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報および参照先のデータが必須か否かを示す参照状況情報を関連付けて記憶しているデータ定義情報を記憶している記憶部を備え、
前記データ定義情報を参照し、前記データをノードとし、前記データ間の参照関係をリンクとして表すツリーの探索順を設定し、設定結果を探索順情報として前記記憶部に記憶する探索順判定ステップと、
前記データ定義情報および前記探索順情報を参照し、前記ツリーの葉ノードから前記探索順を逆に辿ることによって不整合を検出し、前記ノードを削除する必要があるか否か、前記リンクを削除する必要があるか否か、のいずれか一方または双方について判定する不整合判定ステップと
前記不整合判定ステップにおける判定結果に基づいて、前記データの再設定もしくは削除または前記リンクの削除を実行するデータ補正ステップと、
を実行することを特徴とするデータ不整合検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ間の参照関係の不整合を検出する技術に関する。
【背景技術】
【０００２】
オブジェクト、データベースのレコード等、連想配列形式の参照・非参照の関係を有する２種以上のデータ（以降、データと称す。）を、一度に生成したり、書き換えたり、削除したりする場合がある。このようにデータに何らかの処理を実行している最中に、バグ、装置故障等の理由によって当該処理が中断すると（ロールバック処理等のデータの復旧機能が具備される場合があるがそれらも機能しないときに）、参照・被参照の関係のある複数のデータのうち一部が不足する、または一部が残ることで、参照関係が崩れる場合がある。データの一部が不足する場合をデータの欠け、データの一部が残る場合をデータの浮きと称す。
【０００３】
データの欠けがある場合、プログラムが参照関係を辿っていったとき、そのデータが欠損しているため読み取れず、処理上の矛盾からプログラムの誤動作を引き起こすといった虞がある。また、データの浮きがある場合、その浮きとなったデータは使用できないリソースであり、データの浮きのリソースが増えると、全体のリソースを圧迫する（空きリソースが枯渇する）といった虞がある。
【０００４】
特許文献１には、呼の発生に伴ってリソースを確保し、呼の終了によってリソースを解放する交換機のリソース制御において、リソースの使用率に応じて、リソースの適正使用探索を行い、使用されていないリソース（データの浮き）を強制解放することにより、使用されていないリソースによって交換機がビジーとなること防止する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２６８６０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載の技術は、交換機における特定のデータの参照関係に特化して、データの浮きを検出する専用のプログラムによってデータの浮きを探索するものである。そのため、特許文献１に記載の技術は、特定のデータに特化されているため、汎用的なデータの場合には適用できない。また、特定のデータの参照関係を知っていて、データの欠けやデータの浮きを判定できる開発者相当の専門知識を有する作業者（オペレータ）でないと、データを補正（修正）することが困難であった。つまり、特許文献１に記載の技術は、汎用的なデータに対して、データの参照関係からデータの不整合（データの欠けやデータの浮き）を検出し、不整合検出時にどの参照関係の範囲のデータを補正すればよいかを容易に検出できない。
なお、汎用的なデータに対して、参照関係の不整合を検出する技術については、開示されたものは見られない。
【０００７】
そこで、本発明は、汎用的なデータに対して、データの参照関係からデータの不整合を検出し、不整合検出時にどの参照関係の範囲のデータを補正すればよいかを容易に検出することを課題とする。
【課題を解決するための手段】
【０００８】
前記課題を解決するため、本発明のデータ不整合検出装置は、データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報および参照先のデータが必須か否かを示す参照状況情報を関連付けて記憶しているデータ定義情報を記憶している記憶部と、前記データ定義情報を参照し、前記データをノードとし、前記データ間の参照関係をリンクとして表すツリーの探索順を設定し、設定結果を探索順情報として前記記憶部に記憶する探索順判定部と、前記データ定義情報および前記探索順情報を参照し、前記ツリーの葉ノードから前記探索順を逆に辿ることによって不整合を検出し、前記ノードを削除する必要があるか否か、前記リンクを削除する必要があるか否か、のいずれか一方または双方について判定する不整合判定部と、前記不整合判定部の判定結果に基づいて、前記データの再設定もしくは削除または前記リンクの削除を実行するデータ補正部と、を備えることを特徴とする。
【０００９】
このような構成によれば、データ不整合検出装置は、データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報と、参照先のデータが必須か否かを示す参照状況情報とを関連付けて記憶している。そのため、データ不整合検出装置は、参照先のデータが必須と設定され、かつその参照先のデータが存在しない場合、参照元のデータが不整合と判定できるので、参照元データを削除するべき、または、参照先のデータを再設定する必要があると判定できる。また、データ不整合検出装置は、参照先のデータが必須でないと設定され、かつその参照先のデータが存在しない場合、その参照先とのリンクが不整合と判定できるので、当該リンクを削除する、または、参照先のデータを再設定する必要があると判定できる。そして、データ不整合検出装置は、ツリーの葉ノードから探索順を逆に辿ることによって、データの不整合（データの浮きやデータの欠け）を１度の探索で確定することができ、補正を必要とする範囲を明確にすることができる。つまり、データ不整合検出装置は、汎用的なデータに対して、データの参照関係からデータの不整合を検出し、不整合検出時にどの参照関係の範囲のデータを補正すればよいかを容易に検出することができる。
【００１０】
また、前記データ不整合検出装置の前記探索順判定部は、前記ツリーのrootが複数となる場合、rootごとに前記ツリーを分けて探索順を決定することを特徴とする。
【００１１】
このような構成によれば、データ不整合検出装置は、ツリーのrootが複数となる場合であっても、ツリーごとに探索順を決定できるので、データの不整合を判定することができる。
【００１２】
また、前記データ不整合検出装置の前記不整合判定部は、前記データごとにカウント数を関連付けて、不整合検出処理時に、参照関係が存在していると判定したデータの前記カウント数を変更し、前記カウント数が変更されなかったデータを、データの浮きと判定し、前記データ補正部が、前記データの浮きと判定されたデータを削除することを特徴とする。
【００１３】
このような構成によれば、データ不整合検出装置は、データごとにカウント数を設けることによって、データの不整合の一つであるデータの浮きを判定し、データの浮きを解消することができる。
【００１４】
また、前記データ不整合検出装置の前記記憶部は、参照元のデータに関連付けて、（１）前記参照先のデータが存在せず、かつ当該参照先のデータが前記参照元にとって必須である場合に設定される必須時判定フラグ、（２）前記参照先のデータが存在せず、かつ当該参照先のデータが前記参照元にとって必須でない場合に設定される非必須時判定フラグ、（３）前記参照先のデータに前記必須時判定フラグまたは必須時影響フラグが設定されており、かつ、当該参照先のデータが前記参照元にとって必須である場合に設定される前記必須時影響フラグ、（４）前記参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されており、かつ、当該参照先のデータが前記参照元にとって必須でない場合に設定される非必須時影響フラグ、を記憶しており、前記データ補正部が、前記必須時判定フラグ、前記非必須時判定フラグ、前記必須時影響フラグおよび前記非必須時影響フラグの設定状態と、前記参照先のデータの有無とに応じて、前記参照元のデータまたは前記参照先との間のリンクを削除することを特徴とする。
【００１５】
このような構成によれば、データ不整合検出装置は、必須時判定フラグ、非必須時判定フラグ、必須時影響フラグおよび非必須時影響フラグを設定することによって、補正が必要な可能性のあるデータの範囲を明確にし、不整合の補正に役立てることができる。
【００１６】
また、前記データ不整合検出装置の前記不整合判定部は、前記参照先のデータが必須の場合、前記参照先のデータが無いことを示すデータの欠けに応じて前記必須時判定フラグを前記参照元に設定し、前記参照先のデータが必須でない場合、当該参照先のデータの欠けに応じて前記非必須時判定フラグを前記参照元に設定することを特徴とする。
【００１７】
このような構成によれば、データ不整合検出装置は、必須時判定フラグおよび非必須時判定フラグを設定することによって、補正が必要な可能性のあるデータの範囲を明確にし、不整合の判定に役立てることができる。
【００１８】
また、前記データ不整合検出装置の前記不整合判定部は、前記参照先のデータが必須であって、かつ当該参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されている場合、当該参照先のデータが無いことを示すデータの欠けに応じて前記必須時影響フラグを前記参照元に設定し、前記参照先のデータが必須でなく、かつ当該参照先のデータに前記必須時判定フラグまたは前記必須時影響フラグが設定されている場合、当該参照先のデータの欠けに応じて前記非必須時影響フラグを前記参照元に設定することを特徴とする。
【００１９】
このような構成によれば、データ不整合検出装置は、必須時影響フラグおよび非必須時影響フラグを設定することによって、補正が必要な可能性のあるデータの範囲を明確にし、不整合の判定に役立てることができる。
【００２０】
なお、データ不整合検出方法については、前記したデータ不整合検出装置と同様の技術的特徴を備えており、前記データ不整合検出装置と同様の効果を有しているので、「課題を解決するための手段」においての記載を省略する。
【発明の効果】
【００２１】
本発明によれば、汎用的なデータに対して、データの参照関係からデータの不整合を検出し、不整合検出時にどの参照関係の範囲のデータを補正すればよいかを容易に検出することができる。
【図面の簡単な説明】
【００２２】
【図１】データ不整合検出装置の機能例を示す図である。
【図２】データ定義情報の一例を示す図である。
【図３】探索順情報の一例を示す図である。
【図４】ＤＡＧ（Directed Acyclic Graph）の場合のツリーを示す図である。
【図５】ループ探査の場合のツリーを示す図である。
【図６】rootが複数の場合のツリーを示す図である。
【図７】データの欠け、データの浮きを探索する探索順を説明する図である。
【図８】補正対象情報の一例を示す図である。
【図９】不整合と判定されるケース１における補正方法および通知例を示す図であり、（ａ）は不整合と判定されるケースを表し、（ｂ）は補正方法１−１を表し、（ｃ）は補正方法１−２を表し、（ｄ）は通知例を表す。
【図１０】不整合と判定されるケース２における補正方法および通知例を示す図であり、（ａ）は不整合と判定されるケースを表し、（ｂ）は補正方法２−１を表し、（ｃ）は補正方法２−２を表し、（ｄ）は通知例を表す。
【図１１】不整合と判定されるケース３における補正方法および通知例を示す図であり、（ａ）は不整合と判定されるケースを表し、（ｂ）は補正方法３を表し、（ｃ）は通知例を表す。
【図１２】不整合と判定されるケース４における補正方法および通知例を示す図であり、（ａ）は不整合と判定されるケースを表し、（ｂ）は補正方法４を表し、（ｃ）は通知例を表す。
【図１３】データの浮きの探索を説明する図であり、（ａ）は参照カウンタを表し、（ｂ）は通知例を表す。
【図１４】データ不整合検出装置の処理フロー例を示す図である。
【図１５】データの浮きおよびデータの欠けを探索するための処理フロー例を示す図である。
【発明を実施するための形態】
【００２３】
本発明を実施するための形態（以降、「本実施形態」と称す。）について、適宜図面を参照しながら詳細に説明する。
【００２４】
（概要）
本実施形態では、データ不整合検出装置１００（図１参照）は、下記に示す４つの処理（第１の処理〜第４の処理）を実行する機能を有する。
＜第１の処理「データの参照関係の定義」＞
データ不整合検出装置１００は、アプリケーションがデータの参照関係を認識し易くするために、（１）あるフィールドのデータが他のデータを参照するためのキー（参照先を表すキー）であることを示す情報、（２）当該フィールドにとって、参照先のデータが必須か必須でないかを示す情報、をフィールド定義情報１１５（図２参照）として定義し、データ定義情報１１１に含めて、記憶部１１０（図１参照）に記憶している。ここで、フィールドとは、連想配列形式のデータの配列内の各要素であり、例えば、データベースでは、その中の一つのテーブルにおいて、１行に１つのレコード分のデータを表したときに、列として表示されるデータを表す。なお、フィールド定義情報１１５（図２参照）の詳細な説明については後記する。
【００２５】
＜第２の処理「データの探索順の決定」＞
一般的に、アプリケーションは何らかのキー情報からデータの参照関係を辿り、目的のデータを得るが、この参照関係中の個々のデータをノード、参照関係をリンクで表すとツリー構造となる。リンクは有方向（通常一方向である。）である。そして、ツリーの探索順が決定される。ただし、例外については、後記する。
データの欠けは、ツリーの葉ノードから探索順を逆に辿ることによって、データ毎に参照関係を探索することでリンク切れとして検出できる。データの浮きは、ツリーに従って全データの参照関係を探索した後に、どこからも参照されていないデータとして検出できる。
【００２６】
＜第３の処理「データの浮き、データの欠けの判定」＞
データの参照関係が整合しているかの判定として、ツリーの各ノード(テーブル)単位でデータを読み取り、その参照先のデータが参照可能かを探索する。ノード(テーブル)単位で処理する理由は、一般にテーブルのデータを一括して読み取ることは既に知られており、短時間に大量のデータを読み取ることが可能なためである。
ツリーの探索は、探索順の番号の大きなものから実行する。言い換えると、ツリーの葉ノードから探索順を逆に辿るようにして、探索を実行する。これは、探索順の通りに番号の小さいものから実行した場合、データの欠けやデータの浮きの探索をデータ全体に対して複数回実行しないと、データの浮きやデータの欠けデータを確定できないためである。
データの浮きの判定については、各データの被参照数をカウントする必要がある。すなわち、データがどこからも参照されずにカウント数が０の場合、データの浮きと判定することができる。
【００２７】
＜第４の処理「データの補正範囲の決定」＞
どのデータを削除するか、どのリンクを削除するか、等の補正範囲を決定するために、図８に示すように、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５、および非必須時影響フラグ１１３６を用いることとする。
【００２８】
必須時判定フラグ１１３３は、データの削除が必要か否かについて、作業者（オペレータ）の判定が必要となる場合に設定される（フラグが立てられる）。
非必須時判定フラグ１１３４は、参照先のデータへのリンクの削除が必要か否かについて、作業者（オペレータ）の判定が必要となる場合に設定される（フラグが立てられる）。
【００２９】
必須時影響フラグ１１３５および非必須時影響フラグ１１３６は、必須時判定フラグ１１３３のフラグの立っているデータを作業者（オペレータ）が削除することによって、そのデータを参照する参照元のデータも不整合となってしまう場合に、作業者（オペレータ）の削除によって不整合となりうる参照元のデータおよびリンクに設定される（フラグが立てられる）。すなわち、必須時影響フラグ１１３５は、参照元のデータを削除する必要がある場合に設定される（フラグが立てられる）。非必須時影響フラグ１１３６は、参照先のデータへのリンクを削除する場合に設定される（フラグが立てられる）。
【００３０】
そして、参照関係の整合性が崩れているケースを検出した際、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５、非必須時影響フラグ１１３６、およびカウント数１１３２に基づいて、データの補正範囲（十分条件の範囲ではなく、必要条件の範囲）が決定され、その補正範囲が作業者（オペレータ）に通知される。
【００３１】
なお、第１の処理は、データ設計の過程において、データの構成やフィールドを設定するときに実行される。
第２、第３の処理は、データの欠けやデータの浮きを判定するときに実行される。データの欠けやデータの浮きの探索は、コマンド等による作業者（オペレータ）の指示によって実行される、または所定の周期（一定周期を含む）で実行される。
【００３２】
第４の処理は、データの欠けやデータの浮きを探索した後に、作業者（オペレータ）に処理結果として補正範囲を表示するために実行される。第２、第３の処理が作業者（オペレータ）指示によるコマンドで実行される場合は、第４の処理はコマンド内の処理として実行される。また、第２、第３の処理が所定の周期で実行される場合は、処理結果にＩＤを付与して記憶しておき、処理結果にＩＤを付した情報をメールまたはアラーム等で出力し、作業者（オペレータ）が処理結果の詳細を確認する際には、ＩＤをコマンド入力することによって実行される。
【００３３】
（データ不整合検出装置）
データ不整合検出装置１００の機能例について、図１を用いて説明する。図１に示すように、データ不整合検出装置１００は、記憶部１１０、処理部１２０、出力処理部１３０を備える。データ不整合検出装置１００は、出力処理部１３０を介して、処理部１２０の処理結果を、表示装置１４０に出力する機能を有する。
【００３４】
記憶部１１０は、ハードディスク等の記憶装置であり、データ定義情報１１１、探索順情報１１２および補正対象情報１１３が記憶される。
データ定義情報１１１は、データの参照関係を定義した情報である。具体的には、図２を用いて説明する。図２は、データ定義情報１１１の一例を表している。
データ定義情報１１１には、一例として、３つのテーブル１１１１，１１１２，１１１３が記憶されている。なお、テーブル数は３に限られることは無く、２以上であればよい。
テーブル１１１１は、フィールド名が「field1」であり、フィールドのデータとして「field2(*)」「field3(*)」「field4」等を格納している。
【００３５】
テーブル１１１２は、フィールド名が「key_field2」であり、フィールドのデータとして「field5」「field6」等を格納している。テーブル１１１２は、テーブル１１１１のフィールド「field2(*)」と参照・被参照の関係を有している。つまり、テーブル１１１１およびテーブル１１１２をノードとして表すと、双方のノード間にはリンクがあると言える。
【００３６】
テーブル１１１３は、フィールド名が「key_field3」であり、フィールドのデータとして「field7」「field8」「field9」等を格納している。テーブル１１１３は、テーブル１１１１のフィールドのデータ「field3(*)」と参照・被参照の関係を有している。つまり、テーブル１１１１およびテーブル１１１３をノードとして表すと、双方のノード間にはリンクがあると言える。
【００３７】
また、各フィールドのデータは、フィールド定義情報１１５が関連付けられている。フィールド定義情報１１５は、図２に示すように、フィールド属性１１５１、参照先情報１１５２および参照状況情報１１５３を備える。
フィールド属性１１５１は、フィールドのデータが数値なのかテキストなのか、数値の場合は整数なのか小数なのか、テキストの場合はASCII（American Standard Code for Information Interchange）なのか、文字数等の型等の定義を表す。
【００３８】
参照先情報１１５２は、フィールドのデータが、他のデータを参照するための情報である参照先を表す情報であるか否かを示す情報を格納している。参照先情報１１５２を備えることで、フィールドのデータが参照先を表す情報なのか、参照関係のないデータを表す情報なのかを判定できる。
参照状況情報１１５３は、フィールドのデータ（参照元のデータ）にとって、参照先のデータが必須か、必須でないかを示す情報を格納している。
【００３９】
図１に戻って、探索順情報１１２には、探索順判定部１２１によってデータ定義情報１１１を参照してデータの参照関係が辿られて決定された探索順が記憶される。この参照関係において、各データをノード、ノード間の参照関係をリンクで表すとツリー構造となる。リンクは有方向(通常一方向である)である。
図３は、探索順情報１１２の一例を表している。図３において、四角形はノードを表し、実線矢印は、リンクおよび方向を表している。また、四角形内の数字は、探索順判定部１２１によって設定された探索順の番号を表している。
【００４０】
補正対象情報１１３には、不整合判定部１２２によってリンクが辿られることによって、ノードを削除する必要があるか否か、およびリンクを削除する必要があるか否か、について判定された結果が記憶される。具体的には、補正対象情報１１３には、図８に示すように、テーブル単位で、データと被参照数のカウント数１１３２、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５および非必須時影響フラグ１１３６とが関連付けて記憶される。なお、補正対象情報１１３の詳細については、後記する。
【００４１】
図１に戻って、処理部１２０は、記憶部１１０に記憶された各種情報を参照して、データの不整合を判定（検出）する処理を実行する機能を有する。処理部１２０は、データ不整合検出装置１００が備えるＣＰＵ（Central Processing Unit）によるプログラム実行処理や、専用回路等により実現される。なお、処理部１２０の機能をソフトウェアによって実現する場合、記憶部１１０には、この処理の機能を実現するためのプログラムが格納される。
【００４２】
処理部１２０は、探索順判定部１２１、不整合判定部１２２、データ補正部１２３および統合制御部１２４を機能として有する。
統合制御部１２４は、探索順判定部１２１、不整合判定部１２２およびデータ補正部１２３の処理を制御する機能を有する。
探索順判定部１２１は、データ定義情報１１１を参照し、不整合を探索する対象となるデータを取得し、データの参照関係を辿って探索順を決定する機能を有する。また、探索順判定部１２１は、決定した探索順を、探索順情報１１２に記憶する機能を有する。
【００４３】
不整合判定部１２２は、データ定義情報１１１および探索順情報１１２を参照し、リンクを辿ることによって、不整合を判定（検出）し、ノードを削除する必要があるか否か、リンクを削除する必要があるか否か、について判定し、その判定結果を補正対象情報１１３に記憶する機能を有する。
【００４４】
データ補正部１２３は、補正対象情報１１３を参照して、データの再設定や削除、リンクの削除等の補正を実行する機能を有する。
【００４５】
出力処理部１３０は、処理部１２０の処理結果等の情報を、データ不整合検出装置１００に接続される表示装置１４０に出力する機能を有する。
表示装置１４０は、ディスプレイ等であり、データ不整合検出装置１００から出力される情報を表示する機能を有する。
【００４６】
（第１〜第４の処理例）
次に、第１〜第４の処理例について、以下に説明する。
まず、第１の処理「データの参照関係の定義」では、図２に示したフィールド定義情報１１５（特に、参照先情報１１５２、参照状況情報１１５３）をデータに設定することによって、不整合判定部１２２が整合性の判定を実行できる。なお、データ定義情報１１１（フィールド定義情報１１５を含む。）は、アプリケーションの設計において、アプリケーションの設計者にて作成され、アプリケーションのインストールにおいて作業者にて記憶部１１０に入力される。
【００４７】
例えば、参照状況情報１１５３によって参照先のデータが必須であると設定され、かつその参照先のデータが存在しない場合、参照元のデータも不整合と判定できるので、参照元データを削除するべき、または、参照先のデータを再設定する必要があると判定できる。また、参照状況情報１１５３によって参照先のデータが必須でないと設定されている場合、その参照先へのリンクが不整合と判定できるので、参照先へのリンクを削除する、または、参照先のデータを再設定する必要がある、と判定できる。
なお、これら参照先情報１１５２および参照状況情報１１５３を用いた判定処理の具体例については後記する。
【００４８】
第２の処理「データの探索順の決定」では、探索順判定部１２１は、データ定義情報１１１を参照して、データの参照関係を辿ってツリーを生成し、参照関係のツリーの探索順を、既存の探索アルゴリズムを用いて決定する。探索アルゴリズムには、ツリーのrootの方の番号が小さく、葉の方の番号が大きくなるような探索アルゴリズム（具体的には、深さ優先アルゴリズム、幅優先アルゴリズム等）を用いる。そして、探索順判定部１２１は、探索順の番号の大きいもの（葉ノード）から、リンクの切れを判定していく。なお、rootの方の番号が大きく、葉の方の番号が小さくなるような探索アルゴリズムを用いた場合には、探索順判定部１２１は、探索順の番号の小さなものからリンクの切れを判定するようにしてもよい。
【００４９】
データの参照関係はツリー構造以外になる場合もある。具体的には、
（Ａ）ＤＡＧ（Directed Acyclic Graph）の場合（図４）
（Ｂ）参照関係がループの場合（図５）
（Ｃ）ツリーのrootが複数の場合（図６）
がある。
【００５０】
（Ａ）ＤＡＧの場合には、例えば、図４に示すように、１つのノード５に対して２つのリンク（２０１，２０２）が存在する。したがって、ノード５が２度目に探索されるときには、ノード５より先は既に探索済みであるので、探索を続けることは無駄となる。そこで、当該探索を中断し、次の未探索のリンクから探索を続けるとよい。
【００５１】
（Ｂ）参照関係がループの場合には、例えば、図５に示すように、ノード２とノード３との間に参照関係のループとなるリンク（２１１，２１２）が存在する。したがって、そのまま探索すると、ループ内を無限に探索することになる。そこで、既に探索済みのノード２を、再度探索していることが分かった場合、ノード２より先の探索を中断し、深さ優先探索アルゴリズムに従って、ノード３に進んで、ノード３からの未探索のリンクが無いかを確認する。そして、未探索のリンクが無いことを確認した後、ノード２に戻って、ノード２からの未探索のリンクが無いかを探索すればよい。
【００５２】
（Ｃ）ツリーのrootが複数の場合には、例えば、図６のように表される。この場合、探索順はrootごとに別管理される必要がある。図６では、rootが１で探索順が１〜６のツリーと、rootが１ａで探索順が１ａ〜３ａ，５，６のツリーとが存在する。このとき、ノード５，６は、ＤＡＧの場合に該当し、既に探索済みであれば、その先の探索は実行しないようにすればよい。
【００５３】
つまり、（Ａ）〜（Ｃ）のいずれの場合も、既に探索済みのノードを再探索している場合、その再探索を中断し、公知の探索アルゴリズムに従って、未探索のリンクから探索を再開すればよい。
なお、（Ｃ）の場合は、rootごとにツリーを分け、root毎に公知の探索アルゴリズムを適用し、別の探索順として管理することによって、ツリーのrootの方の番号が小さく、葉の方の番号が大きくなるように探索順を決定できる。
【００５４】
第３の処理「データの浮き、データの欠けの判定」の一例については、図７に示すように、不整合を解消するためにノード５を削除する場合で説明する。図７に示すツリーは、深さ優先探索によって探索順を決定したものである。
データの欠けについての判定は、探索順の番号の大きなノード（葉ノード）から探索を実行した場合、１度の探索で補正の必要な範囲を明確にすることができる。具体的には、ノード５を探索後、ノード４を探索する。ノード４にとってノード５が必須であるが、ノード５が削除される可能性があると判定された場合には、ノード５を参照するノード４も削除が必要な可能性があると判定される。
【００５５】
しかしながら、探索順の番号の小さいもの（rootノード）から探索を実行した場合、複数回探索しないと補正の必要な範囲が明確にならない。その理由は、ノード５が不整合かを判定する前に、ノード４の探索が行われるからである。すなわち、ノード５が不整合と判定される前に、ノード４のノード５へのリンクは整合していると判定される。それにもかかわらず、ノード５が探索されて不整合となって、作業者（オペレータ）の判定によってノード５のデータが削除されると、ノード４は不整合の状態になってしまう。しかし、そのノード４が不整合と判定されるのは、次に探索される時まで待たなければならなくなる。つまり、ノード４より下位のデータであるノード５，６を先に探索した方が、効率がよくなるのである。
【００５６】
データの浮きについての判定は、データの被参照数をカウントすることによって実行できる。カウント数が０であれば、データの浮きと判定することができる。このため、各データに被参照数をカウントするカウンタを設けることとする。
【００５７】
第４の処理「データの補正範囲の決定」では、図８に示す補正対象情報１１３に基づいて、各データの補正範囲を決定する。
図８に示すように、補正対象情報１１３は、データ１１３１と、カウント数１１３２、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５および非必須時影響フラグ１１３６とが関連付けられている。なお、前記各フラグは、不整合判定部１２２によって設定される。
【００５８】
データ１１３１は、ノード（テーブル）単位で、探索対象となる１以上のデータを格納する。図８では、ｍ個のデータ（ｍ≧１）があることを表している。
カウント数１１３２は、カウンタによってカウントされら被参照数である。
必須時判定フラグ１１３３は、探索時に参照先のデータが存在せず、かつ参照先のデータが参照元にとって必須である場合に設定される。必須時判定フラグ１１３３は、参照元のデータ削除が必要か否かについて、作業者（オペレータ）の判定が必要となる場合に設定される（フラグが立てられる）。
【００５９】
非必須時判定フラグ１１３４は、探索時に参照先のデータが存在せず、かつ参照先のデータが参照元にとって必須でない場合に設定される。非必須時判定フラグ１１３４は、参照先のデータへのリンク補正が必要か否かについて、作業者（オペレータ）の判定が必要となるデータの場合に設定される（フラグが立てられる）。
【００６０】
必須時影響フラグ１１３５は、探索時に参照先のデータに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されており、かつ、参照先のデータが参照元にとって必須である場合に設定される（フラグが立てられる）。参照先のデータに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されている場合、作業者（オペレータ）の判断によっては参照先のデータが削除されてしまうことが想定される。この場合、削除された参照先のデータは参照元にとっては必須であったため、参照元のデータは削除されるべきと判定される。そのため、作業者（オペレータ）が参照先のデータを削除すると判定した場合、参照元のデータも削除が必要となることを示すため、参照元のデータに必須時影響フラグ１１３５が設定されることになる。
【００６１】
非必須時影響フラグ１１３６は、探索時に参照先のデータに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されており、かつ、参照先のデータが参照元にとって必須でない場合に設定される（フラグが立てられる）。参照先のデータに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されている場合、作業者（オペレータ）の判断によっては参照先のデータが削除されてしまうことが想定される。この場合、参照先のデータは参照元にとっては必須でないので、リンクの補正を促すのが正しいと判定される。そのため、作業者（オペレータ）が参照先のデータを削除すると判定した場合、リンクの削除が必要となることを示すため、参照元のデータに非必須時影響フラグ１１３６が設定されることになる。
【００６２】
次に、第４の処理の具体例として、データＡとデータＢとの間にリンクが存在している場合において、ケース１（データＢが必須であるのにデータＢが存在しない場合）、ケース２（データＢへのリンクがあるのに、データＢが存在しない場合）、について説明する。また、データＡとデータＢとの間およびデータＢとデータＣとの間にリンクが存在している場合において、ケース３（データＢは必須であるが、データＢに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されている場合）、ケース４（データＢへのリンクがあり、データＢに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されている場合）について、説明する。
【００６３】
不整合判定部１２２は、参照先のデータが参照できない場合、必須時判定フラグ１１３３、非必須時判定フラグ１１３４を参照元に設定し、補正の可能性のあるデータを管理する。また、不整合判定部１２２は、参照先のデータに、必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されている場合、補正が必要な可能性のあるデータであることを示すために、必須時影響フラグ１１３５または非必須時影響フラグ１１３６を設定する。
【００６４】
ケース１は、図９（ａ）に示すように、データＡとデータＢとの間にリンクが存在している場合において、探索時に参照先のデータＢが参照元（データＡ）にとって必須であるのに、参照先のデータＢが存在しない状態を表している。この場合、データＡが作業者（オペレータ）による削除の判定が必要なデータであることを示すため、不整合判定部１２２によってデータＡには必須時判定フラグ１１３３にフラグが立てられる。必須である参照先のデータＢが無い場合、補正方法としては、データＢが存在するのが本来であるとき参照先のデータＢを改めて設定する（図９（ｂ）の補正方法１−１）、または、データＢが存在しないのが本来であるとき、データＡも存在しないのが本来となるためデータＡを削除する（図９（ｃ）の補正方法１−２）、のいずれかとなる。
したがって、作業者（オペレータ）への通知例は、図９（ｄ）に示すように、「データＡの参照先であるデータＢがありません。データＡを削除するか、データＢを再投入してください。」となる。なお、データＡを削除する場合には、データＢへのリンクも消滅することになる。
【００６５】
ケース２は、図１０（ａ）に示すように、データＡとデータＢとの間にリンクが存在している場合において、探索時に参照先のデータＢへのリンクがあるのに（データＢが必須でなく）、参照先のデータＢが存在しない状態を表している。この場合、データＡが作業者（オペレータ）による補正が必要なデータであることを示すため、不整合判定部１２２によってデータＡには非必須時判定フラグ１１３４にフラグが立てられる。参照先のデータＢが必須でなく、かつ存在しない場合、補正方法としては、データＢが存在するのが本来であるとき参照先のデータＢを再設定する（図１０（ｂ）の補正方法２−１）、または、データＢが存在しないのが本来であるときデータＢへのリンクが誤りと判定できるのでリンクの削除を促す（非参照に補正する）（図１０（ｃ）の補正方法２−２）、のいずれかとなる。なお、図１０（ｃ）において、「field6」には二重取り消し線が付されているのは、非参照にすることを表している。ここで、非参照にするとは、当該データに値が入っていない状態（または、NULLが設定された状態）を表している。
したがって、作業者（オペレータ）への通知例は、図１０（ｄ）に示すように、「データＡの参照先であるデータＢがありません。データＡのデータＢへのリンクを削除するか、データＢを再投入してください。」となる。
【００６６】
ケース３は、図１１（ａ）に示すように、データＡとデータＢとの間およびデータＢとデータＣとの間にリンクが存在している場合において、データＢは必須であるが、データＣが存在しないため、データＢには、必須時判定フラグ１１３３または必須時影響フラグ１１３５が立っている状態を表している。この場合、データＡが作業者（オペレータ）による削除の判定が必要なデータであることを示すため、不整合判定部１２２によってデータＡには必須時影響フラグ１１３５にフラグが立てられる。
補正方法としては、データＢが削除されるとき、データＡも削除する（図１１（ｂ）の補正方法３）ことになる。
したがって、作業者（オペレータ）への通知例は、図１１（ｃ）に示すように、「データＡの参照先であるデータＢが削除される可能性があります。データＢを削除する場合は、データＡも削除してください。」となる。なお、データＡを削除する場合には、データＢへのリンクも消滅することになる。
【００６７】
ケース４は、図１２（ａ）に示すように、データＢが必須でなく、かつデータＣが必須の場合において、データＣが存在しないため、データＢには、必須時判定フラグ１１３３または必須時影響フラグ１１３５が立っている状態を表している。この場合、データＡが作業者（オペレータ）による削除の判定が必要なデータであることを示すため、不整合判定部１２２によってデータＡには非必須時影響フラグ１１３６にフラグが立てられる。
補正方法としては、データＢが削除されるとき、データＡとデータＢとの間のリンクを削除する（図１２（ｂ）の補正方法４）ことになる。
したがって、作業者（オペレータ）への通知例は、図１２（ｃ）に示すように、「データＡの参照先であるデータＢが削除される可能性があります。データＢを削除する場合は、データＡのデータＢへのリンクを削除してください。」となる。
【００６８】
不整合判定部１２２は、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５および非必須時影響フラグ１１３６の設定されたデータを探索し、不整合の状態について、前記した通知例を、出力処理部１３０経由で、表示装置１４０に出力し、作業者（オペレータ）に通知する。
また、データ補正部１２３は、通知を受信した作業者（オペレータ）による入力指示を、不図示の入力装置を介して受け付け、データの再設定や削除、リンクの削除等の補正を実行する。
このようにして、データの欠けが補正される。
【００６９】
データの浮きについては、図１３（ａ）に示すように、どこからも参照されていないと、カウント数が０（すなわち、初期設定のまま）となる。そのため、不整合判定部１２２は、カウント数が０のデータを抽出し、抽出した情報をデータの浮きとして出力処理部１３０経由で、表示装置１４０に出力し、作業者（オペレータ）に通知する。作業者（オペレータ）への通知例は、図１３（ｂ）に示すように、「データＡはどのデータからも参照されていないデータです。データＡが不要なデータの場合は削除してください。」となる。
そして、データ補正部１２３は、通知を受信した作業者（オペレータ）による入力指示を、不図示の入力装置を介して受け付け、浮きとなったデータの削除を実行する。
【００７０】
ここで、データ不整合検出装置１００の処理フロー例について、図１４を用いて説明する。
ステップＳ１４０１では、探索順判定部１２１は、データ定義情報１１１を参照し、データをノードとし、データ間の参照関係をリンクとして表すツリーの探索順を設定する。そして、探索順判定部１２１は、設定結果を探索順情報１１２として記憶部１１０に記憶する。
【００７１】
ステップＳ１４０２では、不整合判定部１２２は、データ定義情報１１１および探索順情報１１２を参照し、ツリーの葉ノードから探索順を逆に辿ることによって不整合を検出する。
ステップＳ１４０３では、不整合判定部１２２は、不整合を検出したとき、ノードを削除する必要があるか否か、リンクを削除する必要があるか否か、のいずれか一方または双方について判定する。
【００７２】
ステップＳ１４０４では、データ補正部１２３は、不整合判定部１２２の判定結果に基づいて、データの再設定もしくは削除またはリンクの削除を実行する。
【００７３】
次に、データの欠けおよびデータの浮きを探索するための処理フロー例について、図１５を用いて説明する。
ステップＳ１５０１では、不整合判定部１２２は、カウント数を初期化する。具体的には、不整合判定部１２２は、カウント数を０に設定する。
ステップＳ１５０２では、不整合判定部１２２は、探索対象となるデータのフィールド定義情報１１５および補正対象情報１１３を取得する。
【００７４】
ステップＳ１５０３では、不整合判定部１２２は、参照先のデータが参照可能か否かを判定する。参照可能と判定した場合（ステップＳ１５０３でＹｅｓ）、処理はステップＳ１５０４へ進み、参照可能でないと判定した場合（ステップＳ１５０３でＮｏ）、処理はステップＳ１５０６へ進む。
【００７５】
ステップＳ１５０４では、不整合判定部１２２は、参照先のデータに必須時判定フラグ１１３３または必須時影響フラグ１１３５が設定されているか否かを判定する。設定されていると判定した場合（ステップＳ１５０４でＹｅｓ）、処理はステップＳ１５０６へ進み、設定されていないと判定した場合（ステップＳ１５０４でＮｏ）、処理はステップＳ１５０５へ進む。
【００７６】
ステップＳ１５０５では、不整合判定部１２２は、データの参照関係は整合していると判定し、カウント数を増加する。具体的には、不整合判定部１２２は、カウント数を１増加する。
【００７７】
ステップＳ１５０６では、不整合判定部１２２は、第４の処理を実行し、補正範囲を作業者（オペレータ）に通知する。
【００７８】
以上、本実施形態のデータ不整合検出装置１００は、データごとに、そのデータが他のデータを参照するための情報である参照先を示す参照先情報１１５２および参照先のデータが必須か否かを示す参照状況情報１１５３を関連付けて記憶しているデータ定義情報１１１を記憶している記憶部１１０と、データ定義情報１１１を参照し、データをノードとし、データ間の参照関係をリンクとして表すツリーの探索順を設定し、設定結果を探索順情報１１２として記憶部１１０に記憶する探索順判定部１２１と、データ定義情報１１１および探索順情報１１２を参照し、ツリーの葉ノードから探索順を逆に辿ることによって、不整合（データの浮きやデータの欠け）を検出し、ノードを削除する必要があるか否かやリンクに補正がいるか否かについて判定する不整合判定部１２２と、を備える。なお、探索順情報１１２には、ＤＡＧの場合のツリー、参照関係がループの場合のツリー、ツリーのrootが複数の場合のツリーが含まれる。また、データ不整合検出装置１００は、必須時判定フラグ１１３３、非必須時判定フラグ１１３４、必須時影響フラグ１１３５および非必須時影響フラグ１１３６を用いて、補正範囲を作業者（オペレータ）に通知することができる。
【符号の説明】
【００７９】
１００  データ不整合検出装置
１１０  記憶部
１１１  データ定義情報
１１２  探索順情報
１１３  補正対象情報
１１５  フィールド定義情報
１２０  処理部
１２１  探索順判定部
１２２  不整合判定部
１２３  データ補正部
１２４  統合制御部
１１５１  フィールド属性
１１５２  参照先情報
１１５３  参照状況情報
１１３２  カウント数
１１３３  必須時判定フラグ
１１３４  非必須時判定フラグ
１１３５  必須時影響フラグ
１１３６  非必須時影響フラグ
【図１】
2016099961.tif 000003
【図２】
2016099961.tif 000004
【図３】
2016099961.tif 000005
【図４】
2016099961.tif 000006
【図５】
2016099961.tif 000007
【図６】
2016099961.tif 000008
【図７】
2016099961.tif 000009
【図８】
2016099961.tif 000010
【図９】
2016099961.tif 000011
【図１０】
2016099961.tif 000012
【図１１】
2016099961.tif 000013
【図１２】
2016099961.tif 000014
【図１３】
2016099961.tif 000015
【図１４】
2016099961.tif 000016
【図１５】
2016099961.tif 000017