Database Designer - POWERFUL Tier Skill

Use when the user asks to design database schemas, plan data migrations, optimize queries, choose between SQL and NoSQL, or model data relationships.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/database-designer, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/engineering/skills/database-designer#main ~/.claude/skills/database-designer

For one project only, change the path to .claude/skills/database-designer. This skill also uses schema_analyzer.py, analysis.json, sample_schema.json, index_optimizer.py, indexes.json, migration_generator.py — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Database Designer - POWERFUL Tier Skill

Show the full text315 lines
namedescription
database-designerUse when the user asks to design database schemas, plan data migrations, optimize queries, choose between SQL and NoSQL, or model data relationships.

Database Designer - POWERFUL Tier Skill

Overview

A comprehensive database design skill that provides expert-level analysis, optimization, and migration capabilities for modern database systems. This skill combines theoretical principles with practical tools to help architects and developers create scalable, performant, and maintainable database schemas.

Core Competencies

Schema Design & Analysis
  • Normalization Analysis: Automated detection of normalization levels (1NF through BCNF)
  • Denormalization Strategy: Smart recommendations for performance optimization
  • Data Type Optimization: Identification of inappropriate types and size issues
  • Constraint Analysis: Missing foreign keys, unique constraints, and null checks
  • Naming Convention Validation: Consistent table and column naming patterns
  • ERD Generation: Automatic Mermaid diagram creation from DDL
Index Optimization
  • Index Gap Analysis: Identification of missing indexes on foreign keys and query patterns
  • Composite Index Strategy: Optimal column ordering for multi-column indexes
  • Index Redundancy Detection: Elimination of overlapping and unused indexes
  • Performance Impact Modeling: Selectivity estimation and query cost analysis
  • Index Type Selection: B-tree, hash, partial, covering, and specialized indexes
Migration Management
  • Zero-Downtime Migrations: Expand-contract pattern implementation
  • Schema Evolution: Safe column additions, deletions, and type changes
  • Data Migration Scripts: Automated data transformation and validation
  • Rollback Strategy: Complete reversal capabilities with validation
  • Execution Planning: Ordered migration steps with dependency resolution

Tool Workflow (run these — do not analyze schemas by hand)

All paths relative to this skill folder; sample inputs in assets/.

1. Analyze the schema
python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json

Accepts SQL DDL or JSON schema (assets/sample_schema.sql / sample_schema.json). Output includes normalization findings, missing constraints, naming issues, and a Mermaid ERD — show the ERD to the user and fix flagged issues before optimizing.

2. Optimize indexes against real query patterns
python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json

Write the user's hot queries into a query-patterns JSON first (copy assets/sample_query_patterns.json). Output is a priority-ordered list of CREATE INDEX recommendations plus redundant-index removals.

3. Generate the migration
python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql

--zero-downtime emits an expand-contract plan; --validate-only checks feasibility without generating SQL.

4. Verification loop

Re-run step 1 on the target schema and assert the issues found in the first pass are gone; run migration_generator.py --validate-only before handing over the migration.

Database Design Principles

→ See references/database-design-reference.md for details

Best Practices

Schema Design
  1. Use meaningful names: Clear, consistent naming conventions
  2. Choose appropriate data types: Right-sized columns for storage efficiency
  3. Define proper constraints: Foreign keys, check constraints, unique indexes
  4. Consider future growth: Plan for scale from the beginning
  5. Document relationships: Clear foreign key relationships and business rules
Performance Optimization
  1. Index strategically: Cover common query patterns without over-indexing
  2. Monitor query performance: Regular analysis of slow queries
  3. Partition large tables: Improve query performance and maintenance
  4. Use appropriate isolation levels: Balance consistency with performance
  5. Implement connection pooling: Efficient resource utilization
Security Considerations
  1. Principle of least privilege: Grant minimal necessary permissions
  2. Encrypt sensitive data: At rest and in transit
  3. Audit access patterns: Monitor and log database access
  4. Validate inputs: Prevent SQL injection attacks
  5. Regular security updates: Keep database software current

