実務に差がつくSQL上級演習:正規化・インデックス・ビュー・トランザクション

ミサキ

ナナさん、中級まで来たけど、もっと「プロっぽいSQL」ってあるんですか?

ナナ

あるわよ、ミサキちゃん。上級編では、正規化・インデックス・ビュー・トランザクションなど「実務の質を上げる技術」を学ぶの。

データベース設計の要:正規化

正規化とは「データを無駄なく、矛盾なく整理する設計ルール」のこと。
たとえば、1つのテーブルに商品名・カテゴリ名が毎回書かれていたら、更新が大変!

例:正規化前(NG)

商品ID 商品名 カテゴリ名
1 リンゴ 果物
2 バナナ 果物
3 にんじん 野菜

正規化後(OK)

商品テーブル(products)

id name category_id
1 リンゴ 1
2 バナナ 1
3 にんじん 2

カテゴリテーブル(categories)

id name
1 果物
2 野菜

ミサキ

おお!カテゴリ名が1つの場所にまとまってる!

ナナ

そうすることで、あとから修正もしやすく、ミスも減るのよ。

処理速度アップ!インデックスの活用

インデックスとは「検索しやすくするための目次みたいなもの」。
データが増えてきたら、検索が遅くなるので、よく使う列にインデックスを張ると効果的。

CREATE INDEX idx_email ON customers(email);

ミサキ

インデックスって検索のスピードアップ装置みたいな感じですね!

ナナ

ただし、入れすぎると逆に遅くなることもあるから、使い所が大事よ。

ビューでSQLを使いまわそう

ビュー(VIEW)は、SELECT文の結果を「仮想のテーブル」として保存しておける機能。

CREATE VIEW vip_customers AS
SELECT name, email FROM customers WHERE address LIKE '%東京%';

ミサキ

なるほど…よく使う検索結果を名前で保存しておけるんですね!

ナナ

そう、分析やレポート用にもよく使うわよ。

トランザクションで「まとめて処理」

トランザクションとは、「一連の処理をまとめて行う仕組み」。
途中で失敗したら、全部元に戻すことができる。

BEGIN;
UPDATE customers SET address = '東京' WHERE id = 1;
UPDATE orders SET price = price * 1.1 WHERE customer_id = 1;
COMMIT;

ミサキ

一括でやって、ダメだったら取り消せるんですね!

ナナ

銀行の振込処理や会員登録なんかにも使われる、大事な仕組みなの。

応用問題に挑戦!

以下の構造とクエリで、実践力を試してみましょう。

  1. カテゴリごとの商品数を集計するSQLを書いてみよう
  2. インデックスを使って「emailで検索」する処理を高速化しよう
  3. 東京在住の顧客を対象にしたビューを作ってみよう
  4. 注文金額を更新する処理をトランザクションで包もう

まとめ

上級テーマ ポイント
正規化 データ構造を整理してミスを防ぐ
インデックス 検索やJOINを高速化
ビュー よく使うSELECT結果を保存
トランザクション 複数の処理をまとめて安全に

ミサキ

正規化とかビューとか、まさにプロっぽい内容ですね〜!

ナナ

これができれば、SQL上級者の仲間入りよ。実務でバリバリ活躍できるわね!

← 前の記事 次の記事 →