Patrons de base de données

VérifiéSûr

Expertise pour la conception et l'optimisation de bases de données, couvrant la conception de schémas, l'optimisation des requêtes et les migrations sécurisées.

Spar Skills Guide Bot
DeveloppementIntermédiaire
24/07/2026
Claude CodeCursorCodex
#database#sql#query-optimization#migrations#schema-design

Recommandé pour

Synthèse automatique

Fournit une grille de revue de base de données couvrant la conception de schéma, l'optimisation des requêtes, les migrations et la sécurité SQL, avec l'exigence de comprendre le plan d'exécution avant tout déploiement.

Points forts

  • Des tableaux problème/solution permettent de repérer vite les défauts de schéma, de requête, de migration et de sécurité
  • Des exemples avant/après concrets : requêtes N+1, injection SQL, ajout de colonne NOT NULL en trois étapes
  • Une règle directrice explicite (plan d'exécution et analyse d'index pour chaque requête, cardinalité pour chaque JOIN) et des niveaux de sévérité
  • Des fichiers de référence séparés pour les violations, les patterns corrects et les commandes de détection

Limites

  • Skill en lecture seule (Read, Grep, Glob) : il ne lance pas EXPLAIN ni n'inspecte une base réelle, la vérification des plans reste donc indicative
  • Conseils essentiellement SQL/PostgreSQL, très peu couverts pour NoSQL ou les comportements spécifiques à un ORM
  • Les exemples restent courts et supposent une certaine familiarité avec les bases relationnelles
Quand l'utiliser

À utiliser lors de la revue d'une PR qui touche des requêtes, des index, un schéma ou des fichiers de migration.

Quand l'éviter

À ne pas utiliser pour du profilage de performance sur une base de production ou pour exécuter réellement une migration.

Analyse de sécurité

Sûr
Score qualité88/100

The skill is a documentation/review reference for database design, query optimization, migrations, and security. It declares only read-only tools (Read, Grep, Glob) and contains no executable commands, destructive actions, exfiltration, or obfuscated payloads. Example SQL/TypeScript snippets are illustrative and not executed by the skill.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Review a risky migration
Review this migration that adds a NOT NULL email column to our 5M-row users table — what could break in production and how do I make it safe?
Hunt N+1 queries and missing indexes
Here's the order-listing endpoint that loops over users and queries orders inside the loop — check for N+1 queries and tell me which indexes the WHERE and JOIN columns need.
Audit queries for injection and privileges
Audit these query builders for SQL injection and check whether the application user really needs GRANT ALL on this schema.

name: database description: This skill should be used when reviewing database queries, migrations, indexes, or schema changes. user-invocable: false allowed-tools: Read, Grep, Glob

Database Patterns

Domain expertise for database design and optimization. Use alongside devflow:review-methodology for complete database reviews.

Iron Law

EVERY QUERY MUST HAVE AN EXECUTION PLAN

Never deploy a query without understanding its execution plan. Every WHERE clause needs an index analysis. Every JOIN needs cardinality consideration. "It works in dev" is not validation. Production data volumes will expose every missing index and inefficient join.

Database Categories

1. Schema Design Issues

| Issue | Problem | Solution | |-------|---------|----------| | Missing Foreign Keys | No referential integrity, orphaned records | Add FK with ON DELETE action | | Denormalization | Unnecessary duplication, update anomalies | Normalize unless performance requires | | Poor Data Types | VARCHAR for everything, lost precision | Use appropriate types (DECIMAL, BOOLEAN, TIMESTAMP) | | Missing Constraints | No data validation at DB level | Add NOT NULL, CHECK, UNIQUE constraints |

Example - Missing Constraints:

-- VIOLATION
CREATE TABLE products (id SERIAL, name VARCHAR(100), price DECIMAL);

-- CORRECT
CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100) NOT NULL CHECK (LENGTH(TRIM(name)) > 0),
  price DECIMAL(10, 2) NOT NULL CHECK (price >= 0)
);

