関連記事:SQL入門ガイド
データベース設計は、アプリケーション開発の土台となる重要なスキルです。設計が悪いと、後から修正するのが非常に困難になります。
データベース設計とは
データベース設計とは、アプリケーションで扱うデータをどのようにテーブル(表)に格納するかを決める作業です。
良い設計の条件
- データの重複がない:同じ情報を複数箇所に持たない
- 整合性が保たれる:矛盾したデータが入らない構造
- 拡張しやすい:新しい要件に対応しやすい
- パフォーマンスが良い:必要なデータに素早くアクセスできる
テーブル設計の基本
主キー(Primary Key)
各レコードを一意に識別するカラムです。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
外部キー(Foreign Key)
テーブル間のリレーションを定義します。
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
リレーションの種類
| 関係 | 例 | 実装方法 |
|---|---|---|
| 1対1 | ユーザーとプロフィール | 外部キー+UNIQUE制約 |
| 1対多 | ユーザーと注文 | 子テーブルに外部キー |
| 多対多 | 記事とタグ | 中間テーブル |
正規化の基本
正規化とは、データの重複を排除してテーブルを整理する手法です。
第1正規形:繰り返しグループの排除
NG例:
| id | name | 趣味1 | 趣味2 | 趣味3 |
|---|---|---|---|---|
| 1 | 田中 | 読書 | 映画 | NULL |
OK例: usersテーブルとhobbiesテーブルに分離
第2正規形:部分関数従属の排除
複合主キーの一部にのみ依存するカラムを別テーブルに分離します。
第3正規形:推移関数従属の排除
主キーに直接依存しないカラムを別テーブルに分離します。
実務では第3正規形まで意識すれば十分です。
ER図の基本
ER図(Entity Relationship Diagram)は、テーブル間の関係を視覚的に表現する図です。
Prisma ORM入門も参考にしてください。
ER図の構成要素
- エンティティ(テーブル):四角形で表現
- 属性(カラム):エンティティの中にリスト表示
- リレーション(関係):線で接続
ER図作成ツール
- dbdiagram.io:ブラウザで無料で使える
- MySQL Workbench:MySQLの公式ツール
- Draw.io:汎用的な作図ツール
設計のアンチパターン
1. とりあえず全部1テーブルに入れる
関連の薄いデータを1つのテーブルにまとめると、カラム数が膨大になり管理が困難になります。
2. IDを持たないテーブル
主キーのないテーブルは、レコードの特定や更新が困難になります。
3. JSONカラムの乱用
柔軟性はありますが、検索やインデックスが効きにくくなります。構造化できるデータは正規化しましょう。
4. 論理削除フラグの安易な使用
deleted_at カラムを安易に追加すると、全クエリにWHERE条件が必要になり複雑化します。
設計の進め方
- 要件を整理:どんなデータを扱うか洗い出す
- エンティティを抽出:テーブルになりそうな概念を列挙
- 関係を定義:エンティティ間のリレーションを決める
- 正規化:第3正規形まで正規化する
- ER図を作成:視覚的に確認・レビュー
- テーブル定義書を作成:カラム名・型・制約を文書化
まとめ
データベース設計は、アプリケーションの品質に直結する重要なスキルです。まずは正規化の概念を理解し、小さなアプリで実際にテーブル設計を行うことで感覚を掴んでいきましょう。