U「データベースの正規化って何をしているの?」と最初は謎でした。でも「同じデータを2か所に書かなくて済むように整理する」という目的を知ってから、第1〜第3正規形の意味がすっと入ってきました。スプレッドシートで管理していたものをデータベースに移すとき、まさにこの問題に直面するんですよね。
この記事でわかること
- リレーショナルデータベースの基本概念(テーブル・主キー・外部キー)
- ER図(エンティティ関連図)の読み方と描き方
- 正規化(第1〜第3正規形)のプロセスと目的
- SQL基本文(SELECT・WHERE・JOIN・GROUP BY)の意味
- ACID特性とトランザクション管理
目次
リレーショナルデータベースの基本
リレーショナルデータベース(RDB)は、データを「テーブル(表)」の形で管理し、テーブル間を「関係(リレーション)」で結びます。現在最も広く使われるデータベース形式です。
| 用語 | 意味 | 例 |
|---|---|---|
| テーブル(表) | データを格納する表。行(レコード)と列(フィールド・属性)からなる | 「顧客テーブル」「商品テーブル」 |
| 主キー(PK) | 各レコードを一意に識別する列。重複・NULLは不可 | 顧客ID・商品コード |
| 外部キー(FK) | 他のテーブルの主キーを参照する列。テーブル間を結ぶ | 注文テーブルの「顧客ID」は顧客テーブルの主キーを参照 |
| インデックス | 検索を高速化するための索引。主キーには自動作成される | 電話帳の「あいうえお」順索引 |
| ビュー | SELECT文の結果を仮想テーブルとして保存したもの。実データは持たない | 「今月の売上ランキング」ビュー |
ER図——データの設計図
ER図の3要素
エンティティ(Entity):管理対象(四角形で表す)。例:顧客・商品・注文属性(Attribute):エンティティが持つ性質(楕円形で表す)。例:顧客名・住所・電話番号
リレーションシップ:エンティティ間の関係(ひし形で表す)。例:顧客が注文を「する」
カーディナリティ(多重度)の表記:
1対1(1:1)・1対多(1:N)・多対多(M:N)の3種類。
多対多は中間テーブル(関連テーブル)を設けて1対多×2に分解する。
正規化——データの重複を排除する
正規化とは、データの冗長性(重複)を取り除き、更新時の不整合を防ぐためにテーブルを分解するプロセスです。
| 正規形 | 条件 | 解決する問題 |
|---|---|---|
| 第1正規形(1NF) | すべての属性が原子値(繰り返しグループなし)。各セルに1つの値のみ | 1つのセルに「商品A,商品B」と複数値が入っている問題を解消 |
| 第2正規形(2NF) | 第1NFを満たし、部分関数従属を排除。非キー属性が主キー全体に完全従属 | 複合主キーの一部にしか依存しない属性を別テーブルへ分離 |
| 第3正規形(3NF) | 第2NFを満たし、推移的関数従属を排除。非キー属性が他の非キー属性に依存しない | 「顧客ID→郵便番号→住所」のような間接依存を別テーブルへ分離 |
正規化のトレードオフ
- 正規化のメリット:データの一貫性確保・更新異常の防止・ストレージ節約
- 正規化のデメリット:テーブル数が増えJOINが多くなり、参照系のクエリが遅くなる
- 非正規化:参照パフォーマンスを優先して意図的に冗長性を持たせることもある(DWH・分析系DB)
SQLの基本——データを操作する言語
| SQL文の種類 | コマンド例 | 用途 |
|---|---|---|
| データ定義(DDL) | CREATE / ALTER / DROP | テーブル・インデックスの作成・変更・削除 |
| データ操作(DML) | SELECT / INSERT / UPDATE / DELETE | データの検索・挿入・更新・削除 |
| データ制御(DCL) | GRANT / REVOKE | アクセス権限の付与・取消 |
| トランザクション制御(TCL) | COMMIT / ROLLBACK | 処理の確定・取消 |
SELECT文の基本構造(試験頻出)
SELECT 列名 FROM テーブル名 WHERE 条件 GROUP BY グループ化列 HAVING グループ条件 ORDER BY 並び順WHERE:行を絞り込む(集計前)
GROUP BY:指定列でグループ化してSUM・COUNT・AVG等の集計関数を使う
HAVING:グループ化後の条件(集計後に絞り込む)
JOIN:複数テーブルを結合。INNER JOIN(一致する行のみ)/ LEFT JOIN(左テーブルは全行)
ACID特性とトランザクション
| 特性 | 英語 | 意味 |
|---|---|---|
| 原子性 | Atomicity | トランザクションは「すべて成功」か「すべて失敗(ロールバック)」のどちらか。中途半端な状態にならない |
| 一貫性 | Consistency | トランザクション前後でデータの整合性制約が保たれる |
| 独立性 | Isolation | 複数のトランザクションが同時実行されても、互いに干渉しない |
| 永続性 | Durability | コミットされたデータは障害が起きても失われない |
Uのメモ
学習メモ
- 主キー:一意識別、重複・NULL不可 / 外部キー:他テーブルの主キーを参照
- ER図:エンティティ(四角)・属性(楕円)・関係(ひし形)。多対多→中間テーブルで分解
- 正規化:第1(原子値)→第2(部分従属排除)→第3(推移従属排除)
- SELECT文の順序:WHERE(絞込)→GROUP BY(集計)→HAVING(集計後絞込)→ORDER BY
- ACID:原子性・一貫性・独立性・永続性
- COMMIT:確定 / ROLLBACK:取消









