Database Engineering Mastery
Production-ready database patterns for PostgreSQL, MongoDB, and Redis. Focuses on design, optimization, and administration — language-agnostic fundamentals that work with any backend (Rust, Go, Python, Node.js, etc.).
Backend-Agnostic Design
This skill focuses on database fundamentals that work with ANY backend:
| This Skill (databases) |
Backend Implementation |
| Pure SQL, schema design |
SQLx (Rust), GORM (Go), SQLAlchemy (Python), Prisma (Node) |
EXPLAIN ANALYZE, indexing |
Query optimization in any language |
| DBA tasks (VACUUM, replication) |
Database administration (language-independent) |
| MongoDB shell & aggregation |
Official drivers: Rust, Go, Python, Node, Java |
| Redis CLI patterns |
Redis clients: redis-rs, go-redis, redis-py, ioredis |
Implementation Examples:
- Rust: See rust-backend-advance
- Go: Use Gin/Echo + GORM or sqlx
- Python: Use FastAPI + SQLAlchemy or asyncpg
- Node.js: Use Express + Prisma or Knex
Database Selection
| Criteria |
PostgreSQL |
MongoDB |
Redis |
| Data model |
Relational tables |
JSON documents |
Key-value / streams |
| Best for |
ACID transactions, complex JOINs |
Flexible schema, rapid iteration |
Caching, real-time, pub/sub |
| Scaling |
Vertical + read replicas |
Horizontal sharding |
In-memory, cluster |
| Query language |
SQL |
MQL (MongoDB Query Language) |
Redis commands |
| When to pick |
Data integrity critical |
Schema evolves fast |
Sub-ms latency needed |
Quick Start
PostgreSQL
-- Create with constraints
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
metadata JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_users_email ON users(email);
-- Performance check
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM users WHERE email = 'test@example.com';
MongoDB
// Insert with validation
db.createCollection("users", {
validator: { $jsonSchema: {
bsonType: "object",
required: ["email", "name"],
properties: {
email: { bsonType: "string", pattern: "^.+@.+$" },
name: { bsonType: "string", minLength: 1 }
}
}}
});
// Aggregation pipeline
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 10 }
]);
Redis
# Caching pattern
SET user:123 '{"name":"Alice"}' EX 3600
GET user:123
# Pub/Sub
PUBLISH notifications '{"type":"order","id":456}'
SUBSCRIBE notifications
# Sorted set leaderboard
ZADD leaderboard 100 "player1" 200 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES
Reference Navigation
PostgreSQL Deep-Dive
- Schema Design — Normalization, partitioning, JSONB, constraints, migrations
- Advanced Queries — CTEs, Window Functions, lateral joins, recursive queries
- Optimization — EXPLAIN, indexing strategies, query planner, statistics
- Administration — Users, backups, VACUUM, monitoring, pgBouncer
- Replication & HA — Streaming replication, failover, pg_basebackup
MongoDB Deep-Dive
- Document Modeling — Embedding vs referencing, schema patterns, polymorphism
- Aggregation Mastery — Pipeline stages, $lookup, $graphLookup, optimization
- Indexing & Performance — Compound, multikey, text, 2dsphere, covered queries
- Atlas & Operations — Atlas setup, monitoring, sharding, backup, security
Redis Deep-Dive
- Patterns & Use Cases — Caching, sessions, rate limiting, pub/sub, streams, Lua scripts
Cross-Database
- Selection Guide — When to use what, hybrid architectures, migration strategies
Best Practices
PostgreSQL: Normalize to 3NF first, denormalize for read performance. Always use EXPLAIN ANALYZE. Index foreign keys. VACUUM regularly. Use pgBouncer for connection pooling.
MongoDB: Embed for 1-to-few, reference for 1-to-many. Index every query pattern. Use aggregation pipeline over map-reduce. Enable authentication. Use Atlas for production.
Redis: Set TTL on everything. Use pipelines for bulk ops. Don't store data you can't lose (unless persisted). Monitor memory with INFO memory.
Related Skills
| Skill |
When to Use |
| rust-backend-advance |
Rust/Axum/SQLx implementation (one backend option) |
| authentication |
User/session storage, auth tables |
| payments |
Orders, transactions, subscriptions storage |
| devops |
Database hosting, backups, Docker containers |
| debugging |
Query performance issues, connection problems |
| testing |
Database integration tests |
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: databases-33description: Advanced database engineering — PostgreSQL (schema design, advanced queries, optimization, replication, administration), MongoDB (document modeling, aggregation pipelines, sharding, Atlas), Redis (caching, pub/sub, streams). Use for schema design, query optimization, database administration, backup/restore, replication, and performance tuning. Use when this capability is needed.4---56# Database Engineering Mastery78Production-ready database patterns for PostgreSQL, MongoDB, and Redis. Focuses on **design, optimization, and administration** — language-agnostic fundamentals that work with any backend (Rust, Go, Python, Node.js, etc.).910## Backend-Agnostic Design1112This skill focuses on **database fundamentals** that work with ANY backend:1314| This Skill (databases) | Backend Implementation |15|------------------------|------------------------|16| Pure SQL, schema design | SQLx (Rust), GORM (Go), SQLAlchemy (Python), Prisma (Node) |17| `EXPLAIN ANALYZE`, indexing | Query optimization in any language |18| DBA tasks (VACUUM, replication) | Database administration (language-independent) |19| MongoDB shell & aggregation | Official drivers: Rust, Go, Python, Node, Java |20| Redis CLI patterns | Redis clients: redis-rs, go-redis, redis-py, ioredis |2122**Implementation Examples:**23- Rust: See [rust-backend-advance](../rust-backend-advance/SKILL.md)24- Go: Use Gin/Echo + GORM or sqlx25- Python: Use FastAPI + SQLAlchemy or asyncpg26- Node.js: Use Express + Prisma or Knex2728## Database Selection2930| Criteria | PostgreSQL | MongoDB | Redis |31|----------|-----------|---------|-------|32| **Data model** | Relational tables | JSON documents | Key-value / streams |33| **Best for** | ACID transactions, complex JOINs | Flexible schema, rapid iteration | Caching, real-time, pub/sub |34| **Scaling** | Vertical + read replicas | Horizontal sharding | In-memory, cluster |35| **Query language** | SQL | MQL (MongoDB Query Language) | Redis commands |36| **When to pick** | Data integrity critical | Schema evolves fast | Sub-ms latency needed |3738## Quick Start3940### PostgreSQL41```sql42-- Create with constraints43CREATE TABLE users (44 id UUID PRIMARY KEY DEFAULT gen_random_uuid(),45 email TEXT UNIQUE NOT NULL,46 name TEXT NOT NULL,47 metadata JSONB DEFAULT '{}',48 created_at TIMESTAMPTZ DEFAULT now()49);50CREATE INDEX idx_users_email ON users(email);5152-- Performance check53EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)54SELECT * FROM users WHERE email = 'test@example.com';55```5657### MongoDB58```javascript59// Insert with validation60db.createCollection("users", {61 validator: { $jsonSchema: {62 bsonType: "object",63 required: ["email", "name"],64 properties: {65 email: { bsonType: "string", pattern: "^.+@.+$" },66 name: { bsonType: "string", minLength: 1 }67 }68 }}69});7071// Aggregation pipeline72db.orders.aggregate([73 { $match: { status: "completed" } },74 { $group: { _id: "$userId", total: { $sum: "$amount" } } },75 { $sort: { total: -1 } },76 { $limit: 10 }77]);78```7980### Redis81```bash82# Caching pattern83SET user:123 '{"name":"Alice"}' EX 360084GET user:1238586# Pub/Sub87PUBLISH notifications '{"type":"order","id":456}'88SUBSCRIBE notifications8990# Sorted set leaderboard91ZADD leaderboard 100 "player1" 200 "player2"92ZREVRANGE leaderboard 0 9 WITHSCORES93```9495## Reference Navigation9697### PostgreSQL Deep-Dive98- **[Schema Design](references/postgresql-schema-design.md)** — Normalization, partitioning, JSONB, constraints, migrations99- **[Advanced Queries](references/postgresql-advanced-queries.md)** — CTEs, Window Functions, lateral joins, recursive queries100- **[Optimization](references/postgresql-optimization.md)** — EXPLAIN, indexing strategies, query planner, statistics101- **[Administration](references/postgresql-administration.md)** — Users, backups, VACUUM, monitoring, pgBouncer102- **[Replication & HA](references/postgresql-replication.md)** — Streaming replication, failover, pg_basebackup103104### MongoDB Deep-Dive105- **[Document Modeling](references/mongodb-document-modeling.md)** — Embedding vs referencing, schema patterns, polymorphism106- **[Aggregation Mastery](references/mongodb-aggregation.md)** — Pipeline stages, $lookup, $graphLookup, optimization107- **[Indexing & Performance](references/mongodb-indexing.md)** — Compound, multikey, text, 2dsphere, covered queries108- **[Atlas & Operations](references/mongodb-atlas-ops.md)** — Atlas setup, monitoring, sharding, backup, security109110### Redis Deep-Dive111- **[Patterns & Use Cases](references/redis-patterns.md)** — Caching, sessions, rate limiting, pub/sub, streams, Lua scripts112113### Cross-Database114- **[Selection Guide](references/database-selection-guide.md)** — When to use what, hybrid architectures, migration strategies115116## Best Practices117118**PostgreSQL:** Normalize to 3NF first, denormalize for read performance. Always use `EXPLAIN ANALYZE`. Index foreign keys. VACUUM regularly. Use pgBouncer for connection pooling.119120**MongoDB:** Embed for 1-to-few, reference for 1-to-many. Index every query pattern. Use aggregation pipeline over map-reduce. Enable authentication. Use Atlas for production.121122**Redis:** Set TTL on everything. Use pipelines for bulk ops. Don't store data you can't lose (unless persisted). Monitor memory with `INFO memory`.123124## Related Skills125126| Skill | When to Use |127|-------|-------------|128| [rust-backend-advance](../rust-backend-advance/SKILL.md) | Rust/Axum/SQLx implementation (one backend option) |129| [authentication](../authentication/SKILL.md) | User/session storage, auth tables |130| [payments](../payments/SKILL.md) | Orders, transactions, subscriptions storage |131| [devops](../devops/SKILL.md) | Database hosting, backups, Docker containers |132| [debugging](../debugging/SKILL.md) | Query performance issues, connection problems |133| [testing](../testing/SKILL.md) | Database integration tests |134135---136> Converted and distributed by [TomeVault](https://tomevault.io/claim/thienty1207) — claim your Tome and manage your conversions.137<!-- tomevault:4.0:skill_md:2026-04-14 -->