はじめに
前回は重複値抽出に焦点を当て、名寄せ処理は「不要なレコードを削除」という単純な方法を紹介しました。今回は名寄せ処理に重点を置き、「各レコードに泣き別れしたフィールド値を統合」する方法を紹介し、ASP.NETでの実装例を紹介します。
対応可能なRDB
MySQL(4.1以上)、SQL Server、Access、PostgreSQL、OracleなどのRDBで可能です。ただし、EXISTS演算子とサブクエリー(第1回参照)が利用できないSQLiteでは不可です。
必要となる前提知識と環境
前半部分はSQL命令の解説になるので、SQLの基礎知識が前提となります。
後半部分は各回を通して、ASP.NET開発の基礎知識(SQL Serverへのアクセス方法、MultiViewコントロールの使い方を含む)、および以下の環境が前提となります。
- 開発ツール:Visual Web Developer 2010 Express SP1(以下、VWD2010と略記)
- 開発言語など:Visual Basic(以下、VBと略記)、コードビハインドモデルで開発
- 使用データベース:SQL Server 2008 Express Edition SP1
今回は、Page.PreLoadイベントコードの作成方法、Session変数の利用方法の知識も必要になります。
【理論編】複雑な名寄せ処理
前回は下図のように「不要なレコードを削除」という単純な方法で名寄せを行いました。
しかし、会員テーブルの住所/電話/メールアドレスなどを、別々のスタッフが分担して登録/修正している場合、名寄せを行う際にデータを組み合わせる必要が出てきます。
組み合わせた結果をいずれかの会員IDに上書きする方法だと、誤操作だった場合の復元手段がなくなるため、以下の方法で処理します。
- 会員IDは新たに払い出す
- 会員テーブルには、2つの列「状況」と「名寄せ先ID」を追加しておく
- 「状況」列には、「A」(生きているデータ:Active)、「U」(名寄せ済みのデータ:Unified)などの値を設定し、通常処理では、「A」のレコードのみを対象とする
- 「名寄せ先ID」列には、「状況」が「U」のレコードに関して、名寄せしたレコードの会員IDを設定し、名寄せ先の会員IDから元の会員IDを検索できるようにする
こうしておけば、元のデータをたぐれます。また、「状況」列は「D」(Deleted)を設定することにより、会員データの論理削除目的にも利用できます。
上記以外にも、会員テーブルと同じ構造の保管用テーブルを用意しておき、名寄せ済みのレコードをここに移してしまう方法も考えられます。現在お使いのシステムで、削除した会員レコードを保管用テーブルに移している場合は、その方法がよいでしょう。
名寄せ処理の画面構成と遷移
前回は2画面でしたが、今回は4画面構成になります。
No. | 画面名 | 目的 |
1 | 検索条件設定画面 | 重複値抽出の条件を指定(前回と同じ) |
2 | 対象会員選択画面 | 名寄せ対象の会員を選択(前回と一部、異なる) |
3 | 項目選択指示画面 | 選択された会員のデータから採用するものを組み合わせて選択 |
4 | 選択指示確認画面 | 組み合わせたデータを確認し、名寄せ処理を実行する |
上記画面のイメージおよび推移は下図のようになります。