データを「移す」のは簡単、「統合する」のは難しい
前回の記事で、別のパソコンで登録した生徒はIDが異なるという問題を紹介しました。 この記事では、その問題がなぜ厄介なのかを詳しく解説します。
協調採点のシナリオ
一括採点では、採点作業を複数のパソコンで分担することがあります。 これを協調採点と呼んでいます。
協調採点の流れ
- A先生のパソコンでプロジェクトを作成し、.scoreファイルで書き出す
- B先生のパソコンに読み込んで、一部の生徒を採点
- B先生のパソコンで.scoreファイルを書き出す
- A先生のパソコンに読み込んで、両方の採点結果を合わせる
この流れを実現するため、 プロジェクトの書き出し・読み込み機能を実装しました。 一括採点のデータベースには多数のテーブルがあり、これらを1つの.scoreファイルにまとめます。
データを「移す」のは簡単
もし「すべてを新規追加」するだけなら、実装は単純です。 ファイルの中身をそのままコピーして、IDだけ新しく振り直せばよいからです。
- ファイルの中身をまるごとコピー
- IDだけ新しく振り直す
- 関連するデータのIDも一緒に変換
機械的な処理なので、難しくありません。
データを「統合する」のは難しい
しかし、協調採点のシナリオを考えると問題が起きます。
A先生のパソコンにいる「山田太郎」
↓ .scoreファイルで書き出し
B先生のパソコンに読み込み → 「山田太郎」が登録される
↓ 採点してまた書き出し
A先生のパソコンに読み込み → 「山田太郎」がもう1人登録される!
すべてを新規追加すると、同じ「山田太郎」が何人も生まれてしまいます。 A先生のパソコンにはもともと「山田太郎」がいるのに、 読み込みで別の「山田太郎」が追加されてしまう。
これでは困ります。既存データと同一なら、新規追加ではなく統合しなければなりません。
IDでは同一人物を判定できない
前回の記事で解説したとおり、IDは自動生成されます。 同じIDなら同一人物として統合すればいい...と思いたいところですが、 別のパソコンで同じ生徒を登録すると、IDが異なります。
A先生のパソコンで登録した山田太郎: ID = "a1b2c3d4-e5f6-..."
B先生のパソコンで登録した山田太郎: ID = "x9y8z7w6-v5u4-..."
同じ人なのに、IDが違う!IDは自動生成なので、同じパソコンで別の人を登録しても重複しません。 しかし、別のパソコンで同じ人を登録してもIDは揃いません。 IDだけでは、統合すべきかどうかを判断できないのです。
データを「移す」だけなら、すべてを新規追加すればよいので簡単です。 しかし、協調採点のように既存データと「統合」する必要がある場合、 同じ人を正しく認識しなければなりません。
IDは別のパソコンでは異なる値になるため、ID照合だけでは解決できません。 次の記事では、この問題にどう対処したかを解説します。