SSブログ

システム設計の話 その12・テーブル設計 コードマスタ [システム設計の話]

 さて、テーブル設計の最後テーブル、コードマスタです。

 プログラムでは、ある状態を識別する場合、数値に意味を持たせて、その値で判断することが良くあります。
 例えば、性別の場合は、1=男性、2=女性、と言った感じです。

 こういった判断のための値を、プログラム中にそのまま書いてしまうのは、あまり良くないとされています。
 個人で作るプログラムなら良いのですが、仕事で作成するシステムのプログラムとなると、自分以外の人がプログラムを修正する場合や、他のプログラムとの共通化を考えると、きちんと管理する必要があるからです。

 Constで宣言する方法もよく使われますが、データベースを使用するシステムの場合、テーブルに入れておくと便利な場面が多々あります。
 データの区分コードに対応する名称を付けて、SELECT結果を得たい場合などは、テーブルを結合する事で名称を取り出すことができます。

 ただ、コードの種類ごとにテーブルを作成すると、テーブルの数が増えて管理が大変になります。件数が多い場合は個別テーブルにした方が良いですが、だいたいの場合、数件であることが多いです。
 こういった細々したコード情報をまとめて管理するのが、コードマスタと言うことになります。

 以上、コードマスタについて云々書きましたが、今回考えてるシステムの内容では、実は使うあてがありません。
 もしかしたら使うかもと思って、テーブル一覧にあげておいただけなの。
 ですので、今回はコードマスタの一例としてご覧下さい。
 キーは「グループCD」と「CODE」項目です。

項目名 データ型 桁数
グループCD 十進型 整数3桁
CODE 十進型 整数5桁
グループ名 テキスト型 100文字
コード名 テキスト型 100文字
数値 十進型 整数8桁、小数4桁
文字列 テキスト型 100文字
備考 テキスト型 100文字
登録日 日付時刻型  
変更日 日付時刻型  
削除 十進型 整数1桁

 例えば、こういう感じで登録します。

 先ほどの性別例は、グループCD=2のようになります。
 グループCD=1 AND CODE=数値 と言う条件で、コード名を取り出します。

 グループCD=1の消費税率の例は、消費税率のパーセント数を登録しています。
 こうしておけば、消費税率が変わったとしても、ここの値を変更すれば、以後そのパーセントで計算されるように、プログラムを作ることができます。(実際の消費税率変更の対応は、そんなに簡単にいきませんが)

 グループCD=3の送料の例は、送り先の地区の名称とともに、その地区によって決まる送料代金の値も一緒に持たせています。
 このような内容を一緒に登録しておくことで、例えば入力画面で送り先地区をユーザーが選択したら、送料を表示させ、その金額もあわせて登録されるようにする、と言った処理が可能になります。
 「数値」「文字列」項目のように、任意で登録できる項目を設けることで、いろいろな使い方ができるようになります。

 あと、蛇足ではありますが、このコードマスタテーブル、「グループ名」項目をテーブルの正規化という考え方でとらえると、冗長している項目となります。
 同じ内容が複数行に表示されているので、ぱっと見て無駄な感じがするかと思います。
 「正規化」と言う考え方だと、こういった項目は別テーブルにするのが正しいことになります。
 「グループ名」項目はこのコードマスタテーブルには持たず、別に「グループCDマスタ」を作り、そちらに持たせるのが良いとされます。
 この考え方は、「その8・テーブル設計 売上伝票」でも説明しています
 件数が多くなる場合はこうした方が、データとして管理しやすいのですが、コードマスタのように件数が少なく、用途が限定されているテーブルについては、正規化するとプログラム(SQL)の手間が増えて効率が悪くなる事があります。
 機械的に正規化のルールでテーブルを設計するのは、すべてにおいて適切であるとは言えないと思います。
 効率よく開発できることも大切だと思います。

 以上、今回でテーブル設計はすべて完了となりました。
 次は、画面設計の予定です。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。