PROGスクールナビ

データベース設計の基礎|正規化・インデックス・SQLの応用を解説

プログラミングを学んでいるとすぐにデータベース設計の壁にぶつかります。基礎を正しく理解することで、パフォーマンスの良い設計ができるようになります。

データベース設計の基本概念

テーブル設計のポイント

  • 1テーブル1エンティティ:ユーザーテーブルにはユーザー情報のみ
  • 主キー(PRIMARY KEY):各行を一意に識別するカラム(通常はid)
  • 外部キー(FOREIGN KEY):別テーブルの主キーを参照するカラム

正規化とは

データの冗長性を排除してデータの整合性を保つためのルールです。

正規化内容
第1正規形(1NF)各カラムに1つの値のみ(配列はNG)
第2正規形(2NF)主キー以外の列は主キー全体に依存させる
第3正規形(3NF)主キー以外の列同士で依存関係を作らない

インデックスとは

インデックスは本の目次のような仕組みで、データの検索を高速化します。

-- インデックスの作成
CREATE INDEX idx_users_email ON users(email);

-- 効果:emailでの検索が劇的に高速化

ただしINSERT/UPDATEは遅くなるデメリットがあります。頻繁に検索されるカラムにのみ使用しましょう。

JOIN(テーブル結合)

種類意味
INNER JOIN両方のテーブルに存在するデータのみ取得
LEFT JOIN左テーブルのデータは全て取得(右は存在すれば)
RIGHT JOIN右テーブルのデータは全て取得
-- ユーザーとその注文を取得
SELECT u.name, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

トランザクション

複数のSQL操作を一つのまとまりとして実行する仕組み。銀行振込など「全て成功するか全て失敗するか」が重要な処理に使います。

BEGIN;
  UPDATE accounts SET balance = balance - 10000 WHERE id = 1;
  UPDATE accounts SET balance = balance + 10000 WHERE id = 2;
COMMIT; -- または ROLLBACK;

パフォーマンス改善の基本

  • SELECT *を避ける:必要なカラムのみ指定
  • N+1問題:ループ内でクエリを発行しない
  • EXPLAINコマンド:クエリの実行計画を確認する

まとめ

データベース設計の基礎は正規化・インデックス・JOIN・トランザクションの4つ。本番環境でのパフォーマンス問題の多くはDB設計に起因するため、エンジニアには必須の知識です。

📚 プログラミング初心者におすすめの本

🛒 楽天で人気のプログラミング入門書