川村渇真の「知性の泉」

1日分の処理を確認する仕組み


 ほとんどのデータベースでは、内容の信頼性を高く保つことが要求される。そのためには、データ入力や更新が正しく行われているか、きちんと把握することが大切だ。大型コンピュータの世界では、1件のデータを二人が別々に入力し、両方の値が一致するかチェックする仕組みを用意する。それにより、間違った内容が入力される可能性は、極端に少なくできる。しかし、このような凝った機能は、作成が面倒であり、入力の手間も増えて大変だ。パソコン上の多くのデータベースでは、ここまでやる必要はないだろう。
 考えなければならないのは、正しく処理したかのチェックをどこまで行うかだ。最低限のレベルとして考えられるのは、処理件数の確認である。100件の登録データがあるとき、本当に100件を入力したかどうか、データベース内のレコードで確かめるわけだ。それだけでも、入力し忘れなどのトラブルを効率よく防げる。また、元データの数と登録件数が一致しなかったときに、どのデータを入力していないのか調べる仕組みも必要だ。ただし、実現方法が難しければ、技術力がある人しか組み込めない。そこで、比較的簡単に実現でき、ある程度の効果が得られる方法を、ここでは紹介する。プログラミング機能を備えていないデーターベース・ソフトでも可能な方法を選んだ。ある程度以上の技術力がある人は、データベースのログ機能を利用するなど、より凝った方法を加えると良いだろう。


●1日分の処理を確認する方法が必要

【内容】1日分や半日分というように、ある程度の単位で入力&更新したデータ数が把握できる仕組みを組み込む。調べる単位や区切りは、運用しやすいものを選ぶ。1日で区切る方法が一般的で使いやすし、作りやすいくもある。
【理由】入力作業でのミスは、データの信頼性を低下させる大きな原因となる。入力が正しく行われたかどうか、把握する仕組みはデータベースの必須機能だ。
【作成上の注意点】どのような値を用いて把握するのかも重要。もっとも一般的なのはデータの件数だ。しかし入力件数が多い場合、どのデータが正しくないかを調べるのが難しい。通常は、運用でカバーするか(後述)、データを切り分けて種類ごとの件数表示を用意する。

●作成日と更新日のフィールドを用意する

【内容】データの作成日と更新日を記録するために、フィールド定義に作成日と更新日を用意する。また、データの入力順に並べたい場合は、更新時刻も加える。これらのフィールドを利用することで、入力件数や内容の確認機能が簡単に作れる。ほとんどのデータベースでは、データの自動入力機能として、作成日や更新日が用意されている。それを選ぶだけなので、フィールドの設定は簡単だ。もし自動入力機能がない場合は、付属のプログラム機能で加えるしかない。
【理由】当日に処理した件数を調べるためには、処理した日付の情報をデータベースに記録する必要がある。もっとも簡単なのは、各レコードに作成日と更新日を持つ方法だ。この情報をもとに、当日に処理した分のレコードを調べる。更新時刻を残すと、レコードを入力順に並べることが可能だ。新規入力と更新の両方で、更新時刻の1フィールドを利用できる。
【作成上の注意点】入力日や更新日を変更できないように、自動入力した値を変更しない属性も、一緒に選んでおく。誤った操作からデータを守るためにも、この種の属性は積極的に利用すべき。なお、更新件数を正しく把握するためには、関係のない操作でデータが更新されないように作ることも重要。入力機能以外では、入力や更新ができないように設計する(入力機能の注意点を参照)

●件数確認のための専用レイアウトを用意

