データベース正規化・ER図まとめ|第1〜第3正規形の変換手順とテーブル設計を図解で整理

U

SQLの学習を終えてふと思ったのが、「そもそもテーブルってどうやって設計するんだろう」という疑問でした。「注文テーブルに商品情報も全部入れればいいんじゃないか」と最初は考えていたのですが、それが「更新異常」という問題の原因になると知って、正規化の必要性がすっと腑に落ちた気がします。

データベース正規化は、「テーブル設計の原則」を定めたルールです。第1正規形・第2正規形・第3正規形という3段階で、データの冗長性を取り除き、更新したときに矛盾が生じないテーブル構造に整えていきます。経営情報システム科目では、各正規形の定義と変換手順、ER図の読み方がよく問われます。通販サイトの注文データを例に、順を追って整理してみましょう。

目次

データベースと正規化とは

まず「なぜ正規化が必要なのか」という前提を押さえておきます。正規化の目的は、データの冗長性をなくし、更新異常を防ぐことにあります。

関係データベース(RDB)
データを行(レコード)と列(属性)で構成された表形式で管理する。複数のテーブルを関係(リレーション)で結びつけて使う。
正規化の目的
冗長なデータ(同じ情報の繰り返し)を排除し、更新・削除・挿入の際に矛盾が起きないテーブル構造を目指す。
更新異常(3種類)
挿入異常:他のデータがないと新データを登録できない。削除異常:削除すると別の必要な情報も消える。更新異常:同じ情報を複数箇所修正する必要がある。
STEP 0
非正規形
繰り返し項目あり
STEP 1
第1正規形
繰り返し排除
STEP 2
第2正規形
部分従属排除
STEP 3
第3正規形
推移従属排除

第1正規形(1NF)|繰り返し項目を排除する

第1正規形の条件は、「すべての列の値が1つの値(原子値)であること」です。1つのセルに複数の値が入っていたり、同じ意味の列が横に並んでいる(繰り返し項目)ものは、1NFに違反しています。

第1正規形の条件:テーブルの各行・各列の交点にはただ1つの値(原子値)しか入らない。繰り返し項目(例:商品1・商品2・商品3という列)は許されない。
非正規形(1NF違反)
受注番号 顧客名 商品1 商品2 数量1 数量2
1001 山田花子 ノート ペン 3 5
1002 鈴木一郎 消しゴム 2
1003 佐藤美咲 ノート 定規 1 2

⚠ 「商品1」「商品2」という繰り返し列がある。商品が3つになったら列を追加しなければならない。

第1正規形(1NF)
受注番号 顧客名 商品名 数量
1001 山田花子 ノート 3
1001 山田花子 ペン 5
1002 鈴木一郎 消しゴム 2
1003 佐藤美咲 ノート 1
1003 佐藤美咲 定規 2

✔ 繰り返しをなくし、1行1商品に変換。主キーは「受注番号+商品名」の複合キーになる。

第2正規形(2NF)|部分関数従属を排除する

第2正規形の条件は、「すべての非キー属性が、主キー全体に完全関数従属していること」です。複合主キーの一部だけで決まる属性(部分関数従属)を別テーブルに分離します。

部分関数従属:複合主キーの一部の列だけから決まる属性。例えば「顧客名は受注番号だけで決まり、商品名は関係ない」という状態。
第2正規形の条件:1NFを満たし、かつ部分関数従属がない状態。
1NF(2NF違反)
受注番号 商品名 顧客名 単価 数量
1001 ノート 山田花子 120円 3
1001 ペン 山田花子 80円 5
1002 消しゴム 鈴木一郎 60円 2
1003 ノート 佐藤美咲 120円 1

⚠ 「顧客名」は受注番号だけで決まる(部分従属)。「単価」は商品名だけで決まる(部分従属)。ノートの単価を変更すると全行を修正しなければならない(更新異常)。

第2正規形(2NF)に分離

受注テーブル

受注番号(PK)顧客名
1001山田花子
1002鈴木一郎
1003佐藤美咲

商品テーブル

商品名(PK)単価
ノート120円
ペン80円
消しゴム60円

受注明細テーブル

受注番号(PK,FK)商品名(PK,FK)数量
1001ノート3
1001ペン5
1002消しゴム2
1003ノート1

✔ 部分従属をなくし、主キー全体に完全従属する属性だけを各テーブルに残した。

U

「部分関数従属」と「完全関数従属」の違いは、複合主キーの文脈で初めて意味を持ちます。主キーが1列だけのテーブルでは、部分従属は定義上起こりえません。だから2NFの問題は「複合主キーがあるかどうか」を最初に確認するのが近道だと思いました。

第3正規形(3NF)|推移的関数従属を排除する

第3正規形の条件は、「非キー属性が主キーに直接従属しており、他の非キー属性を経由した推移的従属がないこと」です。「AがBを決め、BがCを決める」という連鎖がある場合、BとCを別テーブルに切り出します。

