PR

テーブルの正規化って何?データ設計の基礎

Access
スポンサーリンク
スポンサーリンク

こんにちは!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でのデータ管理をスムーズに・効率的にしてくれる基本中の基本。 顧客・商品・注文など、役割ごとにテーブルを分けて、整理されたデータベースを作っていきましょう。

「正規化を意識するようになってから、クエリもフォームもスッキリ組めるようになった!」 そんな声を聞くこともよくあります。