> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ベンダー データベースと事業部門データベースの準備

> FlexiCapture のデータセット向けに、ODBC 対応のベンダー データベースと事業部門データベースを準備します。一意のキーを選び、重複レコードを削除し、複数値列を使用します。

<div id="odbc-compatible-databases">
  ## ODBC 対応データベース
</div>

FlexiCapture for Invoices では、データセットを ODBC 対応データベースに接続し、そのデータを一度だけロードすることも、一定間隔で外部データベースから更新することもできます。詳しくは、[ベンダーおよび事業部門のデータベースの使用](/ja/flexi-capture/invoice-reader/ir-db-connection)および[データセットの更新](/ja/flexi-capture/invoice-reader/ir-data-set-update)を参照してください。

そのため、まずは外部データを、Microsoft Access、Microsoft SQL Server、Oracle などの ODBC 対応データベースに保存する必要があります。

<div id="eliminate-duplicate-records-in-the-external-database">
  ## 外部データベース内の重複レコードを排除する
</div>

まず、invoice上でベンダー (または事業部門) が検出されたときに必要な値を保持しているfieldが、外部ベンダー (または事業部門) データベース内のどれかを特定します。このfield (またはset of fields) を データセット の一意キーにする必要があります。

事業部門 データセット の一意キーは **Id** field です ([BusinessUnits data set](/ja/flexi-capture/invoice-reader/ir-columns-bu) を参照) 。ユーザーの観点では、このfieldは invoice の発行先である事業部門を検出した結果です。

ベンダー データセット の一意キーは、FlexiCapture for Invoices が invoice を発行したベンダーを検出したときに外部情報システムへ渡される値である必要があります。1 つのベンダー テーブルを使用する場合、一意キーは データセット の **Id** field に関連付ける必要があります。

1 つの Project 内で、自社の異なる事業部門宛てに発行された invoices を処理する予定であり、それぞれが独自のベンダー データベースを持っている場合は、各事業部門の一意キーを **Vendors** データセット の **BusinessUnitId** 列 に関連付け、各ベンダーのキーをその **Id** 列 に関連付けます。すると、ベンダーが検出されたときに外部情報システムへ渡されるベンダー レコード の一意キーは、**Id** と **BusinessUnitId** の値の組になります ([Vendors data set](/ja/flexi-capture/invoice-reader/ir-columns-vendors) を参照) 。

以下では、事業部門の場合も状況は同じであるため、ベンダー検出のみを扱います。

レコード の一意キーは、ベンダー検出に使用される Parameter の一意の組み合わせを決定できるものでなければなりません。多くの場合、外部情報システムでは、invoice に記載されている、またはベンダー検出に使用される Parameter よりも多くの Parameter に基づいて、ベンダー レコード を一意とみなします。

たとえば、外部情報システムでは、ベンダー **My Company Name Ltd.** が米ドル建ての invoice を発行した場合は **MCN\_USD** identifier を、同じ会社がユーロ建ての invoice を発行した場合は **MCN\_EUR** identifier を受け取ることを想定している場合があります。invoice には通貨が記載されているため、**MCN\_EUR** ではなく **MCN\_USD** を返すべき場面は判断できますが、通貨はベンダー検出には使用されません。

そのため、ベンダー検出メカニズムでは **MCN\_USD** と **MCN\_EUR** のどちらを選ぶべきか判断できません。

このような場合は、**MCN\_USD** と **MCN\_EUR** の両方に対応する **MCN** identifier を作成し、ベンダーが検出されたときにそれを返すようにします。そのうえで、Document Definition に rule を作成し、対象の invoice の通貨に応じて **MCN\_USD** と **MCN\_EUR** を選択できます。

一般化すると、ベンダー レコード の一意identifierは、会社名、会社住所、税務識別番号 (VATID、NationalVATID) 、IBAN ([Vendors data set](/ja/flexi-capture/invoice-reader/ir-columns-vendors) を参照) など、ベンダー検出に使用される Parameter の一意の組み合わせに対応している必要があります。そうして初めて、ベンダー検出メカニズムは invoice に対して正しいベンダー レコード を選択できます。

<Note>
  その後、プログラムは追加のfieldsを抽出し、Document Definition の rules を使用して結果を微調整し、必要な値を取得できます。
</Note>

ベンダー検出に使用される同じ Parameter の組み合わせ (または混同されやすい組み合わせ) が複数の一意キーに対応している場合、プログラムは 1 つのキーだけを選択できず、ベンダー検出は不安定になり、品質が低下します。

理由は次のとおりです。invoice に印字されたデータを使用して **My Company Name** ベンダーを確実に検出できても、データセット 内の複数の レコード (**MCN1**、**MCN2**、...、**MCNN**) がそのデータに一致する場合、プログラムは、一致する レコード の数がそれほど多くないという理由で、より一致度の低い別の レコード を選択してしまうことがあります。これにより、最終的にベンダーが誤って検出されます。

したがって、重複レコードを排除し、ベンダー検出に使用される レコード fields の各一意の組み合わせに対して一意の値を持つ 列 を外部データベースに作成することが非常に重要です。

データセット に接続すると、一意キーに関連付けられた 列 内で同一の値を持つ rows は、自動的に 1 つの レコード にまとめられます。

## <a id="complexcolumns" />データセット内の複数値列

データセットには、1 つの会社レコードの 1 つの論理列に対して複数の値を保存できます。

複数の値を保存する必要があるのは、会社名や住所などの会社のParameterが請求書ごとに異なる場合があるためです (たとえば、"My Company Name" と "MCN Ltd.") 。会社を確実に識別するには、データセット内のテキストが請求書画像から抽出されたテキストとできるだけ近く一致している必要があります。また、会社が複数の銀行口座やその他の属性を持つ場合もあります。

<Note>
  データセット内の複数値列は、同じ情報を異なる表記で保存するために使用してください。たとえば、"Karl Marx Street" と "K. Marx str." は、同じ住所の 2 つの異なる表記です。ただし、ロンドン支店とベルリン支店は、2 つの別個のレコードにする必要があります。
</Note>

複数値列の値は外部データベースから取得することもできます (たとえば、ベンダーのテーブルには各会社について 1 ～ 5 個の銀行情報が含まれる場合があります) 。また、データ抽出中にユーザーが追加することもできます (たとえば、オペレーターが、外部データベースには存在しない会社名のよく使われる候補をデータセットに追加する場合があります) 。

データセットでは列の非正規化を使用します。つまり、データは次の形式で保存されます。

| データセットの一意キー \* | Name1                    | Name2     | ... | NameN           | ... |
| -------------- | ------------------------ | --------- | --- | --------------- | --- |
| 1              | My Company Name          | MCN Ltd.  | ... | `<empty value>` | ... |
| 2              | The Second Company, Inc. | S-Company | ... | `<empty value>` | ... |
| ...            | ...                      | ...       | ... | ...             | ... |

**Name** のようなレコードの 1 つの論理fieldに対して、その論理fieldのすべての可能な値を保存するために、データセット内に複数の列が作成されます。したがって、**Name** は「複合列」と呼ぶことができます。

外部データベースのテーブル (またはビュー) を接続する場合は、上記のような列の非正規化、またはより一般的な行の非正規化を使用できます。後者の場合、1 つのレコードに結合する必要がある行は、一意キーに対応する列で同じ値を持っている必要があります。たとえば、次のとおりです。

| データセット内の一意キーに対応する列 \* | Name                     | ... |
| --------------------- | ------------------------ | --- |
| 1                     | My Company Name          | ... |
| 1                     | MCN Ltd.                 | ... |
| ...                   | ...                      | ... |
| N                     | `<empty value>`          | ... |
| 2                     | The Second Company, Inc. | ... |
| 2                     | S-Company                | ... |
| ...                   | ...                      | ... |
| N                     | `<empty value>`          | ... |
| ...                   | ...                      | ... |

* **BusinessUnits** データセットの一意キーは **Id** field です。**Vendors** データセットの一意キーは、設定に応じて **Id** field、または **Id** と **BusinessUnitId** の field の組み合わせです。詳細については、[Vendors data set](/ja/flexi-capture/invoice-reader/ir-columns-vendors)を参照してください。
