システム設計の話 その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)の手間が増えて効率が悪くなる事があります。
機械的に正規化のルールでテーブルを設計するのは、すべてにおいて適切であるとは言えないと思います。
効率よく開発できることも大切だと思います。
以上、今回でテーブル設計はすべて完了となりました。
次は、画面設計の予定です。
システム設計の話 その11・テーブル設計 商品マスタ [システム設計の話]
今回は、商品マスタテーブルの項目内容を考えていきます。
商品マスタは、商品に関する情報を登録します。
今回考えているシステムでは、帳票に印刷するときの商品名くらいがあれば事足ります。
項目名 | データ型 | 桁数 |
商品CD | 十進型 | 整数5桁 |
商品名 | テキスト型 | 全角20文字 |
商品名カナ | テキスト型 | 半角50文字 |
売単価 | 十進型 | 整数9桁 |
登録日 | 日付時刻型 | |
変更日 | 日付時刻型 | |
削除 | 十進型 | 整数1桁 |
特に用途はありませんが、カナ項目も付けました。実際のシステムだとカナ項目は、検索や並び替えで必要になってくるので必須です。今回は使いませんが。
また、今回は売上管理なので、商品の販売価格情報として、「売単価」項目を設けています。
ただし、実際の販売価格が、この項目で一律になるわけではありません。同じ商品であっても、値段は販売するその時その時の状況で変わることがよくあります。
そのため、値段については、売上伝票明細データに項目を設けて、そこに持つようにしています。
「売単価」項目は、デフォルトと言うか、標準価格的な参考値な項目となります。
今回の商品マスタは、いたってシンプルな構成としましたが、実際のシステムでは商品マスタの項目数が100を超えることもあります。
ここでもうちょっと商品マスタについて述べてみようかと思いましたが、業態によって扱う商品の特徴が異なるし、システムの目的でも必要な項目が異なってきます。
また、別の機会に掘り下げていきたいと思います。