database-devlisted
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