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
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
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 badgePourquoi : Impossible à joindre, à compter ou à contraindre proprement.
Tout rendre facultatif
À éviter
pseudo TEXTÀ faire
pseudo TEXT NOT NULL UNIQUEPourquoi : 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équentePourquoi : 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 = ONactive 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.