(57)【要約】【課題】リレーショナルデータベースのテーブルの関係をデータの出現関係に着目して、直感的に把握しやすくする。【解決手段】リレーショナルデータベースのテーブル間の特定のカラム（外部キー）におけるデータの関係を解析するテーブル関係解析支援装置であって、テーブル間の関係を解析し、テーブルのデータの関係が一対一関係、多対一関係にあるテーブルを一つのテーブル群として定義するテーブル間関係分析情報を保持し、分析結果表示部は、リレーショナルデータベースの一つ以上のテーブルをテーブル群として縮約した形式で表示する。また、テーブル群の表示が、含まれるテーブル間のデータの関係が一対一関係、多対一関係のいずれにあるかを視認できる形式で表示する。さらに、テーブル群の表示形式として、テーブル間を結ぶグラフ形式で表示する。【選択図】  図１８
2019066924.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースのテーブル間の特定のカラムにおけるデータの関係を解析するテーブル関係解析支援装置であって、
テーブルのデータの関係が一対一関係、多対一関係にあるテーブルを一つのテーブル群として定義するテーブル間関係分析情報と、
テーブル間関係情報から、一対一関係にあるテーブルをテーブル群としてまとめた前記テーブル間関係分析情報を出力する一対一関係の畳み込み部と、
多対一関係をもつテーブルをテーブル群としてまとめることにより、前記テーブル間関係分析情報を更新する多対一関係の畳み込み部と、
前記テーブル間関係分析情報の内容を表示する分析結果表示部とを有し、
前記分析結果表示部は、リレーショナルデータベースの一つ以上のテーブルをテーブル群として縮約した形式で表示することを特徴とするテーブル関係解析支援装置。
【請求項２】
前記分析結果表示部は、前記テーブル群の表示が、含まれるテーブル間のデータの関係が一対一関係、多対一関係のいずれにあるかを視認できる形式で表示することを特徴とする請求項１記載のテーブル関係解析支援装置。
【請求項３】
前記テーブル群の表示形式が、テーブル間を結ぶグラフ形式で表示することを特徴とする請求項２記載のテーブル関係解析支援装置。
【請求項４】
さらに、テーブル間関係情報から、多対多関係にあるテーブルをテーブル群としてまとめて、他のテーブル群から取り出して、前記テーブル間関係分析情報を更新する多対多関係の切断部を有し、
前記分析結果表示部は、多対多関係にあるテーブルのテーブル群を他のテーブル群と切り離した形式で表示することを特徴する請求項１記載のテーブル関係解析支援装置。
【請求項５】
前記リレーショナルデータベースのテーブル間の特定のカラムにおけるデータの関係が多対一関係であるとき、テーブルの多対一関係を有向線分で表現したときに、テーブルをノードとする閉路を構成するときに、その閉路をなすテーブルをテーブル群として他のテーブル群から切り離して、前記テーブル間関係分析情報を更新する閉路分割部を有し、
前記分析結果表示部は、閉路をなすテーブルのテーブル群を他のテーブル群と切り離した形式で表示することを特徴する請求項１記載のテーブル関係解析支援装置。
【請求項６】
前記分析結果表示部は、テーブル群間で共有するテーブルがあるときに、テーブルの共有関係を表示することを特徴とする請求項１記載のテーブル関係解析支援装置。
【請求項７】
前記データの関係を解析する特定のカラムは、リレーショナルデータベースのテーブルの外部キーであることを特徴とする請求項１記載のテーブル関係解析支援装置。
【請求項８】
さらに、リレーショナルデータベースのテーブル間の特定のカラムにおけるデータの関係が、一対一関係、多対一関係、多対多関係のいずれかであるかを解析して、テーブル間関係情報を出力するテーブル間関係抽出部を有することを特徴とする請求項１記載のテーブル関係解析支援装置。
【請求項９】
リレーショナルデータベースのテーブル間の特定のカラムにおけるデータの関係を解析するテーブル関係解析支援方法であって、
テーブルのデータの関係が一対一関係、多対一関係にあるテーブルを一つのテーブル群として定義するテーブル間関係分析情報について、
テーブル間関係情報から、一対一関係にあるテーブルをテーブル群としてまとめて、前記テーブル間関係分析情報を更新するステップと、
多対一関係をもつテーブルをテーブル群としてまとめることにより、前記テーブル間関係分析情報を更新するステップと、
前記テーブル間関係分析情報の内容を表示するステップとを有し、
前記テーブル間関係分析情報の内容を表示するステップは、リレーショナルデータベースの一つ以上のテーブルをテーブル群として縮約した形式で表示することを特徴とするテーブル関係解析支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テーブル関係解析支援装置、および、テーブル関係解析支援方法に係り、特に、リレーショナルデータベースのテーブル間の関係を解析するのに好適なテーブル関係解析支援装置、および、テーブル関係解析支援方法に関する。
【背景技術】
【０００２】
システムの保守やリプレース開発を行う際、対象システムで利用するデータの関係を把握することが重要となる。コンピュータによりデータの検索、解析のためにデータベースシステムが従来より利用されている。特に、関係モデルにより設計、開発がされるリレーショナルデータベース（Relational DataBase：関係データベース）がデータベースの主流となっている。リレーショナルデータベースでは、種々のデータがテーブルに含まれており、テーブル間の関係を把握することが、データの関係の把握につながる。一般に、多数のテーブルが存在するシステムでは、テーブル間の関係が複雑になり、理解が困難となる。そこで、複数のテーブルを集合にまとめて提示できれば、一度に理解すべき関係が削減できるため、テーブル間の関係の理解が容易になり、結果として、データの関係の把握が容易になる。例えば、特許文献１には、階層的にまとめることにより、テーブルを分類し、データベースの統合を容易にするテーブル分類方法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−３９５９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記従来技術の特許文献１に記載された技術では、リレーショナルデータベースを利用している複数のシステムを統合する際に、各システムに存在する類似のテーブルをまとめることを目的としている。この特許文献１に記載された技術では、テーブル内のカラムの出現順序、出現位置、および、類似カラムの出現数に着目している。しかしながら、一般に、リレーショナルデータベースでは、カラムの位置や順序には制約が無いため、この技術を有向に活用できない場合がある。また、単一のシステムを適用対象とする場合、正規化の実施などにより、類似カラムが多数出現することは少なく、カラムの出現数に着目してテーブルをまとめることは難しい。
【０００５】
本発明の目的は、リレーショナルデータベースのテーブルの関係をデータの出現関係に着目して、直感的に把握しやすくするテーブル関係解析支援装置を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のテーブル関係解析支援装置の構成は、好ましくは、リレーショナルデータベースのテーブル間の特定のカラムにおけるデータの関係を解析するテーブル関係解析支援装置であって、テーブルのデータの関係が一対一関係、多対一関係にあるテーブルを一つのテーブル群として定義するテーブル間関係分析情報と、テーブル間関係情報から、一対一関係にあるテーブルをテーブル群としてまとめたテーブル間関係分析情報を出力する一対一関係の畳み込み部と、多対一関係をもつテーブルをテーブル群としてまとめることにより、テーブル間関係分析情報を更新する多対一関係の畳み込み部と、テーブル間関係分析情報の内容を表示する分析結果表示部とを有し、分析結果表示部は、リレーショナルデータベースの一つ以上のテーブルをテーブル群として縮約した形式で表示するようにしたものである。
【発明の効果】
【０００７】
本発明によれば、リレーショナルデータベースのテーブルの関係をデータの出現関係に着目して、直感的に把握しやすくするテーブル関係解析支援装置を提供することができる。
【図面の簡単な説明】
【０００８】
【図１】実施形態１のテーブル関係解析支援装置の機能構成を示す図である。
【図２】実施形態１のテーブル関係解析支援装置のハードウェア・ソフトウェア構成を示す図である。
【図３】一対一関係の畳み込み部２０１の処理を示すフローチャートである。
【図４】多対一関係の畳み込み部２０３の処理を示すフローチャートである。
【図５】実施形態１のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その一）。
【図６】実施形態１のテーブル群間関係表の一例を示す図である（その一）。
【図７】割付表の一例を示す図である（その一）。
【図８】実施形態１のテーブル群間関係表の一例を示す図である（その二）。
【図９】実施形態１のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その二）。
【図１０】実施形態１のテーブル群間関係表の一例を示す図である（その三）。
【図１１】実施形態１の割付表の一例を示す図である（その二）。
【図１２】実施形態１のテーブル群間関係表の一例を示す図である（その四）。
【図１３】実施形態１のテーブル群間関係表の一例を示す図である（その五）。
【図１４】実施形態１の割付表の一例を示す図である（その三）。
【図１５】実施形態１のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その三）。
【図１６】実施形態１のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その四）。
【図１７】実施形態１の割付表の一例を示す図である（その四）。
【図１８】実施形態１のテーブル関係解析支援装置の解析結果の表示画面の一例を示す図である。
【図１９】実施形態２のテーブル関係解析支援装置の機能構成を示す図である。
【図２０】実施形態２のテーブル関係解析支援装置のハードウェア・ソフトウェア構成を示す図である。
【図２１】テーブル間関係抽出部１９０１の処理を示すフローチャートである。
【図２２】多対多関係の切断部１９０３の処理を示すフローチャートである。
【図２３】閉路分割部１９０７の処理を示すフローチャートである。
【図２４】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その一）。
【図２５】実施形態２のテーブル間関係情報の一例を示す図である。
【図２６】多対多関係切断済みテーブル間関係情報の一例を示す図である。
【図２７】多対多関係テーブルリストの一例を示す図である。
【図２８】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その二）。
【図２９】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その三）。
【図３０】実施形態２のテーブル群間関係表の一例を示す図である（その一）。
【図３１】実施形態２の割付表の一例を示す図である（その一）。
【図３２】実施形態２の割付表の一例を示す図である（その二）。
【図３３】実施形態２のテーブル群間関係表の一例を示す図である（その二）。
【図３４】実施形態２のテーブル群間関係表の一例を示す図である（その三）。
【図３５】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その四）。
【図３６】実施形態２の割付表の一例を示す図である（その三）。
【図３７】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その五）。
【図３８】実施形態２の割付表の一例を示す図である（その四）。
【図３９】実施形態２のリレーショナルデータベースのテーブル間の関係を示すダイヤグラムである（その六）。
【図４０】実施形態２のテーブル関係解析支援装置の解析結果の表示画面の一例を示す図である（その一）。
【図４１】実施形態２のテーブル関係解析支援装置の解析結果の表示画面の一例を示す図である（その二）。
【図４２】従業員ＩＤテーブルを示す図である。
【図４３】従業員プロファイルテーブルを示す図である。
【図４４】従業員給与テーブルを示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明に係る各実施形態を、図１ないし図４４を用いて説明する。
【００１０】
〔テーブルの関係について〕
先ず、図４２ないし図４４を用いて本実施形態でテーブル関係解析の着目点となるテーブルの対応について説明する。
図４２ないし図４４は、そのために例示とするテーブルである。
【００１１】
リレーショナルデータベースの基礎となるのは、名称がつけられたカラム（縦欄）と、その値を埋めるレコード（横）からなるテーブルである。複数のテーブルは、参照整合性を保障する外部キー（ＦＫ）によって、論理的に結びついている。
【００１２】
図４２に示す従業員ＩＤテーブル２０は、従業員ＩＤを格納するためのテーブルである。図４３に示す従業員プロファイルテーブル２１は、氏名、住所などの各々の従業員プロファイルを格納するためのテーブルである。図４３に示す従業員プロファイルテーブル２１は、氏名、住所などの各々の従業員プロファイルを格納するためのテーブルである。図４４に示す従業員給与テーブル２２は、各々の従業員の月ごとの給与を格納するためのテーブルである。この三つのテーブルは、外部キーとして従業員ＩＤにより論理的に結びついている。例えば、従業員ＩＤ「ｅ００１」の従業員の氏名が「山〇〇男」で、支払い月「２０１７年１月」の給与が「２５３，５００円」であることが分かる。
【００１３】
ところで、外部キーとなるカラムの従業員ＩＤのデータの出現について着目すると、従業員ＩＤテーブル２０と従業員プロファイルテーブル２１は、一対一の関係がある。本実施形態では、これを各々のテーブルが「一対一関係」を有するということにする。
【００１４】
また、従業員ＩＤのデータの出現について、従業員ＩＤテーブル２０と従業員給与テーブル２２は、従業員ＩＤテーブル２０を元テーブルとみなし、従業員給与テーブル２２を先テーブルとみなすと、一対多の関係がある。本実施形態では、これを、元テーブルの従業員ＩＤテーブル２０と、先テーブルの従業員給与テーブル２２が「一対多関係」を有するということにする。
【００１５】
逆に、従業員給与テーブル２２を元テーブルとみなし、従業員ＩＤテーブル２０を先テーブルとみなすと、多対一の関係があり、この場合には、元テーブルの従業員給与テーブル２２と、先テーブルの従業員ＩＤテーブル２０が「多対一関係」を有するということにする。
【００１６】
さらに、特に、示さなかったが、二つのテーブルの外部キーのカラムのデータが多対多になっているときには、その二つのテーブルは、「多対多関係」を有するということにする。
【００１７】
〔実施形態１〕
以下、図１ないし図１８を用いて本発明の実施形態１について説明する。
先ず、図１および図２を用いて実施形態１のテーブル関係解析支援装置の構成について説明する。
【００１８】
テーブル関係解析支援装置１００は、一対一関係の畳み込み部２０１と、多対一関係の畳み込み部２０３と、分析結果表示部２０４の各機能部からなる。
【００１９】
一対一関係の畳み込み部２０１は、テーブル間関係情報２００を入力としテーブル間関係分析情報２０２を出力する。テーブル間関係情報２００は、リレーショナルデータベースのテーブル間の対応関係の情報である。テーブル間関係分析情報２０２は、テーブル間関係情報に基づいて、対応関係にあるテーブルをテーブル群としてまとめた情報である。なお、テーブル間関係情報２００とテーブル間関係分析情報２０２の具体例は、後述する。
【００２０】
多対一関係の畳み込み部２０３は、テーブル間関係分析情報２０２を入力とし、多対一関係をもつテーブルをテーブル群としてまとめることにより、テーブル間関係分析情報２０２を更新する。
【００２１】
分析結果表示部２０４は、テーブル間関係情報２００と、テーブル間関係分析情報２０２を、ユーザに視認できる形式により、ディスプレイなどの表示装置１２０に表示する。
【００２２】
テーブル関係解析支援装置１００は、一般的な情報処理装置により構成され、図１に示されるように、ＣＰＵ（Central Processing Unit）１１０と、表示装置１２０と、主メモリ１３０と、入力装置１４０と、外部記憶装置１５０と、ネットワーク通信装置１６０を有する。
【００２３】
ＣＰＵ１１０と、表示装置１２０と、主メモリ１３０と、入力装置１４０と、外部記憶装置１５０と、ネットワーク通信装置１６０は、バス１７０を通じて接続されており、データの送受信が可能である。
ＣＰＵ１１０は、外部記憶装置１５０から主メモリ１３０にロードされたプログラム、データを実行し、テーブル関係解析支援装置１００の各部を制御する。
【００２４】
外部記憶装置１５０は、ＨＤＤ（Hard Disk Drive）やＳＤＤ（Solid State Drive）等のような大容量の記憶装置である。外部記憶装置１５０には、テーブル関係解析支援プログラム１５１が、インストールされ、テーブル間関係情報２００やテーブル間関係分析情報２０２が格納されている。
【００２５】
テーブル関係解析支援プログラム１５１は、サブプログラムとして、一対一関係の畳み込みモジュール１５１ａ、多対一関係の畳み込みモジュール１５１ｂ、分析結果表示モジュール１５１ｃからなる。
【００２６】
一対一関係の畳み込みモジュール１５１ａ、多対一関係の畳み込みモジュール１５１ｂ、分析結果表示モジュール１５１ｃは、それぞれ、一対一関係の畳み込み部２０１、多対一関係の畳み込み部２０３、分析結果表示部２０４の各機能部の機能を実行するモジュールである。ＣＰＵ１１０は、外部記憶装置１５０から主メモリ１３０にロードされたこれらのモジュールを実行する。
【００２７】
実施形態１では、図１に示したように、テーブル関係解析支援装置１００は、一対一関係の畳み込み部２０１、多対一関係の畳み込み部２０３、分析結果表示部２０４の順で、各機能部を呼び出し、処理を実行する。
【００２８】
一対一関係の畳み込み部２０１は、テーブル間関係情報２００を入力とし、テーブル間関係分析情報２０２を出力する。テーブル間関係情報２００は、少なくとも、リレーショナルデータベースのテーブル間のカーディナリティ情報を含んでいる。最初に例示したように、カーディナリティ情報とは、お互いのテーブルで着目したカラムのデータの結びつきを示した情報であり、少なくとも、基点となる元テーブル、対象となる先テーブル、および、一対一関係、一対多関係、多対一関係、多対多関係のいずれかで表される関係を含む。テーブル間関係分析情報２０２は、テーブル群間関係表３２０と割付表３２１からなる。テーブル群間関係表３２０は、テーブルの関係を表す表であり、テーブル群について、少なくとも、基点となる元テーブル群６０１、対象となる先テーブル群６０２、その関係６０３を含む表である（具体例は、後述）。テーブル群は、一つ以上のテーブルかテーブル群をひとつにまとめたものであり、その中の一つを代表テーブル群とする。
【００２９】
なお、本実施形態では、テーブル群を識別するために様々な命名規則を用いているが、各テーブル群を識別可能であれば、特にこの命名規則にこだわる必要はない。割付表３２１は、テーブルをテーブル群としてまとめるための計算テーブルであり、少なくとも、各情報を識別するＩＤ７００、テーブル群７０１、割付番号７０２を含む表である（具体例は、後述）。
【００３０】
多対一関係の畳み込み部２０３は、多対一関係のテーブルをテーブル群としてテーブル間関係分析情報２０２を更新する。
【００３１】
分析結果表示部２０４は、テーブル間関係情報２００や分析済みのテーブル間関係分析情報２０２を編集して、表示装置１２０にグラフィカルに出力する（表示の具体例は、後述）。
【００３２】
次に、図３および図４を用いてテーブル関係解析支援装置における各処理について説明する。
テーブル関係解析支援装置１００の実施形態１では、一対一関係の畳み込み部２０１、多対一関係の畳み込み部２０３、分析結果表示部２０４の順で、各機能部を呼び出す。
【００３３】
先ず、図３を用いて一対一関係の畳み込み部２０１の処理について説明する。
先ず、一対一関係の畳み込み部２０１では、テーブル間関係情報２００を入力として取得し、各テーブルを一つのテーブルからなるテーブル群とみなし、テーブル群間関係表３２０を作成する（Ｓ３０１）。
【００３４】
次に、テーブル群間関係表３２０に含まれる全てのテーブル群を、空の割付表３２１に追加する（Ｓ３０２）。この際、割付番７０２は、未割付状態がわかるようにする（本実施形態では、空欄とした。具体例は、後述）。
【００３５】
次に、テーブル群間関係表３２０を入力とし、テーブル群間の関係が一対一関係であるテーブル群の組を取得する（Ｓ３０３）。
以下、☆：Ｓ３０４〜Ｓ３０６を、Ｓ３０３で取得したテーブル群の組に含まれる全てのテーブル群について繰り返す。
【００３６】
取得したテーブル群の組に含まれる一対一関係のテーブル群Ｔｉ毎に（Ｓ３０４）、Ｔｉから一対一関係のみで到達可能なテーブル群を全て取得し、新たなテーブル群を作成する（Ｓ３０５）。なお、着目したテーブル群から、一対一関係のみで到達可能なテーブル群を取得するアルゴリズムは、公知のものを採用することができる。
【００３７】
次に、Ｓ３０５で作成した複数の新たなテーブル群から、重複するテーブル群を取り除く（Ｓ３０７）。
【００３８】
次に、テーブル群間関係表３２０とＳ３０７後に残った新たなテーブル群を入力とし、テーブル群間関係表３２０を更新する（Ｓ３０８）。Ｓ３０８では、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２の中で、Ｓ３０７後に残った新たなテーブル群に含まれるテーブルを含むテーブル群を、そのテーブルを含むＳ３０７後に残った新たなテーブル群で置き換える。
【００３９】
次に、テーブル群間関係表３２０の中で、元テーブル群６０１と先テーブル群６０２が同じ行を削除し、テーブル群間関係表３２０を更新する（Ｓ３０９）。
以下、★：Ｓ３１０〜Ｓ３１３を、Ｓ３０７後に残った新たなテーブル群について繰り返す。
【００４０】
先ず、作成したテーブル群Ｇ毎に（Ｓ３１０）、作成したテーブル群Ｇを、ＩＤ７００を採番した上で、割付表３２１に追加する（Ｓ３１１）。そして、Ｓ３１０で着目したテーブル群に含まれるテーブル群について、割付表３２１の割付番号７０２に、Ｓ３１１で採番したＩＤ７００を記載し、割付表３２１を更新する（Ｓ３１２）。
【００４１】
次に、図４を用いて、多対一関係の畳み込み部２０３の処理について説明する。
以下、テーブル群間関係表３２０の関係６０３に一対多が存在する間、◆：Ｓ４０１〜Ｓ４１２を繰り返す。
【００４２】
テーブル群間関係表３２０から、元テーブル群６０１に含まれるテーブル群を取得する（Ｓ４０２）。
以下、☆：Ｓ４０３〜Ｓ４１１を、Ｓ４０２で取得したテーブル群Ｔｓについて繰り返す。
【００４３】
テーブル群間関係表３２０から、Ｓ４０３で取得したテーブル群を、元テーブル群６０１とする行を取得し、その全ての関係６０３が一対一か一対多であるかを判別する（Ｓ４０４）。
【００４４】
全ての関係６０３が一対一か一対多である場合は（Ｓ４０４：ＹＥＳ）、Ｓ４０５を実行し、そうでない場合は（Ｓ４０４：ＮＯ）、Ｓ４１１を実行する。
以下、★：Ｓ４０５〜Ｓ４１０を、テーブル群間関係表３２０の元テーブル群６０１がＳ４０３で取得したテーブル群Ｔｓとなっている行の先テーブル群６０２Ｔｄについて繰り返す。
【００４５】
先ず、テーブル群間関係表３２０を更新する（Ｓ４０６）。このＳ４０６では、Ｓ４０５で取得したテーブル群Ｔｄを代表テーブル群とし、Ｓ４０３で取得したテーブル群Ｔｓを含む新たなテーブル群を作成し、テーブル群間関係表３２０の元テーブル群６０１および先テーブル群６０２に含まれるテーブル群の中で、Ｓ４０５で着目したテーブル群であるものを、新たなテーブル群Ｇで置き換える。
【００４６】
次に、テーブル群間関係表３２０から、元テーブル群６０１がＳ４０３で取得したテーブル群Ｔｓである行と、元テーブル群６０１と先テーブル群６０２が同じテーブル群を持つ行を削除し、テーブル群間関係表３２０を更新する（Ｓ４０７）。
【００４７】
次に、Ｓ４０６で新たに作成したテーブル群Ｇを、ＩＤ７００を採番した上で、割付表３２１に追加し、割付表３２１を更新する（Ｓ４０８）。
【００４８】
次に、Ｓ４０６で新たに作成したテーブル群Ｇに含まれるテーブル群について、割付表３２１の割付番号７０２に、Ｓ４０８で採番したＩＤ７００を追加し、割付表３２１を更新する（Ｓ４０９）。
【００４９】
次に、図５ないし図１８を用いて具体例に基づいたテーブル関係解析支援装置１００の動作を説明する。
【００５０】
以下では、テーブル関係解析支援装置１００が、図５のダイヤグラムに示されるような対応関係を有するテーブルの関係を解析して、ユーザに視認しやすい形式で表示するまでの動作について説明する。
【００５１】
テーブルは、テーブルＡ５００〜テーブルＧ５０６のような左と上を線で強調した正方形の図形で表すことにする。また線分は、テーブルやテーブル群間の関係が一対一であること、矢印はテーブルやテーブル群間の関係が多対一であることを表している。ここで、矢印の根元が、「多」であり、矢印の根元が「一」である。すなわち、多対一関係とは、特定のカラムについて、「矢印の先側のテーブルに含まれるある１データに対し、関連を持つデータが、矢印の元側のテーブルに複数存在する」と言う関係であることを示している。
【００５２】
先ず、図６ないし図１０を用いてこの例における一対一関係の畳み込み部２０１の動作を説明する。
【００５３】
図５に示されたテーブル関係は、図６のテーブル群間関係表３２０のように表現される。テーブル群間関係表３２０は、ＩＤ６００、元テーブル群６０１、先テーブル群６０２、関係６０３の各カラムよりなる。このテーブル群間関係表３２０は、図３のＳ３０１で参照されている。
【００５４】
テーブル群間関係表３２０のＩＤ６００は、各行を識別する番号である。元テーブル群６０１は、関係６０３の基点となるテーブル群を表している。また、先テーブル群６０２は、関係６０３の対象となるテーブル群を表している。ここで、カラムの名称がテーブル群となっているが、テーブルも一つのテーブル群とみなしてこのカラムに記述できるものとする。関係６０３は、元テーブル群６０１から見た先テーブル群６０２との関係、すなわち、一対一、一対多、多対一、多対多のいずれかの関係を表している。
【００５５】
割付表３２１は、テーブル関係をテーブル群としてまとめるために用いられワークテーブルであり、図７に示されるように、ＩＤ７００、テーブル群７０１、割付番号７０２の各カラムよりなる。
【００５６】
ＩＤ７００は、各行を識別する行番号である。テーブル群７０１は、まとめるためのテーブル群（または、テーブル）を表している。割付番号７０２は、当該行のテーブル群が、他のテーブル群７０１に含まれているか（割付済みか）否かを表しており、他のテーブル群７０１に含まれている場合は、割付番号７０２に、当該テーブル群７０１を含むテーブル群７０１のＩＤ７００を記載する。なお、一つのテーブル群（またはテーブル）が複数のテーブル群７０１に含まれる場合もありうる。最初のＳ３０２の時点では、テーブル群７０１に格納される値は、図５に示されたテーブル関係のテーブルが格納されており、割付番号７０２は空欄である。
【００５７】
Ｓ３０３では、テーブル群間関係表３２０から、関係６０３が一対一であるＩＤ６００が“１”，“２”，“７”，“８”の行を取得する。その後、テーブルＡ、テーブルＢ、テーブルＤ、テーブルＦを対象に、Ｓ３０４〜Ｓ３０６を繰り返す。Ｓ３０５では、例えばテーブルＡを対象とする時、一対一関係のみで到達可能なテーブル群（テーブル）にはテーブルＢが該当するため、新たなテーブル群Ａ−Ｂを作る。ここで、テーブル群Ｔ１−Ｔ２は、お互いに一対一関係にあるテーブルＴ１、テーブルＴ２からなるテーブル群を表すものとする。
【００５８】
なお、本実施形態では、新たなテーブル群Ａ−Ｂの代表テーブル群は、テーブルＡとテーブルＢを両方とも含むが、何れか一方のみを含むテーブル群を代表テーブルとしてもよい。例えば、テーブルＡとテーブルＢを比較すると、テーブル群Ａ−Ｂ以外と関係６０３を持つのはテーブル群Ｂであることから、テーブルＢのみを含むテーブル群を代表テーブル群としてもよい。Ｓ３０４〜Ｓ３０６を繰り返すことにより、新たなテーブル群として、テーブル群Ａ−Ｂ、テーブル群Ｄ−Ｆが、二つずつ得られる。その後、Ｓ３０７で、重複を排除し、テーブル群Ａ−Ｂ、テーブル群Ｄ−Ｆを、一つずつ得る。Ｓ３０８では、テーブル群間関係表３２０の元テーブル群６０１および先テーブル群６０２に含まれるテーブル群の中で、新たに作成したテーブル群Ａ−Ｂ、テーブル群Ｄ−Ｆに含まれるテーブル群であるテーブル群Ａ、テーブル群Ｂを、テーブル群Ａ−Ｂに、テーブル群Ｄ、テーブル群Ｆを、テーブル群Ｄ−Ｆに、それぞれ置き換える。
【００５９】
Ｓ３０８実施後のテーブル群間関係表３２０を表すと、図８に示されるようになる。Ｓ３０９では、図８のテーブル群間関係表３２０で取り消し線がついている行を削除する。
【００６０】
Ｓ３０５で新たに作成したテーブル群Ａ−Ｂとテーブル群Ｄ−Ｆを対象に、Ｓ３１０〜Ｓ３１３を繰り返す。Ｓ３１１では、Ｓ３１０で着目したテーブル群を、ＩＤ７００を採番した上で、割付表３２１に追加する。Ｓ３１２では、割付表３２１の割付番号７０２を更新する。更新対象のテーブル群７０１は、Ｓ３０５で新たに作成したテーブル群Ａ−Ｂとテーブル群Ｄ−Ｆに含まれるテーブルＡ、テーブルＢ、テーブルＤ、テーブルＦで、割付番号７０２に記載する番号は、テーブル群Ａ−Ｂやテーブル群Ｄ−ＦのＩＤ７００である。
【００６１】
この例における一対一関係の畳み込み部２０１完了時のテーブル間の関係を表すと、図９に示されるようになる。図９で新たに導入された角欠四角は、テーブル群を表す記号とする。テーブル群Ａ−Ｂ９００とテーブル群Ｄ−Ｆ９０１は、Ｓ３０５で新たに作成したテーブル群である。
【００６２】
また、この例における一対一関係の畳み込み部２０１完了時のテーブル群間関係表３２０を表すと、図１０に示されるようになる。このテーブル群間関係表３２０では、テーブルＡ、テーブルＢの値のカラムと、テーブルＤ、テーブルＦの値のカラムが消えて、新たに、テーブル群Ａ−Ｂ、テーブル群Ｄ−Ｆが表れている。なお、図１０の太字下線は、一対多関係であり、反射的な多対一関係のエントリがあることを示している。例えば、ＩＤが６のエントリとＩＤ５のエントリ、ＩＤが９のエントリとＩＤ１０のエントリが反射的な関係にある。
【００６３】
また、この例における一対一関係の畳み込み部２０１完了時の割付表３２１を表すと、図１１に示されるようになる。図７と比較すると、テーブル群Ａ−Ｂ（ＩＤ７００は“８”）とテーブル群Ｄ−Ｆ（ＩＤ７００は“９”）が増加し、テーブルＡ（ＩＤ７００は“１”）とテーブルＢ（ＩＤ７００は“２”）の割付番号７０２に“８”が記載されており、また、テーブルＤ（ＩＤ７００は“４”）とテーブルＦ（ＩＤ７００は“６”）の割付番号７０２に“９”が記載されている。
【００６４】
次に、図１２ないし図１７を用いてこの例における多対一関係の畳み込み部２０３の動作を説明する。
多対一関係の畳み込み部２０３開始時のテーブル群間関係表３２０は、一対一関係の畳み込み部２０１完了時の図１０で、割付表３２１は、図１１である。
【００６５】
テーブル群間関係表３２０の関係６０３に一対多が無くなるまで、Ｓ４０１〜Ｓ４１２を繰り返す。図１０のテーブル群間関係表には、一対多関係が含まれている（図１０中の太字下線）。
【００６６】
Ｓ４０２の処理では、テーブル群間関係表３２０を入力とし、元テーブル群６０１に含まれるテーブル群を取得する。本例では、テーブル群Ａ−Ｂ、テーブルＣ、テーブル群Ｄ−Ｆ、テーブルＥ、テーブルＧを取得する。そして、Ｓ４０２で取得したテーブル群を対象に、Ｓ４０３〜Ｓ４１１を繰り返す。Ｓ４０４の処理では、テーブル群間関係表３２０の元テーブル群６０１が、Ｓ４０３で取得したテーブル群となっている関係を全て取得し、その全てが、一対一か一対多関係であるかを評価する。本例では、テーブル群Ｄ−ＦとテーブルＧが、共に一対多関係のみを有している。テーブル群間関係表３２０の元テーブル群６０１がテーブル群Ｄ−Ｆとなっている行について、先テーブル群６０２を対象に、Ｓ４０５〜Ｓ４１０を繰り返す。本例では、テーブル群Ｃとテーブル群Ｅが該当する。テーブル群Ｃを対象にする場合は、Ｓ４０６の処理では、テーブルＣを代表テーブル群とし、テーブル群Ｄ−Ｆを含む、テーブル群Ｃ：Ｄ−Ｆを作成する。ここで、ＴＡ：ＴＢは、多対一関係にあるテーブル群（またはテーブル）ＴＡ、テーブル群（またはテーブル）ＴＢをまとめたテーブル群を表すものとする。
【００６７】
また、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２のテーブル群Ｃを、テーブル群Ｃ：Ｄ−Ｆで置き換える。テーブル群Ｅを対象にする場合は、Ｓ４０６では、テーブル群Ｅを代表テーブル群とし、テーブル群Ｄ−Ｆとテーブル群Ｇを含むテーブル群Ｅ：Ｄ−Ｆ，Ｇを作成する。ここで、テーブル群（またはテーブル）ＴＡ、テーブル群（またはテーブル）ＴＢ、テーブル群（またはテーブル）ＴＣに対して、ＴＡ：ＴＢ，ＴＣの表記は、ＴＡ：ＴＢとＴＡ：ＴＣをまとめた表記である。
また、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２のテーブル群Ｅを、テーブル群Ｅ：Ｄ−Ｆ，Ｇで置き換える。
【００６８】
Ｓ４０７の処理で削除対象とするテーブル群間関係表３２０を表すと、図１２に示されるようになる。Ｓ４０７では、テーブル群間関係表３２０から、元テーブル群６０１がテーブル群Ｄ−Ｆかテーブル群Ｇの行（図１２中の取り消し線）と、元テーブル群６０１と先テーブル群６０２が同じテーブル群を持つ行（図１２中の太字下線）を削除する。Ｓ４０８の処理では、Ｓ４０６で作成したテーブル群（テーブル群Ｃ：Ｄ−Ｆとテーブル群Ｅ：Ｄ−Ｆ，Ｇ）を、ＩＤ７００を採番した上で、割付表３２１に追加する。テーブル群Ｃ：Ｄ−Ｆの場合、Ｓ４０９の処理では、テーブル群Ｄ−Ｆ（ＩＤ７００は“９”）の割付番号７０２に“１０”を加え、テーブル群Ｃ（ＩＤ７００は“３”）の割付番号７０２に“１０”を加える。また、テーブル群Ｅ：Ｄ−Ｆ，Ｇの場合、Ｓ４０９では、テーブル群Ｄ−Ｆ（ＩＤ７００は“９”）の割付番号７０２に“１１”を加え、テーブル群Ｅ（ＩＤ７００は“５”）の割付番号７０２に“１１”を加える。
【００６９】
Ｓ４０１〜Ｓ４１２を１回完了した後のテーブル群間関係表３２０を表すと、図１３に示されるようになる。
【００７０】
次に、Ｓ４０１〜Ｓ４１２を１回完了した後の割付表３２１を表すと、図１４に示されるようになる。
【００７１】
また、Ｓ４０１〜Ｓ４１２を１回完了した後のテーブル間の関係を図示すると、図１５に示されるようなる。図示にあたっては、割付表３２１の割付番号７０２が空欄のテーブル群を表示対象とし、テーブル群間関係表３２０の関係６０３を利用して、テーブルおよびテーブル群間の関係を表す線を引く。なお、図１５中の点線四角１５００は、同一のテーブルまたはテーブル群を共有しているテーブル群を表している。ここでは、テーブル群Ｃ：Ｄ−Ｆ（１５０１）と、テーブル群Ｅ：Ｄ−Ｆ，Ｇ（１５０２）が、テーブル群Ｄ−Ｆを共有している。
【００７２】
図４に示される処理では、Ｓ４０１〜Ｓ４１２を１回完了すると、Ｓ４０１に戻り２回目のループに入る。
【００７３】
Ｓ４０１〜Ｓ４１２を２回完了した後のテーブル間の関係を図示すると、図１６に示されるようになる。
【００７４】
また、この時の割付表３２１を表すと、図１７に示されるようになる。Ｓ４０１〜Ｓ４１２を２回完了した時点で、テーブル群間関係表３２０は、全ての行が削除済みで、空の状態である。
【００７５】
この後、Ｓ４０１に戻るが、テーブル群間関係表３２０が空の状態であり、一対一や一対多関係は存在しないため、Ｓ４１３に移動し、多対一関係の畳み込み部２０３の処理を終了する。
【００７６】
次に、図１８を用いてテーブル関係解析支援装置の解析結果の表示画面を説明する。
未選択時の画面１８００を表すと、図１８（ａ）に示されるようになる。
図１８（ａ）に示される未選択時の画面１８００は、前述の例において分析が完了した後、テーブル間関係情報２００およびテーブル間関係分析情報２０２を、初期状態として、表示する。
【００７７】
解析結果の表示画面では、表示してあるテーブル群を一つ以上選択できるようにする。例えば、テーブル群Ａ−Ｂ：Ｃ，Ｄ−Ｆ（１６０１）を選択した場合には、図１８（ｂ）に示されるＡ−Ｂ：Ｃ，Ｄ−Ｆ選択時画面１８０１の様に表示し、テーブル群Ｅ：Ｄ−Ｆ，Ｇ（１６０２）を選択した場合には、図１８（ｃ）に示されるＥ：Ｄ−Ｆ，Ｇ選択時画面１８０２を表示する様にする。
【００７８】
Ａ−Ｂ：Ｃ，Ｄ−Ｆを選択した場合の例で、表示内容を説明する。選択したテーブル群Ａ−Ｂ：Ｃ，Ｄ−Ｆには、テーブルＡ５００〜テーブルＤ５０３、テーブルＦ５０５が含まれる。これらのテーブルを表示し、テーブル間関係情報２００に基づき、テーブル間に関係を表す線を引く。また、選択したテーブル群以外のテーブル群も表示する。さらに、表示した各テーブルが、その他のテーブル群に含まれる場合は、そのテーブル-テーブル群間にテーブルの共有関係を表す点線を引く。加えて、選択したテーブル群Ａ−Ｂ：Ｃ，Ｄ−Ｆの代表テーブル群であるテーブル群Ａ−Ｂに含まれるテーブルが分かる様に表示してもよい（図中では太字下線）。これは、例えば、テーブルＡに着目してその構造を調べた場合に有効な操作である。
【００７９】
他に、分析結果表示部２０４では、ユーザの操作やテーブル間の情報を入力とし、新たなテーブル群の作成や、既存のテーブル群の分割等が可能であってもよいし、また、ユーザの操作やテーブルの情報を入力とし、テーブルやそのテーブルを含むテーブル群を区別できるように表示する機能を有してもよい。前者の例として、既存のテーブル群を分割するために、テーブルの時系列的な更新順序に関する情報を入力とし、更新タイミングが異なるテーブルをテーブル群から除く方法などがある。後者の例として、テーブルのマスタテーブル／トランザクションテーブルの情報を入力とし、マスタテーブルを別の色で表示したり、グループ群外に切り出して表示したりすることで、データの変化が少なく、その理解が容易なマスタテーブルの情報を先に理解したうえで、トランザクションテーブルとの関係を把握できるようにする方法などがある。
【００８０】
さらに、分析結果表示部２０４は、一対一関係の畳み込み部２０１や多対一関係の畳み込み部２０３等、各機能の実行経過を表示する機能を有していてもよい。例えば、図１８（ｂ）に示されるＡ−Ｂ：Ｃ，Ｄ−Ｆ選択時画面１８０１において、一対一関係の畳み込み部２０１実行後の結果として、テーブルＡとテーブルＢ、テーブルＤとテーブルＦをまとめ、テーブル群Ａ−Ｂとテーブル群Ｄ−Ｆとして表示してもよく、それにより、より理解すべき対象となるテーブルおよびテーブル群を絞り込めるため、理解が容易になる。加えて、分析結果表示部２０４は、カーディナリティ情報以外のテーブル間の関係を入力とし、その関係が分かるように表示する機能を有していてもよい。例えば、テーブル間のＦＫに該当するデータの重複割合を入力とし、その割合に応じて関係６０３を表す線の太さを変えることによって、両テーブル間の等価／従属的な関係等の理解が容易になる。
【００８１】
なお、本実施形態に記載の方法では、テーブル間の関係に、多対多関係がある場合や、多対一関係によって構成された閉路がある場合は正しく動作しない。ただし、リレーショナルデータベースでは、正規化により多対多関係が存在しない様にすることが一般的である。同様に、多対一関係によって構成される閉路も、正規化により解消されることが多いため、十分に実用的であるといえる。
【００８２】
このように本実施形態では、リレーショナルデータベースのテーブル関係を、一対一、一対多の関係にあるかなどの観点から解析して、図１８（ａ）に示されるような画面を表示する。そして、ユーザが着目して、その構造を調べたいテーブルが含まれるテーブル群のアイコンをクリックすることにより、展開した図１８（ｂ）、図１８（ｃ）のように構造が詳細に展開された画面を見ることができる。これは、特に大規模データベースで複雑なテーブル関係を有するデータベースの構造を迅速に解析でき、直感的に把握しやすくするために有効である。
【００８３】
以上、本実施形態では、データの関係理解のために着目したデータと関連するデータが一つではなく複数あると、関係の理解が難しくなることに注目して、テーブルに含まれるデータ間の一対一、一対多、多対一、多対多関係の内、一対一・多対一関係にあるテーブルの集合（テーブル群）を作成することにより、関連するデータの関係を視覚的に分かりやすく表示して、テーブル群内の関係の理解を容易にする。
【００８４】
また、テーブル群を作ることよって、一度に着目すべき関係を削減できるため、データベースの構造、すなわち、テーブルとテーブル群や、テーブル群間の関係把握が容易となる。
【００８５】
〔実施形態２〕
以下、本発明の実施形態２を、図２０ないし図４１を用いて説明する。
実施形態１に記載のテーブル関係解析支援方法は、テーブル間の関係に、一対一、一対多、多対一の関係がある場合に適用される方法であり、多対多関係がある場合や、多対一関係によって構成された閉路がある場合については述べなかった。
【００８６】
本実施形態は、テーブル間の関係に、実施形態１のパターンに加えて、多対多関係がある場合や、多対一関係によって構成された閉路がある場合について適用されるものである。
【００８７】
さらに、実施形態１では、図５に示されるテーブル間の関係に関する情報は、外部から与えられものとして記述したが、本実施形態では、解析対象のデータベースのテーブルから、テーブル間の関係を求める機能についても説明する。
【００８８】
本実施形態では、実施形態１と異なった所を中心的に説明するものとする。
【００８９】
先ず、図１９および図２０を用いて実施形態２のテーブル関係解析支援装置の構成について説明する。
【００９０】
本実施形態のテーブル関係解析支援装置１００は、図１で示した実施形態１の機能構成に加えて、機能構成として、テーブル間関係抽出部１９０１、多対多関係の切断部１９０３、閉路分割部１９０７がある。
【００９１】
テーブル間関係抽出部１９０１は、ＦＫ情報１９０２を入力とし、解析対象データベース１９００を分析して、テーブル間関係情報２００を出力する。ＦＫ情報１９０２は、少なくとも解析対象データベース１９００に含まれるテーブル間にある外部キーの情報を含んでいる。解析対象データベース１９００は、リレーショナルデータベースを想定しているが、外部キーに類似する制約を定義できるデータの集合であれば、本実施形態のテーブル関係解析支援装置で扱うことができる。多対多関係の切断部１９０３は、テーブル間関係情報２００を入力とし、多対多関係テーブルリスト１９０４と多対多関係切断済みテーブル間関係情報１９０５を出力する。多対多関係テーブルリスト１９０４は、少なくともテーブル間関係情報２００のうち、多対多関係を持つテーブルの組を記録するものである。多対多関係切断済みテーブル間関係情報１９０５は、テーブル間関係情報２００から、関係６０３が多対多の行を除いたものである。テーブル間関係分析情報１９０６は、テーブル間関係分析情報２０２の割付表３２１に閉路共有番号（後述）を加えたものである。閉路分割部１９０７は、テーブル間関係分析情報１９０６に含まれる、多対一関係で構成される閉路を取り除き、テーブル間関係分析情報１９０６を更新する。分析結果表示部１９０８は、実施形態１の分析結果表示部２０４に加えて、多対多関係が分かるように表示する機能を有する。
【００９２】
また、本実施形態のテーブル関係解析支援装置１００は、実施形態１のテーブル関係解析支援装置１００に加えて、外部記憶装置１５０に、テーブル間関係抽出モジュール１５１ｄ、多対多関係の切断モジュール１５１ｅ、閉路分割モジュール１５１ｆがインストールされている。テーブル間関係抽出モジュール１５１ｄ、多対多関係の切断モジュール１５１ｅ、閉路分割モジュール１５１ｆは、各々テーブル間関係抽出部１９０１、多対多関係の切断部１９０３、閉路分割部１９０７の機能を実行するモジュールである。テーブル関係解析支援装置１００は、実施形態１と同様に、ＣＰＵ１１０より、外部記憶装置１５０から主メモリ１３０にロードされたこれらのモジュールを実行する。
【００９３】
また、本実施形態のテーブル関係解析支援装置１００は、実施形態１のテーブル関係解析支援装置１００に加えて、外部記憶装置１５０に、データとして、解析対象データベース１９００、ＦＫ情報１９０２、多対多関係テーブルリスト１９０４、多対多関係切断済みテーブル間関係情報１９０５が格納されている。
【００９４】
次に、図２１を用いてテーブル間関係抽出部１９０１の処理について説明する。
テーブル間関係抽出部１９０１は、解析対象データベース１９００に含まれる全てのテーブルの全てのペアについて、総当りで、☆★：Ｓ２００１〜Ｓ２０１５を繰り返す。以降、☆のループにおけるＳ２００１で着目したテーブルをテーブルＸ、★のループにおけるＳ２００２で着目したテーブルをテーブルＹと呼ぶ。
【００９５】
先ず、テーブルＸとテーブルＹの間に定義された外部キーを、ＦＫ情報１９０２から取得する（Ｓ２００３）。ここで、テーブルＸ側の外部キーをＦＫｘと表記し、テーブルＹ側の外部キーをＦＫｙと表記する。
【００９６】
次に、解析対象データベース１９００から、ＦＫｘのデータを全て取得し、重複を排除してユニークなデータＤＸの集合にする（Ｓ２００４）。そして、Ｓ２００４で取得した全てのユニークなデータＤＸに対して、〇：Ｓ２００５〜Ｓ２００７を繰り返す。
【００９７】
先ず、Ｓ２００５で着目したデータに対応するＦＫｙのデータの数を取得し、そのデータの数を判定し（Ｓ２００６）、その数が、２未満の場合（Ｓ２００６：２未満）はＳ２００７へ、２以上の場合（Ｓ２００６：２以上）はＳ２０１１へ進む。
【００９８】
次に、ＦＸｘのデータに重複があるか否かを判定し（Ｓ２００８）、重複が無ければ（Ｓ２００８：ＹＥＳ）、Ｓ２００９へ、重複があれば（Ｓ２００８：ＮＯ）、Ｓ２０１０へ進む。
【００９９】
次に、ＦＸｘのデータに重複があるか否かを判定し（Ｓ２０１１）、重複が無ければ（Ｓ２０１１：ＹＥＳ）、Ｓ２０１２へ、重複があれば（Ｓ２０１１：ＮＯ）Ｓ２０１３へ進む。
【０１００】
Ｓ２００８がＹＥＳのとき、出力するテーブル間関係情報２００に、元テーブルがＸ、先テーブルがＹ、関係が一対一の行を追加する（Ｓ２００９）。
【０１０１】
Ｓ２００８がＮＯのとき、出力するテーブル間関係情報２００に、元テーブルがＸ、先テーブルがＹ、関係が多対一の行を追加する（Ｓ２０１０）。
【０１０２】
Ｓ２０１１がＹＥＳのとき、出力するテーブル間関係情報２００に、元テーブルがＸ、先テーブルがＹ、関係が一対多の行を追加する（Ｓ２０１２）。
【０１０３】
Ｓ２０１１がＮＯのとき、出力するテーブル間関係情報２００に、元テーブルがＸ、先テーブルがＹ、関係が多対多の行を追加する（Ｓ２０１３）。
【０１０４】
そして、☆★：Ｓ２００１〜Ｓ２０１５のループを抜けたとき、テーブル間関係抽出部１９０１は、テーブル間関係情報２００を出力する（Ｓ２０１６）。
【０１０５】
次に、図２２を用いて多対多関係の切断部１９０３の処理について説明する。
先ず、多対多関係の切断部１９０３は、テーブル間関係情報２００の中から、関係が多対多の行を抽出し、削除する（Ｓ２１０１）。
【０１０６】
次に、Ｓ２１０１で抽出した行の元テーブルと先テーブルを多対多関係テーブルリスト１９０４に追加する（Ｓ２１０２）。
【０１０７】
次に、図２３を用いて閉路分割部１９０７の処理について説明する。
先ず、テーブル群間関係表３２０から、多対一関係で構成される、同一のテーブル群が二つ以上含まれない閉路を抽出する（Ｓ２２０１）。閉路を抽出するアルゴリズムには、公知のものがあるので、それを利用することができる。
【０１０８】
次に、Ｓ２２０１で取得した閉路を構成する全テーブル群を取得する（Ｓ２２０２）。Ｓ２２０２で取得したテーブル群Ｔｃを対象に、☆：Ｓ２２０３〜Ｓ２２０８を繰り返す。
【０１０９】
先ず、Ｓ２２０１で取得した閉路の中から、Ｓ２２０３で着目したテーブル群Ｔｃを含む閉路を抽出し、それぞれの閉路を新たなテーブル群とする（Ｓ２２０４）。
【０１１０】
次に、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２に含まれるＳ２２０２で取得したテーブル群Ｔｃを、Ｓ２２０４で作成した新たなテーブル群で置き換える（Ｓ２２０５）。
【０１１１】
次に、Ｓ２２０４で作成した新たなテーブル群が、割付表２２１２に含まれていない場合、ＩＤ７００を採番した上で追加する（Ｓ２２０６）。
【０１１２】
次に、閉路に含まれるテーブル群について、割付表２２１２の割付番号７０２に、対応するテーブル群のＳ２２０６で採番したＩＤ７００を、重複が無ければ記載する（Ｓ２２０７）。
【０１１３】
次に、閉路からなる全てのテーブル群について、同じテーブルを含むテーブル群７０１の閉路共有番号３０００に、互いのテーブル群７０１のＩＤ７００を記載する（Ｓ２２０９）。
【０１１４】
次に、テーブル群間関係表３２０から、元テーブル群６０１と先テーブル群６０２に、一つ以上、同じ閉路を表すテーブル群７０１が含まれている行を削除する（Ｓ２２１０）。なお、本実施形態では、閉路内の構造の解析について支援することについては記載していないが、閉路内のいずれかの関係６０３を切断することで、閉路内についても多対一関係の畳み込み部２０３等により、構造の解析をすることが可能となる。このとき、切断位置としては、例えば、一対多関係のみを持つテーブルについて、閉路を構成する一対多関係を切断することにより、閉路内のテーブルと閉路外のテーブルとの関係の把握が容易になる。
【０１１５】
次に、図２４ないし図４０を用いて具体例に基づいたテーブル関係解析支援装置１００の動作を説明する。
本実施形態では、図２４に示されるダイヤグラムで表されるリレーショナルデータベースのテーブル間の関係を例として取り上げる。
【０１１６】
実施形態１と同様に、テーブルＡ２３００〜テーブルＭ２３１２は、テーブルを表し、線はテーブルやテーブル群間の関係が一対一であること、片矢印はテーブルやテーブル群間の関係が多対一であることを表している。本発明では、新規の表記として、双矢印はテーブルやテーブル群間の関係が多対多であることを表している。
【０１１７】
実施形態２で取り上げる例では、テーブルＡ、テーブルＣ、テーブルＤ、テーブルＢ、また、テーブルＡ、テーブルＧ、テーブルＨ、テーブルＩ、テーブルＢが閉路を形成していること、および、テーブルＫとテーブルＬが多対多の関係にあることに留意する。
【０１１８】
以下、図２５ないし図２８を用いて、多対多関係の切断部１９０３の動作を説明する。
図２４のダイヤグラムに示したテーブル間の関係は、図２５のテーブル間関係情報２００で表現される。図２２のＳ２１０１では、テーブル間関係情報２００から、多対多関係を持つ行（ＩＤ２４００が“２５”と“２６”）を削除する。Ｓ２１０２では、Ｓ２１０１で削除した行の元テーブル２４０１と先テーブル２４０２であるテーブルＫとテーブルＬ、および、テーブルＬとテーブルＫを、多対多関係テーブルリスト１９０４に追加する。
【０１１９】
多対多関係の切断部１９０３完了後の多対多関係切断済みテーブル間関係情報１９０５を表すと、図２６に示されるようになる。
【０１２０】
多対多関係の切断部１９０３完了後の多対多関係テーブルリスト１９０４を示すと、図２７に示されるようになる。
【０１２１】
多対多関係の切断部１９０３完了後のテーブル間の関係のダイヤグラムは、図２８に示されるようになる。
【０１２２】
次に、図２９ないし図３５を用いて、閉路分割部１９０７の動作を説明する。
多対多関係の切断部１９０３の完了後、さらに一対一関係の畳み込み部２０１を適用し、閉路分割部１９０７の入力となるテーブルおよびテーブル群間の関係を図示すると、図２９に示されるようになる。ここでは、テーブルＬとテーブルＭがテーブル群Ｌ−Ｍとしてまとめられている。
【０１２３】
次に、閉路分割部１９０７の入力となるテーブル群間関係表３２０を示すと、図３０に示されるようになる。これは、図２６のテーブル関係情報と等価な情報を持つ表である。
【０１２４】
次に、ここでの閉路分割部１９０７の入力となる割付表２２１２を示すと、図３０は、図３１に示されるようになる。
【０１２５】
図２３のＳ２２０１では、テーブル群間関係表３２０に含まれる、多対一関係で構成される閉路である閉路Ａ＊Ｃ＊Ｄ＊Ｂと閉路Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂを抽出する。ここで、テーブルＴ１、テーブルＴ２、…、テーブルＴｎに対し、Ｔ１＊Ｔ２＊…＊Ｔｎは、ダイヤグラム上で、テーブルＴ１、テーブルＴ２、…、テーブルＴｎが閉路を形成することを意味する。
【０１２６】
次に、Ｓ２２０２では、Ｓ２２０１で取得した閉路を構成するテーブルＡ、テーブルＢ、テーブルＣ、テーブルＤ、テーブルＨ、テーブルＩ、テーブルＧ、を取得する。Ｓ２２０２で取得したテーブルを対象に、Ｓ２２０３〜Ｓ２２０８を繰り返す。Ｓ２２０３でテーブル群Ａに着目した場合、Ｓ２２０４では、閉路Ａ＊Ｃ＊Ｄ＊Ｂと閉路Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂについて、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂとテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂを作成する。
【０１２７】
Ｓ２２０５では、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂにより、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２に含まれるテーブルＡ、テーブルＣ、テーブルＤ、テーブルＢを、全てテーブル群Ａ＊Ｃ＊Ｄ＊Ｂに置き換え、テーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂにより、テーブル群間関係表３２０の元テーブル群６０１と先テーブル群６０２に含まれるテーブルＡ、テーブルＧ、テーブルＨ、テーブルＩ、テーブルＢをテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂで置き換える。なお、テーブル群Ａとテーブル群Ｂは双方の閉路に含まれているので、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂとテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂを併記する。
【０１２８】
次に、Ｓ２２０６では、ＩＤ７００を採番した上で、割付表２２１２にテーブル群Ａ＊Ｃ＊Ｄ＊Ｂとテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂを追記する。
【０１２９】
次に、Ｓ２２０７では、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂにより、テーブルＡ、テーブルＣ、テーブルＤ、テーブルＢの割付番号７０２に、Ｓ２２０５で採番したＩＤ７００である“１５”を記載し、テーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂにより、テーブルＡ、テーブルＧ、テーブルＨ、テーブルＩ、テーブルＢの割付番号７０２に、Ｓ２２０５で採番したＩＤ７００である“１６”を記載する。なお、テーブル群Ａとテーブル群Ｂは、双方の閉路に含まれるので、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂとテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂの双方のＩＤ７００を併記する。
【０１３０】
次に、Ｓ２２０９では、閉路を表すテーブル群Ａ＊Ｃ＊Ｄ＊Ｂとテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂで共有するテーブル群、テーブル群Ａとテーブル群Ｂが存在するので、テーブル群Ａ＊Ｃ＊Ｄ＊Ｂの閉路共有番号３０００にテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊ＢのＩＤ７００である“１６”を記載し、同様に、テーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂの閉路共有番号３０００に、テーブル群Ａ＊Ｃ＊Ｄ＊ＢのＩＤ７００である“１５”を記載する。
【０１３１】
次に、Ｓ２２１０では、テーブル群間関係表３２０の中で、元テーブル群６０１と先テーブル群６０２に一つ以上同一のテーブル群を含む行を削除する。
【０１３２】
Ｓ２２１０実施前のテーブル群間関係表３２０を表すと、図３３に示されるようになり、取り消し線を引いた行が削除対象である。
【０１３３】
閉路分割部１９０７実施後のテーブル群間関係表３２０を表すと、図３４に示されるようになる。
そして、閉路分割部１９０７実施後のテーブル間の関係を表すと、図３５に示されるようになる。
【０１３４】
閉路分割部１９０７実施後は、多対一関係の畳み込み部２０３を実施する。
多対一関係の畳み込み部２０３において、Ｓ４０１〜Ｓ４１２を１回完了した時点での割付表２２１２を示すと、図３６のようになる。また、多対一関係の畳み込み部２０３において、Ｓ４０１〜Ｓ４１２を１回完了した時点でのテーブルおよびテーブル群間の関係を表すと、図３７のダイヤグラムに示されるようになる。
【０１３５】
次に、多対一関係の畳み込み部２０３において、Ｓ４０１〜Ｓ４１２を２回完了した時点での割付表２２１２を示すと、図３８のようになる。また、多対一関係の畳み込み部２０３において、Ｓ４０１〜Ｓ４１２を２回完了した時点でのテーブルおよびテーブル群間の関係を表すと、図３９のダイヤグラムに示されるようになる。ここで、テーブル群（またはテーブル）ＴＡ、テーブル群（またはテーブル）ＴＢ、テーブル群（またはテーブル）ＴＣに対して、ＴＡ：ＴＢ：ＴＣの記号は、ＴＡ：ＴＢかつＴＢ：ＴＣであることを意味する。
【０１３６】
この時点で、テーブル群間関係表３２０には関係６０３が一対一か一対多の行は無くなり、多対一関係の畳み込み部２０３の処理は終了する。
【０１３７】
次に、図４０を用いて実施形態２のテーブル関係解析支援装置の解析結果の表示画面について説明する。
実施形態２のテーブル関係解析支援装置の解析結果の表示画面の一例を示すと、図４０に示されるようになる。
【０１３８】
テーブル群Ｅ：Ａ＊Ｃ＊Ｄ＊Ｂ（３８００）は、テーブル群Ｅとテーブル群Ａ＊Ｃ＊Ｄ＊Ｂが多対一関係であり、テーブルＡ、テーブルＣ、テーブルＤ、テーブルＢが閉路をなすことを示している。同様に、テーブル群Ｋ：Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂ：Ｊ（３８０１）は、テーブル群Ｋ：とテーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂ、テーブル群Ａ＊Ｇ＊Ｈ＊Ｉ＊ＢとテーブルＪが多対一関係であり、テーブルＡ、テーブルＧ、テーブルＨ、テーブルＩ、テーブルＢ、が閉路をなすことを示している。
【０１３９】
また、テーブル群Ｋ：Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂ：Ｊ（３８０１）とテーブル群Ｌ−Ｍ（２８００）が多対多関係であることを表している。
【０１４０】
また、テーブル群Ｅ：Ａ＊Ｃ＊Ｄ＊Ｂ（３８００）と、テーブル群Ｋ：Ａ＊Ｇ＊Ｈ＊Ｉ＊Ｂ：Ｊ（３８０１）は、テーブルＡとテーブルＢを共有している。
【０１４１】
ここで、テーブル群Ｅ：Ａ＊Ｃ＊Ｄ＊Ｂ（３８００）を選択すると、テーブル群の構造が展開されて、図４１に示されるように表示される。
【０１４２】
本実施形態では、実施形態１に加えて、テーブルの関係がダイヤグラム上で閉路をなす場合、テーブルが多対多の関係を持つ場合でも解析して、ユーザに視認しやすい形で表示することができるので、複雑なテーブル構造を有するデータベースの解析に有効である。
【符号の説明】
【０１４３】
１００…テーブル関係解析支援装置
１１０…ＣＰＵ
１２０…表示装置
１３０…主メモリ
１４０…入力装置
１５０…外部記憶装置
１６０…ネットワーク通信装置
１７０…バス
２０１…一対一関係の畳み込み部
２０２…テーブル間関係分析情報
２０３…多対一関係の畳み込み部
２０４…分析結果表示部
１９００…解析対象データベース
１９０１…テーブル間関係抽出部
１９０２…ＦＫ情報
１９０３…多対多関係の切断部
１９０４…多対多関係テーブルリスト
１９０５…多対多関係切断済みテーブル間関係情報
１９０６…テーブル間関係分析情報
１９０７…閉路分割部
【図１】
2019066924.tif 000003
【図２】
2019066924.tif 000004
【図３】
2019066924.tif 000005
【図４】
2019066924.tif 000006
【図５】
2019066924.tif 000007
【図６】
2019066924.tif 000008
【図７】
2019066924.tif 000009
【図８】
2019066924.tif 000010
【図９】
2019066924.tif 000011
【図１０】
2019066924.tif 000012
【図１１】
2019066924.tif 000013
【図１２】
2019066924.tif 000014
【図１３】
2019066924.tif 000015
【図１４】
2019066924.tif 000016
【図１５】
2019066924.tif 000017
【図１６】
2019066924.tif 000018
【図１７】
2019066924.tif 000019
【図１８】
2019066924.tif 000020
【図１９】
2019066924.tif 000021
【図２０】
2019066924.tif 000022
【図２１】
2019066924.tif 000023
【図２２】
2019066924.tif 000024
【図２３】
2019066924.tif 000025
【図２４】
2019066924.tif 000026
【図２５】
2019066924.tif 000027
【図２６】
2019066924.tif 000028
【図２７】
2019066924.tif 000029
【図２８】
2019066924.tif 000030
【図２９】
2019066924.tif 000031
【図３０】
2019066924.tif 000032
【図３１】
2019066924.tif 000033
【図３２】
2019066924.tif 000034
【図３３】
2019066924.tif 000035
【図３４】
2019066924.tif 000036
【図３５】
2019066924.tif 000037
【図３６】
2019066924.tif 000038
【図３７】
2019066924.tif 000039
【図３８】
2019066924.tif 000040
【図３９】
2019066924.tif 000041
【図４０】
2019066924.tif 000042
【図４１】
2019066924.tif 000043
【図４２】
2019066924.tif 000044
【図４３】
2019066924.tif 000045
【図４４】
2019066924.tif 000046