← ClaudeAtlas

database-devlisted

Use when the user asks to design or modify database schemas, queries, indexes, migrations, transactions, EXPLAIN plans, N+1 issues, SQL/NoSQL modeling, or database performance behavior.
iamtatsuki05/dotfiles · ★ 1 · API & Backend · score 51
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)を検討 インデックスタ