【内容】件数や入力内容の確認には、専用のレイアウトを用意する。入力レコード用(図1)と更新レコード用(図2)の2つの確認レイアウトに分け、それぞれに件数表示を含める。各レイアウトを表示する機能では、できるだけ自動化してユーザーの手間を軽減する。レイアウトを選ぶだけで、該当するレコードを自動的に選択して、入力順に並べる。あとでレコードの並び順を変更する機能も付ける。入力レコードは、入力日フィールドの値がマシン日付と一致する条件で選ぶ。更新レコードは、更新日フィールドの値がマシン日付と一致し、入力日フィールドの値がマシン日付よりも小さい(=実行日よりも前の日付の)条件で選ぶ。レコードの並び順を決めるソートキーには、更新時刻フィールドを用いる。
【理由】たいていのデータベース作業では、新規入力と内容変更が分かれている。確認作業もそれに合わせて、別々のレイアウトとして用意する。別のレイアウトだから、該当レコードを自動的に選択して表示する機能も可能だ。両レイアウトとも、入力レコードと件数を一緒に表示することは重要で、使う側の混乱や面倒を避けられる。表示したレコードの並び順を変えられる機能は、元データの件数と登録済み件数が一致しなかったとき、どのデータが正しく入力されていないかを調べるために必要。
【作成上の注意点】各レイアウトの利用目的を明確化するために、レイアウトのタイトルには「本日登録分」や「本日更新分」などの文字を含める。通常の表示用レイアウトとは用途が異なるので、タイトル部分の色も少し違える。レイアウトには全部のフィールドを含め、トラブル時の内容確認でも困らないようにする。作成日や更新日のフィールドを一番左に配置すれば、いつ入力したのか簡単に確認できる。日付データが横に並ぶと見づらいので、更新日の文字サイズを少し小さくする。このレイアウトも、入力や更新ができないように設定する。
【運用上の注意点】簡単な機能だけで実現した仕組みなので、予定外の操作が入ると件数を正しく表示しない。たとえば、誤って削除したレコードを、新規で入力したようなケースだ。このようなトラブルは、作業をメモしておき、最後の件数確認で加算する。また、そのレコードが本当に含まれているかどうかも、レコードを細かく見て確かめる。トラブルが発生したときは、より慎重なフォローが大切である。

図1、当日に登録したデータと件数を表示し、元データと件数が一致しなかったときに、登録内容を見ながら原因を追究する。

図1

図2、当日に更新したデータと件数を表示し、元データと件数が一致しなかったときに、データを見ながら原因を調べる。

図2

●登録・更新・削除の3種類の件数を調べる

【内容】調べるべきレコード件数は、当日に新規登録した件数、内容を更新した件数、削除した件数の3つだ。登録と更新の件数は、確認機能を呼び出して、表示した件数を読めばよい。削除だけは表示することが難しいので、データベースの全レコード数から逆算して求める。式で表すと「削除レコード数」=「前日最後の総レコード数」+「当日の登録件数」−「当日最後の総レコード数」となる。このように、前日最後の総レコード数が必要なので、毎日記録することが重要だ(方法は後述)。
【理由】登録・更新・削除の3つを調べるのは、ほとんどのデータベースで元データが3つに分かれているからだ。件数で把握する意味からも、この3つの値が適している。

●レコード件数は毎日記録する

【内容】確認機能で表示したレコード件数は、専用の用紙を用意して毎日記録する。1カ月分が1枚の用紙に収まるように、一覧表形式で記録用紙を作る。当日の登録レコード件数、更新レコード件数、総レコード数の3つを転記する。それらの値から、当日の削除レコード件数を計算する。記録用紙の代わりに、表計算ソフトのワークシートを用いる方法もある。最初に計算式を入力しておき、データベースで表示した件数を直接入力すると、削除件数などを自動的に計算する。この方法なら、登録件数の推移などを分析したいときでも、そのデータを簡単に流用できる。紙でもワークシートでも、その日に発生したミスやトラブルの記録欄を用意する。とくにレコード数に影響するミスは、必ず記録することを義務づけることが大切だ。その際、どのレコードでトラブルが発生したのか分かるように、キーとなる項目の値もメモする。
【理由】用紙への記録では、見た値をそのまま転記することが重要。このケースは該当しないが、元データを記録しないで計算結果だけを記録する方法では、計算ミスが起こっても、元データがないため発見できない。見たままの値を転記することは、間違いを減らす基本である。その値をもとに、あとで落ちついて計算結果を求める。
【作成上の注意点】記録用紙の設計では、転記する部分と計算する部分を明確に分ける。入力する部分をハッキリさせると、それだけ入力ミスの発生を防げる。

