option

Concevoir des schémas de bases de données, planifier des migrations de données, optimiser les requêtes et modéliser les relations entre les données à l'aide d'analyses approfondies et d'outils automatisés.

...Développer tout
21
Heure mise à jour 29 août 2026

Concepteur de bases de données - Compétences de haut niveau en architecture en couches

Présentation

Une compétence complète en conception de bases de données offrant des capacités d’analyse, d’optimisation et de migration de niveau expert pour les systèmes de bases de données modernes. Cette compétence associe des principes théoriques à des outils pratiques afin d’aider les architectes et les développeurs à créer des schémas de bases de données évolutifs, performants et faciles à maintenir.

Compétences clés

Conception et analyse de schémas

  • Analyse de la normalisation : détection automatisée des niveaux de normalisation (de 1NF à BCNF)
  • Stratégie de dénormalisation : recommandations pertinentes pour l’optimisation des performances
  • Optimisation des types de données : identification des types inappropriés et des problèmes de taille
  • Analyse des contraintes : clés étrangères manquantes, contraintes d'unicité et vérifications des valeurs nulles
  • Validation des conventions de nommage : cohérence des schémas de nommage des tables et des colonnes
  • Génération d’ERD : création automatique de diagrammes Mermaid à partir du DDL

Optimisation des index

  • Analyse des lacunes d'index : identification des index manquants sur les clés étrangères et les modèles de requêtes
  • Stratégie d'indexation composite : ordre optimal des colonnes pour les index à plusieurs colonnes
  • Détection de la redondance des index : élimination des index qui se chevauchent et des index inutilisés
  • Modélisation de l’impact sur les performances : estimation de la sélectivité et analyse du coût des requêtes
  • Sélection du type d’index : index B-tree, de hachage, partiels, couvrants et spécialisés

Gestion de la migration

  • Migrations sans interruption de service : mise en œuvre du modèle « expand-contract »
  • Évolution du schéma : ajouts, suppressions et changements de type de colonnes en toute sécurité
  • Scripts de migration des données : transformation et validation automatisées des données
  • Stratégie de restauration : capacités complètes de restauration avec validation
  • Planification de l'exécution : étapes de migration ordonnées avec résolution des dépendances

Flux de travail de l’outil (exécutez ces commandes — n’analysez pas les schémas manuellement)

Tous les chemins sont relatifs à ce dossier de compétences ; exemples d’entrées dans assets/.

1. Analyse du schéma

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

Accepte les instructions SQL DDL ou un schéma JSON (assets/sample_schema.sql / sample_schema.json). La sortie inclut les résultats de normalisation, les contraintes manquantes, les problèmes de nommage et un diagramme ERD au format Mermaid — affichez le diagramme ERD à l’utilisateur et corrigez les problèmes signalés avant de procéder à l’optimisation.

2. Optimiser les index en fonction des modèles de requêtes réels

python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json

Commencez par enregistrer les requêtes les plus fréquentes de l’utilisateur dans un fichier JSON de modèles de requêtes (copiez assets/sample_query_patterns.json). Le résultat est une liste classée par ordre de priorité de recommandations CREATE INDEX ainsi que de suppressions d’index redondants.

3. Générer la migration

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

--zero-downtime émet un plan d’expansion-contraction ; --validate-only vérifie la faisabilité sans générer de code SQL.

4. Boucle de vérification

Relancez l’étape 1 sur le schéma cible et assurez-vous que les problèmes détectés lors du premier passage ont disparu ; exécutez migration_generator.py --validate-only avant de valider la migration.

Principes de conception de bases de données

→ Voir references/database-design-reference.md pour plus de détails

Meilleures pratiques

Conception du schéma

  1. Utilisez des noms significatifs : conventions de nommage claires et cohérentes
  2. Choisissez des types de données adaptés : des colonnes de taille appropriée pour optimiser le stockage
  3. Définissez des contraintes appropriées : clés étrangères, contraintes de validation, index uniques
  4. Anticipez la croissance future : prévoyez l'évolutivité dès le départ
  5. Documenter les relations : relations de clés étrangères et règles métier claires