推移的関数従属:主キー → 非キー属性A → 非キー属性B、という連鎖的な決まり方。例えば「受注番号→顧客ID→顧客住所」という流れ。
第3正規形の条件:2NFを満たし、かつ推移的関数従属がない状態。
2NF(3NF違反)
受注番号(PK) 顧客ID 顧客名 顧客住所
1001 C01 山田花子 東京都渋谷区
1002 C02 鈴木一郎 大阪府中央区
1003 C01 山田花子 東京都渋谷区
1004 C02 鈴木一郎 大阪府中央区

⚠ 受注番号→顧客ID→顧客名・顧客住所という推移的従属がある。山田さんの住所が変わると全行を修正しなければならない。

第3正規形(3NF)に分離

受注テーブル

受注番号(PK)顧客ID(FK)
1001C01
1002C02
1003C01
1004C02

顧客テーブル

顧客ID(PK)顧客名顧客住所
C01山田花子東京都渋谷区
C02鈴木一郎大阪府中央区

✔ 顧客情報を顧客テーブルに分離。住所変更は顧客テーブルの1行を更新するだけで済む。

正規化3段階のまとめ
1NF:繰り返し項目・複数値をなくす(原子値の条件)
2NF:複合主キーの一部にしか従属しない列を別テーブルへ(部分従属の排除)
3NF:非キー属性を経由した連鎖的従属を別テーブルへ(推移的従属の排除)

ER図(実体関連図)の読み方

ER図(Entity-Relationship Diagram)は、テーブル同士の関係を視覚的に表した図です。試験では、ER図からテーブル構造を読み取る問題や、カーディナリティ(多重度)の識別が問われます。

ENTITY
エンティティ(実体)
管理対象となる「もの」や「こと」。テーブルに対応する。例:顧客・商品・注文・社員・部門など。ER図では長方形で表される。
ATTRIBUTE
属性
エンティティが持つ情報。テーブルの列に対応する。例:顧客エンティティの「顧客ID・顧客名・住所」など。主キーは下線で示されることが多い。
RELATIONSHIP
リレーションシップ(関連)
エンティティ間のつながりを表す。例:「顧客が注文をする」「注文が商品を含む」。ER図では線で接続し、端点にカーディナリティ記号を付ける。
CARDINALITY
カーディナリティ(多重度)
エンティティ間の「数の対応関係」。1対1・1対多・多対多の3種類が基本。多対多はそのままテーブルにできないため、中間テーブル(関連エンティティ)に分解する。
クロウズフット記法によるER図(通販サイト例) 顧客 顧客ID / 顧客名 / 住所 注文 注文番号 / 注文日 / 顧客ID 注文明細 注文番号 / 商品ID / 数量 商品 商品ID / 商品名 / 単価 1 : 多 1 : 多 多 : 1 凡例: 1側 多側(クロウズフット記法) 多対多の場合は中間テーブル(注文明細)で分解する
カーディナリティ 説明 テーブル設計上の扱い
1 対 1 一方の1件がもう一方の1件に対応 社員 対 社員証 同じテーブルにまとめることも可
1 対 多 一方の1件がもう一方の複数件に対応 顧客 対 注文、部門 対 社員 多側のテーブルに外部キーを持つ
多 対 多 双方が複数件に対応しうる 注文 対 商品、学生 対 授業 中間テーブル(関連エンティティ)で分解必須

主キー・外部キー・ACID特性

テーブル設計の補足知識として、キーの概念とトランザクション管理の原則を整理しておきます。試験では用語の定義と組み合わせ問題がよく出ます。

用語 定義 特徴・制約
主キー(PK) 行を一意に識別する列(または列の組み合わせ) 重複不可・NULL不可・1テーブルに1つ
候補キー 主キーとして使える列の候補 一意性と最小性を満たす列の組
外部キー(FK) 他テーブルの主キーを参照する列 参照先に存在する値しか入れられない(参照整合性)
複合キー 2列以上の組み合わせで主キーとなる 1NF→2NF変換で重要な概念
代理キー 自然キーの代わりに人工的に付与するID 自動採番のシーケンスID等
A
ATOMICITY
原子性
トランザクションは「全て成功」か「全て失敗(ロールバック)」かのどちらか。途中で止まることはない。
C
CONSISTENCY
一貫性
トランザクションの前後で、データが定義した整合性制約を満たした状態を保つ。残高がマイナスにならない等。
I
ISOLATION
独立性(隔離性)
複数のトランザクションが同時に実行されても、互いに干渉しない。他の処理の途中状態は見えない。
D
DURABILITY
永続性(耐久性)
コミット(確定)されたデータは、障害が発生してもディスクに永続的に保存される。
試験頻出ポイント|トランザクション
コミット(COMMIT):トランザクションを確定し、変更を永続化する命令。
ロールバック(ROLLBACK):エラー発生時に処理前の状態に戻す命令。
銀行振込を例にすると「A口座から引き落とし→B口座へ入金」の2処理はひとつのトランザクション。途中でシステム障害が起きても、ロールバックによって引き落とし前の状態に戻る(原子性)。
U