図3、表計算ソフトを用いて、毎日の件数を記録する。トラブルがあった日は、その内容も簡単にメモする。

図3

●より細かい単位で件数をチェックできる運用方法

【内容】1日の入力件数が多い場合は、ある程度の単位で入力を区切り、そのつど件数を調べる。1日に何度か件数を調べるわけだ。前述のような仕組みでは、その時点までの入力の総件数しか分からないので、2回目以降は、当日の登録の合計数でチェックすることになる。
【理由】件数が多くなると、どの部分で入力を間違えたのか発見しづらくなる。入力データをいくつかに分け、そのつど件数を比較すれば、ミスしたデータの発見が容易だ。ただし、あまり細かく分けて何度もチェックすると、入力作業の効率が低下する。実際には、入力ミスが多いかどうかも、区分けの要素として加わる。100件程度の区分けから始めて、運用しながら調整するのが現実的だろう。
【運用上の注意点】1日に何度か件数をチェックする場合は、その日の前のチェック結果をきちんと記録しておくことが重要だ。専用のチェック用紙を用意して、チェック結果を記録するルールにする。

●件数不一致での対処方法は、事前にまとめておく

【内容】レコード件数と元データの件数が一致しなかったときの対処方法は、あらかじめ決めておく。手順を紙に書いて、誰もが利用できるように用意する。どの件数が一致しないかで対処方法は異なるが、どの場合でも、本当に一致しないのか再確認することだけは含める。あとは、トラブル内容に応じて、代表的な対処方法を実施する(表1)。件数の再確認では、元データの数え間違いのほうが、ミスした可能性は高い。ゆっくりと数えて、正しい件数を調べる。
【理由】トラブルが発生したときは、あせってミスを起こしやすい。できるだけスムーズに対処するためには、手順を詳しく書いておくのが一番だ。
【作成上の注意点】対処方法の説明では、できるだけ詳しく書くことが大切だ。また、実際に試してみて、分かりにくい部分や間違う部分を見付け、改良したほうがよい。このようにすると、本番で戸惑う可能性を低くできる。
【トラブル対処での注意点】もっとも大変なのは、必要なデータを誤って削除したときだ。削除したレコードを特定できれば、バックアップのファイルから各フィールドの値を調べ、再入力する。もし特定できないときは、バックアップのファイルで1日前に戻し、1日分を再入力するしかない。このとき、再入力するデータは、手で入力しなくても済む。バックアップから戻す前に、当日入力したレコードだけ、テキストファイルとして保存する。それを読み込んで登録すれば、新規に入力する分だけは手作業が不要だ。データベース・ソフトが同一キーのレコードを上書きできれば、更新分を手作業で入力する必要もない。このような手順も、対処方法のマニュアルに加えることで、修復作業でのトラブルを回避できる。

表1、トラブルの内容ごとに、代表的な原因や対処方法が決まる。これをもとに、詳しい対処手順を作成する。

トラブル内容代表的な原因代表的な対処方法

元データの登録件数が多い登録忘れ未処理分を登録
DB側の登録件数が多い余分な登録ミス登録分を削除

元データの更新件数が多い更新忘れ未処理分を更新
DB側の更新件数が多い余分な更新更新前の状態に戻す(再更新)

元データの削除件数が多い削除忘れ未処理分を削除
DB側の削除件数が多い余分な削除削除したデータを登録

●データベースで標準で持つべき機能

 データベース側の機能的な限界もあり、この程度の機能を実現するのでさえ、かなり面倒だ。理想的には、この種の機能こそ、データベース・ソフトが標準で用意すべきである。その日の登録分をログとして残し、削除したデータを簡単に復活できる機能まで含めてだ。登録内容の確認機能は、どんな内容のデータベースを作るときでも共通なので、データベースごとにレイアウトやフィールドなどを作成するのは無駄である。しかし、この種の機能が付いたソフトを、いまだに見たことがない。開発者側に欠けている視点の1つと言える。今後のバージョンアップでは、きちんとしたデータベースの構築を支援する機能も、十分に加えてほしいものだ。といっても、ほとんど期待できない点は非常に悲しい。

(1996年7月12日)


下の飾り