この記事はプロモーションを含みます
先日ヤフー知恵袋を閲覧したところ、このような相談が掲載されていました。
「Accessを勉強して一年半経つんですけど、挫折の連続です。本もなかなか自分に合うものが無くて困っています。」
「Accessを勉強しようと思っています。本を読んでいるのですが、挫折気味です。近くに詳しい人もいなくて困っています」
Accessを習得しようとしても、なかなか達成出来ない方が多いようです。
Accessを覚えたい方に第一に習得してほしいことは、「データの正規化」です。
今回はデータの正規化について書いていこうと思います。
技術書に載っているような内容をそのまま書いてしまうと、難しい話になってしまいます。
先日公開した購買管理のサンプルデータベースを例にして、出来るだけシンプルで、実践で使える方法について触れていきます。
この記事を読めば、正規化の実践的な方法を理解できて、Accessデータベースを設計出来るようになります。
また、最後に書籍の紹介も行いますが、両方を読むことで更にデータベースへの理解も深まるのではないかと思います。
まず項目を決める
前回掲載したサンプルデータベース(購買管理DB)を例にします。
こちらではサンプルデータベースをダウンロード出来ます。
購買管理DBを作ったのは以下の理由からです。
- Excel発注書で毎回部品名や型式を入力するのが手間
- 部品リストを作って部品型式を調べる手間をなくしたい
- 過去の履歴を確認するためにデータベースに残したい
まずは必要なテーブル(表)の項目を決めます。
テーブルとは、データベースにデータを入れる入れ物のようなもので、エクセルのシートと同じようなものです。
ここでは、「Excelで作っていた発注書をデータベース化したい」ということから始まります。
発注書の項目をそのまま書き出しましょう。以下のような項目になります。
ここで100%を求めず、80%程度の仕上がりを意識すれば問題ありません。
100%の仕上がりにこだわると作業が先に進まなくなりますし、導入後の修正で完成度を高めていくのがシステム全般の本質だからです。
世間で流通しているパッケージシステムは、様々な導入テストを経て完成度が高まったものであり、販売に至るまでには相当な時間をかけています。
自分で作ったAccessは、自分で改修しないといけませんが、逆に人に頼まず自分で素早く対応出来ます。<
データの正規化を行う
項目が決まったら、ダミーのデータをExcelの表に入れましょう。
発注伝票1枚に対して、明細が複数存在しているのが分かります。
ここではセルを結合して表現しています。
セルの結合を解除すると、発注伝票単位のデータが重複していることが分かりました。
初めに、購買伝票の重複をなくすために、購買伝票データから明細データを切り離します。
部品リストと購買データを紐付けるために、部品にコード番号を振り、購買データに対象部品のコード番号を追加しました。
データはこのようになります。
このように、テーブルを分割してデータの重複をなくす事を正規化と言います。
同様にして他の重複項目を分割して正規化を行うと、以下のようになりました。
発注先、発注者も重複しているのでそれぞれマスタを作成しました。
部品名も重複しているので、部品マスタを作りました。
部品マスタに分類が欲しかったので、分類マスタを作りました。
ある部品を取り扱っている発注先が2箇所以上存在する場合、納期や価格によって使い分けるかもしれません。
使い分けを想定して発注先と単価も部品リストから分割しました。
正規化を行うための理由
全てのデータベースを作ることにおいて、一旦正規化を行い、項目を整理することは最も重要です。
データが重複した状態でテーブルを作った場合、想定されるリスクが2つ発生します。
データのつじつまが合わなくなる時がある
部品の型式を間違ってしまった場合、全ての対象に対して変更をしなければなりません。
人が作業することですので、入力ミスも起こります。
表を分けた場合、部品リストの型式のみを書き換えれば、発注明細を変更する必要がありません。
項目の増設をしづらくなる
部品リストに情報を一項目足した場合、正規化されていない表であれば重複しているデータを照合しながら入力されるように対応しなければいけません。
正規化されていれば、部品リストのみの追加で済みます。
リレーションシップについて
テーブル同士をつなげるための設定です。
リレーションシップを設定することで、データの更新や削除を、テーブル間で連動することが出来ます。
ここでは、リレーションシップは部品リストと発注明細の部品コードを繋いでいます。
リレーショナルデータベースの由来がリレーションシップです。
正規化しない方が良い場合もある
履歴を残す場合
部品リストを変更することで、発行済みの伝票の履歴が変わってはよくありません。
ここでは、価格マスタと発注伝票明細、担当者マスタと発注伝票を切り離しました。
サンプルデータベースでは、部品リストと購買明細の両方のテーブルに部品のリストを残すことにしました。
同様に、発注先と担当者名も発注伝票に残しました。
このように、運用方法によっては、二重にデータを持つこともあります。
システムの処理速度が落ちる
正規化しすぎることでシステムの処理速度が遅くなる場合があります。データを正規化する事で、テーブルが増えます。
コンピュータが増えたテーブルから計算を行うと、処理が遅れます。
どんな場合に正規化してはいけないかと言うと、目安として、Accessのプログラムを試しに実行した場合、特定の箇所でのフリーズしたり、更新が遅れる場合は、テーブルの構成を見直した方がいいでしょう。
但し、処理速度については、まずデータベースを作ってみないと分かりませんので、はじめはあまり気にしなくても大丈夫です。
実践して勘所をつかむだけです。
参考にした書籍の紹介
今回の記事内容を学習した時に活用した参考書籍を紹介します。
「達人に学ぶDB設計 徹底指南書」という本です。
今回の記事だけでは物足りない方にはオススメです。
データベース設計の悪い例なども分かり易く記載してあります。
また、他にもデータベースについて効果的に学習できる本についてもまとめましたので、よかったらこちらもごらんください。
まとめ
正規化はデータベースの基本です。
正規化する事でシステムの不整合を防ぐのですが、正規化し過ぎると悪い影響を及ぼします。
適正な正規化を進めることが出来れば、良いデータベースを作り、高い改善効果を生み出すことが出来ます。
自分でAccessデータベースを作ることが出来れば、他のシステムの構造も分かるようになります。
Excelで集計を行う時にも、データベースの知識を十分に生かしより良いものに仕上がります。
Accessを習得したい方は、まずは自分の業務内容を試しに正規化してみましょう。
正規化したらもう一度Accessに挑戦してみましょう。
これまで挫折していたところが難なく乗り越えられるようになっているはずです。
将来さらに新しいとことでつまずくかもしれませんが、正規化を乗り越えられたあなたなら対応できます。
最後に、ブログではAcccessやExcelの機能について、いろんな記事を投稿しています。
よかったらトップページから希望の機能を探してみてください。
また、Accessデータベース設計のまとめ記事もありますので、そちらもごらんください。
≫ Access初学者必見!データベース設計ガイド