ACIDは頭文字で覚えると試験中に思い出しやすいです。「Atomicity=切り離せない・Consistency=矛盾しない・Isolation=お互いに干渉しない・Durability=消えない」という意味合いで覚えておくと、定義の問題にも対応できると思います。

過去問で確認する

実際の試験でどのような形式で問われるか、過去問をベースにした練習問題で確認しておきましょう。

練習問題 1|第2正規形の判定 経営情報システム|基本レベル
次のテーブルについて、正規化に関する記述として最も適切なものを選びなさい。

受注テーブル(受注番号, 商品コード, 商品名, 顧客ID, 数量)
※ 主キーは「受注番号+商品コード」の複合キー
  • ア このテーブルは第3正規形を満たしている
  • イ 「商品名」は主キーの一部(商品コード)にのみ従属しているため、第2正規形に違反している
  • ウ 「顧客ID」は主キー全体に完全関数従属しているため問題ない
  • エ このテーブルは第1正規形を満たしていない
解説
正解はです。主キーが「受注番号+商品コード」の複合キーであるとき、「商品名」は商品コードだけで決まります(部分関数従属)。これは2NF違反です。商品名は別途「商品テーブル(商品コード, 商品名)」に切り出す必要があります。
ウの「顧客ID」は受注番号だけで決まる可能性があり、これも部分従属で2NF違反になります。 エについて、繰り返し項目がなく原子値の条件は満たしているため1NF違反ではありません。
練習問題 2|ACID特性 経営情報システム|基本レベル
データベースのトランザクション管理に関するACID特性のうち、「複数のトランザクションが並行して実行された場合でも、各トランザクションの処理結果が他のトランザクションの影響を受けない」ことを保証する特性として、最も適切なものを選びなさい。
  • ア 原子性(Atomicity)
  • イ 一貫性(Consistency)
  • ウ 独立性(Isolation)
  • エ 永続性(Durability)
解説
正解はです。Isolation(独立性・隔離性)は、並行して実行される複数のトランザクションが互いに干渉しないことを保証する特性です。
ア(原子性)は「全部成功か全部失敗か」。イ(一貫性)は「データの整合性制約が保たれること」。エ(永続性)は「コミット後のデータが消えないこと」です。4つの特性それぞれの内容をしっかり区別しておきましょう。
練習問題 3|ER図のカーディナリティ 経営情報システム|応用レベル
通販サイトのデータベースにおいて、「注文」と「商品」の関係を正しく説明しているものを選びなさい。なお、1件の注文には複数の商品が含まれ得るものとし、1つの商品も複数の注文に含まれ得るものとする。
  • ア 注文と商品は1対1の関係であるため、注文テーブルに商品IDを外部キーとして持てばよい
  • イ 注文と商品は1対多の関係であるため、商品テーブルに注文番号を外部キーとして持てばよい
  • ウ 注文と商品は多対多の関係であるため、注文明細テーブルを中間テーブルとして設け、注文番号と商品IDを外部キーとして持たせる必要がある
  • エ 注文と商品は多対多の関係であるため、注文テーブルと商品テーブルを1つに統合する
解説
正解はです。「1件の注文に複数商品・1つの商品が複数注文に含まれる」は多対多の関係です。多対多はRDBでは直接表現できないため、中間テーブル(注文明細テーブル)を設けて分解します。注文明細テーブルは「注文番号(FK)+商品ID(FK)」を主キーとする複合主キーテーブルになります。

まとめ

この記事で整理したこと
  • 正規化の目的は冗長性の排除と更新異常(挿入・削除・更新)の防止
  • 第1正規形(1NF):繰り返し項目をなくし、各セルが原子値(1つの値)になる状態
  • 第2正規形(2NF):複合主キーの一部だけに従属する列(部分従属)を別テーブルに分離
  • 第3正規形(3NF):非キー属性経由の連鎖従属(推移的従属)を別テーブルに分離
  • ER図では「エンティティ・属性・リレーションシップ・カーディナリティ」の4要素を読む
  • 多対多の関係は中間テーブルを設けて分解しなければRDBで表現できない
  • 主キーは一意性とNOT NULL制約。外部キーは参照先に存在する値のみ許容(参照整合性)
  • ACID特性:Atomicity(原子性)・Consistency(一貫性)・Isolation(独立性)・Durability(永続性)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

中小企業診断士試験勉強中のアラフィフシングルマザーです。
大学卒業後から現在まで、数々の失敗をしながらずっと自営業として試行錯誤を重ねてきました。
もっときちんと経営やビジネスの知識を身につけて、将来は他の事業者の方のお役にも立てたらいいな、と思うようになり、中小企業診断士の試験に挑戦中です。

目次