Back-end · 5 mondes · 15 étapes

Bases de données & SQL

Interroger, relier, modifier et concevoir des données, avec une vraie base SQLite.

Progression

0 %

0/15 étapes terminées

Avancé · 10 min de lecture

Concevoir un schéma

Des tables qui se protègent elles-mêmes

1Définition

Concevoir une base, c'est choisir les tables, leurs colonnes et leurs contraintes, de sorte que chaque information vive à un seul endroit et que la base refuse d'elle-même les données incohérentes. Les relations plusieurs-à-plusieurs passent par une table de liaison.

2Principes fondamentaux

01

Une information, un endroit

Le pseudo vit dans joueurs, pas recopié dans chaque résultat : c'est la normalisation.

02

Les contraintes dans la base

NOT NULL, UNIQUE, clés étrangères : elles s'appliquent à tous les programmes qui écrivent.

03

Une table de liaison pour le plusieurs-à-plusieurs

Une ligne par relation, jamais une liste dans une cellule.

04

Indexer ce qu'on interroge

Clés étrangères souvent jointes, colonnes souvent filtrées.

3Exemples pratiques

Un schéma de badges

Exemple
1CREATE TABLE badges (2  id INTEGER PRIMARY KEY,3  nom TEXT NOT NULL UNIQUE4);5 6CREATE TABLE obtentions (7  joueur_id INTEGER NOT NULL REFERENCES joueurs(id),8  badge_id INTEGER NOT NULL REFERENCES badges(id),9  obtenu_le TEXT NOT NULL,10  PRIMARY KEY (joueur_id, badge_id)11);

La clé primaire composée empêche qu'un joueur obtienne deux fois le même badge — une règle métier écrite dans la structure.

Un index utile

Exemple
1CREATE INDEX idx_resultats_joueur ON resultats(joueur_id);

La page de profil, qui cherche les résultats d'un joueur, passe d'un parcours complet à une consultation directe.

4Erreurs courantes

Une liste dans une cellule

À éviter

badges TEXT  -- '1,3,7'

À faire

-- une table obtentions, une ligne par badge

Pourquoi : Impossible à joindre, à compter ou à contraindre proprement.

Tout rendre facultatif

À éviter

pseudo TEXT

À faire

pseudo TEXT NOT NULL UNIQUE

Pourquoi : Une base permissive se remplit de données inutilisables, qu'il faut ensuite nettoyer à la main.

Indexer toutes les colonnes

À éviter

-- un index par colonne

À faire

-- un index par recherche fréquente

Pourquoi : Chaque index ralentit les écritures et occupe de la place.

5Subtilités à connaître

  • ◆Les migrations versionnent les changements de schéma, comme Git versionne le code : on ne modifie jamais une base de production à la main.
  • ◆La normalisation a ses limites : on dénormalise parfois volontairement pour la performance, en le documentant.
  • ◆En SQLite, PRAGMA foreign_keys = ON active la vérification des clés étrangères, désactivée par défaut pour compatibilité.

6Vérifie ta compréhension

Question 1/3

Score 0

Une relation plusieurs-à-plusieurs se modélise par…

Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.