ACCESS テーブル作成前に行う正規化の手順

ACCESSはテーブルをもとにクエリ、フォームなどを作るデータベースシステムです。
ACCESSはExcelのように一枚の表でデータを管理するのではなく、複数のテーブルを関連付けてデータを構成するリレーショナルデータベースです。
そのため、初めてACCESを使う方にとって一番難しいのがテーブルをどのように設計するか、という点です。
今回は、テーブル作成前に行う正規化の手順をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。
目次
正規化とは
ACCESSにおけるテーブルの正規化とは、データの重複や不整合を防ぐために、テーブルを複数に分割し、関連する情報を効率的に管理する手法です。
ACCESSでテーブルを作成する前には、入力する情報の正規化が必要です。
ACCESSで正規化が必要になるのは、ACCESSがリレーショナルデータベースだからです。
リレーショナルデータベースとは以下のような構造を持つデータベースです。

上記の例では、売上マスターテーブルと、商品マスターテーブルが示されています。
売上マスターテーブルには商品の情報が必要ですが、売上マスターテーブルにあるのは商品IDの情報のみです。
商品名を参照する場合は、売上マスターテーブルの商品IDをもとに商品マスターテーブルを検索し、該当する商品IDの商品名を表示するという手順になります。
このように、複数のテーブルを関連付けて全体のデータベースを構築するACCESSにおいて、テーブルの設計を行う際に正しく正規化を行うことがとても重要です。
正規化のメリット
正規化を行わなくてもACCESSのデータベースを作成することは可能です。
しかし、それではACCESSの機能を十分に使いこなしているとは言えません。
むしろ、Excelが使いにくくなったくらいの印象しか持てないかもしれません。
正規化には以下のメリットがあります。
データの重複を排除できる
正規化を行うことで何度も表示されるデータは単一のテーブルにマスターとして管理されます。
これによって、同じ情報を何度も入力・保存する必要がなくなります。
更新時の整合性が保たれる
一箇所の変更で済むため、データの不整合が起こりにくくなります。
データの管理・保守が容易になる:構造が整理され、理解しやすくなるため、変更や拡張がしやすくなります。
ストレージの効率化:不要な重複がなくなることで、データ容量を節約できます。
検索や集計が正確になる:関連性が明確になることで、誤った集計や抽出のリスクが減ります。
正規化の手順
それでは正規化の手順を説明します。
まずはACCESSでテーブルを作る前に、Excelのシートでデータを整理しましょう。
今回は、以下の売上情報が入力されたシートをサンプルとして利用します。

売上、顧客名、商品名などが入った一般的なシートです。
このシートを売上情報と呼びます。
では、売上情報をACCESSのテーブルに取り込めるように正規化していきます。
第一正規化
まず最初に行うのは1つのセルに必ず1つの値しか入らないようにすることです。
これを第一正規化と呼びます。
ACCESSのテーブルを作成するためには、これが大前提となります。
例えば、B2の売上日や、C2の顧客名はセル結合がされていますね。
このような状態ではこの先の手順に進められません。
セルを分割して行と列で必ず一つの値だけが入ったきれいな表に修正しましょう。
第一正規化を行うと以下の状態になります。

第二正規化
次に行うのが第二正規化です。
売上情報を見ると、C列の顧客名は同じものが複数回出てきていますね。
このように、同じものが複数出てくる場合に、それを別のテーブルに分けていく作業が第二正規化です。
例えば、顧客名については実際に出現する値は5種類しかありませんので、分離すると以下のように表現できます。

これを以後、顧客マスターと呼びます。
一方、元の売上情報は以下のように顧客名を顧客IDに置き換えます。

このように、複数回出現する値を別のテーブルで管理することにより、顧客名の変更があった際には最初に見た売上情報の関連するレコードをすべて修正する必要が無くなり、顧客マスターのみを修正するだけで全体の修正ができるようになります。
これが第二正規化です。
主キー
ここで顧客マスターのA列に顧客IDを付与していることに注目してください。
ACCESSではテーブルを作成する際、そのテーブルの中でレコード(行)を一意に識別できる値が必要です。
これを主キーと呼びます。
主キーがあることで、例えば上記の表で言えば、顧客IDが3であればそれは「うううコーポレーション」を指していると特定できるわけです。
そのため、主キーの値は絶対に他のレコードと重複してはならず、更に空白になってもいけません。
主キーはシステム内で利用するだけのものですので単純に数値で1ずつ大きくしていくのが良いでしょう。
人間が見てわかるような意味のある文字列にする必要はありません。
第二正規化の続き
改めて売上情報をみると、顧客名だけでなく、商品名も複数回表示されていることがわかります。
そのため、商品名も別テーブルに分離し、商品IDを付与します。

なお、商品名が決まると商品カテゴリと単価も一意に特定できますよね。
そのため、商品名を分離する際には商品カテゴリと単価も一緒に分離させます。
これを以後、商品マスターと呼びます。
売上情報の方は顧客IDと同様に、商品名などを商品IDに置き換えます。

だいぶすっきりしてきましたね。
第三正規化
次に第三正規化を行います。
これは、ここまでに整理した売上情報、顧客マスター、商品マスターの中で更に正規化を進めるものです。
例えば商品マスターを見てみましょう。

商品マスターには商品カテゴリがありますが、これは各商品に対して既定の商品カテゴリのパターンから割り当てていることがわかります。
そのため、商品カテゴリをここから分離します。

商品カテゴリにも主キーとして商品カテゴリIDを付与します。
これを以後、商品カテゴリマスターと呼びます。
一方、商品マスター側は商品カテゴリを商品カテゴリIDに置き換えます。

これは先ほどの手順と同じですね。
これで正規化は完了です。
計算によって求められる項目を削除する
最後に、正規化ではないのですがACCESSのテーブルを作成するにあたり、計算によって求められる項目を削除します。
これは、ACCESSでは計算式で出力する項目(フィールド)はクエリで生成するので、実データを保存するテーブルには不要なためです。
今回の例で言えば、売上情報の「売上」は単価と数量の掛け算で計算されていますので、この項目を削除します。

ここまでで売上情報に関してもACCESSのテーブルに取り込める状態になりました。
正規化されたテーブルの状態
結果的に今回のサンプルデータは、正規化によって以下の4つのテーブルに分解されます。
売上情報

顧客マスター

商品マスター

商品カテゴリマスター

あとはACCESSで実際にこの4つのテーブルを作成していけば大丈夫です。
以上、テーブル作成前に行う正規化の手順をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に200以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。