Query Generation Patterns

SELECT with JOINs
-- INNER JOIN: only matching rows
SELECT o.id, c.name, o.total
FROM orders o
INNER JOIN customers c ON c.id = o.customer_id;

-- LEFT JOIN: all left rows, NULLs for non-matches
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;

-- Self-join: hierarchical data (employees/managers)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
Common Table Expressions (CTEs)
-- Recursive CTE for org chart
WITH RECURSIVE org AS (
  SELECT id, name, manager_id, 1 AS depth
  FROM employees WHERE manager_id IS NULL
  UNION ALL
  SELECT e.id, e.name, e.manager_id, o.depth + 1
  FROM employees e INNER JOIN org o ON o.id = e.manager_id
)
SELECT * FROM org ORDER BY depth, name;
Window Functions
-- ROW_NUMBER for pagination / dedup
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
FROM orders;

-- RANK with gaps, DENSE_RANK without gaps
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;

-- LAG/LEAD for comparing adjacent rows
SELECT date, revenue,
  revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
FROM daily_sales;
Aggregation Patterns
-- FILTER clause (PostgreSQL) for conditional aggregation
SELECT
  COUNT(*) AS total,
  COUNT(*) FILTER (WHERE status = 'active') AS active,
  AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
FROM accounts;

-- GROUPING SETS for multi-level rollups
SELECT region, product, SUM(revenue)
FROM sales
GROUP BY GROUPING SETS ((region, product), (region), ());

Migration Patterns

Up/Down Migration Scripts

Every migration must have a reversible counterpart. Name files with a timestamp prefix for ordering:

migrations/
├── 20260101_000001_create_users.up.sql
├── 20260101_000001_create_users.down.sql
├── 20260115_000002_add_users_email_index.up.sql
└── 20260115_000002_add_users_email_index.down.sql
Zero-Downtime Migrations (Expand/Contract)

Use the expand-contract pattern to avoid locking or breaking running code:

  1. Expand — add the new column/table (nullable, with default)
  2. Migrate data — backfill in batches; dual-write from application
  3. Transition — application reads from new column; stop writing to old
  4. Contract — drop old column in a follow-up migration
Data Backfill Strategies
-- Batch update to avoid long-running locks
UPDATE users SET email_normalized = LOWER(email)
WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
-- Repeat in a loop until 0 rows affected
Rollback Procedures
  • Always test the down.sql in staging before deploying up.sql to production
  • Keep rollback window short — if the contract step has run, rollback requires a new forward migration
  • For irreversible changes (dropping columns with data), take a logical backup first

Performance Optimization

Indexing Strategies
Index Type Use Case Example
B-tree (default) Equality, range, ORDER BY CREATE INDEX idx_users_email ON users(email);
GIN Full-text search, JSONB, arrays CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));
GiST Geometry, range types, nearest-neighbor CREATE INDEX idx_locations ON places USING gist(coords);
Partial Subset of rows (reduce size) CREATE INDEX idx_active ON users(email) WHERE active = true;
Covering Index-only scans CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);
EXPLAIN Plan Reading
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;

Key signals to watch:

  • Seq Scan on large tables — missing index
  • Nested Loop with high row estimates — consider hash/merge join or add index
  • Buffers shared read much higher than hit — working set exceeds memory
N+1 Query Detection

Symptoms: application issues one query per row (e.g., fetching related records in a loop).

Fixes:

  • Use JOIN or subquery to fetch in one round-trip
  • ORM eager loading (select_related / includes / with)
  • DataLoader pattern for GraphQL resolvers
Connection Pooling
Tool Protocol Best For
PgBouncer PostgreSQL Transaction/statement pooling, low overhead
ProxySQL MySQL Query routing, read/write splitting
Built-in pool (HikariCP, SQLAlchemy pool) Any Application-level pooling