2. Query Optimization Issues

| Issue | Problem | Solution | |-------|---------|----------| | N+1 Queries | Query per iteration, O(n) round trips | JOIN or batch with IN/ANY | | Missing Indexes | Full table scans on large tables | Add indexes for WHERE/JOIN columns | | Full Table Scans | Functions prevent index use | Functional indexes or query rewrite | | Inefficient JOINs | Joining before filtering | Filter early, select specific columns |

Example - N+1 Query:

// VIOLATION: 101 queries for 100 users
for (const user of users) {
  user.orders = await db.query('SELECT * FROM orders WHERE user_id = ?', [user.id]);
}

// CORRECT: 2 queries total
const orders = await db.query('SELECT * FROM orders WHERE user_id = ANY($1)', [userIds]);

3. Migration Issues

| Issue | Problem | Solution | |-------|---------|----------| | Breaking Changes | Data loss, no recovery path | Phased approach with backups | | Data Loss Risk | Type changes truncate data | Validate before changing types | | Missing Rollback | Cannot undo migration | Always implement down() method | | Performance Impact | Table locks during migration | Add columns nullable, backfill in batches |

Example - Safe Column Addition:

-- Step 1: Add nullable (instant)
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- Step 2: Backfill in batches
UPDATE users SET phone = 'UNKNOWN' WHERE phone IS NULL AND id BETWEEN 1 AND 10000;
-- Step 3: Add constraint after backfill
ALTER TABLE users ALTER COLUMN phone SET NOT NULL;

4. Security Issues

| Issue | Problem | Solution | |-------|---------|----------| | SQL Injection | String interpolation in queries | Parameterized queries only | | Excessive Privileges | App has GRANT ALL | Minimum required privileges |

Example - SQL Injection:

// VULNERABLE
const query = `SELECT * FROM users WHERE email = '${email}'`;

// SECURE
const query = 'SELECT * FROM users WHERE email = $1';
await db.query(query, [email]);

Extended References

For detailed examples and detection commands, see:


Severity Guidelines

| Severity | Criteria | Examples | |----------|----------|----------| | CRITICAL | Data integrity or severe performance | SQL injection, N+1 unbounded, data loss migrations, missing FK on critical relations | | HIGH | Significant database issues | Inefficient JOINs, missing constraints, migrations without rollback | | MEDIUM | Moderate concerns | Minor denormalization, missing non-critical indexes | | LOW | Minor improvements | Naming conventions, index organization |


Database Checklist

Before approving database changes:

  • [ ] All queries have appropriate indexes
  • [ ] N+1 patterns identified and resolved
  • [ ] Migrations have rollback scripts
  • [ ] Data types are appropriate
  • [ ] Constraints enforce business rules
  • [ ] Foreign keys maintain referential integrity
  • [ ] No SQL injection vulnerabilities
  • [ ] Performance tested with production-like data volume

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/database-patterns-mryiqgja/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/database-patterns-mryiqgja' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/database-patterns-mryiqgja/download' --output '.skill-downloads/database-patterns-mryiqgja/SKILL.md.part' && mv '.skill-downloads/database-patterns-mryiqgja/SKILL.md.part' '.skill-downloads/database-patterns-mryiqgja/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Grep, Glob

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && test -s '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/database' && cp -R '.skill-downloads/database-patterns-mryiqgja' '.claude/skills/database'

Cursor
test -f '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && test -s '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/database' && cp -R '.skill-downloads/database-patterns-mryiqgja' '.cursor/skills/database'

Codex
test -f '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && test -s '.skill-downloads/database-patterns-mryiqgja/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/database' && cp -R '.skill-downloads/database-patterns-mryiqgja' '.agents/skills/database'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/database-patterns-mryiqgja'

openskills read 'database-patterns-mryiqgja'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/database-patterns-mryiqgja/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires