← 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 · ★ 0 · API & Backend · score 56
Install: claude install-skill iamtatsuki05/dotfiles
# データベース開発スキル データベース設計、クエリ最適化、マイグレーション、パフォーマンス改善を効率的に行うためのガイド。 ## 実装前の必須確認 **既存のスキーマと設定を確認する。** データベースの種類、バージョン、既存のテーブル構造を把握する。 確認項目: - DBエンジン: PostgreSQL, MySQL, SQLite, MongoDB等 - ORMの有無: SQLAlchemy, Prisma, TypeORM, ActiveRecord等 - マイグレーションツール: Alembic, Flyway, Knex, Prisma Migrate等 - 既存のスキーマ定義ファイル - 対象環境: local / dev / staging / production - データ量、許容ロック時間、バックアップ/rollback 方針 本番または共有環境に影響する migration、不可逆変更、長時間 lock、データ削除・大量更新は、実行前に影響と戻し方を示してユーザー承認を取る。 ## スキーマ設計 ### 正規化レベル ``` 第1正規形 (1NF): 繰り返しグループを排除、原子値のみ 第2���規形 (2NF): 1NF + 部分関数従属を排除 第3正規形 (3NF): 2NF + 推移的関数従属を排除 BCNF: すべての決定項が候補キー ``` 実務では3NFまでを目標とし、パフォーマンス要件に応じて意図的に非正規化する。 ### テーブル設計の基本 ```sql -- PostgreSQL例 CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), email VARCHAR(255) NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- 更新日時の自動更新(PostgreSQL) CREATE OR REPLACE FUNCTION update_updated_at() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at(); ``` ### リレーション設計 ```sql -- 1対多 CREATE TABLE orders ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE