opción

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 todo
21
Tiempo actualizado 29 de agosto de 2026

Diseñ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

  1. Utiliza nombres significativos: convenciones de nomenclatura claras y coherentes
  2. Elige los tipos de datos adecuados: columnas del tamaño adecuado para una mayor eficiencia en el almacenamiento
  3. Defina restricciones adecuadas: claves externas, restricciones de comprobación e índices únicos
  4. Tenga en cuenta el crecimiento futuro: planifique la escalabilidad desde el principio
  5. Documenta las relaciones: relaciones claras de claves externas y reglas de negocio

Optimización del rendimiento

  1. Indexar estratégicamente: cubrir los patrones de consulta más comunes sin indexar en exceso
  2. Supervisar el rendimiento de las consultas: análisis periódico de las consultas lentas
  3. Particiona las tablas grandes: mejora el rendimiento de las consultas y el mantenimiento
  4. Utilizar niveles de aislamiento adecuados: Equilibrar la consistencia con el rendimiento
  5. Implementar el uso compartido de conexiones: utilización eficiente de los recursos

Consideraciones de seguridad

  1. Principio del mínimo privilegio: conceder solo los permisos estrictamente necesarios
  2. Cifrar los datos confidenciales: tanto en reposo como en tránsito
  3. Auditar los patrones de acceso: supervisar y registrar el acceso a la base de datos
  4. Validar las entradas: prevenir ataques de inyección SQL
  5. 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:

  1. Expandir: añade la nueva columna o tabla (admite valores nulos, con valor por defecto)
  2. Migrar datos: rellenar por lotes; escritura dual desde la aplicación
  3. Transición: la aplicación lee desde la nueva columna; deja de escribir en la antigua
  4. 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.sql en el entorno de prueba antes de implementarlo up.sql en 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 JOIN o 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 SELECT consultas 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
Ver en GitHub
---
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 archivos

Instalar database-designer

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona 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 Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad

Habilidades relacionadas

microservices-patterns
Tiempo actualizado 29 de junio de 2026
jpa-patterns
Tiempo actualizado 30 de junio de 2026
fabric-lakehouse
Tiempo actualizado 30 de junio de 2026
prisma-expert
Tiempo actualizado 29 de junio de 2026
OR