Optimisation des performances

  1. Indexez de manière stratégique : couvrez les modèles de requêtes courants sans sur-indexation
  2. Surveillez les performances des requêtes : analysez régulièrement les requêtes lentes
  3. Partitionnez les grandes tables : améliorez les performances des requêtes et la maintenance
  4. Utiliser des niveaux d’isolation appropriés : trouver le juste équilibre entre cohérence et performances
  5. Mettre en place un pool de connexions : utilisation efficace des ressources

Considérations de sécurité

  1. Principe du moindre privilège : n'accorder que les autorisations strictement nécessaires
  2. Chiffrer les données sensibles : au repos et en transit
  3. Auditez les modèles d'accès : surveillez et consignez les accès à la base de données
  4. Valider les données d'entrée : prévenir les attaques par injection SQL
  5. Mises à jour de sécurité régulières : maintenir le logiciel de base de données à jour

Modèles de génération de requêtes

SELECT avec 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;

Expressions de table communes (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;

Fonctions de fenêtre

-- 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;

Modèles d'agrégation

-- 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), ());

Modèles de migration

Scripts de migration ascendante/descendante

Chaque migration doit avoir son équivalent réversible. Nommez les fichiers avec un préfixe d'horodatage pour faciliter le tri :

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

Migrations sans interruption de service (expansion/contraction)

Utilisez le modèle « expansion-contraction » pour éviter de verrouiller ou de perturber le code en cours d'exécution :

  1. Extension — ajoutez la nouvelle colonne/table (nulle, avec valeur par défaut)
  2. Migrer les données — remplir par lots ; double écriture depuis l’application
  3. Transition — l’application lit la nouvelle colonne ; arrêt de l’écriture dans l’ancienne
  4. Réduction — suppression de l’ancienne colonne lors d’une migration ultérieure

Stratégies de remplissage des données

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

Procédures de restauration

  • Toujours tester l’ down.sql en environnement de préproduction avant de les déployer up.sql en production
  • Limitez la fenêtre de restauration : si l’étape de contrat a été exécutée, la restauration nécessite une nouvelle migration vers l’avant
  • Pour les modifications irréversibles (suppression de colonnes contenant des données), effectuez d’abord une sauvegarde logique

Optimisation des performances

Stratégies d'indexation

Type d’index Cas d'utilisation Exemple
Arbre B (par défaut) Égalité, plage, ORDER BY CREATE INDEX idx_users_email ON users(email);
GIN Recherche en texte intégral, JSONB, tableaux CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));
GiST Géométrie, types de plage, plus proche voisin CREATE INDEX idx_locations ON places USING gist(coords);
Partiel Sous-ensemble de lignes (réduction de la taille) CREATE INDEX idx_active ON users(email) WHERE active = true;
Couverture Analyses par index uniquement CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);

Lecture du plan EXPLAIN

EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;

Signaux clés à surveiller :

  • Balayage séquentiel sur de grandes tables — index manquant
  • Boucle imbriquée avec des estimations de lignes élevées — envisager une jointure par hachage/fusion ou ajouter un index
  • Lectures partagées dans les tampons nettement supérieures au nombre de résultats — l’ensemble de travail dépasse la mémoire

Détection des requêtes N+1

Symptômes : l’application émet une requête par ligne (par exemple, récupération d’enregistrements associés dans une boucle).

Solutions :

  • Utilisez JOIN ou d’une sous-requête pour récupérer les données en un seul aller-retour
  • Chargement anticipé ORM (select_related / includes / with)
  • modèle DataLoader pour les résolveurs GraphQL

Pool de connexions

Outil Protocole Idéal pour
PgBouncer PostgreSQL Regroupement de transactions/instructions, faible surcharge
ProxySQL MySQL Routage des requêtes, séparation lecture/écriture
Pool intégré (HikariCP, pool SQLAlchemy) N'importe quel Pooling au niveau de l'application

Règle générale : définissez la taille du pool sur (2 * CPU cores) + disk spindles. Pour les SSD cloud, commencez par 2 * vCPUs et affinez ensuite les paramètres.

