この章では、前章「テーブルの正規化」と同じ受注データを例としてテーブル設計の仕方を説明します。
テーブル名やフィールド名には日本語を使用することができますし、そのほうが見た目分かりやすいのですが、このBase中級コースでは「クエリー」の章でSQLについても触れます。SQLコードを直接入力する場合の操作上の煩わしさを避けるため、テーブル名やフィールド名は半角英数字に限定して命名することにします。
Base上のテーブル作成作業(これを実装といいます)はあとにして、まずは作ろうとしているテーブルの設計をしましょう。
テーブル「受注伝票(Slip)」設計
トランザクション・テーブルとしてテーブル「受注伝票(Slip)」を上図のように構成します。
なお、例に挙げた「受注伝票」は日本語名で、いわば愛称です。これはBase上どこにも登録しません。また「Slip」はテーブル名で、実装する際に登録します。
【各フィールドの解説】
①ID:プライマリー・キーです。実装する場合は2番目の項目Dateから定義し、5番目のNoteまで定義した後に保存しようとするとシステムが「プライマリーキーを作成しますか」と訊いてきますので、「はい」と応えると自動的にフィールド名「ID」、整数[INTEGER](長さは10文字固定)でプライマリーキーが作成されます。IDは修正モードで自動採番設定します。
②Date :書式を「YY/M/D」とします。
③Customer_ID:フィールドタイプを整数[INTEGER]とし、テーブル「取引先マスター(Customer)」のIDとリレーションシップをとります(後述)ので、そうした関係が一目で分かるようなフィールド名がいいでしょう。
④Staff_ID:フィールドタイプを整数[INTEGER]とし、テーブル「担当者マスター(Staff)」のIDとリレーションシップをとります。
⑤Note:受注伝票のヘッダーまたはフッターに使用する備考です。長さを50文字に設定します。
テーブル「商品明細(SlipDetail)」設計
トランザクション・テーブルとしてテーブル「商品明細(SlipDetail)」を上図のように構成します。
【各フィールドの解説】
①Slip_ID:プライマリー・キーです。整数[INTEGER]とし、テーブル「受注伝票(Slip)」のIDとリレーションシップをとります。
②Item_ID:プライマリー・キーです。テキスト(固定)[CHARA]とし、テーブル「品目マスター(Item)」のIDとリレーションシップをとります。①と②は複合キーのプライマリーキーです。長さを4文字に設定します。
(注)複合キーのプライマリーキー指定法については次章で説明します。
③Quantity:小数を扱うことを考慮してフィールドタイプを数値[NUMERIC]とし、長さを10文字に設定します。また、小数点以下の桁を2桁に指定します。
④Note:受注伝票の明細毎に使用する備考です。長さを50文字に設定します。
テーブル「取引先マスター(Customer)」設計
テーブル「受注伝票(Slip)」から参照されるテーブル「取引先マスター(Customer)」を上図のように構成します。
ちなみに、これは運用上の問題ですが、日本語名称に「受注先」や「顧客」を使わず、「取引先」としている理由は、システムを拡張していくと伝票発行先の企業が受注先とは限らず、通常は仕入先である企業に納品する場合があるからです。こうしたケースを想定した場合、受注先・仕入先どちらにも通用する「取引先」と称するのが無難です。システムを設計する場合は現状の商慣習はもとより、将来拡張された場合のシステムの適用範囲を考慮してテーブルやフィールドの名称を考えるとよいでしょう。
【各フィールドの解説】
①ID:プライマリー・キーです。整数[INTEGER]とし、自動採番設定します。
②Name:テキスト[VARCHARA]とし、長さを20文字に設定します。
③ZipCode:テキスト[VARCHARA]とし、「–(ハイフン)」を含めて長さを8文字に設定します。
④Adress:テキスト[VARCHARA]とし、長さを50文字に設定します。
⑤TelNo:テキスト[VARCHARA]とし、「–(ハイフン)」を含めて長さを15文字に設定します。
注)文字フィールドのフィールドタイプにはテキスト(固定)[CHARA]を指定することも可能ですが、Adressのように入力する文字の長さが一様でないフィールドにテキスト(固定)を指定する場合、未入力部分にNullが設定されてしまうので、印刷時の効果等をよく考慮してフィールドタイプを指定するようにしましょう。
テーブル「担当者マスター(Staff)」設計
テーブル「受注伝票(Slip)」から参照されるテーブル「担当者マスター(Staff)」を上図のように構成します。
【各フィールドの解説】
①ID:プライマリー・キーです。整数[INTEGER]とし、自動採番設定します。
②Name:テキスト[VARCHARA]とし、長さを20文字に設定します。
③TelNo:テキスト[VARCHARA]とし、「–(ハイフン)」を含めて長さを15文字に設定します。
④Department_ID:テキスト(固定)[CHARA]とし、長さを4文字に設定します。テーブル「部門マスター(Department)」のIDとリレーションシップをとります。
⑤Gender:テキスト(固定)[CHARA]とし、長さを1文字に設定します。
ここでコード体系について考えてみましよう。性別のように男性か女性かの二者択一の場合、0か1としてもいいのですが、コードを見て直ぐに性別が分かるm(male)かf(female)の一文字とするのもひとつの方法です。
テーブル「部門マスター(Department)」設計
テーブル「担当者マスター(Staff)」からさらに参照されるテーブル「部門マスター(Department)」を上図のように構成します。
【各フィールドの解説】
①ID:プライマリー・キーです。これまでプライマリー・キーはシステム依存生成としてきましたが、ここでは手入力で登録します。フィールドタイプをテキスト(固定)[CHARA]とし、長さを4文字に設定します。
ここでもコード体系について考えてみましよう。組織を表すコードの場合は階層構造(ヒエラルキー)が分かるような体系にするといいでしょう。
ここでは下記のルールで運用してみます。
【部門IDコード化ルールの例】
ルール1. コードの長さは4桁とする。
ルール2. 最初の1桁は英大文字とし、組織内容を連想できるものとする。
例)G:総務部(General)、S:営業部(Sales)
ルール3. 2桁目は部レベルの組織を表し0~9の数字とする。
ルール4. 3桁目は課レベルの組織を表し0~9の数字とする。
ルール5. 4桁目は係または営業所レベルの組織を表し0~9の数字とする。
②Name:テキスト[VARCHARA]とし、長さを10文字に設定します。
テーブル「品目マスター(Item)」設計
テーブル「商品明細(SlipDetail)」から参照されるテーブル「品目マスター(Item)」を上図のように構成します。
ここでも日本語名称について考慮します。商品明細に使用するのですから「商品マスター」でもいいのですが、納品対象として一般商品以外に「修理作業」など、サービス業務も含む場合、マスターの名称として「商品」という呼び名がそぐわなくなります。このような場合は「品目マスター」とするのが無難でしょう。また、「原材料」等、通常商品としては扱われない物を同じマスターに登録したい場合も「品目マスター」としておくと違和感がありません。仕入れた原材料をそのまま他企業に納品することも珍しいことではないからです。
【各フィールドの解説】
①ID:プライマリー・キーです。テキスト(固定)[CHARA]とし、長さを4文字に設定します。
品目IDのコード体系についても考えてみましよう。
取り扱う品目の規模によって体系づけが異なりますが、ここでは下記のルールで運用してみます。主力商品コードの一覧表がA4用紙1ページに収まる規模であれば、覚えやすいコード体系になります。
【品目IDコード化ルールの例】
ルール1. コードの長さは4桁とする。
ルール2. 最初の1桁は英大文字とし、商品のグループを連想できるものとする。
例)D:飲料水(Drink)、S:文房具(Stationary)
ルール3. 2桁目~4桁目は0~9の数字とする。
②Name:長さを20文字に設定します。
③Unit_ID:テキスト[VARCHARA]とし、長さを4文字に設定します。テーブル「単位マスター(Unit)」のIDとリレーションシップをとります。
④UnitPrice:長さを10文字に設定します。
⑤TaxRate:長さを3文字、小数点以下の桁を2に設定します。
テーブル「単位マスター(Unit)」設計
テーブル「品目マスター(Item)」からさらに参照されるテーブル「単位マスター(Unit)」を上図のように構成します。
【各フィールドの解説】
①ID:プライマリー・キーです。テキスト[VARCHARA]とし、長さを4文字に設定します。
単位IDのコード体系はコードそのものにシンボルのような意味を持たせるスタイルをとってみます。
一般的に受注管理で使用する単位の種類はそれほど多くありません。このような場合に覚えやすいコード体系となります。正式な名称はフィールドのNameに登録するといいでしょう。
ここでは下記のルールで運用してみます。
【単位IDコード化ルールの例】
ルール1. コードの長さは1桁以上4桁以内とする。
ルール2. コードは英大文字または数字とし、単位の内容を連想できるものとする。
例)CS:ケース(Case)、DZN:ダース(Dozen)、M2:㎡(平方メートル)
②Name:長さを6文字に設定します。
リレーションシップ
Baseでは複数作成したテーブルのデータをほかのテーブルのデータと関連付けて利用することができます。この関連付けのことをリレーションシップといいます。
Base上でリレーションシップを設定する手順については後述しますが、ここでは各テーブル間のリレーションシップのイメージを掴んで下さい。
下図が設定したリレーションシップの概観です。トランザクション・テーブルSlip、SlipDetailを中心として、それぞれのテーブルにある参照キーと参照先のマスター・テーブルのプライマリーキーがn:1の関係でリレーションシップが構成されていることが確認できます。