« XEAD Modelerがベクター出力に対応 | トップページ | 「だるいコーディング」を駆逐した後に残る仕事 »

2014.12.08

システム変数とシステム区分の設計

 業務システムのセッションにおいて、ユーザ企業の社名や所在地といった規定値が利用される。この種の項目は「システム変数」や「システム区分」といったテーブルに格納される。これらについて説明しよう。システムの基礎まわりを理解するための参考にしてほしい。

 注文書発行等のプログラムでは「自社名」を印字する必要がある。その文字列をプログラムの中に直接書いてしまうやり方では、社名変更や企業合併に対応しにくい。その種の情報はシステムのどこかに一元的に保持しておいて、各プログラムから参照できるようになっていたほうがいい。そのためのテーブルが「システム変数」で、たとえば次のように設計される。これらのシステム変数値をID指定で取得するための関数が用意されることになる。

[システム変数] {変数ID}、変数値
         COMP_NAME 吉本工業株式会社
         COMP_ADRS 新宿区歌舞伎町1-1

 変数によっては、キーに対していくつかの値をとる場合がある。たとえば「受注ステータス」の値は、"10"であれば"受注済/未回答"を表し、"20"であれば"回答済/未出荷"を表すといった具合だ。その種の変数は「システム区分」として次のようなテーブルで保持される。主キーが区分の種別(区分ID)と区分値との組み合わせになっている。

[システム区分] {区分ID,区分値}、区分摘要
         JYUSTS   10  受注済/未回答
         JYUSTS   20  回答済/未出荷
         JYUSTS   30  出荷済

 これに似たテーブルとして「ユーザ区分」がある。典型的な例としては次のような情報が格納される。ようするにこのテーブルは、属性が"摘要"だけの単純なマスター群を統合したものである。

[ユーザ区分] {区分ID,区分値}、区分摘要
       CURRENCY YEN  円
       CURRENCY EUR  ユーロ
       CURRENCY USD  ドル
         HINSYU  100  品種1
         HINSYU  200  品種2
         HINSYU  200  品種3

 ユーザ区分とシステム区分は同じ構造をとっているが、データの取り扱い方針が異なる。システム変数やシステム区分のキー値はプログラムコードの中で記述されることが許容されるが、ユーザ区分については許容されない。

 この論点は重要だ。たとえばプログラムの中で「得意先コードが"8245"の場合、標準単価に0.8を掛け合わせた値を受注単価とする」などと書かれていたらギョッとしないだろうか。この実装方針は、新たな得意先コードが追加されるたびに、この種のロジックをプログラムに組み込む羽目になることを予感させる。じっさい私はそんなコードを目にしたことがあるが、そのシステムの保守性は最悪だった。

 ここらへんの事情は、データの管理主体を考えるとわかりやすい。システム変数やシステム区分のインスタンスは、システム管理者によって維持される。それゆえに、プログラムはそれらの値を規定値として扱える。いっぽう、得意先コードやユーザ区分のインスタンスはユーザによって維持されるものなので、システムはそれらを規定値としては扱えない。同じデータ構造をとってはいるが、両者のシステム上の位置づけは異なっている。

 ただし、実装レベルでは「システム区分」と「ユーザ区分」とを厳格に区別する必要はないと考えていい。後者の管理主体がユーザであるとはいえ、区分IDの新設に関してはユーザに自由はない。けっきょくは両者とも厳格に運用されなければいけない。じっさい私が公開しているモデルライブラリでは、両者を「ユーザ定義区分テーブル」の名前でまとめて、システム管理者に維持を任せるようにしている。

 この種のシステム制御系テーブルとしては、他に「採番テーブル」や「カレンダーテーブル」といったものが含まれる。システムのインフラとなる部分なのでしっかり理解しておきたいが、実務でそれらの設計について悩む必要はほとんどない。実装基板のレベルでこれらのテーブルや関連する関数が組み込まれていることが多いからだ。言い換えれば、そこらへんの充実具合が実装基板の重要な評価項目である。ゆえにシステム制御系テーブルに関する知識は、実装基板を評価するために欠かせないものだ。


当ブログでの参考記事:
「営業カレンダー」のモデリング

|

« XEAD Modelerがベクター出力に対応 | トップページ | 「だるいコーディング」を駆逐した後に残る仕事 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: システム変数とシステム区分の設計:

« XEAD Modelerがベクター出力に対応 | トップページ | 「だるいコーディング」を駆逐した後に残る仕事 »