正規化とは

 正規化は、テーブルを作成していくにあたっての極めて重要な手法です。その意義について、わずかですがここで説明します。

テーブル構成の重要性

 Accessでは、ユーザーはテーブル上に自由に列(フィールド)に設け、データを好きなように記録していくことができます。しかし、その列の設け方や、(特に複数のテーブルを設ける場合)どのテーブルにどのような列を持たせるかという構成の仕方によって、データの活用のしやすさが著しく低下したり、データの正しさが保てなくなるなど大きな問題が生じることがあります。


同じような列が延々横に並ぶ例
f:id:accs2014:20170904214909p:plain:right:w600

 テーブルの構成に良し悪しがあるというのは、実際に多くの方々が認識しているものと思います。例えば「受注テーブルに商品コード1、商品名1、単価1、数量1、商品コード2、商品名2、単価2、数量2、商品コード3、商品名3、単価3、数量3…といった列が延々並んでいるが、実際は多くが空白になってしまい無駄な感じがする。しかもこれだと商品別の販売実績を計算するのが面倒だし、用意している列数以上に何種類もの商品をいっぺんに受注した場合には列を追加したり、受注を分割したりしなければならない。」という例があります(画像参照)。
 これはとても典型的な例ですが、実際にテーブルの変更が必要になると、必然的にクエリやフォーム、レポートも変更を迫られることとなってしまいます。テーブルにあるデータを基礎としてシステムが構築される以上、テーブルの構成のあり方がシステムの出来を左右していることは間違いありません。


正規化という手法

 では、テーブルに何か問題点があるとして、それが仕方ないことなのかあるいは改善策があるものなのかを予備知識なしに判断することはそう簡単ではないものと思います。さらに言えばテーブルの構成(データの格納のあり方)の良し悪しを評価し、改善していくための一般的かつ妥当な方法というのが存在するのかどうかとなると、なかなか高度な、それどころかとてつもなく深遠な問題のように思われます。しかし、これにはきちんとした答えが用意されています。


正規化により複数の単純なテーブルに分割された様子
f:id:accs2014:20170930165110p:plain:right:w500

 では具体的にデータを活用しやすく、そして正確さを保ちながら管理できるようにテーブルを見直していくにはどうすればいいのでしょうか。簡単に表現すると、さまざまな列の間の関係を整理しながら、重複や冗長さを取り除きつつテーブルを分割していくことで実現できます。この手順を正規化といいます。
 正規化はテーブル構成の手法に過ぎません。しかし、業務の詳細とともに個々の列の関係性を熟知し、適切に正規化を行い、データ記録の効率と安全性、使いやすさを高めていくことがシステム構築の大部分を占めるといっても過言ではありません。誰かが「データベースについて知りたい」と考えたとき、本当に知るべきことは正規化とその周辺にあります。いくら関数やプロパティを覚え、VBAのコーディングを完璧なものとしても、決してその代わりにはならないのです。


正規化の学習に関する注意

 正規化は確かに重要なのですが、データの操作というよりシステム構築の根本的な問題を扱うもので、ある程度時間をかけて学習する必要があります。まずは基本的な操作をひととおり知っておきたいという方はクエリ、フォームなどの節に進んでください。
 また、Accessの使用目的が専らデータの参照や加工である場合(外部のシステムから出力したデータをインポートしてクエリを出力する、など)も正規化の必要性は薄いですので、特に関心もない方はスキップしてください。