履歴持ちマスタの参照
内容
社員マスタなど過去の情報も保持しておくために改定日をキーに含め履歴を持つようにしてあります。
例 社員00001が結婚して9/16から姓が変更した場合
社員ID | 改定日FROM | 改定日TO | 名前 |
---|---|---|---|
00001 | 20050401 | 20080915 | 鈴木 花子 |
00001 | 20080916 | 99999999 | 佐藤 花子 |
※最終履歴の場合は、改定日TOの項目に99999999をセット
※キー 自然キーなのは置いといて(^^;
請求年月を参照してデータを吐き出す処理があり、その中の項目には社員コードがあり社員マスタを参照して社員名をセットするようしています。
問い合わせ
稼動から数ヶ月経って、ユーザーからエラーとなりデータが吐き出せないとの問い合わせがありました。
データチェックの中に社員名が未セットならエラーとなるように仕組んでいたのですが、どうやらそのエラーでひっかかり吐き出せていなかったのです。
原因
原因を探っていくと、データの社員が途中入社で改定日が2008/08/04で登録されている場合に発生することが分かりました。
実は、仕様書に「請求年月+1」としてから、社員マスタのデータを抽出するようになっていて、請求年月が2008/08の場合、2008/08/01が条件となります。(日付は数値型として年月日の8桁で登録されている)
- SQLのWHERE条件
請求年月+1 BETWEEN 改定日FROM AND 改定日TO 20080801 BETWEEN 20080804 AND 99999999
「請求年月+1」としていた為に、途中入社の場合に抽出条件から外れていたのです。
他の途中入社の方が今まで引っかからなかったのは、単純に過去入社だからです。
対応
修正対応としては、履歴の先頭の改定日FROMを強制的に1日になるような社員マスタのビューを作成して、そのビューを参照させるようにしました。
雑感
社員名が空になるのさえ防げればいいとのことで直近の日にして抽出するようにとの指示でそうしたけれど、だったら年月だけで比較した方が簡単だったかも・・・
それに同年月に変更があったら、後履歴を参照すべきかってか
そもそも「請求年月+1」としている仕様の時点で整合性としてよく無いわな。