社員マスタをつくりたい と思ったら まず 会社の各部署をまわって みんながどんなふうに社員名簿を利用しているのか調査しましょう
みんなから Excel の表のコピーをもらい すべての項目をつなげてひとつのレコード(ひとり分のデータ)にしましょう
データベースの正規化
社員リストをあつめた項目をすべてエクセルにしてみましょう
このままではとても無駄と問題が多いデータといえます
順に 『データベースの正規化』をしていきましょう
CD | 社員名 | 部署 | 生年月日 | 年齢 | 資格名1 | 資格日1 | 資格名2 | 資格日2 | 資格名3 | 資格日3 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 鈴木 | 総務 | 1982/1/2 | 41 | 普通自動車 | 2000/5/8 | 衛生管理者 | 2015/1/5 | ||
2 | 山本 | 経理 | 1980/4/9 | 42 | 建設経理 | 2010/3/2 | ||||
3 | 佐藤 | 業務 | 1978/4/2 | 44 | 運行管理 | 1997/2/1 | 危険物乙4 | 2000/1/3 | ||
4 | 田中 | 建機 | 1965/4/3 | 57 | 高所作業 | 2020/3/1 | 玉掛 | 1998/9/1 | クレーン | 1998/1/5 |
5 | 竹本 | 建機 | 1991/7/2 | 31 | 玉掛 | 2010/4/3 | クレーン | 2010/4/7 | 大型特殊 | 2012/3/2 |
6 | 桃井 | 総務 | 2000/3/5 | 22 | 普通自動車 | 2020/4/2 |
社員マスタにこのような項目(フィールド)があります (ざっくりとですが)
社員CD(コード) 社員名 部署 生年月日 年齢 1個目の資格名 1個目の資格を取得した日付 ~ 社員の中で一番たくさん資格を持っている人の数の分 項目が増えます
これを例にデータベースの正規化を行ってみましょう
部署マスタの分割
部署フィールドは 会社には部署があります 配属先を社員マスタにもたせることはのちに 部署ごとに集計したり分析するために必要な項目です
しかしフィールドとしてはどうでしょう
これではExcel での失敗が改善されません
そこで 部署マスタを別テーブルでつくります
部署CD | 部署名 |
---|---|
1 | 営業 |
2 | 総務 |
3 | 経理 |
4 | 業務 |
5 | 建機 |
このように 部署マスタを設けることで 社員マスタに登録する部署は 部署CD の数値のみ
これで Excel のように 総務 総務部 〃(同じ) というあいまいな文字がはいらず 部署マスタの 部署CDからしか入力できなくなります これでデータが安全に整合性のとれたミスのない データになります
CD | 社員名 | 部署CD | 生年月日 | 年齢 | 資格名1 | 資格日1 | 資格名2 | 資格日2 | 資格名3 | 資格日3 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 鈴木 | 2 | 1982/1/2 | 41 | 普通自動車 | 2000/5/8 | 衛生管理者 | 2015/1/5 | ||
2 | 山本 | 3 | 1980/4/9 | 42 | 建設経理 | 2010/3/2 | ||||
3 | 佐藤 | 4 | 1978/4/2 | 44 | 運行管理 | 1997/2/1 | 危険物乙4 | 2000/1/3 | ||
4 | 田中 | 5 | 1965/4/3 | 57 | 高所作業 | 2020/3/1 | 玉掛 | 1998/9/1 | クレーン | 1998/1/5 |
5 | 竹本 | 5 | 1991/7/2 | 31 | 玉掛 | 2010/4/3 | クレーン | 2010/4/7 | 大型特殊 | 2012/3/2 |
6 | 桃井 | 2 | 2000/3/5 | 22 | 普通自動車 | 2020/4/2 |
資格テーブルに分割
つぎに 資格名1 日付1 から列挙してある資格情報です 最大保有者の数にあわせた項目も取り方は どうみても無駄ですね
横に列挙されていた 資格を 資格の数だけ縦に繰り返します
社員CD | 社員名 | 部署CD | 生年月日 | 年齢 | 資格名 | 日付 |
---|---|---|---|---|---|---|
1 | 鈴木 | 2 | 1982/1/2 | 41 | 普通自動車 | 2000/5/8 |
1 | 鈴木 | 2 | 1982/1/2 | 41 | 衛生管理者 | 2015/1/5 |
2 | 山本 | 3 | 1980/4/9 | 42 | 建設経理 | 2010/3/2 |
3 | 佐藤 | 4 | 1978/4/2 | 44 | 運行管理 | 1997/2/1 |
3 | 佐藤 | 4 | 1978/4/2 | 44 | 危険物乙4 | 2000/1/3 |
4 | 田中 | 5 | 1965/4/3 | 57 | 高所作業 | 2020/3/1 |
4 | 田中 | 5 | 1965/4/3 | 57 | 玉掛 | 1998/9/1 |
4 | 田中 | 5 | 1965/4/3 | 57 | クレーン | 1998/1/5 |
5 | 竹本 | 5 | 1991/7/2 | 31 | 玉掛 | 2010/4/3 |
5 | 竹本 | 5 | 1991/7/2 | 31 | クレーン | 2010/4/7 |
5 | 竹本 | 5 | 1991/7/2 | 31 | 大型特殊 | 2012/3/2 |
6 | 桃井 | 2 | 2000/3/5 | 22 | 普通自動車 | 2020/4/2 |
そして 所有資格だけの テーブルに分割します
社員CD | 社員名 | 部署CD | 生年月日 | 年齢 | 資格名 | 日付 |
---|---|---|---|---|---|---|
1 | 鈴木 | 2 | 1982/1/2 | 41 | 普通自動車 | 2000/5/8 |
1 | 鈴木 | 2 | 1982/1/2 | 41 | 衛生管理者 | 2015/1/5 |
2 | 山本 | 3 | 1980/4/9 | 42 | 建設経理 | 2010/3/2 |
3 | 佐藤 | 4 | 1978/4/2 | 44 | 運行管理 | 1997/2/1 |
3 | 佐藤 | 4 | 1978/4/2 | 44 | 危険物乙4 | 2000/1/3 |
4 | 田中 | 5 | 1965/4/3 | 57 | 高所作業 | 2020/3/1 |
4 | 田中 | 5 | 1965/4/3 | 57 | 玉掛 | 1998/9/1 |
4 | 田中 | 5 | 1965/4/3 | 57 | クレーン | 1998/1/5 |
5 | 竹本 | 5 | 1991/7/2 | 31 | 玉掛 | 2010/4/3 |
5 | 竹本 | 5 | 1991/7/2 | 31 | クレーン | 2010/4/7 |
5 | 竹本 | 5 | 1991/7/2 | 31 | 大型特殊 | 2012/3/2 |
6 | 桃井 | 総務 | 2000/3/5 | 22 | 普通自動車 | 2020/4/2 |
ID | 社員CD | 資格CD | 日付 |
---|---|---|---|
1 | 1 | 普通自動車 | 2000/5/8 |
2 | 1 | 衛生管理者 | 2015/1/5 |
3 | 2 | 建設経理 | 2010/3/2 |
4 | 3 | 運行管理 | 1997/2/1 |
5 | 3 | 危険物乙4 | 2000/1/3 |
6 | 4 | 高所作業 | 2020/3/1 |
7 | 4 | 玉掛 | 1998/9/1 |
8 | 4 | クレーン | 1998/1/5 |
9 | 5 | 玉掛 | 2010/4/3 |
10 | 5 | クレーン | 2010/4/7 |
11 | 5 | 大型特殊 | 2012/3/2 |
12 | 6 | 普通自動車 | 2020/4/2 |
資格マスタの分割
資格CD | 資格名 |
---|---|
1 | 普通自動車 |
2 | 衛生管理者 |
3 | 建設経理 |
4 | 運行管理 |
5 | 危険物乙4 |
6 | 高所作業 |
7 | 玉掛 |
8 | クレーン |
9 | 大型特殊 |
資格テーブルの完成
各社員にひもづく所有資格のテーブルが完成しました
ID | 社員CD | 資格CD | 日付 |
---|---|---|---|
1 | 1 | 1 | 2000/5/8 |
2 | 1 | 2 | 2015/1/5 |
3 | 2 | 3 | 2010/3/2 |
4 | 3 | 4 | 1997/2/1 |
5 | 3 | 5 | 2000/1/3 |
6 | 4 | 6 | 2020/3/1 |
7 | 4 | 7 | 1998/9/1 |
8 | 4 | 8 | 1998/1/5 |
9 | 5 | 7 | 2010/4/3 |
10 | 5 | 8 | 2010/4/7 |
11 | 5 | 9 | 2012/3/2 |
12 | 6 | 1 | 2020/4/2 |
そして 資格情報をなくし 社員の基本情報だけ残した 社員マスタができました
CD | 社員名 | 部署CD | 生年月日 | 年齢 |
---|---|---|---|---|
1 | 鈴木 | 2 | 1982/1/2 | 41 |
2 | 山本 | 3 | 1980/4/9 | 42 |
3 | 佐藤 | 4 | 1978/4/2 | 44 |
4 | 田中 | 5 | 1965/4/3 | 57 |
5 | 竹本 | 5 | 1991/7/2 | 31 |
6 | 桃井 | 2 | 2000/3/5 | 22 |
社員マスタのCDと資格テーブルの社員CDをつなぐことで 長い無駄なデータがコンパクトに しかもミスのない整合性のとれたデータになります
年齢を削除
Excel では 生年月日の横のセルに 年齢を算出する式を設定し 年齢を表示することが通常的に使われています
しかし Access の場合 テーブルにいれる項目は最小限にするため 関数などで算出できる項目はあえて省きます
フォームやレポートなどを作成するタイミングで テキスト内に関数を設定し表示させる方法をとります
とにかく マスタの項目は式で出せるものは入れないが原則です なるべく容量を少なくします
生年月日のほかに 入社日を登録することで 勤続年数がわかります
資格の取得日から有効期限がわかります が資格の種類によって有効年数が違いますので 必要であれば取得日と期限日を登録しておくのもいいでしょう
CD | 社員名 | 部署CD | 生年月日 | 年齢 |
---|---|---|---|---|
1 | 鈴木 | 2 | 1982/1/2 | 41 |
2 | 山本 | 3 | 1980/4/9 | 42 |
3 | 佐藤 | 4 | 1978/4/2 | 44 |
4 | 田中 | 5 | 1965/4/3 | 57 |
5 | 竹本 | 5 | 1991/7/2 | 31 |
6 | 桃井 | 2 | 2000/3/5 | 22 |
以上がデータベースの正規化です 他にもたくさん出てくると思います ひとつひとつ正規化ができないか精査してください
データの整合性がとれるのとデータベースの容量も少なく
フィールドの設定
フィールドを設定するには [フィールド名]と[データ型]を設定します
フィールド名
フィールド名は テーブルの列に割り当てる名前です
フィールド名は 各列に含まれるデータを示す名前である必要があります
フィールド名は テーブル内で重複する名前を指定することはできません
フィールドは テーブル内に最大255個まで作成できます
データベースのフィールド コントロール オブジェクトの名前には 以下の制限があります
- 64 文字まで使用できます。
- 文字、数字、スペース、ピリオド (.)、感嘆符 (!)、アクセント記号 (‘)、および角カッコ ([]) を除く特殊文字を任意に組み合わせることができます。
- 先頭にスペースは使用できません
- 制御文字 (ASCII 値 0 ~ 31) を挿入することはできません
- Microsoft Access プロジェクトのテーブル、ビュー、または ストアド プロシージャの名前に二重引用符 (“) は使用できません。
データ型
テーブルを設計する際には必要なフィールドを指定し フィールド毎に格納するデータ型を決めていく必要があります
データ型 | 説明 | サイズ |
---|---|---|
テキスト型 | 文字列、または住所などの文字と数字の組み合わせに使用します。また、電話番号、部品番号、郵便番号など、計算する必要がない数字にも使用します。 | 最大255文字 |
メモ型 | 注意や説明など、長い文字列または数字に使用します。 | 最大65,536文字 |
数値型 | 計算で使用する数値データに使用します。ただし通貨の計算には使用できません (通貨の場合は、通貨型を使用します)。 | 1、2、4、8、16バイト |
日付/時刻型 | 日付と時刻に使用します。 | 8バイト |
通貨型 | 通貨の値に使用します。および数値データが格納されます。計算時に丸めによる誤差が生じないようにします。 | 8バイト |
オートナンバー型 | レコードが追加されると、連続番号か乱数が自動的に挿入されます。連続番号は、1 から付けられます。 | 4バイト又は16バイト |
Yes/No型 | Yes/No、True/False、On/Off など、二者択一のデータに使用します。Null 値を格納することはできません。 | 1ビット |
OLE オブジェクト型 | OLE プロトコルを使用してほかのプログラムで作成された、Microsoft Word 文書、Microsoft Excel ワークシート、画像、音声、その他のバイナリ データなどの OLE オブジェクトに使用します。 | 最大1GB。ディスク容量にもよる。 |
ハイパーリンク型 | ハイパーリンクに使用します。ハイパーリンクには UNC (汎用名前付け規則) または URL (Uniform Resource Locator) を適用できます。 | 最大64,000文字 |
数値型をさらに詳しく
種類 | 説明 | 小数の精度 | サイズ |
---|---|---|---|
Byte/バイト型 | 0 ~ 255 の範囲の整数 | なし | 1バイト |
Integer/整数型 | -32,768 ~ 32,767の整数 | なし | 2バイト |
Long Integer/長整数型 | -2,147,483,648 ~ 2,147,483,647の整数 | なし | 4バイト |
Single/単精度浮動小数型 | 3.402823E38 ~ -1.401298E-45、1.401298E-45 ~ 3.402823E38 | 7 | 4バイト |
Double/倍精度浮動小数型 | 1.79769313486231E308 ~ -4.94065645841247E-324、1.79769313486231E308 ~4.94065645841247E-324 | 15 | 8バイト |
同じ数値型でも 範囲を考えて適切な種類を選びましょう あとで変更するようなことがあっては いろんなオブジェクトの変更をともないめんどうなことになるので 最初にデータの範囲の最小・最大を考えて慎重に選びましょう
ならばいちばん範囲の広い型をえらべばいいんじゃない と思うかもしれませんが データの容量が無駄に膨らむことになります
まとめ
つくりたいシステムが決まったら まず テーブル設計が必要です
たとえば 社員マスタの 項目をすべてあつめてExcel にしてみましょう
そこから データベースの正規化をおこない 無駄のない整合性のとれたマスタにします
それぞれのマスタの項目に あとでみてもわかりやすい適切なフィールド名をつけます
そしてデータ型を設定します
こんごのシステム作成において このテーブルの設計はとくに大切です
地味でとても慎重におこなう必要のある工程ですので がんばってやっていきましょう