Répliques de lecture et routage des requêtes

  • Acheminez toutes les SELECT requêtes vers les répliques ; les écritures vers le serveur principal
  • Tenez compte du décalage de réplication (généralement < 1 s pour la réplication asynchrone, 0 pour la réplication synchrone)
  • Utiliser pg_last_wal_replay_lsn() pour détecter le décalage avant de lire les données critiques

Matrice de décision multi-bases de données

Critères PostgreSQL MySQL SQLite SQL Server
Idéal pour Requêtes complexes, JSONB, extensions Applications Web, charges de travail à forte intensité de lecture Environnements embarqués, développement/test, périphérie Stacks .NET d'entreprise
Prise en charge de JSON Excellent (JSONB + GIN) Bon (type JSON) Minimale Bon (OPENJSON)
Réplication En continu, logique Réplication en groupe, cluster InnoDB N/A Always On AG
Licence Open source (licence PostgreSQL) Open source (GPL) / commercial Domaine public Commercial
Taille maximale pratique Plusieurs To Plusieurs To ~1 To (écrivain unique) Plusieurs To

Quand choisir :

  • PostgreSQL — choix par défaut pour les nouveaux projets ; meilleure extensibilité et conformité aux normes
  • MySQL — écosystème MySQL existant ; applications web simples à forte intensité de lecture
  • SQLite — applications mobiles, outils en ligne de commande, bases de données pour tests unitaires, IoT/edge
  • SQL Server — imposé par la politique d’entreprise ; intégration poussée avec .NET/Azure

Considérations relatives au NoSQL

Base de données Modèle Utilisation lorsque
MongoDB Document Flexibilité du schéma, prototypage rapide, gestion de contenu
Redis Clé-valeur / cache Stockage de sessions, limitation de débit, classements, pub/sub
DynamoDB Colonnes larges Applications AWS sans serveur, latence inférieure à 10 ms quelle que soit l’échelle

Utilisez SQL par défaut. N'optez pour NoSQL que lorsque le modèle d'accès en tire clairement avantage.

Partitionnement et réplication

Partitionnement horizontal vs vertical

  • Partitionnement vertical : répartition des colonnes entre plusieurs tables (par exemple, séparation des colonnes BLOB). Réduit les E/S pour les requêtes ciblées.
  • Partitionnement horizontal (sharding) : répartition des lignes entre plusieurs bases de données/serveurs. Nécessaire lorsqu’un seul nœud ne peut pas contenir l’ensemble de données ou gérer le débit.

Stratégies de partitionnement

Stratégie Fonctionnement Avantages Inconvénients
Hachage shard = hash(key) % N Répartition uniforme Le resharding est coûteux
Plage Segmentation par plage de dates ou d’identifiants Simple, adapté aux séries chronologiques Points de congestion sur le dernier shard
Géographique Fragmentation par région de l'utilisateur Localisation des données, conformité Les requêtes interrégionales sont complexes

Modèles de réplication

Modèle Cohérence Latence Cas d'utilisation
Synchrone Forte Latence d'écriture plus élevée Transactions financières
Asynchrone Éventuelle Faible latence d'écriture Applications web à forte intensité de lecture
Semi-synchrones Au moins une réplique confirmée Modérée Équilibre entre sécurité et vitesse

Références croisées

  • sql-database-assistant — rédaction, optimisation et débogage de requêtes pour les tâches SQL quotidiennes
  • database-schema-designer — modélisation ERD, analyse de normalisation et génération de schémas
  • migration-architect — planification de migrations à grande échelle entre différents moteurs de base de données ou refontes majeures de schémas
  • senior-backend — modèles de la couche applicative (pool de connexions, bonnes pratiques ORM)
  • senior-devops — provisionnement de l’infrastructure pour les clusters de bases de données et les répliques
Voir sur 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

Tous les fichiers

0 fichiers

Installer database-designer

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/alirezarezvani/claude-skills/tree/main/engineering/skills/database-designer # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera

Compétences similaires

microservices-patterns
Heure mise à jour 29 juin 2026
jpa-patterns
Heure mise à jour 30 juin 2026
fabric-lakehouse
Heure mise à jour 30 juin 2026
PostgreSQL Syntax Reference
Heure mise à jour 29 juin 2026
OR