Rule of thumb: Set pool size to (2 * CPU cores) + disk spindles. For cloud SSDs, start with 2 * vCPUs and tune.

Read Replicas and Query Routing
  • Route all SELECT queries to replicas; writes to primary
  • Account for replication lag (typically <1s for async, 0 for sync)
  • Use pg_last_wal_replay_lsn() to detect lag before reading critical data

Multi-Database Decision Matrix

Criteria PostgreSQL MySQL SQLite SQL Server
Best for Complex queries, JSONB, extensions Web apps, read-heavy workloads Embedded, dev/test, edge Enterprise .NET stacks
JSON support Excellent (JSONB + GIN) Good (JSON type) Minimal Good (OPENJSON)
Replication Streaming, logical Group replication, InnoDB cluster N/A Always On AG
Licensing Open source (PostgreSQL License) Open source (GPL) / commercial Public domain Commercial
Max practical size Multi-TB Multi-TB ~1 TB (single-writer) Multi-TB

When to choose:

  • PostgreSQL — default choice for new projects; best extensibility and standards compliance
  • MySQL — existing MySQL ecosystem; simple read-heavy web applications
  • SQLite — mobile apps, CLI tools, unit test databases, IoT/edge
  • SQL Server — mandated by enterprise policy; deep .NET/Azure integration
NoSQL Considerations
Database Model Use When
MongoDB Document Schema flexibility, rapid prototyping, content management
Redis Key-value / cache Session store, rate limiting, leaderboards, pub/sub
DynamoDB Wide-column Serverless AWS apps, single-digit-ms latency at any scale

Use SQL as default. Reach for NoSQL only when the access pattern clearly benefits from it.


Sharding & Replication

Horizontal vs Vertical Partitioning
  • Vertical partitioning: Split columns across tables (e.g., separate BLOB columns). Reduces I/O for narrow queries.
  • Horizontal partitioning (sharding): Split rows across databases/servers. Required when a single node cannot hold the dataset or handle the throughput.
Sharding Strategies
Strategy How It Works Pros Cons
Hash shard = hash(key) % N Even distribution Resharding is expensive
Range Shard by date or ID range Simple, good for time-series Hot spots on latest shard
Geographic Shard by user region Data locality, compliance Cross-region queries are hard
Replication Patterns
Pattern Consistency Latency Use Case
Synchronous Strong Higher write latency Financial transactions
Asynchronous Eventual Low write latency Read-heavy web apps
Semi-synchronous At-least-one replica confirmed Moderate Balance of safety and speed

Cross-References

  • sql-database-assistant — query writing, optimization, and debugging for day-to-day SQL work
  • database-schema-designer — ERD modeling, normalization analysis, and schema generation
  • migration-architect — large-scale migration planning across database engines or major schema overhauls
  • senior-backend — application-layer patterns (connection pooling, ORM best practices)
  • senior-devops — infrastructure provisioning for database clusters and replicas
