2023/4/1 OPEN 『Accessシステムを自力でつくってみたい』 をサポートをします & 会社のホームページ作成します

Access システム【STEP①】 テーブル設計

STEP1

社員マスタをつくりたい と思ったら まず 会社の各部署をまわって みんながどんなふうに社員名簿を利用しているのか調査しましょう
みんなから Excel の表のコピーをもらい すべての項目をつなげてひとつのレコード(ひとり分のデータ)にしましょう

目次

データベースの正規化

社員リストをあつめた項目をすべてエクセルにしてみましょう
このままではとても無駄と問題が多いデータといえます
順に 『データベースの正規化』をしていきましょう

CD社員名部署生年月日年齢資格名1資格日1資格名2資格日2資格名3資格日3
1鈴木総務1982/1/241普通自動車2000/5/8衛生管理者2015/1/5
2山本経理1980/4/942建設経理2010/3/2
3佐藤業務1978/4/244運行管理1997/2/1危険物乙42000/1/3
4田中建機1965/4/357高所作業2020/3/1玉掛1998/9/1クレーン1998/1/5
5竹本建機1991/7/231玉掛2010/4/3クレーン2010/4/7大型特殊2012/3/2
6桃井総務2000/3/522普通自動車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鈴木21982/1/241普通自動車2000/5/8衛生管理者2015/1/5
2山本31980/4/942建設経理2010/3/2
3佐藤41978/4/244運行管理1997/2/1危険物乙42000/1/3
4田中51965/4/357高所作業2020/3/1玉掛1998/9/1クレーン1998/1/5
5竹本51991/7/231玉掛2010/4/3クレーン2010/4/7大型特殊2012/3/2
6桃井22000/3/522普通自動車2020/4/2

資格テーブルに分割

つぎに 資格名1 日付1 から列挙してある資格情報です 最大保有者の数にあわせた項目も取り方は どうみても無駄ですね
横に列挙されていた 資格を 資格の数だけ縦に繰り返します

社員CD社員名部署CD生年月日年齢資格名日付
1鈴木21982/1/241普通自動車2000/5/8
1鈴木21982/1/241衛生管理者2015/1/5
2山本31980/4/942建設経理2010/3/2
3佐藤41978/4/244運行管理1997/2/1
3佐藤41978/4/244危険物乙42000/1/3
4田中51965/4/357高所作業2020/3/1
4田中51965/4/357玉掛1998/9/1
4田中51965/4/357クレーン1998/1/5
5竹本51991/7/231玉掛2010/4/3
5竹本51991/7/231クレーン2010/4/7
5竹本51991/7/231大型特殊2012/3/2
6桃井22000/3/522普通自動車2020/4/2

そして 所有資格だけの テーブルに分割します

社員CD社員名部署CD生年月日年齢資格名日付
1鈴木21982/1/241普通自動車2000/5/8
1鈴木21982/1/241衛生管理者2015/1/5
2山本31980/4/942建設経理2010/3/2
3佐藤41978/4/244運行管理1997/2/1
3佐藤41978/4/244危険物乙42000/1/3
4田中51965/4/357高所作業2020/3/1
4田中51965/4/357玉掛1998/9/1
4田中51965/4/357クレーン1998/1/5
5竹本51991/7/231玉掛2010/4/3
5竹本51991/7/231クレーン2010/4/7
5竹本51991/7/231大型特殊2012/3/2
6桃井総務2000/3/522普通自動車2020/4/2
ID社員CD資格CD日付
11普通自動車2000/5/8
21衛生管理者2015/1/5
32建設経理2010/3/2
43運行管理1997/2/1
53危険物乙42000/1/3
64高所作業2020/3/1
74玉掛1998/9/1
84クレーン1998/1/5
95玉掛2010/4/3
105クレーン2010/4/7
115大型特殊2012/3/2
126普通自動車2020/4/2

資格マスタの分割

資格CD資格名
1普通自動車
2衛生管理者
3建設経理
4運行管理
5危険物乙4
6高所作業
7玉掛
8クレーン
9大型特殊

資格テーブルの完成

各社員にひもづく所有資格のテーブルが完成しました

ID社員CD資格CD日付
1112000/5/8
2122015/1/5
3232010/3/2
4341997/2/1
5352000/1/3
6462020/3/1
7471998/9/1
8481998/1/5
9572010/4/3
10582010/4/7
11592012/3/2
12612020/4/2

そして 資格情報をなくし 社員の基本情報だけ残した 社員マスタができました

CD社員名部署CD生年月日年齢
1鈴木21982/1/241
2山本31980/4/942
3佐藤41978/4/244
4田中51965/4/357
5竹本51991/7/231
6桃井22000/3/522

社員マスタのCDと資格テーブルの社員CDをつなぐことで 長い無駄なデータがコンパクトに しかもミスのない整合性のとれたデータになります

年齢を削除

Excel では 生年月日の横のセルに 年齢を算出する式を設定し 年齢を表示することが通常的に使われています
しかし Access の場合 テーブルにいれる項目は最小限にするため 関数などで算出できる項目はあえて省きます
フォームやレポートなどを作成するタイミングで テキスト内に関数を設定し表示させる方法をとります
とにかく マスタの項目は式で出せるものは入れないが原則です なるべく容量を少なくします
生年月日のほかに 入社日を登録することで 勤続年数がわかります 
資格の取得日から有効期限がわかります が資格の種類によって有効年数が違いますので 必要であれば取得日と期限日を登録しておくのもいいでしょう

CD社員名部署CD生年月日年齢
1鈴木21982/1/241
2山本31980/4/942
3佐藤41978/4/244
4田中51965/4/357
5竹本51991/7/231
6桃井22000/3/522

以上がデータベースの正規化です 他にもたくさん出てくると思います ひとつひとつ正規化ができないか精査してください
データの整合性がとれるのとデータベースの容量も少なく

フィールドの設定

フィールドを設定するには [フィールド名]と[データ型]を設定します

フィールド名

フィールド名は テーブルの列に割り当てる名前です 
フィールド名は 各列に含まれるデータを示す名前である必要があります
フィールド名は テーブル内で重複する名前を指定することはできません
フィールドは テーブル内に最大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.402823E3874バイト
Double/倍精度浮動小数型1.79769313486231E308 ~ -4.94065645841247E-324、1.79769313486231E308 ~4.94065645841247E-324158バイト

同じ数値型でも 範囲を考えて適切な種類を選びましょう あとで変更するようなことがあっては いろんなオブジェクトの変更をともないめんどうなことになるので 最初にデータの範囲の最小・最大を考えて慎重に選びましょう
ならばいちばん範囲の広い型をえらべばいいんじゃない と思うかもしれませんが データの容量が無駄に膨らむことになります

まとめ

つくりたいシステムが決まったら まず テーブル設計が必要です
たとえば 社員マスタの 項目をすべてあつめてExcel にしてみましょう
そこから データベースの正規化をおこない 無駄のない整合性のとれたマスタにします

それぞれのマスタの項目に あとでみてもわかりやすい適切なフィールド名をつけます

そしてデータ型を設定します

こんごのシステム作成において このテーブルの設計はとくに大切です
地味でとても慎重におこなう必要のある工程ですので がんばってやっていきましょう

icontoyama
Pasop Labo とんま
  • ACCESS歴 20年超
  • 取得資格
    • VBAエキスパート ACCESS ベーシック
    • VBAエキスパート ACCESSスタンダード
    • ACCESSビジネスデータベース技能認定試験 1級
    • サーティファイ認定インストラクター
目次