(57)【要約】【課題】既存のスクリプトの再利用を容易にすること。【解決手段】記憶部１１は、入力テーブルから出力テーブルを生成するスクリプト３１と、入力テーブルに含まれる列と出力テーブルに含まれる列との間の制約条件を示す制約モデル３２と、元テーブル４１，４２とを記憶する。処理部１２は、目的テーブル２２に含まれる列を示す目的テーブル情報２１を取得する。処理部１２は、元テーブル４１，４２の列構造を変換したテーブル４３，４４と目的テーブル２２の列構造を変換したテーブル４５とが制約条件を満たすように、元テーブル４１，４２をテーブル４３，４４に変換すると共に、テーブル４５に含まれる列と目的テーブル２２に含まれる列との間の対応関係を示す割り当て情報３３を生成する。処理部１２は、スクリプト３１とテーブル４３，４４とからテーブル４５を生成し、割り当て情報３３に基づいてテーブル４５を目的テーブル２２に変換する。【選択図】図１
2019207469.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
第１の入力テーブルから第１の出力テーブルを生成するスクリプトと、前記第１の入力テーブルに含まれる列と前記第１の出力テーブルに含まれる列との間の制約条件を示す制約モデルと、生成すべき目的テーブルに含まれる列を示す目的テーブル情報と、前記目的テーブルの生成に使用する元テーブルとを取得し、
前記元テーブルの列構造を変換した第２の入力テーブルと前記目的テーブルの列構造を変換した第２の出力テーブルとが前記制約条件を満たすように、前記元テーブルを前記第２の入力テーブルに変換すると共に、前記第２の出力テーブルに含まれる列と前記目的テーブルに含まれる列との間の対応関係を示す割り当て情報を生成し、
前記スクリプトと前記第２の入力テーブルとから前記第２の出力テーブルを生成し、前記割り当て情報に基づいて前記第２の出力テーブルを前記目的テーブルに変換する、
テーブル生成方法。
【請求項２】
前記制約モデルは、前記第１の入力テーブルに含まれる列の位置を示す入力スロットと、前記第１の出力テーブルに含まれる列の位置を示す出力スロットと、前記入力スロットおよび前記出力スロットに対して規定された前記制約条件とを含み、
前記コンピュータは更に、
前記元テーブルに含まれる列の列名および前記目的テーブルに含まれる列の列名に基づいて、前記元テーブルの列および前記目的テーブルの列の間の制約関係を推定し、
前記制約モデルが示す前記制約条件と前記推定した制約関係とに基づいて、前記元テーブルに含まれる列を前記入力スロットに割り当てると共に前記目的テーブルに含まれる列を前記出力スロットに割り当てる割り当て処理を行う、
請求項１記載のテーブル生成方法。
【請求項３】
前記割り当て処理では、前記入力スロットおよび前記出力スロットを含む複数のスロットのうち、他のスロットとの間に存在する制約の個数が多いスロットから優先して、前記元テーブルの列または前記目的テーブルの列の割り当てを決定する、
請求項２記載のテーブル生成方法。
【請求項４】
前記割り当て処理では、前記入力スロットおよび前記出力スロットを含む複数のスロットの中から１つのスロットを選択し、前記選択したスロットに割り当てる前記元テーブルの列または前記目的テーブルの列を、前記推定した制約関係に基づいて絞り込む、
請求項２記載のテーブル生成方法。
【請求項５】
前記元テーブルは複数存在し、前記入力スロットは複数存在し、
前記割り当て処理では、前記複数の入力スロットのうち第１の入力スロットに対して前記複数の元テーブルの中の第１の列を割り当てた後、前記複数の入力スロットのうち第２の入力スロットに対して割り当てる前記複数の元テーブルの中の第２の列を、前記第１の列が属する元テーブルと前記第２の列が属する元テーブルの同一性に基づいて絞り込む、
請求項２記載のテーブル生成方法。
【請求項６】
前記元テーブルから前記第２の入力テーブルへの変換は、前記元テーブルに含まれる列の列名の変更および列順序の変更の少なくとも一方を含む、
請求項１記載のテーブル生成方法。
【請求項７】
前記元テーブルから前記第２の入力テーブルへの変換は、前記元テーブルに含まれる２以上の列を１つの列に統合することを含み、
前記第２の出力テーブルから前記目的テーブルへの変換は、前記第２の出力テーブルに含まれる１つの列を２以上の列に分割することを含む、
請求項１記載のテーブル生成方法。
【請求項８】
前記制約条件は、ある列の列名と他の列の列名とが同一であること、および、前記ある列の列名と前記他の列の列名との差分が所定の語であることの少なくとも一方を含む、
請求項１記載のテーブル生成方法。
【請求項９】
第１の入力テーブルから第１の出力テーブルを生成するスクリプトと、前記第１の入力テーブルに含まれる列と前記第１の出力テーブルに含まれる列との間の制約条件を示す制約モデルと、目的テーブルの生成に使用する元テーブルとを記憶する記憶部と、
前記目的テーブルに含まれる列を示す目的テーブル情報を取得し、前記元テーブルの列構造を変換した第２の入力テーブルと前記目的テーブルの列構造を変換した第２の出力テーブルとが前記制約条件を満たすように、前記元テーブルを前記第２の入力テーブルに変換すると共に、前記第２の出力テーブルに含まれる列と前記目的テーブルに含まれる列との間の対応関係を示す割り当て情報を生成し、前記スクリプトと前記第２の入力テーブルとから前記第２の出力テーブルを生成し、前記割り当て情報に基づいて前記第２の出力テーブルを前記目的テーブルに変換する処理部と、
を有するテーブル生成装置。
【請求項１０】
コンピュータに、
第１の入力テーブルから第１の出力テーブルを生成するスクリプトと、前記第１の入力テーブルに含まれる列と前記第１の出力テーブルに含まれる列との間の制約条件を示す制約モデルと、生成すべき目的テーブルに含まれる列を示す目的テーブル情報と、前記目的テーブルの生成に使用する元テーブルとを取得し、
前記元テーブルの列構造を変換した第２の入力テーブルと前記目的テーブルの列構造を変換した第２の出力テーブルとが前記制約条件を満たすように、前記元テーブルを前記第２の入力テーブルに変換すると共に、前記第２の出力テーブルに含まれる列と前記目的テーブルに含まれる列との間の対応関係を示す割り当て情報を生成し、
前記スクリプトと前記第２の入力テーブルとから前記第２の出力テーブルを生成し、前記割り当て情報に基づいて前記第２の出力テーブルを前記目的テーブルに変換する、
処理を実行させるテーブル生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はテーブル生成方法、テーブル生成装置およびテーブル生成プログラムに関する。
【背景技術】
【０００２】
現在、種々の情報がデータベース（ＤＢ：Database）を用いて管理されている。例えば、データベースの構築に用いられるスクリプトを、データベース設計データから自動的に生成するスクリプト・ファイル生成装置の提案がある。この提案では、データベース設計データは、作成すべきデータベースのサイズ、データベースを構成するテーブルのテーブル名およびサイズ、テーブルに含まれる項目の項目名およびサイズを含む。スクリプト・ファイル生成装置は、データベース構築のためのスクリプト・ファイルのテンプレート・データを含むマクロの所定の位置に、データベース設計データに含まれるデータを記述することで、データベース構築のためのスクリプト・ファイルを生成する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−３４５５９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
あるテーブルから別のテーブルを生成する既存のスクリプトを、新たなテーブルの生成に再利用することが考えられる。例えば、情報処理装置が、ユーザによる新たなテーブルの列名の指定に応じて、既存のスクリプトを既存のテーブルに適用し、新たなテーブルを生成することが考えられる。すると、ユーザによるスクリプトの記述作業を省け、便利である。しかし、既存のスクリプトは、当初のテーブル生成で用いられた特定のテーブルの列構造に合わせた記述となっている。このため、既存のスクリプトに対して、当該特定のテーブル以外の既存のテーブルをそのまま入力として利用できないことが多く、既存のスクリプトの再利用可能性は低い。
【０００５】
１つの側面では、本発明は、既存のスクリプトの再利用を容易にするテーブル生成方法、テーブル生成装置およびテーブル生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
１つの態様では、テーブル生成方法が提供される。このテーブル生成方法では、コンピュータが、第１の入力テーブルから第１の出力テーブルを生成するスクリプトと、第１の入力テーブルに含まれる列と第１の出力テーブルに含まれる列との間の制約条件を示す制約モデルと、生成すべき目的テーブルに含まれる列を示す目的テーブル情報と、目的テーブルの生成に使用する元テーブルとを取得し、元テーブルの列構造を変換した第２の入力テーブルと目的テーブルの列構造を変換した第２の出力テーブルとが制約条件を満たすように、元テーブルを第２の入力テーブルに変換すると共に、第２の出力テーブルに含まれる列と目的テーブルに含まれる列との間の対応関係を示す割り当て情報を生成し、スクリプトと第２の入力テーブルとから第２の出力テーブルを生成し、割り当て情報に基づいて第２の出力テーブルを目的テーブルに変換する。
【０００７】
また、１つの態様では、テーブル生成装置が提供される。
また、１つの態様では、テーブル生成プログラムが提供される。
【発明の効果】
【０００８】
１つの側面では、既存のスクリプトの再利用を容易にする。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態のテーブル生成装置を示す図である。
【図２】第２の実施の形態のテーブル生成装置のハードウェア例を示すブロック図である。
【図３】スクリプトと制約モデルとの関係を示す図である。
【図４】テーブル生成装置の機能例を示すブロック図である。
【図５】元テーブルの例を示す図である。
【図６】スクリプトの例を示す図である。
【図７】制約モデルの例を示す図である。
【図８】目的テーブル情報の例を示す図である。
【図９】テーブル生成の処理例を示すフローチャートである。
【図１０】スロット割り当ての処理例を示すフローチャートである。
【図１１】スロット割り当ての処理例（続き）を示すフローチャートである。
【図１２】テーブル生成の具体例を示す図である。
【図１３】テーブル生成の具体例（続き）を示す図である。
【図１４】テーブル生成の具体例（続き）を示す図である。
【図１５】テーブル生成の具体例（続き）を示す図である。
【図１６】テーブル生成の具体例（続き）を示す図である。
【図１７】テーブル生成の具体例（続き）を示す図である。
【図１８】テーブル生成の具体例（続き）を示す図である。
【図１９】テーブル生成の具体例（続き）を示す図である。
【図２０】テーブル生成の具体例（続き）を示す図である。
【図２１】テーブル生成の具体例（続き）を示す図である。
【図２２】テーブル生成の具体例（続き）を示す図である。
【図２３】テーブル生成の具体例（続き）を示す図である。
【発明を実施するための形態】
【００１０】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１１】
図１は、第１の実施の形態のテーブル生成装置を示す図である。テーブル生成装置１０は、既存のスクリプトを再利用して、既存のテーブルから新たなテーブル（目的テーブル）を生成する。
【００１２】
テーブル生成装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性のストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリ（記憶部１１でもよい）に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
【００１３】
記憶部１１は、既存のスクリプト、既存のスクリプトの制約モデルおよび既存のテーブルを記憶する。既存のスクリプトは、スクリプト３１を含む。スクリプト３１は、第１の入力テーブルから第１の出力テーブルを生成するコマンドである。
【００１４】
例えば、スクリプト３１は、「入力１」および「入力２」で示される２つの入力テーブルの結合演算により出力テーブルを生成するスクリプトを示す。ここで、列は、図中において、該当のテーブルの左端の列を１列目とし、右側へ順番に２列目、３列目、・・・と数えるものとする。スクリプト３１は、「入力１」で示される１つ目の入力テーブルの１列目の属性（「入力２」で示される２つ目の入力テーブルの１列目の属性）を結合キーとして、両入力テーブルを結合することを示す。そして、スクリプト３１は、結合結果から、１つ目の入力テーブルの１，２列目に相当する列と２つ目の入力テーブルの２列目に相当する列とをこの順に選択した出力テーブルを生成することを示す。ただし、スクリプトは、上記以外の演算（例えば、結合キーや選択対象の列を列名（属性名）により指定した結合演算など）によって入力テーブルから出力テーブルを生成するものでもよい。また、スクリプトは、１つの入力テーブルから１つの出力テーブルを生成するものでもよい。
【００１５】
制約モデル３２は、スクリプト３１に関して、第１の入力テーブルに含まれる列と第１の出力テーブルに含まれる列との制約条件を示す。ここで、１つの列を、１つの「スロット」と言い、スロットを識別する番号を「スロット番号」と言うこととする。すると、スクリプト３１に関して、１つ目の入力テーブル、２つ目の入力テーブル、および、出力テーブルの各列をスロット番号によって区別できる。例えば、１つ目の入力テーブルの１列目はスロット番号「１」、同２列目はスロット番号「２」である。また、２つ目の入力テーブルの１列目はスロット番号「３」、同２列目はスロット番号「４」である。更に、出力テーブルの１列目はスロット番号「５」、同２列目はスロット番号「６」、同３列目はスロット番号「７」である。制約モデル３２は、スロット番号で識別されるスロットに対応するノードと、ノード間を結ぶエッジとを含むグラフによって表される。エッジは、当該エッジで結ばれる２つのノードに対応する列名が同じであることを示す。
【００１６】
スクリプト３１の例では、１つ目の入力テーブルの１列目の列名と、２つ目の入力テーブルの１列目の列名と、出力テーブルの１列目の列名とは同じである。このため、制約モデル３２では、スロット番号「１」、「３」、「５」の３つのノードが相互にエッジで結ばれる。また、スクリプト３１の例では、１つ目の入力テーブルの２列目の列名と、出力テーブルの２列目の列名とは同じである。このため、制約モデル３２では、スロット番号「２」、「６」の２つのノードがエッジで結ばれる。更に、スクリプト３１の例では、２つ目の入力テーブルの２列目の列名と、出力テーブルの３列目の列名とは同じである。このため、制約モデル３２では、スロット番号「４」、「７」の２つのノードがエッジで結ばれる。
【００１７】
元テーブル４１，４２は、記憶部１１に予め記憶される既存のテーブルの例である。元テーブル４１は、列名がｎａｍｅ（１列目）、ｔｙｐｅ（２列目）およびＩＤ（IDentifier）（３列目）の列を含む。元テーブル４２は、列名がＩＤ（１列目）、ａｄｄｒ（addressの略）（２列目）およびtel（telphoneの略）（３列目）の列を含む。既存のテーブルは、テーブル生成装置１０の外部に接続されたストレージに格納されていてもよい。
【００１８】
処理部１２は、目的テーブル情報２１を取得し、目的テーブル２２を生成する。目的テーブル情報２１は、新たに生成すべき目的テーブル２２に含まれる列を示す。例えば、目的テーブル情報２１は、目的テーブル２２の各列の列名と各列の並び順とを示す情報を含む。処理部１２は、目的テーブル情報２１が入力されると、スクリプトと、当該スクリプトに関する制約モデルと、目的テーブル２２の生成に利用する元テーブルとを取得する。処理部１２は、既存のテーブルの中から目的テーブル情報２１に含まれる列名を全て含む元テーブルの組み合わせを選択する。
【００１９】
処理部１２は、元テーブルの列構造を変換した第２の入力テーブルと目的テーブルの列構造を変換した第２の出力テーブルとが制約条件を満たすように、元テーブルを第２の入力テーブルに変換する。それと共に、処理部１２は、第２の出力テーブルに含まれる列と目的テーブルに含まれる列との間の対応関係を示す割り当て情報を生成する。
【００２０】
ここで、元テーブルから第２の入力テーブルへの変換は、元テーブルに含まれる列の列名の変更および列順序の変更の少なくとも一方を含む。また、元テーブルから第２の入力テーブルへの変換は、元テーブルに含まれる２以上の列を１つの列に統合することを含むこともある。この場合、第２の出力テーブルから目的テーブルへの変換は、第２の出力テーブルに含まれる１つの列を２以上の列に分割することを含む。
【００２１】
例えば、目的テーブル情報２１では、ｎａｍｅ、ａｄｄｒ、ｔｅｌおよびＩＤの列が、この並び順で指定されているとする。また、処理部１２は、目的テーブル情報２１に対し、元テーブル４１，４２を取得する。更に、処理部１２は、スクリプト３１および制約モデル３２を取得する。
【００２２】
そして、処理部１２は、元テーブル４１，４２の列構造を変換した第２の入力テーブルと目的テーブル２２の列構造を変換した第２の出力テーブルとが制約条件を満たすように、元テーブル４１，４２を第２の入力テーブルに変換する。テーブル４３は、元テーブル４１の列構造を変換した第２の入力テーブルである。また、テーブル４４は、元テーブル４２の列構造を変換した第２の入力テーブルである。更に、テーブル４５は、目的テーブル情報２１で示される目的テーブル２２の列構造を変換した第２の出力テーブルである（ただし、この段階ではテーブル４５は生成されていない）。
【００２３】
具体的には、テーブル４３は、ＩＤおよびｎａｍｅの列を元テーブル４１から選択し、１列目がＩＤ、２列目がｎａｍｅとなるように列順序を変更したテーブルである。テーブル４３の列構造は、制約モデル３２のスロット番号「１」、「２」に対応する。また、テーブル４４は、ＩＤ、ａｄｄｒおよびｔｅｌの列を元テーブル４２から選択し、ａｄｄｒおよびｔｅｌの列を１つの列（列名を「ａｄｄｒ  ｔｅｌ」とし、元の２つの列の値をスペースで区切って１つの値とする）に統合したテーブルである。テーブル４４の列構造は、制約モデル３２のスロット番号「４」、「５」に対応する。また、テーブル４５は、目的テーブル情報２１により示される目的テーブル２２の列のうちのａｄｄｒおよびｔｅｌの列を１つの列に統合し、１列目がＩＤ、２列目がｎａｍｅ、３列目がａｄｄｒ  ｔｅｌとなるように列順序を変更したテーブルである。テーブル４５における列の統合の方法は、テーブル４４における列の統合の方法と同じである。テーブル４５の列構造は、制約モデル３２のスロット番号「５」、「６」、「７」に対応する。
【００２４】
処理部１２は、制約モデル３２におけるスロット番号「１」、「３」、「５」の各スロットに、ＩＤの列を割り当てる。また、処理部１２は、スロット番号「２」、「６」の各スロットに、ｎａｍｅの列を割り当てる。更に、処理部１２は、スロット番号「４」、「７」の各スロットに、ａｄｄｒ  ｔｅｌの列を割り当てる。割り当て情報３３は、これらの割り当ての結果を示す。
【００２５】
このように、処理部１２は、制約モデル３２で示される制約条件が満たされるように、元テーブル４１，４２を、テーブル４３，４４に変換する。また、処理部１２は、制約モデル３２における各スロットに対する属性の割り当て結果を示す割り当て情報３３を生成し、記憶部１１に格納する。割り当て情報３３のスロット番号「５」、「６」、「７」に対応するスロットは、目的テーブル情報２１で示される目的テーブル２２の列構造を変換した結果を示す。このため、割り当て情報３３は、第２の出力テーブル（テーブル４５）に含まれる列と目的テーブル２２に含まれる列との間の対応関係を示す情報であると言える。
【００２６】
処理部１２は、スクリプトと第２の入力テーブルとから第２の出力テーブルを生成し、割り当て情報に基づいて第２の出力テーブルを目的テーブルに変換する。例えば、処理部１２は、スクリプト３１とテーブル４３，４４とからテーブル４５を生成し、割り当て情報３３に基づいてテーブル４５を目的テーブル２２に変換する。テーブル４３，４４を入力としてスクリプト３１を実行した場合、テーブル４５が得られることになる。テーブル４５には、列名が付与されていなくてもよい。処理部１２は、テーブル４５を再変換して、目的テーブル２２を得る。
【００２７】
具体的には、割り当て情報３３によれば、テーブル４５は、１列目がＩＤ、２列目がｎａｍｅ、３列目がａｄｄｒ  ｔｅｌである。このため、処理部１２は、テーブル４５の２列目を１列目、テーブル４５の３列目の値のスペースの前側を２列目、同スペースの後ろ側を３列目、テーブル４５の１列目を４列目に入れ替えて、目的テーブル情報２１で示される列名を付与する。こうして、処理部１２は、テーブル４５を再変換することで、目的テーブル２２を得る。
【００２８】
テーブル生成装置１０によれば、第１の入力テーブルから第１の出力テーブルを生成するスクリプトと、第１の入力テーブルに含まれる列と第１の出力テーブルに含まれる列との間の制約条件を示す制約モデルと、生成すべき目的テーブルに含まれる列を示す目的テーブル情報と、目的テーブルの生成に使用する元テーブルとが取得される。元テーブルの列構造を変換した第２の入力テーブルと目的テーブルの列構造を変換した第２の出力テーブルとが制約条件を満たすように、元テーブルが第２の入力テーブルに変換されると共に、第２の出力テーブルに含まれる列と目的テーブルに含まれる列との間の対応関係を示す割り当て情報が生成される。スクリプトと第２の入力テーブルとから第２の出力テーブルが生成され、割り当て情報に基づいて第２の出力テーブルが目的テーブルに変換される。
【００２９】
これにより、既存のスクリプトの再利用を容易にする。例えば、既存のスクリプトは、スクリプト３１で示されるように、特定のテーブルの列構造に合わせた記述となっている。このため、特定のテーブル以外の他のテーブルと既存のスクリプトで想定されている列構造に齟齬がある（例えば、列の順序、列名および列の数などが相違する）と、他のテーブルに既存のスクリプトを再利用できない。したがって、他の入力テーブルを用いて新たなテーブルを生成する際に、既存のスクリプトを再利用できる可能性は低い。
【００３０】
そこで、テーブル生成装置１０は、既存のスクリプトに付加された入出力テーブルに関する制約モデル３２に従って、元テーブルの列構造を変換して入力し、得られた出力テーブルの列構造を目的構造に再変換することで、既存のスクリプトの再利用を容易にする。このため、ユーザは、目的テーブル２２に含まれる列を示す目的テーブル情報２１をテーブル生成装置１０に入力することで、新たなスクリプトを記述しなくても、テーブル生成装置１０に目的テーブル２２を生成させることができる。
【００３１】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態のテーブル生成装置のハードウェア例を示すブロック図である。
【００３２】
テーブル生成装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００３３】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、テーブル生成装置１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３４】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、テーブル生成装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３５】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、テーブル生成装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３６】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、テーブル生成装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００３７】
入力信号処理部１０５は、テーブル生成装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、テーブル生成装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３８】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００３９】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４０】
通信インタフェース１０７は、ネットワーク２０に接続され、ネットワーク２０を介して他のコンピュータと通信を行うインタフェースである。通信インタフェース１０７は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
【００４１】
図３は、スクリプトと制約モデルとの関係を示す図である。
入力テーブルＴ１，Ｔ２を入力として、出力テーブルＴ３を出力するスクリプトを考える。一例として、入力テーブルＴ１，Ｔ２に対する結合演算により出力テーブルＴ３を生成するスクリプトが考えられる。ここで、以下の説明では、各テーブルにおける列名（属性名）を、ラベルと言うことがある。また、各テーブルにおける列を、スロットと言うことがある。
【００４２】
入力テーブルＴ１に含まれるラベルは、「支店名」および「売上」である。入力テーブルＴ２に含まれるラベルは、「支店名」および「電話番号」である。出力テーブルＴ３のラベルは、「支店名」、「売上」および「電話番号」である。
【００４３】
この場合、テーブル生成装置１００は、当該スクリプトを再利用するための制約条件を表す制約モデルＭ１を、入力テーブルＴ１，Ｔ２および出力テーブルＴ３の各ラベルの関係から得ることができる。例えば、入力テーブルＴ１の２つのスロットを「スロット１」、「スロット２」とする。入力テーブルＴ２の２つのスロットを「スロット３」、「スロット４」とする。出力テーブルＴ３の３つのスロットを「スロット５」、「スロット６」、「スロット７」とする。例えば、制約モデルＭ１の情報は、１つのスロットを１つのノードとし、２つのノードのラベルが一致するという関係を当該２つのノードを結ぶエッジとしたグラフによって表される。
【００４４】
制約モデルＭ１は、３つの制約を含む。第１の制約は、スロット１，３，５のラベル（例えば、「支店名」）が一致することである。第２の制約は、スロット２，６のラベル（例えば、「売上」）が一致することである。第３の制約は、スロット４，７のラベル（例えば、「電話番号」）が一致することである。入出力テーブルがこれらの３つの制約を満たせば、当該スクリプトを、他の出力テーブルの生成にも再利用できる可能性がある。
【００４５】
テーブル生成装置１００は、複数のスクリプトを予め記憶する。また、テーブル生成装置１００は、各スクリプトに対応付けて、各スクリプトの制約モデルを予め記憶する。テーブル生成装置１００は、複数のスクリプトを再利用して、ユーザにより入力された列構造をもつテーブル（目的テーブルと言うことがある）を自動生成する機能を提供する。
【００４６】
図４は、テーブル生成装置の機能例を示すブロック図である。
テーブル生成装置１００は、テーブル記憶部１２０、スクリプト記憶部１３０、目的テーブル記憶部１４０、ＵＩ（User Interface）部１５０および生成制御部１６０を有する。テーブル記憶部１２０、スクリプト記憶部１３０および目的テーブル記憶部１４０は、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。ＵＩ部１５０および生成制御部１６０は、ＲＡＭ１０２に記憶されたプログラムをＣＰＵ１０１が実行することで実現される。
【００４７】
テーブル記憶部１２０は、複数のテーブルを予め記憶する。テーブル記憶部１２０は、例えば、ＲＤＢ（Relational DataBase）である。テーブル記憶部１２０に記憶された既存のテーブルは、目的テーブルの生成元となるテーブルの候補である。ここで、目的テーブルの生成元のテーブルを、元テーブルと言う。
【００４８】
スクリプト記憶部１３０は、複数のスクリプトと、複数のスクリプトそれぞれに対応する制約モデルの情報とを予め記憶する。１つのスクリプトに対して１つの制約モデルが対応付けられる。スクリプトの記述の方式には、例えば、ラベルを指定して演算内容を記述するラベル方式（例えば、ＳＱＬ（Structured Query Language））や、列番号を指定して演算内容を記述するスロット位置方式などが挙げられる。
【００４９】
目的テーブル記憶部１４０は、目的テーブルの列を示す目的テーブル情報を記憶する。目的テーブル情報は、ユーザによって入力される。また、目的テーブル記憶部１４０は、生成制御部１６０によって生成された目的テーブルを記憶する。
【００５０】
ＵＩ部１５０は、ユーザによる目的テーブル情報の入力を受け付ける。また、ＵＩ部１５０は、生成制御部１６０により目的テーブル情報に基づいて生成された目的テーブルをディスプレイ１１１に表示させる。
【００５１】
生成制御部１６０は、ＵＩ部１５０から目的テーブル情報を取得し、目的テーブル記憶部１４０に格納する。生成制御部１６０は、目的テーブル情報に応じた目的テーブルを生成し、テーブル記憶部１２０に格納する。生成制御部１６０は、テーブル生成部１６１およびスロット割り当て部１６２を有する。
【００５２】
テーブル生成部１６１は、目的テーブル情報に基づいて、テーブル記憶部１２０から元テーブルを選択する。テーブル生成部１６１は、元テーブルおよび目的テーブル情報に応じたスクリプトの選択を、スロット割り当て部１６２に依頼する。テーブル生成部１６１は、スロット割り当て部１６２により選択されたスクリプトに応じて、元テーブルの列構造を変換し、変換後の元テーブルを入力としてスクリプトを実行する。テーブル生成部１６１は、スクリプトの実行結果として得られたテーブルの列構造を、目的テーブル情報に合わせて再変換することで、目的テーブルを生成し、目的テーブル記憶部１４０に格納する。
【００５３】
スロット割り当て部１６２は、元テーブルおよび目的テーブル情報に含まれる各ラベルを、スクリプトの制約モデルにおける各スロットに割り当てる割り当て処理を行い、今回の目的テーブルの生成に、当該スクリプトを利用できるかを確認する。スロット割り当て部１６２は、スクリプト毎に順番に割り当て処理を行い、利用可能なスクリプトを特定すると、当該スクリプトを示す情報と、割り当て結果を示す割り当て情報とをテーブル生成部１６１に提供する。割り当て情報は、スクリプト記憶部１３０に格納され、スクリプトの実行結果から目的テーブルを生成する際に用いられる。
【００５４】
図５は、元テーブルの例を示す図である。
テーブル１２１，１２２は、テーブル記憶部１２０に記憶される元テーブルの例である。テーブル１２１は、案件名、状態および案件コードのラベルで示される３つの列を含む。テーブル１２１は、案件名「ＰＣ発注」、状態「完了」、案件コード「１１１１１２」のレコード（行）を含む。テーブル１２１は、案件名「ＨＤＤ発注」、状態「発注」、案件コード「１１１１１１」のレコードを含む。
【００５５】
テーブル１２２は、案件コード、支店名および担当のラベルで示される３つの列を含む。テーブル１２２は、案件コード「１１１１１１」、支店名「Ａ支店」、担当「Ｘさん」のレコードを含む。テーブル１２２は、案件コード「１１１１１２」、支店名「Ｃ支店」、担当「Ｙさん」のレコードを含む。
【００５６】
テーブル記憶部１２０には、テーブル１２１，１２２以外の他のテーブルも予め記憶されている。
図６は、スクリプトの例を示す図である。
【００５７】
図６（Ａ）は、ラベル方式のスクリプトの例を示す。スクリプト１３１は、図３で例示した入力テーブルＴ１，Ｔ２から出力テーブルＴ３を生成するラベル方式のスクリプトである。スクリプト１３１は、入力テーブルＴ１（「入力１」）および入力テーブルＴ２（「入力２」）の結合演算により、出力テーブルＴ３を得る。
【００５８】
図６（Ｂ）は、スロット位置方式のスクリプトの例を示す。スクリプト１３２は、図３で例示した入力テーブルＴ１，Ｔ２から出力テーブルＴ３を生成するスロット位置方式のスクリプトである。スクリプト１３２は、スクリプト１３１と同様に、入力テーブルＴ１（「入力１」）および入力テーブルＴ２（「入力２」）の結合演算により、出力テーブルＴ３を得る。スロット位置方式では、各テーブルの先頭（図中の左端）から数えた列番号によって、結合キーとなる列や、選択対象の列が指定される。
【００５９】
このように、スクリプトは、ラベル方式で記述されてもよいし、スロット位置方式で記述されてもよい。また、スクリプト記憶部１３０には、スクリプト１３１，１３２以外の他のスクリプトも予め記憶されている。
【００６０】
図７は、制約モデルの例を示す図である。
制約モデル１３３は、スクリプト１３１の制約モデルを示す。制約モデル１３３のグラフ構造は、図３で例示した制約モデルＭ１と同様である（スクリプト１３２の制約モデルも制約モデルＭ１と同様である）。制約モデル１３３における各スロットのスロット番号は、制約モデルＭ１における各スロットのスロット番号と同じとする。
【００６１】
制約モデル１３３は、スロット１，３，５のラベルが一致すること、スロット２，６のラベルが一致すること、スロット４，７のラベルが一致すること、を示す。また、制約モデル１３３は、各スロットのラベルの情報を保持する。スロット１のラベルは「支店名」である。スロット２のラベルは「売上」である。スロット３のラベルは「支店名」である。スロット４のラベルは「電話番号」である。スロット５のラベルは「支店名」である。スロット６のラベルは「売上」である。スロット７のラベルは「電話番号」である。
【００６２】
ここで、スクリプト１３２は、スロット位置方式である。このため、スクリプト１３２の制約モデルは、ラベルを保持しない。したがって、生成制御部１６０は、制約モデルがラベルを保持するか否かによって、当該制約モデルに対応するスクリプトの記述方法が、ラベル方式か、スロット位置方式かを区別可能である。
【００６３】
なお、スクリプトとして、結合演算を用いるものを例示したが、スクリプトは、結合演算以外の演算で、出力テーブルを生成するものでもよい。例えば、スクリプトは、入力テーブルの所定のスロットの値の統計値（例えば、平均値など）を求め、当該統計値を含む出力テーブルを生成するものでもよい。この場合、例えば、入力テーブルのラベル「ＸＸ」（ＸＸは任意の文字列を示す）に対し、出力テーブルのラベル「平均ＸＸ」が対応付けられるという制約モデルの情報を当該スクリプトに対応付けてスクリプト記憶部１３０に格納しておく。また、スクリプトは、１つの入力テーブルから１つの出力テーブルを生成するものでもよい。
【００６４】
このように、制約モデルによって示される制約条件は、ある列の列名と他の列の列名とが同一であること、および、ある列の列名と他の列の列名との差分が所定の語であることの少なくとも一方を含み得る。
【００６５】
図８は、目的テーブル情報の例を示す図である。
目的テーブル情報１４１は、ユーザにより入力され、目的テーブル記憶部１４０に格納される。目的テーブル情報１４１は、目的テーブルのラベルとして、「案件名」、「支店名」、「担当」および「案件コード」が、この並び順で指定されたことを示す。
【００６６】
次に、テーブル生成装置１００によりテーブル生成の処理手順を説明する。
図９は、テーブル生成の処理例を示すフローチャートである。
（Ｓ１０）ＵＩ部１５０は、目的テーブル情報１４１を受け付ける。テーブル生成部１６１は、目的テーブル情報１４１をＵＩ部１５０から取得し、目的テーブル記憶部１４０に格納する。
【００６７】
（Ｓ１１）テーブル生成部１６１は、目的テーブル情報１４１に対して、元テーブルとスクリプトとの集合の新候補があるか否かを判定する。新候補がある場合、ステップＳ１２に処理が進む。新候補がない場合、テーブル生成の処理が終了する（この場合、目的テーブルを自動生成しない）。ここで、テーブル生成部１６１は、目的テーブル情報１４１に基づいて、元テーブルの候補を特定する。例えば、テーブル生成部１６１は、目的テーブル情報１４１に含まれるラベルを全て含む元テーブルの組み合わせを候補として特定することが考えられる。また、テーブル生成部１６１は、スクリプトを１つずつ順番に候補として選択することが考えられる。
【００６８】
（Ｓ１２）スロット割り当て部１６２は、スロット割り当て処理を実行する。スロット割り当て処理の詳細は後述される。
（Ｓ１３）テーブル生成部１６１は、スロット割り当て部１６２によるスロット割り当て処理の結果に応じて、該当のスクリプトに対する制約モデルで示される全ての制約を満たすスロットの割り当てがあるか否かを判定する。全ての制約を満たすスロットの割り当てがある場合、ステップＳ１４に処理が進む。全ての制約を満たすスロットの割り当てがない場合、ステップＳ１１に処理が進む。例えば、テーブル生成部１６１は、スロット割り当て部１６２から割り当て情報を取得できた場合は、全ての制約を満たすスロットの割り当てがあると判定する。テーブル生成部１６１は、スロット割り当て部１６２から割り当て情報を取得できなかった場合は、全ての制約を満たすスロットの割り当てがないと判定する。
【００６９】
（Ｓ１４）テーブル生成部１６１は、スクリプトの入力指定がラベル方式であるか否かを判定する。ラベル方式である場合、ステップＳ１５に処理が進む。スロット位置方式である場合、ステップＳ１６に処理が進む。前述のように、テーブル生成部１６１は、制約モデルにラベルの情報が保持されているか否かに応じて、当該制約モデルに対応するスクリプトの記述方法がラベル方式であるかスロット位置方式であるかを判定する。
【００７０】
（Ｓ１５）テーブル生成部１６１は、割り当て情報に基づいて元テーブルのラベルを書き換える。そして、ステップＳ１７に処理が進む。
（Ｓ１６）テーブル生成部１６１は、割り当て情報に基づいて元テーブルのスロットを入れ替える。そして、ステップＳ１７に処理が進む。
【００７１】
（Ｓ１７）テーブル生成部１６１は、ステップＳ１５のラベル書き換え後の元テーブル、または、ステップＳ１６のスロット入れ替え後の元テーブルに対してスクリプトを実行し、スクリプト実行結果を得る。
【００７２】
（Ｓ１８）テーブル生成部１６１は、割り当て情報に基づいて、スクリプト実行結果のスロットを入れ替える。
（Ｓ１９）テーブル生成部１６１は、ステップＳ１８の結果に、目的テーブル情報１４１で示されるラベルを付与することで、目的テーブルを生成し、目的テーブル記憶部１４０に格納する。
【００７３】
（Ｓ２０）ＵＩ部１５０は、生成された目的テーブルをテーブル生成部１６１から取得し、出力する。例えば、ＵＩ部１５０は、ディスプレイ１１１に目的テーブルを表示させる。
【００７４】
図１０は、スロット割り当ての処理例を示すフローチャートである。スロット割り当ての処理は、ステップＳ１２で実行される。
（Ｓ３０）スロット割り当て部１６２は、目的テーブル情報１４１の各スロットと元テーブルの各スロットとの関係を調べる。具体的には、スロット割り当て部１６２は、目的テーブル情報１４１のスロットおよび元テーブルのスロットのうち、ラベルが一致するスロットを確認する。ここで、目的テーブル情報１４１および元テーブルのスロットと区別するために、制約モデルにおけるスロットを「条件スロット」と言うこととする。スロット割り当て部１６２は、選択中のスクリプトに対応する制約モデルの条件スロットのラベルが空である割り当て情報を生成し、スクリプト記憶部１３０に格納する。
【００７５】
（Ｓ３１）スロット割り当て部１６２は、割り当て情報を参照して、元テーブルまたは目的テーブル情報１４１のスロット（あるいは、当該スロットに対応するラベル）を未割り当ての条件スロットがあるか否かを判定する。未割り当ての条件スロットがある場合、ステップＳ３２に処理が進む。未割り当ての条件スロットがない場合、ステップＳ３９に処理が進む。
【００７６】
（Ｓ３２）スロット割り当て部１６２は、未割り当て、かつ、制約の最も厳しい条件スロットを選択する。ここで、制約が厳しいとは、制約モデルにおいて、該当の条件スロットに対応するノードに多くのエッジが接続されていることを示す。すなわち、制約の最も厳しい条件スロットとは、最も多くのエッジが接続されているノードに対応する条件スロットである。スロット割り当て部１６２は、最も多くのエッジが接続されているノードが複数の場合、その中で、割り当て候補のスロットが最も少ない条件スロットを制約の最も厳しい条件スロットとする。
【００７７】
（Ｓ３３）スロット割り当て部１６２は、選択した条件スロットの制約を満たす、割り当て済でないテーブル（元テーブルまたは目的テーブル情報１４１）のスロットを、当該条件スロットに対する割り当て候補とする。
【００７８】
（Ｓ３４）スロット割り当て部１６２は、制約モデルのうち、選択した条件スロットと同一のテーブル内に割り当て済の条件スロットがあるか否かを判定する。同一のテーブル内に割り当て済の条件スロットがある場合、ステップＳ３５に処理が進む。同一のテーブル内に割り当て済の条件スロットがない場合、ステップＳ３６に処理が進む。
【００７９】
（Ｓ３５）スロット割り当て部１６２は、元テーブルの列構造に基づいて、該当の条件スロットに割り当て済のスロットとテーブルが同一でない割り当て候補を割り当て候補から除外する。すなわち、スロット割り当て部１６２は、該当の条件スロットに割り当て済のスロットが属するテーブルを割り当て候補の抽出元として選択する。
【００８０】
（Ｓ３６）スロット割り当て部１６２は、ステップＳ３２で選択した条件スロットと割り当て済の条件スロットとの間に制約があるか否かを判定する。制約がある場合、ステップＳ４２に処理が進む。制約がない場合、ステップＳ３７に処理が進む。
【００８１】
（Ｓ３７）スロット割り当て部１６２は、同一テーブル毎に候補スロットの全組み合わせそれぞれを条件スロットに割り当てて、続きを実行する。
（Ｓ３８）スロット割り当て部１６２は、未処理の組み合わせを１つ選択する。そして、ステップＳ３１に処理が進む。
【００８２】
（Ｓ３９）スロット割り当て部１６２は、現割り当てで該当の制約モデルにおける全ての制約が満たされ、目的テーブル情報１４１のスロットが全て割り当て済であるか否かを判定する。現割り当てで全ての制約が満たされ、目的テーブル情報１４１のスロットが全て割り当て済の場合、ステップＳ４０に処理が進む。それ以外の場合、ステップＳ４１に処理が進む。
【００８３】
（Ｓ４０）スロット割り当て部１６２は、現在の割り当て情報を出力する。具体的には、スロット割り当て部１６２は、スクリプト記憶部１３０に割り当て情報を格納する。スロット割り当て部１６２は、テーブル生成部１６１に割り当て情報を提供する。そして、スロット割り当ての処理が終了する。
【００８４】
（Ｓ４１）スロット割り当て部１６２は、現在の割り当ては解ではないと判定する。そして、ステップＳ４７に処理が進む。
図１１は、スロット割り当ての処理例（続き）を示すフローチャートである。
【００８５】
（Ｓ４２）スロット割り当て部１６２は、ステップＳ３２で選択した条件スロットと割り当て済の条件スロットとの間の制約と関連する割り当て済スロットの集合（スロット集合）を取得する。
【００８６】
（Ｓ４３）スロット割り当て部１６２は、スロット候補（条件スロットへの割り当て候補であるスロット）と関係のあるスロットが、取得したスロット集合の中に含まれていないスロット候補を割り当て候補から除外する。
【００８７】
（Ｓ４４）スロット割り当て部１６２は、スロット候補が取り出したスロット集合のサイズ以上であるか否かを判定する。スロット候補が取り出したスロット集合のサイズ以上の場合、ステップＳ４５に処理が進む。スロット候補が取り出したスロット集合のサイズ未満の場合、ステップＳ４６に処理が進む。
【００８８】
（Ｓ４５）スロット割り当て部１６２は、条件スロットに割り当てるスロットとして、取り出したスロット集合と同数を候補スロットから選択した組み合わせを作成し、それぞれの組み合わせで続きの実行を行う。そして、ステップＳ３８に処理が進む。
【００８９】
（Ｓ４６）スロット割り当て部１６２は、現在の割り当てに解はないと判定する。
（Ｓ４７）スロット割り当て部１６２は、未処理の組み合わせがあるか否かを判定する。未処理の組み合わせがある場合、ステップＳ３８に処理が進む。未処理の組み合わせがない場合、ステップＳ４８に処理が進む。
【００９０】
（Ｓ４８）スロット割り当て部１６２は、現在のスクリプトに対する解はないと判定する。この場合、スロット割り当て部１６２は、割り当て情報をテーブル生成部１６１に提供しない。そして、スロット割り当ての処理が終了する。
【００９１】
このようにして、スロット割り当て部１６２は、スロット割り当ての処理を実行することで、割り当て情報を生成する。
すなわち、制約モデルは、入力テーブルに含まれる列の位置を示す入力スロットと、出力テーブルに含まれる列の位置を示す出力スロットと、入力スロットおよび出力スロットに対して規定された制約条件とを含む。そして、スロット割り当て部１６２は、元テーブルに含まれる列の列名および目的テーブルに含まれる列の列名に基づいて、元テーブルの列および目的テーブルの列の間の制約関係を推定する。そして、スロット割り当て部１６２は、制約モデルが示す制約条件と推定した制約関係とに基づいて、元テーブルに含まれる列を入力スロットに割り当てると共に目的テーブルに含まれる列を出力スロットに割り当てる割り当て処理を行う。割り当て処理により、目的テーブルの生成に該当のスクリプトを利用可能であるか否かを適切に判定できる。
【００９２】
割り当て処理では、スロット割り当て部１６２は、入力スロットおよび出力スロットを含む複数のスロットのうち、他のスロットとの間に存在する制約の個数が多いスロットから優先して、元テーブルの列または目的テーブルの列の割り当てを決定する。これにより、スロットの割り当ての組み合わせの数を効率的に削減でき、スロット割り当てを高速化できる。
【００９３】
また、割り当て処理では、スロット割り当て部１６２は、入力スロットおよび出力スロットを含む複数のスロットの中から１つのスロットを選択し、選択したスロットに割り当てる元テーブルの列または目的テーブルの列を、推定した制約関係に基づいて絞り込む。これにより、スロットの割り当ての組み合わせの数を効率的に削減でき、スロット割り当てを高速化できる。
【００９４】
更に、元テーブルは複数存在し、入力スロットは複数存在することもある。この場合、割り当て処理では、スロット割り当て部１６２は、複数の入力スロットのうち第１の入力スロットに対して複数の元テーブルの中の第１の列を割り当てた後、複数の入力スロットのうち第２の入力スロットに対して割り当てる複数の元テーブルの中の第２の列を、第１の列が属する元テーブルと第２の列が属する元テーブルの同一性に基づいて絞り込む。これにより、スロットの割り当ての組み合わせの数を効率的に削減でき、スロット割り当てを高速化できる。
【００９５】
次に、上記の手順によるテーブル生成の具体例を説明する。以下の説明では、テーブル生成装置１００に対して、目的テーブル情報１４１が入力された場合を例示する。テーブル生成部１６１は、テーブル１２１，１２２を元テーブルとして選択する。また、テーブル生成部１６１は、目的テーブル情報１４１に対して、テーブル１２１，１２２およびスクリプト１３１をスロット割り当ての処理対象として選択する。
【００９６】
図１２は、テーブル生成の具体例を示す図である。
スロット割り当て部１６２は、テーブル１２１，１２２の各ラベルおよび目的テーブル情報１４１で示される各ラベルの一致を確認する（ステップＳＴ１）。図中では、一致が確認されたスロット同士をエッジで結んでいる。
【００９７】
スロット割り当て部１６２は、スクリプト１３１の制約モデル１３３に基づいて、割り当て情報１３４を生成し、スクリプト記憶部１３０に格納する。この段階では、割り当て情報１３４における各条件スロットへのスロットの割り当てはない。スロット割り当て部１６２は、未割り当て、かつ、制約の最も厳しい条件スロット５を選択する（ステップＳＴ２）。ここで、条件スロット１，３，５は、それぞれ制約が２つであり、最多である。また、条件スロット１，３の割り当て候補は２つ（ラベル「案件コード」がテーブル１２１，１２２に計２つ存在する）、条件スロット５の割り当て候補は１つである。したがって、スロット割り当て部１６２は、条件スロット５を割り当て対象とする。
【００９８】
スロット割り当て部１６２は、選択した条件スロット５の制約を満たす、割り当て済でないテーブルのスロットを候補とする（ステップＳＴ３）。条件スロット５は、スクリプトによる出力テーブルに属する。このため、スロット割り当て部１６２は、目的テーブル情報１４１のうち、条件スロット５の２つの制約を満たす、割り当て済でないラベル「案件コード」のスロットを、条件スロット５に対する割り当て候補とする。
【００９９】
図１３は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、スロット５の割り当て候補を全て作成する（ステップＳＴ４）。ここで、割り当て候補には、「空」（割り当てるスロットを１つも選ばないケース）を含む。したがって、この段階では、スロット割り当て部１６２は、ラベル「案件コード」と、「空」とを、スロット５の割り当て候補として作成する。
【０１００】
スロット割り当て部１６２は、スロット５に対して、まず、ラベル「案件コード」のスロットを割り当てる（ステップＳＴ５）。スロット割り当て部１６２は、スロット５に対してラベル「案件コード」を割り当てたことを割り当て情報１３４に記録する。
【０１０１】
次に、スロット割り当て部１６２は、割り当て対象の条件スロットとして、条件スロット１を選択する（ステップＳＴ６）。なお、スロット割り当て部１６２は、制約の最も厳しい条件スロットが複数ある場合、その中から任意の順序で、割り当て対象の条件スロットを選択することができる。
【０１０２】
図１４は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、選択した条件スロット１の制約を満たす、割り当て済でないテーブルのスロットを候補とする（ステップＳＴ７）。条件スロット１は元テーブルに属するスロットである。条件スロット１に対応する元テーブルは、テーブル１２１，１２２の何れか一方である。このため、スロット割り当て部１６２は、テーブル１２１，１２２のうち、条件スロット１の２つの制約を満たす、割り当て済でないラベル「案件コード」の２つのスロットを、条件スロット１に対する割り当て候補とする。
【０１０３】
ここで、テーブル１２１，１２２それぞれのラベル「案件コード」を区別するために、以下では便宜的に、テーブル１２１の当該ラベルを「案件コード（１）」、テーブル１２２の当該ラベルを「案件コード（２）」のように表記する。表記は便宜的なものであり、「案件コード」、「案件コード（１）」および「案件コード（２）」の何れのラベルも同じ内容である。なお、この段階において、条件スロット１と同一のテーブル（条件スロット１，２を含むテーブル）内に割り当て済の条件スロットはない。
【０１０４】
スロット割り当て部１６２は、条件スロット１の割り当て候補を全て作成する（ステップＳＴ８）。ここで、スロット割り当て部１６２は、制約モデル１３３に基づいて、割り当て済の条件スロット５と条件スロット１との間にラベルが一致するという制約があることを検出する。そこで、スロット割り当て部１６２は、割り当て情報１３４から、条件スロット５に割り当てたラベル「案件コード」を取得する。ステップＳＴ７において、取得された条件スロット１に対する割り当て候補は、何れも条件スロット５に割り当て済のラベル「案件コード」に一致する。したがって、スロット割り当て部１６２は、条件スロット１の割り当て候補として、ラベル「案件コード（１）」および「案件コード（２）」を作成する。
【０１０５】
スロット割り当て部１６２は、条件スロット１に対して、ラベル「案件コード（１）」のスロットを割り当てる（ステップＳＴ９）。スロット割り当て部１６２は、条件スロット１に対して、ラベル「案件コード（１）」のスロットを割り当てたことを割り当て情報１３４に記録する。
【０１０６】
図１５は、テーブル生成の具体例（続き）を示す図である。
次に、スロット割り当て部１６２は、割り当て対象の条件スロットとして、条件スロット３を選択する（ステップＳＴ１０）。
【０１０７】
スロット割り当て部１６２は、条件スロット３に対する割り当て候補として、テーブル１２２のラベル「案件コード（２）」のスロットを特定する。条件スロット３は、条件スロット１，５とラベルが一致するという制約をもつ。ラベル「案件コード（２）」は、「案件コード」および「案件コード（１）」に一致する。したがって、スロット割り当て部１６２は、条件スロット３にラベル「案件コード（２）」を割り当てる（ステップＳＴ１１）。スロット割り当て部１６２は、条件スロット３に対して、ラベル「案件コード（２）」のスロットを割り当てたことを割り当て情報１３４に記録する。
【０１０８】
一致関係を２つもつ条件スロットに対する割り当てが完了したので、次に、スロット割り当て部１６２は、一致関係を１つもつ条件スロットを割り当て対象として選択する。例えば、スロット割り当て部１６２は、条件スロット２を次の割り当て対象として選択する（ステップＳＴ１２）。
【０１０９】
図１６は、テーブル生成の具体例（続き）を示す図である。
条件スロット２と同じテーブルに属する条件スロット１は割り当て済である。割り当て情報１３４によれば、条件スロット１には、ラベル「案件コード（１）」のスロットが割り当てられている。したがって、スロット割り当て部１６２は、ラベル「案件コード（１）」を含むテーブル１２１とは異なるテーブルに属するスロット（テーブル１２２のラベル「支店名」、「担当」のスロット）を割り当て候補から除外する。なお、条件スロット２は、割り当て済の条件スロットとの間に、制約モデル１３３に基づく制約をもたない。この場合、条件スロット２の割り当て候補は、テーブル１２１のラベル「案件名」のスロットとなる（ステップＳＴ１３）。
【０１１０】
スロット割り当て部１６２は、条件スロット２に対する割り当て候補を全て作成する（ステップＳＴ１４）。具体的には、スロット割り当て部１６２は、条件スロット２の割り当て候補として、「空」およびラベル「案件名」を作成する。
【０１１１】
スロット割り当て部１６２は、条件スロット２に対して、「空」を割り当てる（ステップＳＴ１５）。スロット割り当て部１６２は、条件スロット２に対して「空」を割り当てたことを割り当て情報１３４に記録する。
【０１１２】
図１７は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、条件スロット２が割り当て済となり、条件スロット６の制約が他の条件スロットよりも厳しくなったので、次の割り当て対象を条件スロット６とする。制約モデル１３３によれば、条件スロット６は、条件スロット２のラベルに一致する。したがって、スロット割り当て部１６２は、条件スロット２に「空」を割り当てたので、条件スロット６に「空」を割り当てる（ステップＳＴ１６）。
【０１１３】
スロット割り当て部１６２は、次の割り当て対象を条件スロット７とする（ステップＳＴ１７）。
条件スロット７は、スクリプトによる出力テーブルに属する。このため、スロット割り当て部１６２は、目的テーブル情報１４１のうち、割り当て済でないラベル「案件名」、「支店名」、「担当」に対応する３つのスロットを条件スロット７に対する割り当て候補とする（ステップＳＴ１８）。なお、この段階において、条件スロット７は、割り当て済の他の条件スロットとの間に制約をもたない。
【０１１４】
図１８は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、条件スロット７に対して選択した割り当て候補を用いて、条件スロット７の全ての割り当て候補（候補スロットの全組み合わせ）を作成する（ステップＳＴ１９）。この場合、全ての割り当て候補は次の８つである（「空」も含む）。
【０１１５】
第１には、ラベル「案件名」のスロット、ラベル「支店名」のスロットおよびラベル「担当」のスロットを合わせたスロット集合である。第２には、ラベル「案件名」のスロットおよびラベル「支店名」のスロットを合わせたスロット集合である。第３には、ラベル「案件名」のスロットおよびラベル「担当」のスロットを合わせたスロット集合である。第４には、ラベル「支店名」のスロットおよびラベル「担当」のスロットを合わせたスロット集合である。第５には、ラベル「案件名」のスロットである。第６には、ラベル「支店名」のスロットである。第７には、ラベル「担当」のスロットである。第８には、「空」である。
【０１１６】
ここで、第１のスロット（ラベルを「ラベル１」とする）と第２のスロット（ラベルを「ラベル２」とする）とを合わせたスロット集合のラベルを、「ラベル１  ラベル２」のように、元の２つのラベルをスペースで区切って１つのラベルとする。ただし、区切り文字はスペース以外でもよい。
【０１１７】
スロット割り当て部１６２は、ステップＳＴ１９で作成された８つの割り当て候補のうち、ラベル「案件名」のスロット、ラベル「支店名」のスロットおよびラベル「担当」のスロットを合わせたスロット集合を、条件スロット７に割り当てる（ステップＳＴ２０）。スロット割り当て部１６２は、目的テーブル情報１４１のラベル「案件名」のスロット、ラベル「支店名」のスロットおよびラベル「担当」のスロットを合わせたスロット集合を条件スロット７に割り当てたことを割り当て情報１３４に記録する。
【０１１８】
スロット割り当て部１６２は、一致制約が１つであり、スロットが未割り当てである条件スロット４を次の割り当て対象に選択する（ステップＳＴ２１）。
図１９は、テーブル生成の具体例（続き）を示す図である。
【０１１９】
スロット割り当て部１６２は、一致制約を１つもつテーブル１２１のラベル「案件名」のスロット、テーブル１２２のラベル「支店名」のスロット、および、テーブル１２２のラベル「担当」のスロットを、条件スロット４の割り当て候補として特定する（ステップＳＴ２２）。
【０１２０】
条件スロット４と同じテーブルに属する条件スロット３は割り当て済である。割り当て情報１３４によれば、条件スロット３には、ラベル「案件コード（２）」のスロットが割り当てられている。したがって、スロット割り当て部１６２は、ラベル「案件コード（２）」を含むテーブル１２２とは異なるテーブルに属するスロット（具体的には、テーブル１２１に属するラベル「案件名」のスロット）を割り当て候補から除外する（ステップＳＴ２３）。
【０１２１】
スロット割り当て部１６２は、割り当て情報１３４に基づいて、条件スロット４とラベルが一致するという制約をもつ条件スロット７に対して、ラベル「案件名」、「支店名」、「担当」のスロット集合が割り当てられていることを検出する。この場合、条件スロット７に対して割り当てられたスロット集合のサイズは３である。また、この段階における割り当て候補は、ラベル「支店名」のスロットおよびラベル「担当」のスロットである。すなわち、候補数は２であり、条件スロット７に対して割り当て済のスロット集合のサイズ３よりも小さい。したがって、スロット割り当て部１６２は、現在の割り当てでは、解がないと判定する（ステップＳＴ２４）。
【０１２２】
図２０は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、条件スロット７に対する割り当てまで遡る。スロット割り当て部１６２は、条件スロット７に対し、ラベル「案件名」およびラベル「支店名」のスロット集合を割り当てる（ステップＳＴ２５）。スロット割り当て部１６２は、ラベル「案件名」およびラベル「支店名」のスロット集合を条件スロット７に割り当てたことを割り当て情報１３４に記録する。
【０１２３】
そして、スロット割り当て部１６２は、一致制約を１つもつテーブル１２１のラベル「案件名」のスロット、テーブル１２２のラベル「支店名」のスロット、および、テーブル１２２のラベル「担当」のスロットを、条件スロット４の割り当て候補として特定する。条件スロット４と同じテーブルに属する条件スロット３は割り当て済である。割り当て情報１３４によれば、条件スロット３には、ラベル「案件コード（２）」のスロットが割り当てられている。したがって、スロット割り当て部１６２は、ラベル「案件コード（２）」を含むテーブル１２２とは異なるテーブルに属するスロット（テーブル１２１に属するラベル「案件名」のスロット）を割り当て候補から除外する。また、スロット割り当て部１６２は、条件スロット４とラベルが一致するという制約をもつ条件スロット７に割り当て済のスロットに含まれないスロット（テーブル１２２のラベル「担当」のスロット）を割り当て候補から除外する（ステップＳＴ２６）。
【０１２４】
スロット割り当て部１６２は、割り当て情報１３４に基づいて、条件スロット４とラベルが一致するという制約をもつ条件スロット７に対して、ラベル「案件名」および「支店名」のスロット集合が割り当てられていることを検出する。この場合、条件スロット７に対して割り当てられたスロット集合のサイズは２である。また、この段階における割り当て候補は、ラベル「支店名」のスロットである。すなわち、候補数は１であり、条件スロット７に対して割り当て済のスロット集合のサイズ２よりも小さい。したがって、スロット割り当て部１６２は、現在の割り当てでは、解がないと判定する（ステップＳＴ２７）。
【０１２５】
図２１は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、同様にして、条件スロット７に対する割り当てを試行する。スロット割り当て部１６２は、ラベル「支店名」およびラベル「担当」のスロット集合を条件スロット７に割り当てる。スロット割り当て部１６２は、ラベル「支店名」およびラベル「担当」のスロット集合を条件スロット７に割り当てたことを割り当て情報１３４に記録する。
【０１２６】
この場合、条件スロット７に割り当てられたラベル「支店名」およびラベル「担当」のスロット集合は、テーブル１２２におけるラベル「支店名」およびラベル「担当」のスロット集合に一致する。したがって、スロット割り当て部１６２は、当該ラベル「支店名」およびラベル「担当」のスロット集合を条件スロット４に割り当てる（ステップＳＴ２８）。スロット割り当て部１６２は、ラベル「支店名」およびラベル「担当」のスロット集合を条件スロット４に割り当てたことを割り当て情報１３４に登録する。
【０１２７】
この段階で、割り当て情報１３４の全ての条件スロットが割り当て済となる。しかし、この段階の割り当て情報１３４では、出力テーブルの条件スロットに割り当てられているスロットが、ラベル「案件コード」、「支店名」および「担当」のスロットであり、目的テーブル情報１４１に含まれるラベル「案件名」のスロットが含まれていない。したがって、スロット割り当て部１６２は、この段階の割り当て情報１３４は解ではないと判定する。
【０１２８】
スロット割り当て部１６２は、その後も同様にして、条件スロット７に対する割り当てを試行するが、全てのケースで解なしとなる（ステップＳＴ２９）。このため、スロット割り当て部１６２は、条件スロットに対する割り当て結果を更に遡って、割り当て処理をやり直す。スロット割り当て部１６２は、割り当て情報１３４における条件スロット７に対するラベルの割り当て結果をクリアする。
【０１２９】
スロット割り当て部１６２は、条件スロット６の割り当てに戻るが、他の割り当て候補が存在しない。スロット割り当て部１６２は、割り当て情報１３４における条件スロット６に対するラベルの割り当て結果をクリアする。そして、スロット割り当て部１６２は、条件スロット２の割り当てに戻り、他の割り当て候補であるラベル「案件名」のスロットの割り当てを試す（ステップＳＴ３０）。
【０１３０】
図２２は、テーブル生成の具体例（続き）を示す図である。
スロット割り当て部１６２は、以降も同様にして、条件スロット６，７，４に対する割り当てを行い、全ての条件スロットに対する割り当てが完了する（ステップＳＴ３１）。具体的には、条件スロット６に対して、ラベル「案件名」のスロットが割り当てられる。条件スロット７に対して、ラベル「支店名」およびラベル「担当」のスロット集合が割り当てられる。条件スロット４に対して、ラベル「支店名」およびラベル「担当」のスロット集合が割り当てられる。スロット割り当て部１６２は、この割り当て結果を、割り当て情報１３４に記録する。
【０１３１】
割り当て情報１３４によれば、この段階の割り当て結果は、制約モデル１３３で示される全ての制約を満たしており、出力テーブル側の条件スロットが目的テーブル情報１４１に含まれる全てのスロットを含んでいる。したがって、スロット割り当て部１６２は、スロット割り当ての処理を完了し、割り当て情報１３４をテーブル生成部１６１に提供する。
【０１３２】
テーブル生成部１６１は、割り当て情報１３４に基づいて、テーブル１２１，１２２の列構造を変換する（ステップＳＴ３２）。
割り当て情報１３４によれば、ラベル「案件コード（１）」のスロットおよびラベル「案件名」のスロットをもつテーブルが入力テーブルとなっている。したがって、テーブル生成部１６１は、テーブル１２１からラベル「案件名」のスロットとラベル「案件コード」のスロットとを選択し、「案件コード」、「案件名」の順にスロットの順序を入れ替えたテーブル１２１ａを生成する。ただし、スクリプトの記述がラベル方式の場合にはスロットの順序の入れ替えを行わなくてもよい（ラベルによって列の指定が可能なため）。
【０１３３】
また、テーブル生成部１６１は、テーブル１２１ａのラベル変換を行う。スクリプト１３１によれば、条件スロット１の「案件コード（１）」に対応するラベルは「支店名」である。したがって、テーブル生成部１６１は、テーブル１２１ａのラベル「案件コード」を「支店名」に変更する。スクリプト１３１によれば、条件スロット２の「案件名」に対応するラベルは「売上」である。したがって、テーブル生成部１６１は、テーブル１２１ａのラベル「案件名」を「売上」に変更する。テーブル１２１ｂは、テーブル生成部１６１によるテーブル１２１ａに対するこれらのラベル変換の結果である。
【０１３４】
更に、割り当て情報１３４によれば、ラベル「案件コード（２）」のスロットおよびラベル「支店名  担当」をもつテーブルが入力テーブルとなっている。このため、テーブル生成部１６１は、テーブル１２２からラベル「案件コード」のスロットと、ラベル「支店名」のスロットと、ラベル「担当」のスロットとを選択する。そして、テーブル生成部１６１は、これらのスロットのうち、ラベル「支店名」のスロットとラベル「担当」のスロットとを、この順に１つのスロットに統合したテーブル１２２ａを生成する。
【０１３５】
ここで、テーブル生成部１６１は、１つにまとめられたスロットのラベルを、元のスロットのラベルをスペースで区切ったラベル（例えば、「支店名  担当」）とする。テーブル生成部１６１は、１つにまとめられたスロットに設定される値を、元の２つのスロットに設定された２つの値を、順序を維持してスペースで区切った値とする（例えば、「「支店名」の値  「担当」の値」のように１つの値とする）。
【０１３６】
また、テーブル生成部１６１は、テーブル１２２ａのラベル変換を行う。スクリプト１３１によれば、条件スロット３の「案件コード（２）」に対応するラベルは「支店名」である。したがって、テーブル生成部１６１は、テーブル１２２ａのラベル「案件コード」を「支店名」に変更する。スクリプト１３１によれば、条件スロット４の「案件名」に対応するラベルは「電話番号」である。したがって、テーブル生成部１６１は、テーブル１２２ａのラベル「支店名  担当」を「電話番号」に変更する。テーブル１２２ｂは、テーブル生成部１６１によるテーブル１２２ａに対するこれらのラベル変換の結果である。
【０１３７】
図２３は、テーブル生成の具体例（続き）を示す図である。
テーブル生成部１６１は、テーブル１２１ｂ，１２２ｂに対して、スクリプト１３１を実行し、当該実行結果の列構造を、割り当て情報１３４に基づいて再変換することで目的テーブル１４３を生成する（ステップＳＴ３３）。
【０１３８】
具体的には、テーブル生成部１６１は、テーブル１２１ｂ，１２２ｂに対して、スクリプト１３１を実行し、その実行結果として、テーブル１４２を生成する。テーブル生成部１６１は、テーブル１４２を目的テーブル記憶部１４０に格納する。テーブル１４２は、ラベルを含まなくてもよい。スクリプト１３１によれば、テーブル１４２は、列の先頭（図中の左端）からラベル「支店名」、「売上」および「電話番号」に相当するスロットを含む。
【０１３９】
テーブル生成部１６１は、割り当て情報１３４に基づいてテーブル１４２の列構造を再変換する。割り当て情報１３４によれば、割り当て情報１３４の条件スロット５に相当するテーブル１４２の１列目のスロットはラベル「案件コード」のスロットに対応する。また、割り当て情報１３４の条件スロット６に相当するテーブル１４２の２列目のスロットはラベル「案件名」のスロットに対応する。更に、割り当て情報１３４の条件スロット７に相当するテーブル１４２の３列目のスロットはラベル「支店名  担当」のスロットに対応する。
【０１４０】
このため、テーブル生成部１６１は、目的テーブル情報１４１で指定された列構造となるように、次のようにテーブル１４２の列構造を変換する。第１に、テーブル生成部１６１は、テーブル１４２の２番目のスロットを目的テーブルの１番目のスロットとする。第２に、テーブル生成部１６１は、テーブル１４２の３番目のスロットを区切り文字であるスペースの箇所で２つのスロットに分割する。そして、テーブル生成部１６１は、区切り文字の前方に対応するスロットを目的テーブルの２番目のスロットとし、区切り文字の後方に対応するスロットを目的テーブルの３番目のスロットとする。第３に、テーブル生成部１６１は、テーブル１４２の１番目のスロットを目的テーブルの４番目のスロットとする。こうして、テーブル生成部１６１は、テーブル１４２の列構造を再変換することで、目的テーブル１４３を生成する。テーブル生成部１６１は、生成した目的テーブル１４３を目的テーブル記憶部１４０に格納する。
【０１４１】
そして、ＵＩ部１５０は、テーブル生成部１６１により生成された目的テーブル１４３をディスプレイ１１１に表示させる。ユーザは、ディスプレイ１１１の表示内容により、目的テーブル情報１４１に対して生成された目的テーブル１４３を確認することができる。
【０１４２】
これにより、既存のスクリプトの再利用を容易にすることができる。例えば、既存のスクリプトは、スクリプト１３１，１３２で示されるように、特定のテーブルの列構造に合わせた記述となっている。このため、特定のテーブル以外の他のテーブルと既存のスクリプトで想定されている列構造に齟齬がある（例えば、列の順序、列名および列の数などが相違する）と、他のテーブルに既存のスクリプトを再利用できない。したがって、他の入力テーブルを用いて新たなテーブルを生成する際に、既存のスクリプトを再利用できる可能性は低い。
【０１４３】
そこで、テーブル生成装置１００は、既存のスクリプトに付加された入出力テーブルに関する制約モデルに従って、元テーブルの列構造を変換して入力し、得られた出力テーブルの列構造を目的構造に再変換することで、既存のスクリプトの再利用を容易にする。このため、ユーザは、目的テーブル情報１４１をテーブル生成装置１００に入力することで、新たなスクリプトを記述しなくても、テーブル生成装置１００に目的テーブル１４３を生成させることができる。また、過去に実行したスクリプトを流用できるケースが増加する。
【０１４４】
更に、スロット割り当て部１６２によるスロット割り当て処理では、割り当てる順番によっては、スロット割り当ての候補数が大量になり組み合わせ爆発を引き起こす可能性が高まる。一例として、テーブル１２１，１２２、スクリプト１３１、制約モデル１３３および目的テーブル情報１４１において、条件スロット２から割り当て処理を行うことを考える。この場合、条件スロット２は、同一ラベルが出力テーブル側に１つなので、テーブル１２１，１２２の５つのスロット（ラベル「案件名」、「案件コード（１）」、「案件コード（２）」、「支店名」、「担当」のスロット）が候補となる。５つのスロットを割り当てるか割り当てないかを決める組み合わせは２の５乗＝３２通りである。次に、条件スロット７への割り当てを行うことを考える。条件スロット７は、同一ラベルが入力テーブル側に１つなので、目的テーブル情報１４１で示される４つのスロット（ラベル「案件名」、「支店名」、「担当」、「案件コード」のスロット）が候補となる。その組み合わせは、２の４乗＝１６通りである。先の割り当てと合わせると、組み合わせの数は、３２×１６＝５１２通りである。同様に割り当てを継続すると、組み合わせが膨大になる。
【０１４５】
そこで、スロット割り当て部１６２は、制約が厳しく、候補が少ない条件スロットから優先的に割り当てを行う。制約が厳しいとは、次の場合を指す。第１に、制約モデルにおいて、条件数が多い（該当の条件スロットに対応するノードに多くのエッジが接続されている）ことである。第２に、割り当て候補のスロットが少ないことである。第３に、ラベル単体の条件が指定されていること（例えば、目的テーブル情報のラベルに「平均」の文字列が含まれるなど）も挙げられる。
【０１４６】
このように、スロット割り当て部１６２は、制約の厳しい条件スロットを優先的に割り当て対象とすることで、割り当て候補のスロットを効率的に削減できる。これにより、スロット割り当て部１６２によるスロット割り当ての組み合わせの数を減らせ、スロット割り当てを高速に行える。その結果、テーブル生成装置１００による目的テーブルの生成を高速化できる。
【０１４７】
また、スロット割り当て部１６２は、図１５，１６のステップＳＴ１２，ＳＴ１３や図１９のステップＳＴ２２，ＳＴ２３で例示したように、割り当て対象の条件スロットと同じテーブルに属する割り当て済の他の条件スロットの割り当て元のテーブルとは異なるテーブルの割り当て候補のスロットを、割り当て候補から除外する。また、このような制限によって、割り当て候補を絞り込み可能な条件スロットを優先的に割り当て対象とする。このようにして、スロット割り当て部１６２は、割り当て候補のスロットを効率的に削減できる。これにより、スロット割り当て部１６２によるスロット割り当ての組み合わせの数を減らせ、スロット割り当てを高速に行える。その結果、テーブル生成装置１００による目的テーブルの生成を高速化できる。
【０１４８】
なお、第１の実施の形態の情報処理は、処理部１２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１１３に記録できる。
【０１４９】
例えば、プログラムを記録した記録媒体１１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１５０】
１０  テーブル生成装置
１１  記憶部
１２  処理部
２１  目的テーブル情報
２２  目的テーブル
３１  スクリプト
３２  制約モデル
３３  割り当て情報
４１，４２  元テーブル
４３，４４，４５  テーブル
【図１】
2019207469.tif 000003
【図２】
2019207469.tif 000004
【図３】
2019207469.tif 000005
【図４】
2019207469.tif 000006
【図５】
2019207469.tif 000007
【図６】
2019207469.tif 000008
【図７】
2019207469.tif 000009
【図８】
2019207469.tif 000010
【図９】
2019207469.tif 000011
【図１０】
2019207469.tif 000012
【図１１】
2019207469.tif 000013
【図１２】
2019207469.tif 000014
【図１３】
2019207469.tif 000015
【図１４】
2019207469.tif 000016
【図１５】
2019207469.tif 000017
【図１６】
2019207469.tif 000018
【図１７】
2019207469.tif 000019
【図１８】
2019207469.tif 000020
【図１９】
2019207469.tif 000021
【図２０】
2019207469.tif 000022
【図２１】
2019207469.tif 000023
【図２２】
2019207469.tif 000024
【図２３】
2019207469.tif 000025