1---
2name: "database-designer"
3description: "Use when the user asks to design database schemas, plan data migrations, optimize queries, choose between SQL and NoSQL, or model data relationships."
4---
5 
6# Database Designer - POWERFUL Tier Skill
7 
8## Overview
9 
10A comprehensive database design skill that provides expert-level analysis, optimization, and migration capabilities for modern database systems. This skill combines theoretical principles with practical tools to help architects and developers create scalable, performant, and maintainable database schemas.
11 
12## Core Competencies
13 
14### Schema Design & Analysis
15- **Normalization Analysis**: Automated detection of normalization levels (1NF through BCNF)
16- **Denormalization Strategy**: Smart recommendations for performance optimization
17- **Data Type Optimization**: Identification of inappropriate types and size issues
18- **Constraint Analysis**: Missing foreign keys, unique constraints, and null checks
19- **Naming Convention Validation**: Consistent table and column naming patterns
20- **ERD Generation**: Automatic Mermaid diagram creation from DDL
21 
22### Index Optimization
23- **Index Gap Analysis**: Identification of missing indexes on foreign keys and query patterns
24- **Composite Index Strategy**: Optimal column ordering for multi-column indexes
25- **Index Redundancy Detection**: Elimination of overlapping and unused indexes
26- **Performance Impact Modeling**: Selectivity estimation and query cost analysis
27- **Index Type Selection**: B-tree, hash, partial, covering, and specialized indexes
28 
29### Migration Management
30- **Zero-Downtime Migrations**: Expand-contract pattern implementation
31- **Schema Evolution**: Safe column additions, deletions, and type changes
32- **Data Migration Scripts**: Automated data transformation and validation
33- **Rollback Strategy**: Complete reversal capabilities with validation
34- **Execution Planning**: Ordered migration steps with dependency resolution
35 
36## Tool Workflow (run these — do not analyze schemas by hand)
37 
38All paths relative to this skill folder; sample inputs in `assets/`.
39 
40### 1. Analyze the schema
41 
42```bash
43python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json
44```
45 
46Accepts SQL DDL or JSON schema (`assets/sample_schema.sql` / `sample_schema.json`). Output includes normalization findings, missing constraints, naming issues, and a Mermaid ERD — show the ERD to the user and fix flagged issues before optimizing.
47 
48### 2. Optimize indexes against real query patterns
49 
50```bash
51python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json
52```
53 
54Write the user's hot queries into a query-patterns JSON first (copy `assets/sample_query_patterns.json`). Output is a priority-ordered list of CREATE INDEX recommendations plus redundant-index removals.
55 
56### 3. Generate the migration
57 
58```bash
59python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql
60```
61 
62`--zero-downtime` emits an expand-contract plan; `--validate-only` checks feasibility without generating SQL.
63 
64### 4. Verification loop
65 
66Re-run step 1 on the *target* schema and assert the issues found in the first pass are gone; run `migration_generator.py --validate-only` before handing over the migration.
67 
68## Database Design Principles
69→ See references/database-design-reference.md for details
70 
71## Best Practices
72 
73### Schema Design
741. **Use meaningful names**: Clear, consistent naming conventions
752. **Choose appropriate data types**: Right-sized columns for storage efficiency
763. **Define proper constraints**: Foreign keys, check constraints, unique indexes
774. **Consider future growth**: Plan for scale from the beginning
785. **Document relationships**: Clear foreign key relationships and business rules
79 
80### Performance Optimization
811. **Index strategically**: Cover common query patterns without over-indexing
822. **Monitor query performance**: Regular analysis of slow queries
833. **Partition large tables**: Improve query performance and maintenance
844. **Use appropriate isolation levels**: Balance consistency with performance
855. **Implement connection pooling**: Efficient resource utilization
86 
87### Security Considerations
881. **Principle of least privilege**: Grant minimal necessary permissions
892. **Encrypt sensitive data**: At rest and in transit
903. **Audit access patterns**: Monitor and log database access
914. **Validate inputs**: Prevent SQL injection attacks
925. **Regular security updates**: Keep database software current
93 
94## Query Generation Patterns
95 
96### SELECT with JOINs
97 
98```sql
99-- INNER JOIN: only matching rows
100SELECT o.id, c.name, o.total
101FROM orders o
102INNER JOIN customers c ON c.id = o.customer_id;
103 
104-- LEFT JOIN: all left rows, NULLs for non-matches
105SELECT c.name, COUNT(o.id) AS order_count
106FROM customers c
107LEFT JOIN orders o ON o.customer_id = c.id
108GROUP BY c.name;
109 
110-- Self-join: hierarchical data (employees/managers)
111SELECT e.name AS employee, m.name AS manager
112FROM employees e
113LEFT JOIN employees m ON m.id = e.manager_id;
114```
115 
116### Common Table Expressions (CTEs)
117 
118```sql
119-- Recursive CTE for org chart
120WITH RECURSIVE org AS (
121 SELECT id, name, manager_id, 1 AS depth
122 FROM employees WHERE manager_id IS NULL
123 UNION ALL
124 SELECT e.id, e.name, e.manager_id, o.depth + 1
125 FROM employees e INNER JOIN org o ON o.id = e.manager_id
126)
127SELECT * FROM org ORDER BY depth, name;
128```
129 
130### Window Functions
131 
132```sql
133-- ROW_NUMBER for pagination / dedup
134SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
135FROM orders;
136 
137-- RANK with gaps, DENSE_RANK without gaps
138SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;
139 
140-- LAG/LEAD for comparing adjacent rows
141SELECT date, revenue,
142 revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
143FROM daily_sales;
144```
145 
146### Aggregation Patterns
147 
148```sql
149-- FILTER clause (PostgreSQL) for conditional aggregation
150SELECT
151 COUNT(*) AS total,
152 COUNT(*) FILTER (WHERE status = 'active') AS active,
153 AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
154FROM accounts;
155 
156-- GROUPING SETS for multi-level rollups
157SELECT region, product, SUM(revenue)
158FROM sales
159GROUP BY GROUPING SETS ((region, product), (region), ());
160```
161 
162---
163 
164## Migration Patterns
165 
166### Up/Down Migration Scripts
167 
168Every migration must have a reversible counterpart. Name files with a timestamp prefix for ordering:
169 
170```
171migrations/
172├── 20260101_000001_create_users.up.sql
173├── 20260101_000001_create_users.down.sql
174├── 20260115_000002_add_users_email_index.up.sql
175└── 20260115_000002_add_users_email_index.down.sql
176```
177 
178### Zero-Downtime Migrations (Expand/Contract)
179 
180Use the expand-contract pattern to avoid locking or breaking running code:
181 
1821. **Expand** — add the new column/table (nullable, with default)
1832. **Migrate data** — backfill in batches; dual-write from application
1843. **Transition** — application reads from new column; stop writing to old
1854. **Contract** — drop old column in a follow-up migration
186 
187### Data Backfill Strategies
188 
189```sql
190-- Batch update to avoid long-running locks
191UPDATE users SET email_normalized = LOWER(email)
192WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
193-- Repeat in a loop until 0 rows affected
194```
195 
196### Rollback Procedures
197 
198- Always test the `down.sql` in staging before deploying `up.sql` to production
199- Keep rollback window short — if the contract step has run, rollback requires a new forward migration
200- For irreversible changes (dropping columns with data), take a logical backup first
201 
202---
203 
204## Performance Optimization
205 
206### Indexing Strategies
207 
208| Index Type | Use Case | Example |
209|------------|----------|---------|
210| **B-tree** (default) | Equality, range, ORDER BY | `CREATE INDEX idx_users_email ON users(email);` |
211| **GIN** | Full-text search, JSONB, arrays | `CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));` |
212| **GiST** | Geometry, range types, nearest-neighbor | `CREATE INDEX idx_locations ON places USING gist(coords);` |
213| **Partial** | Subset of rows (reduce size) | `CREATE INDEX idx_active ON users(email) WHERE active = true;` |
214| **Covering** | Index-only scans | `CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);` |
215 
216### EXPLAIN Plan Reading
217 
218```sql
219EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
220```
221 
222Key signals to watch:
223- **Seq Scan** on large tables — missing index
224- **Nested Loop** with high row estimates — consider hash/merge join or add index
225- **Buffers shared read** much higher than **hit** — working set exceeds memory
226 
227### N+1 Query Detection
228 
229Symptoms: application issues one query per row (e.g., fetching related records in a loop).
230 
231Fixes:
232- Use `JOIN` or subquery to fetch in one round-trip
233- ORM eager loading (`select_related` / `includes` / `with`)
234- DataLoader pattern for GraphQL resolvers
235 
236### Connection Pooling
237 
238| Tool | Protocol | Best For |
239|------|----------|----------|
240| **PgBouncer** | PostgreSQL | Transaction/statement pooling, low overhead |
241| **ProxySQL** | MySQL | Query routing, read/write splitting |
242| **Built-in pool** (HikariCP, SQLAlchemy pool) | Any | Application-level pooling |
243 
244**Rule of thumb:** Set pool size to `(2 * CPU cores) + disk spindles`. For cloud SSDs, start with `2 * vCPUs` and tune.
245 
246### Read Replicas and Query Routing
247 
248- Route all `SELECT` queries to replicas; writes to primary
249- Account for replication lag (typically <1s for async, 0 for sync)
250- Use `pg_last_wal_replay_lsn()` to detect lag before reading critical data
251 
252---
253 
254## Multi-Database Decision Matrix
255 
256| Criteria | PostgreSQL | MySQL | SQLite | SQL Server |
257|----------|-----------|-------|--------|------------|
258| **Best for** | Complex queries, JSONB, extensions | Web apps, read-heavy workloads | Embedded, dev/test, edge | Enterprise .NET stacks |
259| **JSON support** | Excellent (JSONB + GIN) | Good (JSON type) | Minimal | Good (OPENJSON) |
260| **Replication** | Streaming, logical | Group replication, InnoDB cluster | N/A | Always On AG |
261| **Licensing** | Open source (PostgreSQL License) | Open source (GPL) / commercial | Public domain | Commercial |
262| **Max practical size** | Multi-TB | Multi-TB | ~1 TB (single-writer) | Multi-TB |
263 
264**When to choose:**
265- **PostgreSQL** — default choice for new projects; best extensibility and standards compliance
266- **MySQL** — existing MySQL ecosystem; simple read-heavy web applications
267- **SQLite** — mobile apps, CLI tools, unit test databases, IoT/edge
268- **SQL Server** — mandated by enterprise policy; deep .NET/Azure integration
269 
270### NoSQL Considerations
271 
272| Database | Model | Use When |
273|----------|-------|----------|
274| **MongoDB** | Document | Schema flexibility, rapid prototyping, content management |
275| **Redis** | Key-value / cache | Session store, rate limiting, leaderboards, pub/sub |
276| **DynamoDB** | Wide-column | Serverless AWS apps, single-digit-ms latency at any scale |
277 
278> Use SQL as default. Reach for NoSQL only when the access pattern clearly benefits from it.
279 
280---
281 
282## Sharding & Replication
283 
284### Horizontal vs Vertical Partitioning
285 
286- **Vertical partitioning**: Split columns across tables (e.g., separate BLOB columns). Reduces I/O for narrow queries.
287- **Horizontal partitioning (sharding)**: Split rows across databases/servers. Required when a single node cannot hold the dataset or handle the throughput.
288 
289### Sharding Strategies
290 
291| Strategy | How It Works | Pros | Cons |
292|----------|-------------|------|------|
293| **Hash** | `shard = hash(key) % N` | Even distribution | Resharding is expensive |
294| **Range** | Shard by date or ID range | Simple, good for time-series | Hot spots on latest shard |
295| **Geographic** | Shard by user region | Data locality, compliance | Cross-region queries are hard |
296 
297### Replication Patterns
298 
299| Pattern | Consistency | Latency | Use Case |
300|---------|------------|---------|----------|
301| **Synchronous** | Strong | Higher write latency | Financial transactions |
302| **Asynchronous** | Eventual | Low write latency | Read-heavy web apps |
303| **Semi-synchronous** | At-least-one replica confirmed | Moderate | Balance of safety and speed |
304 
305---
306 
307## Cross-References
308 
309- **sql-database-assistant** — query writing, optimization, and debugging for day-to-day SQL work
310- **database-schema-designer** — ERD modeling, normalization analysis, and schema generation
311- **migration-architect** — large-scale migration planning across database engines or major schema overhauls
312- **senior-backend** — application-layer patterns (connection pooling, ORM best practices)
313- **senior-devops** — infrastructure provisioning for database clusters and replicas
314 
315 

Discussion