システム開発のノウハウ(詳細)(1999-12-06作成)

●テーブル設計の詳細

  1. insertを基本としupdateを可能な限りしないテーブル設計とします、そのためには発生単位でテーブル化する事がポイントです、例えば何々計画、何々実績等です。
  2. 単価等時系列でupdateする情報は開始日(d_begin_date char(8))と終了日(d_end_date char(8))を設け単価自身はinsertで対応します、この時重要なことは終了日の扱いです、一般的には終了日が空白の場合は終了日なしですが、単価が変更された場合は終了日を入れる必要があります、これを人間が入れると間違いが出るためプログラムで入れます、そのために終了日はその日の前日までとし次の開始日と同じにする事によりプログラミングをやり易くします、後で見た時も連続性の判定が判断しやすくなります。
  3. バッチ処理等で使用したかの判定をマークに設定しようとするとupdateしなければなりません、この場合、使用済み時間をもち作成時間(z_add_time)等が前回使用済み時間以上今回使用済み時間未満データを使用するようにし判定マーク等のupdateはしないようにします。
  4. 年月日のデータはchar(8)で設定して下さい、データベースの日付の設定で運用するとデータベースの環境設定により、思わぬ結果となる場合があります、特にMS SqlServerとOracleでは全く異なる結果となるので注意下さい。
  5. 検索の時間がかかるような場合はサマリーテーブルを作っておきます、この時注意する点は元のテーブルがあれば復元できる設計にし万が一の場合に備えて確実に保管すべきテーブルを少なくしておき、運用時のトラブルを最小限に抑えるようにする事です。

●プログラム設計の詳細

  1. どの時点で何回実行しても全く問題なく最新の状態になるようにプログラムを設計します、特に時間起動処理は途中で倒れた場合そのジョブを再スタートすれば問題無いように設計します。
  2. デッロックを起こしそうな長時間テーブルを使用するプログラムは可能な限りテーブルをコピーしコピーしたテーブルを利用することによりデッロックを起こさないように設計します。

以上。

All Rights Reserved, Copyright (C) 2002-2004 Nobumichi Harasawa.