database-designer
alirezarezvani/claude-skills
Diseñar esquemas de bases de datos, planificar migraciones de datos, optimizar consultas y modelar relaciones entre datos mediante análisis especializados y herramientas automatizadas.
...Expandir todoDiseñador de bases de datos - HABILIDAD DE NIVEL AVANZADO
Descripción general
Una competencia integral en diseño de bases de datos que ofrece capacidades de análisis, optimización y migración de nivel experto para los sistemas de bases de datos modernos. Esta competencia combina principios teóricos con herramientas prácticas para ayudar a arquitectos y desarrolladores a crear esquemas de bases de datos escalables, de alto rendimiento y fáciles de mantener.
Competencias clave
Diseño y análisis de esquemas
- Análisis de normalización: detección automatizada de los niveles de normalización (desde 1NF hasta BCNF)
- Estrategia de desnormalización: recomendaciones inteligentes para la optimización del rendimiento
- Optimización de tipos de datos: identificación de tipos inadecuados y problemas de tamaño
- Análisis de restricciones: claves foráneas que faltan, restricciones de unicidad y comprobaciones de valores nulos
- Validación de convenciones de nomenclatura: patrones coherentes de nomenclatura de tablas y columnas
- Generación de diagramas ER: Creación automática de diagramas Mermaid a partir de DDL
Optimización de índices
- Análisis de lagunas en los índices: identificación de índices que faltan en claves externas y patrones de consulta
- Estrategia de índices compuestos: orden óptimo de las columnas para índices de varias columnas
- Detección de redundancias en los índices: eliminación de índices superpuestos y no utilizados
- Modelización del impacto en el rendimiento: estimación de la selectividad y análisis del coste de las consultas
- Selección del tipo de índice: índices B-tree, hash, parciales, de cobertura y especializados
Gestión de la migración
- Migraciones sin tiempo de inactividad: implementación del patrón «expandir-contraer»
- Evolución del esquema: adiciones, eliminaciones y cambios de tipo de columnas de forma segura
- Scripts de migración de datos: transformación y validación automatizadas de datos
- Estrategia de reversión: capacidades completas de reversión con validación
- Planificación de la ejecución: pasos de migración ordenados con resolución de dependencias
Flujo de trabajo de la herramienta (ejecuta estos pasos; no analices los esquemas manualmente)
Todas las rutas son relativas a esta carpeta de habilidades; ejemplos de entradas en assets/.
1. Analizar el esquema
python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json
Acepta DDL de SQL o esquemas JSON (assets/sample_schema.sql / sample_schema.json). La salida incluye resultados de normalización, restricciones que faltan, problemas de nomenclatura y un ERD de Mermaid: muestra el ERD al usuario y corrige los problemas señalados antes de optimizar.
2. Optimizar los índices en función de patrones de consulta reales
python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json
Escribe primero las consultas más frecuentes del usuario en un JSON de patrones de consulta (copia assets/sample_query_patterns.json). El resultado es una lista ordenada por prioridad de recomendaciones CREATE INDEX, además de la eliminación de índices redundantes.
3. Generar la migración
python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql
--zero-downtime emite un plan de expansión-contracción; --validate-only comprueba la viabilidad sin generar SQL.
4. Bucle de verificación
Vuelve a ejecutar el paso 1 en el esquema de destino y comprueba que los problemas detectados en la primera pasada hayan desaparecido; ejecuta migration_generator.py --validate-only antes de entregar la migración.
Principios de diseño de bases de datos
→ Véase references/database-design-reference.md para más detalles
Buenas prácticas
Diseño del esquema
- Utiliza nombres significativos: convenciones de nomenclatura claras y coherentes
- Elige los tipos de datos adecuados: columnas del tamaño adecuado para una mayor eficiencia en el almacenamiento
- Defina restricciones adecuadas: claves externas, restricciones de comprobación e índices únicos
- Tenga en cuenta el crecimiento futuro: planifique la escalabilidad desde el principio
- Documenta las relaciones: relaciones claras de claves externas y reglas de negocio
Optimización del rendimiento
- Indexar estratégicamente: cubrir los patrones de consulta más comunes sin indexar en exceso
- Supervisar el rendimiento de las consultas: análisis periódico de las consultas lentas
- Particiona las tablas grandes: mejora el rendimiento de las consultas y el mantenimiento
- Utilizar niveles de aislamiento adecuados: Equilibrar la consistencia con el rendimiento
- Implementar el uso compartido de conexiones: utilización eficiente de los recursos
Consideraciones de seguridad
- Principio del mínimo privilegio: conceder solo los permisos estrictamente necesarios
- Cifrar los datos confidenciales: tanto en reposo como en tránsito
- Auditar los patrones de acceso: supervisar y registrar el acceso a la base de datos
- Validar las entradas: prevenir ataques de inyección SQL
- Actualizaciones de seguridad periódicas: mantener actualizado el software de la base de datos
Patrones de generación de consultas
SELECT con JOIN
-- 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;
Expresiones de tabla común (CTE)
-- 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;
Funciones de ventana
-- 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;
Patrones de agregación
-- 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), ());
Patrones de migración
Scripts de migración ascendente/descendente
Cada migración debe tener una contrapartida reversible. Nombra los archivos con un prefijo de marca de tiempo para ordenarlos:
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
Migraciones sin tiempo de inactividad (expansión/contracción)
Utiliza el patrón de expansión-contracción para evitar bloquear o romper el código en ejecución:
- Expandir: añade la nueva columna o tabla (admite valores nulos, con valor por defecto)
- Migrar datos: rellenar por lotes; escritura dual desde la aplicación
- Transición: la aplicación lee desde la nueva columna; deja de escribir en la antigua
- Contracción: elimina la columna antigua en una migración posterior
Estrategias de rellenado de datos
-- 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
Procedimientos de reversión
- Prueba siempre el
down.sqlen el entorno de prueba antes de implementarloup.sqlen producción - Mantenga breve el plazo de reversión: si se ha ejecutado el paso del contrato, la reversión requiere una nueva migración hacia adelante
- En el caso de cambios irreversibles (eliminación de columnas con datos), realice primero una copia de seguridad lógica
Optimización del rendimiento
Estrategias de indexación
| Tipo de índice | Caso de uso | Ejemplo |
|---|---|---|
| Árbol B (predeterminado) | Igualdad, rango, ORDER BY | CREATE INDEX idx_users_email ON users(email); |
| GIN | Búsqueda de texto completo, JSONB, matrices | CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body)); |
| GiST | Geometría, tipos de rango, vecino más cercano | CREATE INDEX idx_locations ON places USING gist(coords); |
| Parcial | Subconjunto de filas (reducir tamaño) | CREATE INDEX idx_active ON users(email) WHERE active = true; |
| Cubierta | Escaneos solo por índice | CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at); |
Lectura del plan EXPLAIN
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
Señales clave a tener en cuenta:
- Escaneo secuencial en tablas grandes: falta un índice
- Bucle anidado con estimaciones de filas elevadas: considerar una unión hash/merge o añadir un índice
- Lectura compartida de búferes mucho mayor que el número de aciertos: el conjunto de trabajo excede la memoria
Detección de consultas N+1
Síntomas: la aplicación emite una consulta por cada fila (por ejemplo, al recuperar registros relacionados en un bucle).
Soluciones:
- Utiliza
JOINo una subconsulta para recuperar los datos en una sola llamada - Carga anticipada ORM (
select_related/includes/with) - patrón DataLoader para los resolutores de GraphQL
Agrupación de conexiones
| Herramienta | Protocolo | Ideal para |
|---|---|---|
| PgBouncer | PostgreSQL | Agrupación de transacciones/instrucciones, baja sobrecarga |
| ProxySQL | MySQL | Enrutamiento de consultas, separación de lectura y escritura |
| Pool integrado (HikariCP, pool de SQLAlchemy) | Cualquiera | Agrupación a nivel de aplicación |
Regla general: establece el tamaño del grupo de conexiones en (2 * CPU cores) + disk spindles. Para los SSD en la nube, empieza por 2 * vCPUs y ajústalo.
Réplicas de lectura y enrutamiento de consultas
- Enruta todas las
SELECTconsultas a las réplicas; las escrituras, al primario - Tenga en cuenta el retraso de replicación (normalmente <1 s para asíncrono, 0 para síncrono)
- Utilizar
pg_last_wal_replay_lsn()para detectar el retraso antes de leer datos críticos
Matriz de decisión para múltiples bases de datos
| Criterios | PostgreSQL | MySQL | SQLite | SQL Server |
|---|---|---|---|---|
| Ideal para | Consultas complejas, JSONB, extensiones | Aplicaciones web, cargas de trabajo con gran volumen de lecturas | Incorporado, desarrollo/pruebas, perímetro | Pilas .NET empresariales |
| Compatibilidad con JSON | Excelente (JSONB + GIN) | Bueno (tipo JSON) | Mínimo | Bueno (OPENJSON) |
| Replicación | Transmisión, lógica | Replicación en grupo, clúster InnoDB | N/A | Always On AG |
| Licencias | Código abierto (licencia PostgreSQL) | Código abierto (GPL) / comercial | Dominio público | Comercial |
| Tamaño máximo práctico | Varios TB | Varios TB | ~1 TB (escritura única) | Varios TB |
Cuándo elegirlo:
- PostgreSQL: la opción predeterminada para nuevos proyectos; ofrece la mejor extensibilidad y cumplimiento de los estándares
- MySQL: ecosistema MySQL ya existente; aplicaciones web sencillas con gran volumen de lecturas
- SQLite: aplicaciones móviles, herramientas de línea de comandos, bases de datos para pruebas unitarias, IoT/periferia
- SQL Server: exigido por la política de la empresa; profunda integración con .NET/Azure
Consideraciones sobre NoSQL
| Base de datos | Modelo | Uso cuando |
|---|---|---|
| MongoDB | Documental | Flexibilidad de esquemas, creación rápida de prototipos, gestión de contenidos |
| Redis | Clave-valor / caché | Almacenamiento de sesiones, limitación de tasa, clasificaciones, pub/sub |
| DynamoDB | Columnas anchas | Aplicaciones sin servidor de AWS, latencia de un solo dígito en milisegundos a cualquier escala |
Utiliza SQL como opción predeterminada. Recurre a NoSQL solo cuando el patrón de acceso se beneficie claramente de ello.
Fragmentación y replicación
Partición horizontal frente a vertical
- Partición vertical: divide las columnas entre tablas (por ejemplo, separa las columnas BLOB). Reduce la E/S para consultas específicas.
- Partición horizontal (sharding): divide las filas entre bases de datos o servidores. Es necesario cuando un único nodo no puede albergar el conjunto de datos ni gestionar el rendimiento.
Estrategias de fragmentación
| Estrategia | Cómo funciona | Ventajas | Inconvenientes |
|---|---|---|---|
| Hash | shard = hash(key) % N |
Distribución uniforme | El resharding es costoso |
| Rango | Fragmentación por rango de fecha o de ID | Sencillo, adecuado para series temporales | Puntos de mayor tráfico en el fragmento más reciente |
| Geográfico | Fragmentación por región del usuario | Localidad de los datos, cumplimiento normativo | Las consultas entre regiones son complicadas |
Patrones de replicación
| Patrón | Consistencia | Latencia | Caso de uso |
|---|---|---|---|
| Sincrónico | Fuerte | Mayor latencia de escritura | Transacciones financieras |
| Asíncrono | Eventual | Baja latencia de escritura | Aplicaciones web con gran volumen de lecturas |
| Semisincrónicas | Se confirma al menos una réplica | Moderada | Equilibrio entre seguridad y velocidad |
Referencias cruzadas
- sql-database-assistant — redacción, optimización y depuración de consultas para el trabajo diario con SQL
- database-schema-designer: modelado ERD, análisis de normalización y generación de esquemas
- migration-architect: planificación de migraciones a gran escala entre motores de bases de datos o revisiones importantes de esquemas
- senior-backend — patrones de la capa de aplicación (agrupación de conexiones, mejores prácticas de ORM)
- senior-devops: aprovisionamiento de infraestructura para clústeres de bases de datos y réplicas
---
name: database-designer
description: Design database schemas, plan data migrations, optimize queries, and model data relationships using expert analysis and automated tools.
---
# 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
```bash
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
```bash
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
```bash
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
```sql
-- 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)
```sql
-- 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
```sql
-- 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
```sql
-- 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
```sql
-- 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
```sql
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
Todos los archivos
0 archivosInstalar database-designer
Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.
Descargar ZIPClona el repositorio y copia los archivos de la habilidad a tu proyecto.
git clone https://github.com/alirezarezvani/claude-skills/tree/main/engineering/skills/database-designer # Copy SKILL.md to your .claude/skills/ directory
Copiar





Hogar
