こんにちは!Accessブロガーのなかぜんです。
「Accessでテーブルを作ったけど、データが重複していて扱いづらい…」 「同じ情報を何度も入力するのって面倒だなあ…」 こんな悩みを感じたこと、ありませんか?
そんなときに役立つのが「正規化」という考え方です。 ちょっと聞き慣れない言葉かもしれませんが、テーブル設計の超基本ルール。 今回は、正規化とは何か、なぜ必要なのか、実例とともにわかりやすく解説していきます!
正規化とは?ざっくり説明すると…
正規化とは、「データの重複や不整合を防ぐために、テーブルを分割・整理すること」です。
たとえば、次のような「注文データ」を考えてみましょう。
📌 正規化前のテーブル(NG例)
注文ID|顧客名|商品名|数量|価格|住所 001 |田中 |りんご|2 |100 |東京都 002 |田中 |みかん|1 |80 |東京都
このように、「田中」「東京都」といった同じ情報が繰り返されてしまいます。
📌 正規化後のテーブル(OK例)
顧客テーブル
顧客ID|顧客名|住所 C001 |田中 |東京都
商品テーブル
商品ID|商品名|価格 P001 |りんご|100 P002 |みかん|80
注文テーブル
注文ID|顧客ID|商品ID|数量 001 |C001 |P001 |2 002 |C001 |P002 |1
このようにデータを分けることで、以下のようなメリットがあります。
- データの重複がなくなり、ファイルサイズが軽くなる
- 顧客名や商品名の修正が一括でできる
- 不整合(バラバラな表記)を防げる
正規化のステップ(第1〜第3正規形)
正規化にはいくつかの段階がありますが、業務でよく使うのは以下の3つです。
第1正規形(1NF):繰り返し項目をなくす
1つのセルに複数の値が入っていないか確認し、行ごとに分ける。
第2正規形(2NF):主キーに完全に依存していない項目を分ける
複合主キーを使っている場合、片方のキーにしか依存しないデータは別テーブルに。
第3正規形(3NF):他の非キー項目に依存しているデータを分ける
たとえば「郵便番号」から「住所」を引ける場合、住所は別テーブルへ。
Accessでの実践例
Accessでのテーブル設計画面を見てみましょう。
顧客テーブル(T_顧客)
フィールド名|データ型 ---------------------------- 顧客ID |オートナンバー(主キー) 顧客名 |短いテキスト 住所 |短いテキスト
商品テーブル(T_商品)
商品ID |オートナンバー(主キー) 商品名 |短いテキスト 単価 |数値型
注文テーブル(T_注文)
注文ID |オートナンバー(主キー) 顧客ID |数値型(外部キー) 商品ID |数値型(外部キー) 数量 |数値型
Accessの「リレーションシップ」画面で、顧客ID・商品IDをつないでおくことで、整ったデータ構造になります。
注意点・よくあるミス
- 分けすぎて逆に扱いにくくなる:正規化しすぎるとフォームやクエリの作成が複雑になります。
- 理解せずに分割してしまう:意味のある単位でテーブルを分けるのがコツです。
- 結合が多くなりすぎる:JOINが多すぎるとクエリが重くなりがちです。
応用ポイント:非正規化とのバランス
実務では「多少の非正規化」を取り入れることもあります。
たとえば、売上集計を高速化するために、商品名や単価を注文テーブルに一時的に保持しておくなど。 「読みやすさ・スピード重視」の現場では、あえて冗長にするケースもあります。
まとめ|正規化でデータベースはもっと便利になる!
正規化は、Accessでのデータ管理をスムーズに・効率的にしてくれる基本中の基本。 顧客・商品・注文など、役割ごとにテーブルを分けて、整理されたデータベースを作っていきましょう。
「正規化を意識するようになってから、クエリもフォームもスッキリ組めるようになった!」 そんな声を聞くこともよくあります。
