プログラミングを学んでいるとすぐにデータベース設計の壁にぶつかります。基礎を正しく理解することで、パフォーマンスの良い設計ができるようになります。
データベース設計の基本概念
テーブル設計のポイント
- 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設計に起因するため、エンジニアには必須の知識です。
📚 プログラミング初心者におすすめの本