databases について
MongoDB と PostgreSQL を扱う人向けのデータベーススキルガイドです。選定、設計、クエリ、運用のほか、移行・バックアップ・性能確認用のスクリプトも扱います。
主な機能
- 01MongoDB と PostgreSQL の選定ガイド
- 02クエリと集計のリファレンス
- 03インデックスと性能改善の指針
- 04移行・バックアップ・復元スクリプト
活用シーン
- 01プロジェクトで使うデータベースの選定
- 02SQL または MongoDB クエリの作成
- 03データ移行とバックアップの設定
- 04遅いクエリやインデックスの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ samhvw8/ dotfiles --skill databasesインストール後、Claude Code で/databasesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/mongodb-aggregation.mdmongodb-atlas.mdmongodb-crud.mdmongodb-indexing.mdpostgresql-administration.mdpostgresql-performance.mdpostgresql-psql-cli.mdpostgresql-queries.mdscripts/db_backup.pydb_migrate.pydb_performance_check.pydot_coveragerequirements.txtscripts/tests/coverage-db.jsonrequirements.txttest_db_backup.pytest_db_migrate.pytest_db_performance_check.py詳細
データベーススキル
MongoDB(ドキュメント指向)とPostgreSQL(リレーショナル)データベースを扱うための統合ガイドです。用途に合ったデータベースを選び、両方のシステムを習得しましょう。
このスキルを使用する場面
次のような場合に使用します:
- データベーススキーマとデータモデルの設計
- クエリ(SQLまたはMongoDBクエリ言語)の作成
- 集約パイプラインや複雑な結合の構築
- インデックスとクエリパフォーマンスの最適化
- データベースのマイグレーションの実装
- レプリケーション、シャーディング、クラスタリングの設定
- バックアップと災害復旧の構成
- データベースユーザーと権限の管理
- 遅いクエリやパフォーマンスの問題の分析
- 本番データベースのデプロイの管理
データベース選択ガイド
次のような場合はMongoDBを選びます:
- スキーマの柔軟性:構造が頻繁に変わる、異種データを扱う
- ドキュメント中心:自然なJSON/BSONデータモデル
- 水平スケーリング:複数のサーバー間でシャーディングする必要がある
- 高い書き込みスループット:IoT、ロギング、リアルタイム分析
- ネストされた/階層的なデータ:埋め込みドキュメントが適している
- 迅速なプロトタイピング:マイグレーションなしでスキーマを進化させられる
最適な用途: コンテンツ管理、カタログ、IoT時系列データ、リアルタイム分析、モバイルアプリ、ユーザープロフィール
次のような場合はPostgreSQLを選びます:
- 強い一貫性:ACIDトランザクションが不可欠
- 複雑なリレーションシップ:多対多の結合、参照整合性
- SQLの要件:チームの専門知識、レポートツール、BIシステム
- データ整合性:厳格なスキーマ検証、制約
- 成熟したエコシステム:豊富なツール、拡張機能
- 複雑なクエリ:ウィンドウ関数、CTE、分析ワークロード
最適な用途: 金融システム、eコマースのトランザクション、ERP、CRM、データウェアハウス、分析
どちらもサポートする機能:
- JSON/JSONBの保存とクエリ
- 全文検索機能
- 地理空間クエリとインデックス作成
- レプリケーションと高可用性
- ACIDトランザクション(MongoDB 4.0以降)
- 強力なセキュリティ機能
クイックスタート
MongoDBのセットアップ
# Atlas (Cloud) - Recommended
# 1. Sign up at mongodb.com/atlas
# 2. Create M0 free cluster
# 3. Get connection string
# Connection
mongodb+srv://user:[email protected]/db
# Shell
mongosh "mongodb+srv://cluster.mongodb.net/mydb"
# Basic operations
db.users.insertOne({ name: "Alice", age: 30 })
db.users.find({ age: { $gte: 18 } })
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
db.users.deleteOne({ name: "Alice" })
PostgreSQLのセットアップ
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# Start service
sudo systemctl start postgresql
# Connect
psql -U postgres -d mydb
# Basic operations
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users WHERE age >= 18;
UPDATE users SET age = 31 WHERE name = 'Alice';
DELETE FROM users WHERE name = 'Alice';
一般的な操作
作成/挿入
// MongoDB
db.users.insertOne({ name: "Bob", email: "[email protected]" })
db.users.insertMany([{ name: "Alice" }, { name: "Charlie" }])
-- PostgreSQL
INSERT INTO users (name, email) VALUES ('Bob', '[email protected]');
INSERT INTO users (name, email) VALUES ('Alice', NULL), ('Charlie', NULL);
読み取り/クエリ
// MongoDB
db.users.find({ age: { $gte: 18 } })
db.users.findOne({ email: "[email protected]" })
-- PostgreSQL
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE email = '[email protected]' LIMIT 1;
更新
// MongoDB
db.users.updateOne({ name: "Bob" }, { $set: { age: 25 } })
db.users.updateMany({ status: "pending" }, { $set: { status: "active" } })
-- PostgreSQL
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET status = 'active' WHERE status = 'pending';
削除
// MongoDB
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ status: "deleted" })
-- PostgreSQL
DELETE FROM users WHERE name = 'Bob';
DELETE FROM users WHERE status = 'deleted';
インデックス作成
// MongoDB
db.users.createIndex({ email: 1 })
db.users.createIndex({ status: 1, createdAt: -1 })
-- PostgreSQL
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_status_created ON users(status, created_at DESC);
リファレンスの案内
MongoDBリファレンス
- mongodb-crud.md - CRUD操作、クエリ演算子、アトミック更新
- mongodb-aggregation.md - 集約パイプライン、ステージ、演算子、パターン
- mongodb-indexing.md - インデックスの種類、複合インデックス、パフォーマンス最適化
- mongodb-atlas.md - Atlasクラウドのセットアップ、クラスター、モニタリング、検索
PostgreSQLリファレンス
- postgresql-queries.md - SELECT、JOIN、サブクエリ、CTE、ウィンドウ関数
- postgresql-psql-cli.md - psqlコマンド、メタコマンド、スクリプト作成
- postgresql-performance.md - EXPLAIN、クエリ最適化、バキューム、インデックス
- postgresql-administration.md - ユーザー管理、バックアップ、レプリケーション、メンテナンス
Pythonユーティリティ
script/ 内のデータベースユーティリティスクリプト:
- db_migrate.py - 両方のデータベースのマイグレーションを生成して適用
- db_backup.py - MongoDBとPostgreSQLのバックアップと復元
- db_performance_check.py - 遅いクエリを分析し、インデックスを推奨
# Generate migration
python scripts/db_migrate.py --db mongodb --generate "add_user_index"
# Run backup
python scripts/db_backup.py --db postgres --output /backups/
# Check performance
python scripts/db_performance_check.py --db mongodb --threshold 100ms
主な違いのまとめ
| 機能 | MongoDB | PostgreSQL |
|---|---|---|
| データモデル | ドキュメント(JSON/BSON) | リレーショナル(テーブル/行) |
| スキーマ | 柔軟、動的 | 厳格、事前定義 |
| クエリ言語 | MongoDBクエリ言語 | SQL |
| 結合 | $lookup(限定的) | ネイティブ、最適化済み |
| トランザクション | 複数ドキュメント(4.0以降) | ネイティブACID |
| スケーリング | 水平(シャーディング) | 垂直(主)、水平(拡張機能) |
| インデックス | 単一、複合、テキスト、地理空間など | B-tree、ハッシュ、GiST、GINなど |
ベストプラクティス
MongoDB:
- 1対少数のリレーションシップには埋め込みドキュメントを使用します
- 1対多または多対多にはドキュメントを参照します
- 頻繁にクエリされるフィールドにインデックスを作成します
- 複雑な変換には集計パイプラインを使用します
- 本番環境では認証と TLS を有効にします
- マネージドホスティングには Atlas を使用します
PostgreSQL:
- スキーマを第3正規形(3NF)に正規化し、パフォーマンス向上のために非正規化します
- 参照整合性には外部キーを使用します
- 外部キーと、頻繁にフィルタリングされる列にインデックスを作成します
EXPLAIN ANALYZEを使用してクエリを最適化します- 定期的に
VACUUMとANALYZEを実行してメンテナンスします - Web アプリではコネクションプーリング(pgBouncer)を使用します
リソース
- MongoDB: https://www.mongodb.com/docs/
- PostgreSQL: https://www.postgresql.org/docs/
- MongoDB University: https://learn.mongodb.com/
- PostgreSQL Tutorial: https://www.postgresqltutorial.com/
コメント
Markdown 対応