database-devlisted
Install: claude install-skill iamtatsuki05/dotfiles
# データベース開発スキル
データベース設計、クエリ最適化、migration、パフォーマンス改善を効率的に行うためのガイド。
## 実装前の必須確認
**既存のスキーマと設定を確認する。** データベースの種類、バージョン、既存のテーブル構造を把握する。
確認項目:
- DBエンジン: PostgreSQL, MySQL, SQLite, MongoDB等
- ORMの有無: SQLAlchemy, Prisma, TypeORM, ActiveRecord等
- migration ツール: Alembic, Flyway, Knex, Prisma Migrate等
- 既存のスキーマ定義ファイル
- 対象環境: local / dev / staging / production
- データ量、許容ロック時間、バックアップ/rollback 方針
本番または共有環境に影響する migration、不可逆変更、長時間 lock、データ削除・大量更新は、実行前に影響と戻し方を示してユーザー承認を取る。
## スキーマ設計
### 正規化レベル
実務では3NFまでを目標とし、パフォーマンス要件に応じた意図的な非正規化は理由を記録する。各正規形の定義・変換例・非正規化パターンは [references/normalization.md](references/normalization.md) を参照。
### テーブル設計とリレーション
- 制約(NOT NULL, UNIQUE, FK, CHECK)はアプリ層任せにせず DB 層で守る。
- `updated_at` の自動更新は ORM/アプリ層かトリガーで行う。PostgreSQL のトリガー実装例は [references/engine-specific.md](references/engine-specific.md) を参照。
- 多対多は中間テーブル + 複合主キー。FK の `ON DELETE`(CASCADE / SET NULL / RESTRICT)は業務上の親子関係で選び、無条件に CASCADE にしない。
### 型の選択指針
| 用途 | PostgreSQL | MySQL | 注意点 |
|------|------------|-------|--------|
| 主キー | UUID / BIGSERIAL | BINARY(16) / BIGINT AUTO_INCREMENT | UUIDは分散環境向き |
| 日時 | TIMESTAMPTZ | DATETIME(6) | タイムゾーン考慮 |
| 金額 | DECIMAL(p,s) | DECIMAL(p,s) | 浮動小数点は避ける |
| JSON | JSONB | JSON | PostgreSQLはJSONB推奨 |
| 列挙 | VARCHAR + CHECK | ENUM | ENUMは変更が困難 |
## インデックス設計
### インデックス選択の判断基準
- WHERE句で頻繁に使用するカラム、JOIN条件、ORDER BY / GROUP BYのカラム
- 複合インデックスは左端カラムからしか使われない。等価条件を左、範囲条件を右に置く
- カーディナリティが高いカラム優先。書き込み頻度とのトレードオフを考慮
- 特定条件の行だけ検索するなら部分インデックス、SELECT 列まで含めるならカバリング(INCLUDE)を検討
インデックスタ