Aller au contenu principal

Modélisation

Progression

#Modélisation relationnelle

La modélisation relationnelle est un processus essentiel qui permet de traduire un domaine métier en un schéma de base de données robuste, cohérent et évolutif. Cette démarche implique d'identifier les entités et leurs relations, de définir correctement les clés primaires et étrangères, d'appliquer la normalisation jusqu'à la troisième forme normale (3NF) ou la forme normale de Boyce-Codd (BCNF) selon les besoins, et de dénormaliser avec mesure quand les performances de lecture l'exigent.

#Objectifs

L'objectif de la modélisation relationnelle est de partir d'un domaine métier pour aboutir à un schéma de données cohérent et évolutif. Cette approche nécessite d'identifier les entités, leurs attributs, les relations entre entités et leurs cardinalités. Il s'agit ensuite d'appliquer les principes de normalisation jusqu'à la troisième forme normale, voire la forme normale de Boyce-Codd lorsque cela est pertinent pour éviter les anomalies de mise à jour.

#Démarche

La modélisation suit généralement trois étapes principales. Premièrement, recueillez les règles métier et les cas d'usage pour comprendre le domaine. Deuxièmement, créez un diagramme conceptuel qui identifie les entités, les relations et les cardinalités (un-à-un, un-à-plusieurs, plusieurs-à-plusieurs). Troisièmement, effectuez le passage au modèle relationnel en définissant les tables, les clés primaires, les clés étrangères et les éventuelles tables d'association pour les relations plusieurs-à-plusieurs.

Cardinalités et contraintes

Documentez 1‑1, 1‑N, N‑N, et précisez les contraintes (unicité, non‑null, check). Une relation N‑N devient une table d'association avec PK composite (ou clé synthétique) et deux FKs.

#Exemples

Voici un exemple simple de modélisation pour un système de blog avec utilisateurs et articles :

bg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 roundedbg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 rounded
1-- Utilisateurs et articles de blog2create table users (3  id integer primary key,4  email text unique not null,5  name text not null6);7 8create table posts (9  id integer primary key,10  author_id integer not null references users(id),11  title text not null,12  body text not null,13  published_at datetime14);

Pour modéliser une relation plusieurs-à-plusieurs, comme des tags associés à des articles, on crée une table d'association post_tags(post_id, tag_id) avec une clé primaire composite ou une clé synthétique, et deux clés étrangères vers les tables concernées.

#Normalisation (rappel)

La normalisation vise à éliminer les redondances et les anomalies de mise à jour. La première forme normale (1NF) exige que toutes les valeurs soient atomiques, sans listes imbriquées dans les colonnes. La deuxième forme normale (2NF) élimine les dépendances partielles vis-à-vis d'une clé primaire composite. La troisième forme normale (3NF) supprime les dépendances transitives, où un attribut non-clé dépend d'un autre attribut non-clé plutôt que directement de la clé primaire.

#Compromis

Bien que la normalisation soit généralement souhaitable, il existe des cas où une dénormalisation contrôlée améliore les performances de lecture. Cette approche peut inclure l'utilisation de caches, de vues matérialisées, ou de colonnes calculées. Toute dénormalisation doit être mesurée, justifiée par des benchmarks réels, et documentée pour faciliter la maintenance future.

Pièges fréquents
  • Colonnes multi‑valeurs (listes JSON) là où une table associée est nécessaire.
  • Absence de contraintes FK → intégrité référentielle brisée.
  • Clés naturelles instables (email) → préférez une clé synthétique et contrainte d'unicité sur la naturelle.