Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

TP1re année17 livrables

C'est quoi une base de données ?

Derrière chaque site, chaque appli, il y a une base de données : là où sont rangées toutes les infos — utilisateurs, produits, commandes. On comprend comment c'est organisé, avant de l'interroger en SQL.

Par Josselyn C., prof de BTS SIO. Publié le , mis à jour le .

Objectif
comprendre tables, lignes, colonnes, types, clés, relations — et explorer une vraie base
On manipule
une vraie base à 2 tables qu'on crée et parcourt dans le navigateur
Public
débutant absolu, aucune base de données touchée avant
Durée
~3 h 30 en autonomie
Pré-requis
aucun. On part de « pourquoi a-t-on besoin d'une base ? »
Pour qui
SLAM et SISR, 1re année

Compétences : C2.3 Gérer les données

On découvre la structure d'une base ; l'interroger (SQL) sera la prochaine séance.

Avant de commencer

Pourquoi les bases de données sont partout

Ton réseau social mémorise des millions de comptes et de messages. Une boutique en ligne, ses produits et commandes. GLPI (que tu as installé), tout ton parc. Tout ça vit dans une base de données : un endroit conçu pour stocker beaucoup d'informations, de façon organisée, et les retrouver vite. C'est la 2e grande compétence du développeur, après savoir construire des pages.

Ce que tu sauras faire à la fin

NotionTu sauras…
Base & SGBDdire ce qu'est une base et ce qui la gère (et ce qu'est le NoSQL)
Tableslire une table (lignes, colonnes)
Types, NULLcomprendre les types de données et la valeur absente
Clésclé primaire (identifier) et clé étrangère (relier)
Relations & cardinalitésvoir comment les tables se relient (1-N) et le penser en MCD
Contraintesles garde-fous : NOT NULL, UNIQUE, index
Normalisationpourquoi on évite de répéter une info
Explorer & créercréer une vraie base à 2 tables et la parcourir

0. Pourquoi pas juste un fichier ?

On pourrait stocker des infos dans un fichier texte ou un tableur (Excel). Pour quelques lignes, ça va. Mais dès qu'il y a beaucoup de données, ou plusieurs personnes qui y accèdent en même temps, ça casse. La base de données est faite exactement pour ça.

Avec un fichier / ExcelAvec une base de données
lent dès qu'il y a beaucoup de lignesretrouve une info parmi des millions en un instant
une personne à la foisdes milliers d'accès simultanés
aucune règle (on met n'importe quoi)contrôle (types, doublons interdits…)
pas de lien entre fichierstables reliées entre elles

Flag A1

Checkpoint

Cite 2 raisons concrètes pour lesquelles un site avec beaucoup d'utilisateurs utilise une base de données plutôt qu'un fichier Excel. Rends : ta réponse.

0 sur 17 dans cette étape

1. Base de données & SGBD

Une base de données (BDD) est un ensemble de données organisées. Le logiciel qui la gère (stocke, protège, répond aux questions) s'appelle un SGBD (Système de Gestion de Base de Données).

MotDéfinition
Base de donnéesun ensemble de données organisées et reliées
SGBDle logiciel qui gère la base (MySQL, PostgreSQL, SQLite…)
Tableun « tableau » qui stocke un type d'information (les clients, les produits…)
SQLle langage pour interroger la base (prochaine séance)

Les SGBD que tu croiseras — et quand choisir quoi

SGBDPortArchitectureUsage typiqueTu le croises où ?
MySQL 83306client-serveursites web, applis métier, fort trafic simultanéGLPI, GSB Ordonnances (ton projet 1A), hébergements web
MariaDB 103306client-serveur100 % compatible MySQL (fork libre)Debian / Ubuntu par défaut — remplace MySQL transparentement
PostgreSQL 165432client-serveurSQL le plus rigoureux, types avancés (JSON, géo), gros volumesprojets scientifiques, fintech, entreprises exigeantes
SQLite 3aucun (fichier local)embarquéapprentissage, petites applis mobilesFirefox, Android, iOS, ce playbook
SQL Server1433client-serveuréco-système Microsoft (.NET, C#, Azure)grandes entreprises Windows / Entity Framework

Et le « NoSQL », c'est quoi ?

Tout ce qu'on voit aujourd'hui, ce sont des bases relationnelles : des tables reliées entre elles. C'est de loin le plus répandu, et c'est le socle. Mais tu entendras parler de NoSQL (« Not Only SQL ») : une autre famille de bases qui ne range pas les données en tables.

Où vit la base ? (client-serveur)

Avec un SGBD comme MySQL, la base ne vit pas « dans l'appli » : elle vit sur un serveur, et plusieurs programmes (le client) lui parlent en même temps. C'est ça qui permet les milliers d'accès simultanés promis au début.

Les clients (appli, phpMyAdmin…) envoient leurs questions au SGBD, seul gardien de la base. Lui seul lit et écrit dans les données : il évite que deux clients se marchent dessus.

Les clients (appli, phpMyAdmin…) envoient leurs questions au SGBD, seul gardien de la base. Lui seul lit et écrit dans les données : il évite que deux clients se marchent dessus.

Flag A2

Checkpoint

Quelle est la différence entre une « base de données » et un « SGBD » ? Cite un exemple de SGBD. Rends : ta réponse.

0 sur 17 dans cette étape

2. La table : lignes & colonnes

L'unité de base, c'est la table : un tableau où chaque ligne est un enregistrement (un client, un produit…) et chaque colonne un renseignement (le nom, le prix…).

Une table « visiteur » : 3 colonnes (id, nom, ville) et 2 lignes (2 visiteurs). Chaque ligne décrit UN visiteur.

Une table « visiteur » : 3 colonnes (id, nom, ville) et 2 lignes (2 visiteurs). Chaque ligne décrit UN visiteur.

MotDéfinition
Ligne (enregistrement)un élément concret (un visiteur précis)
Colonne (champ / attribut)un renseignement commun à tous (le nom, la ville)

Flag A3

Checkpoint

Dans une table produit avec les colonnes id, nom, prix, stock, qu'est-ce qu'une ligne représente ? Et la colonne prix ? Rends : ta réponse.

0 sur 17 dans cette étape

À toi : lis une table

Entraîne-toi à lire « comme une base ». Voici une table produit d'une boutique :

idnomprixstock
1Clavier29.9012
2Souris15.000
3Écran 24"149.005

Flag B5

Lecture (production)

Réponds en te servant uniquement de la table : (1) combien de lignes (d'enregistrements) ? (2) combien de colonnes ? (3) quel produit n'a plus de stock ? (4) que vaut la case « prix » de la ligne dont l'id est 3 ? Rends : tes 4 réponses.

0 sur 17 dans cette étape

3. Les types de données

Chaque colonne a un type : il dit quelle sorte de donnée elle accepte. Ça évite de mettre « bonjour » dans un prix.

TypePour quoiExemple
INT (entier)nombres entiersun stock : 42
DECIMAL / FLOATnombres à virguleun prix : 19.99
VARCHAR (texte court)du texte (avec une longueur max)un nom : "Dupont"
TEXTdu texte longune description
DATE / DATETIMEdates et heures2026-09-15
BOOLEANvrai / fauxactif : true

Les types MySQL en détail — tailles et limites exactes

Type MySQLTaillePlage / limiteQuand l'utiliser
TINYINT1 octet-128 à 127 (ou 0-255 non signé)statut, indicateur booléen (MySQL stocke BOOLEAN en TINYINT(1))
INT4 octets-2 147 483 648 à +2 147 483 647identifiant, quantité, compteur — le choix par défaut
BIGINT8 octets±9,2 × 10^(18)clé primaire sur des milliards de lignes (réseaux sociaux, logs)
DECIMAL(M,D)variableM chiffres au total, D après la virgule — ex. DECIMAL(10,2) pour 99 999 999.99montants financiers — valeur EXACTE, pas d'arrondi
FLOAT4 octets~7 chiffres significatifsmesures physiques approx. — ne jamais utiliser pour de l'argent
CHAR(N)N octets fixe1 à 255 caractères, toujours padé à Ncode postal, code ISO (longueur toujours identique)
VARCHAR(N)1 à N octetsN max 65 535 octets par lignenom, email, titre — longueur variable
TEXTjusqu'à 65 535 octets~65 000 caractèrescommentaire, description longue
DATE3 octets1000-01-01 à 9999-12-31date seule (naissance, échéance)
DATETIME8 octets1000-01-01 00:00:00 à 9999-12-31 23:59:59horodatage précis (date + heure)

NULL : la valeur absente

Parfois, on ne connaît pas une valeur : un client n'a pas donné son numéro de téléphone, une date de validation n'existe pas encore. La case reste vide. En base de données, ce vide a un nom : NULL.

NULL veut dire « pas de valeur / on ne sait pas ». Attention, ce n'est pas la même chose que 0 (le nombre zéro) ni que "" (le texte vide) :

ValeurSens
0un nombre connu : zéro (ex. un stock à 0)
"" (chaîne vide)un texte connu, mais vide
NULLaucune valeur du tout : on ne sait pas / non renseigné

Flag A4

Checkpoint

Pour une table etudiant (id, nom, date_naissance, moyenne, boursier), propose un type adapté à chaque colonne. Rends : ta réponse.

0 sur 17 dans cette étape

4. La clé primaire

Problème : deux visiteurs peuvent s'appeler « Marc Dupont ». Comment les distinguer ? Avec la clé primaire : une colonne dont la valeur est unique pour chaque ligne — souvent un id qui s'incrémente automatiquement.

idnomville
1Marc DupontLyon
2Marc DupontParis

Même nom, mais l'id (1 et 2) les distingue sans ambiguïté.

Comment l'id est généré automatiquement

En pratique, tu ne tapes jamais l'id à la main : le SGBD l'attribue seul. Deux mécanismes courants :

MécanismeSyntaxe MySQLSyntaxe SQLiteExemple de valeur
AUTO_INCREMENTid INT AUTO_INCREMENT PRIMARY KEYid INTEGER PRIMARY KEY (auto par défaut)1, 2, 3, 4… (entier croissant)
UUIDid CHAR(36) DEFAULT (UUID())généré côté application550e8400-e29b-41d4-a716-446655440000

Flag A5

Checkpoint

Pourquoi a-t-on besoin d'une clé primaire, et pourquoi le nom n'est-il pas un bon choix de clé primaire ? Rends : ta réponse.

0 sur 17 dans cette étape

5. Relier les tables

La force d'une base, c'est de relier plusieurs tables. Exemple GSB : une table visiteur et une table frais (les notes de frais). Chaque frais appartient à un visiteur.

La table « frais » contient une clé étrangère id_visiteur qui pointe vers la clé primaire de « visiteur ». C'est ce lien qui dit « ce frais appartient à ce visiteur ».

La table « frais » contient une clé étrangère id_visiteur qui pointe vers la clé primaire de « visiteur ». C'est ce lien qui dit « ce frais appartient à ce visiteur ».

Flag A6

Checkpoint

Dans une base avec client et commande, où mettrais-tu une clé étrangère, et vers quoi pointerait-elle ? Rends : ta réponse (et ce que ça permet d'éviter).

0 sur 17 dans cette étape

6. Les cardinalités : combien pour combien ?

On vient de relier visiteur et frais. Mais dans quel sens ? Un visiteur a-t-il un seul frais, ou plusieurs ? Et un frais, appartient-il à un ou à plusieurs visiteurs ? Cette « quantité de chaque côté » s'appelle la cardinalité.

Dans GSB, c'est clair : un visiteur engage plusieurs frais (un repas, un péage, un hôtel…), mais chaque frais appartient à un seul visiteur. On dit que c'est une relation « un à plusieurs », notée 1-N (1 d'un côté, N — « plusieurs » — de l'autre).

Le visiteur 1 (Marc) est relié à 3 frais. Côté visiteur = 1, côté frais = N. La clé étrangère id_visiteur (toujours égale à 1 ici) matérialise ce lien.

Le visiteur 1 (Marc) est relié à 3 frais. Côté visiteur = 1, côté frais = N. La clé étrangère id_visiteur (toujours égale à 1 ici) matérialise ce lien.

CardinalitéExempleOù va la clé étrangère ?
1-N (un à plusieurs)un visiteur → plusieurs fraiscôté « plusieurs » (dans frais)
1-1 (un à un)une personne → une seule carte d'identitéd'un côté ou l'autre
N-N (plusieurs à plusieurs)des étudiants ↔ des cours suivisdans une 3e table dédiée (à voir plus tard)

Flag A7

Checkpoint

Une bibliothèque : un auteur écrit plusieurs livres, mais chaque livre a un seul auteur. Quelle cardinalité ? Dans quelle table mets-tu la clé étrangère, et comment l'appelles-tu ? Rends : ta réponse.

0 sur 17 dans cette étape

7. Penser la base avant de la créer (Merise)

Avant de créer des tables, les pros dessinent la base sur papier. La méthode française pour ça s'appelle Merise (tu la reverras toute l'année). Elle tient en 3 mots.

Mot MeriseCe que c'estExemple GSBDevient, dans la base…
Entitéune « chose » dont on stocke des infosun visiteur, un fraisune table
Attributune info de cette chosenom, ville, montantune colonne
Associationle lien entre deux entitésun visiteur « engage » des fraisune clé étrangère (1-N)

Le dessin qu'on fait avant de coder s'appelle le MCD (Modèle Conceptuel de Données) : des rectangles (entités) reliés par des associations, avec les cardinalités. C'est la « carte » de la base.

2 entités (VISITEUR, FRAIS), 1 association (« engage »). 1,n côté visiteur = un visiteur engage de 1 à plusieurs frais ; 1,1 côté frais = un frais appartient à exactement un visiteur.

2 entités (VISITEUR, FRAIS), 1 association (« engage »). 1,n côté visiteur = un visiteur engage de 1 à plusieurs frais ; 1,1 côté frais = un frais appartient à exactement un visiteur.

Flag B3

Production (modélisation)

Dessine (sur papier ou texte) le MCD d'une mini-bibliothèque : entités auteur et livre, leurs attributs, l'association entre elles et les cardinalités. Rends : ton schéma (2 entités + association + cardinalités).

0 sur 17 dans cette étape

8. Exemple guidé : du besoin aux tables

On a tous les outils (entités, attributs, relations, cardinalités, clés). On les met bout à bout sur un cas neuf, pas GSB, pour apprendre à transformer un besoin écrit en français en une vraie structure de base.

Étape 1 — Repérer les entités (→ les tables)

On souligne les « choses » dont on stocke des infos. Ici : étudiant et emprunt. Deux entités → deux tables : etudiant et emprunt.

Étape 2 — Lister les attributs (→ les colonnes)

EntitéAttributs
etudiantid, nom, classe
empruntid, titre_livre, date_emprunt

Étape 3 — Trouver la relation et sa cardinalité

« Un étudiant emprunte plusieurs livres » et « un emprunt concerne un seul étudiant » → relation 1-N entre etudiant (côté 1) et emprunt (côté N).

Étape 4 — Placer la clé étrangère

Règle du chapitre 6 : la clé étrangère va du côté N. On ajoute donc id_etudiant dans emprunt, qui pointe vers etudiant(id).

Étape 5 — Le MLD final (les tables prêtes)

TableColonneTypeClé
etudiantidINTclé primaire
nomVARCHARNOT NULL
classeVARCHAR—
empruntidINTclé primaire
titre_livreVARCHARNOT NULL
date_empruntDATE—
id_etudiantINTclé étrangère → etudiant(id)

Flag B4

Production (modélisation guidée)

Même travail pour ce besoin : « Un cinéma a plusieurs salles (numéro, nombre de places). Dans chaque salle se déroulent plusieurs séances (film, horaire). Une séance a lieu dans une seule salle. »
Rends : les 2 entités, leurs attributs, la cardinalité, où va la clé étrangère, et le MLD (tableau Table / Colonne / Type / Clé).

0 sur 17 dans cette étape

9. Éviter les répétitions : la normalisation

Pourquoi a-t-on séparé visiteur et frais en deux tables, au lieu de tout mettre dans une seule ? Regarde ce qui se passe si on entasse tout dans frais :

idmontantnom_visiteurville_visiteur
145Marc DupontLyon
212Marc DupontLyon
380Sophie MartinParis

« Marc Dupont » et « Lyon » sont recopiés à chaque ligne. Avec 500 frais pour Marc, c'est 500 fois la même chose. Trois problèmes :

La solution, c'est ce qu'on a fait : une table visiteur (Marc écrit une seule fois) et une table frais qui ne garde que son id_visiteur. Si Marc déménage, on change une seule case.

Les 3 formes normales (1FN, 2FN, 3FN) — les règles des pros

La normalisation a des règles précises. En pratique on vise la 3FN sur tout projet sérieux :

FormeLa règleViolation typeCorrection
1FNChaque case = une seule valeur atomique (pas de liste, pas de colonnes répétitives)telephones = "0612…, 0788…" ou colonnes tel1, tel2, tel3table telephone (id, id_personne, numero) reliée par FK
2FNToutes les colonnes non-clé dépendent de la clé entière (utile si la clé est composite)Table commande_produit(id_cmd, id_prod, nom_produit) — nom_produit dépend seulement de id_prod, pas de la paireSortir nom_produit dans une table produit
3FNPas de dépendance entre colonnes non-clé (une colonne ne doit pas dépendre d'une autre colonne non-clé)Table employe(id, code_postal, ville) — ville dépend de code_postal, pas de l'idSortir code_postal, ville dans une table code_postal

Flag A8

Checkpoint

Une table commande (id, produit, prix, nom_client, email_client) répète le client à chaque commande. Comment la découperais-tu pour normaliser ? Rends : les tables que tu créerais et le lien entre elles.

0 sur 17 dans cette étape

À toi : repère les défauts

Voici une table inscription mal conçue pour un club de sport. Lis-la en analyste : qu'est-ce qui cloche ?

idmembretel_membreactivitejour
1Léa Roy0612…Judolundi
2Léa Roy0612…Natationjeudi
3Tom Fer0788…Judolundi

Indices de réflexion : qui est recopié ? Que se passe-t-il si Léa change de téléphone ? Combien de fois « Judo / lundi » est-il écrit ?

Flag B6

Analyse

Liste au moins 2 défauts de cette table, puis propose un découpage en plusieurs tables reliées (membre, activité, inscription) avec les clés. Rends : les défauts repérés + ton nouveau schéma.

0 sur 17 dans cette étape

10. Les garde-fous : contraintes & index

Une base sérieuse ne se contente pas de stocker : elle fait respecter des règles pour que les données restent justes. Ces règles s'appellent des contraintes d'intégrité.

ContrainteCe qu'elle imposeExemple
NOT NULLla valeur est obligatoire (pas de vide)un visiteur doit avoir un nom
UNIQUEpas deux lignes avec la même valeurdeux comptes ne peuvent partager un email
PRIMARY KEYUNIQUE + NOT NULL : l'identifiantla colonne id
FOREIGN KEYdoit pointer vers une ligne existanteid_visiteur doit exister dans visiteur
CHECKune règle sur la valeurmontant > 0

Les messages d'erreur exacts à connaître par cœur

Contrainte violéeMessage MySQL exact (numéro d'erreur)Ce que ça signifie
NOT NULLColumn 'nom' cannot be null (1048)tu as inséré sans fournir de valeur pour une colonne obligatoire
UNIQUEDuplicate entry 'test@gsb.fr' for key 'email' (1062)cette valeur existe déjà dans la colonne UNIQUE
PRIMARY KEYDuplicate entry '1' for key 'PRIMARY' (1062)id déjà utilisé — résolu en laissant faire AUTO_INCREMENT
FOREIGN KEY (INSERT)Cannot add or update a child row: a foreign key constraint fails (1452)l'id référencé n'existe pas dans la table parent
FOREIGN KEY (DELETE)Cannot delete or update a parent row: a foreign key constraint fails (1451)on tente de supprimer un parent qui a encore des enfants

L'index : pour aller (très) vite

Dernier mot à connaître : l'index. Quand une table grossit (des millions de lignes), retrouver « tous les frais du visiteur 1 » peut devenir lent. Un index accélère ces recherches.

SituationSans index (parcours complet)Avec index B-tree (logarithmique)
1 000 lignes, recherche par email1 000 comparaisons~10 comparaisons
1 000 000 lignes, recherche par email1 000 000 comparaisons~20 comparaisons
RègleL'index B-tree fonctionne en O(log n) : chaque doublement de la table n'ajoute qu'une comparaison supplémentaire

Et si tout se perd ? La sauvegarde

Une base, c'est précieux : un disque qui lâche ou une fausse manip peut tout effacer. On en fait donc des sauvegardes régulières. La forme la plus courante s'appelle un dump.

Flag A9

Checkpoint

Sur une table compte (id, email, mot_de_passe), quelle contrainte mets-tu sur email pour empêcher deux comptes identiques ? Et laquelle garantit qu'un email est toujours renseigné ? Rends : tes deux réponses.

0 sur 17 dans cette étape

Flag E1

Extension

Dans sqliteonline, exporte ta base (menu Export) en fichier .sql, ouvre-le et regarde son contenu. Rends : à quoi ressemblent les premières lignes, et explique en une phrase pourquoi ce fichier suffit à tout reconstruire.

0 sur 17 dans cette étape

11. Explorer ET créer une vraie base

Assez de théorie : on ouvre un outil, on crée une vraie base à 2 tables (visiteur + frais), on y met des données, et on la parcourt. Tout dans le navigateur, sans rien installer.

Étape 1 — Ouvrir l'outil

Va sur sqliteonline.com (un bac à sable de base de données qui marche dans le navigateur, sans installation). Tu vois trois zones : à gauche l'arbre des tables (vide pour l'instant), au centre une zone blanche où taper du SQL, et un bouton Run (▶) pour l'exécuter.

Étape 2 — Créer la table « visiteur »

Dans la zone centrale, tape ceci puis clique Run :

CREATE TABLE visiteur (
  id     INTEGER PRIMARY KEY,
  nom    TEXT NOT NULL,
  ville  TEXT
);

Étape 3 — Créer la table « frais » (avec la clé étrangère)

CREATE TABLE frais (
  id           INTEGER PRIMARY KEY,
  montant      REAL NOT NULL,
  date_frais   TEXT,
  id_visiteur  INTEGER,
  FOREIGN KEY (id_visiteur) REFERENCES visiteur(id)
);

Étape 4 — Remplir les tables (les données)

INSERT INTO visiteur (id, nom, ville) VALUES
  (1, 'Marc Dupont',  'Lyon'),
  (2, 'Sophie Martin','Paris');

INSERT INTO frais (id, montant, date_frais, id_visiteur) VALUES
  (1, 45.00, '2026-09-15', 1),
  (2, 12.50, '2026-09-16', 1),
  (3, 80.00, '2026-09-17', 2);

Étape 5 — Regarder ce qu'on a créé

SELECT * FROM frais;
Ce que tu dois voir
id | montant | date_frais | id_visiteur
1  | 45.0    | 2026-09-15 | 1
2  | 12.5    | 2026-09-16 | 1
3  | 80.0    | 2026-09-17 | 2

Étape 6 — Parcourir dans l'arbre

À gauche, l'arbre montre maintenant tes 2 tables. Déplie frais : tu vois ses colonnes (id, montant, date_frais, id_visiteur). Clique sur le nom de la table pour afficher son contenu. Repère pour chaque table : ses colonnes, sa clé primaire (id), le nombre de lignes, et — pour frais — la clé étrangère.

Étape 7 — Voir la relation fonctionner

Petit avant-goût de SQL (la prochaine séance) pour prouver que la clé étrangère relie bien les données : « montre-moi tous les frais du visiteur n°1 ».

SELECT * FROM frais WHERE id_visiteur = 1;
Ce que tu dois voir
id | montant | date_frais | id_visiteur
1  | 45.0    | 2026-09-15 | 1
2  | 12.5    | 2026-09-16 | 1

Tu obtiens 2 lignes : les 2 frais de Marc, et pas celui de Sophie. C'est exactement ce que promettait la relation 1-N : retrouver tout ce qui appartient à un visiteur, sans avoir recopié son nom nulle part.

SQLite vs MySQL — les différences à retenir pour GSB Ordonnances

SujetSQLite (ce playbook)MySQL (GSB Ordonnances)
Texte courtTEXTVARCHAR(N) — ex. VARCHAR(100) pour un nom
Nombre à virguleREALDECIMAL(8,2) (exact, pour les montants)
Entier auto-incrémentéid INTEGER PRIMARY KEYid INT AUTO_INCREMENT PRIMARY KEY
BooléenINTEGER (0 / 1)TINYINT(1) ou BOOLEAN (alias)
FK actives par défaut ?NON — il faut PRAGMA foreign_keys = ON;OUI (moteur InnoDB)
Connexion réseau(fichier local, pas de réseau)Server=localhost;Port=3306;Database=gsb_ordonnances;Uid=gsb;Pwd=gsbpass;

Flag B1

Production (exploration)

Crée la base ci-dessus, puis explore-la. Rends : pour visiteur ET pour frais — la liste des colonnes, la clé primaire, le nombre de lignes, et (pour frais) le nom de la clé étrangère et la table qu'elle vise. Capture l'écran du résultat de SELECT * FROM frais;.

0 sur 17 dans cette étape

12. Mini-projet : concevoir TA base

Tu joues maintenant l'analyste-développeur : tu conçois une base à 2 tables reliées sur un thème de ton choix (autre que GSB), tu la crées dans l'outil, et tu la documentes — comme un vrai projet.

Choisis un thème

Par exemple : artiste / album, équipe / joueur, client / commande, auteur / livre… L'important : une relation 1-N (un côté « 1 », un côté « plusieurs »).

La mission (dans sqliteonline)

  1. Décide tes 2 entités et leurs attributs (au moins 3 colonnes par table), avec un type par colonne.
  2. Choisis la clé primaire de chacune (un id INTEGER PRIMARY KEY).
  3. Place la clé étrangère du bon côté (le « N ») et fais-la pointer vers l'autre table.
  4. Écris les CREATE TABLE (avec NOT NULL sur ce qui est obligatoire) et exécute-les.
  5. Ajoute au moins 2 lignes par table avec INSERT, dont un côté « 1 » qui possède plusieurs lignes côté « N ».
  6. Vérifie avec SELECT * FROM ...; sur tes deux tables.

Flag B2

Mini-projet (production)

Crée ta base à 2 tables dans l'outil. Rends : (1) le MCD (2 entités + association + cardinalités), (2) ton code SQL complet (CREATE + INSERT), (3) une capture du SELECT de chaque table montrant la relation 1-N. C'est exactement le genre de base que tu manipuleras dans le projet AP (GLPI/GSB).

0 sur 17 dans cette étape

Chapitre 12 bis — La base GSB Ordonnances vue de l'intérieur

Tu connais maintenant les tables, les types, les clés, les relations et la normalisation. Voici la base réelle de ton projet de l'année — GSB Ordonnances — lue avec ces outils.

Les entités et leurs colonnes clés

TableRôleColonnes principalesType MySQL
personnedonnées communes à tout utilisateurid, nom, prenom, login, mdpINT / VARCHAR(50) / VARCHAR(50) / VARCHAR(25) / VARCHAR(255) (hash !)
medecinspécialisation de personne pour les médecinsid (FK→personne), numAdeli, specialiteINT / CHAR(9) / VARCHAR(50)
patientpatients des ordonnancesid, nom, prenom, dateNaissance, numSecuINT / VARCHAR(50) / VARCHAR(50) / DATE / CHAR(15)
ordonnancelie un médecin à un patientid, date, id_medecin (FK), id_patient (FK)INT / DATE / INT / INT
medicamentcatalogue des médicaments prescritsid, nom, dosageINT / VARCHAR(100) / VARCHAR(50)
ligne_ordonnancetable de liaison N-N (ordonnance ↔ médicament)id_ordonnance (FK), id_medicament (FK), quantiteINT / INT / INT

GSB Ordonnances : 6 tables, des relations 1-1, 1-N et N-N. Tout ce que tu as appris dans ce playbook, en vrai.

GSB Ordonnances : 6 tables, des relations 1-1, 1-N et N-N. Tout ce que tu as appris dans ce playbook, en vrai.

13. Les pièges du débutant

Avant de refermer, les 4 erreurs de conception que tout le monde fait au début. Les connaître, c'est déjà ne plus les commettre. Pour chacune : le piège, pourquoi c'est mauvais, et la bonne réflexe.

Flag B7

Diagnostic

Reprends ta base du Flag B2 (ton mini-projet) et vérifie qu'elle ne tombe dans aucun de ces 4 pièges. Rends : pour chaque piège, une phrase disant pourquoi ta base est OK (ou ce que tu as corrigé).

0 sur 17 dans cette étape

Pour finir

Ton antisèche (le vocabulaire)

MotEn un mot
Base de donnéesdes données organisées
SGBDle logiciel qui les gère (MySQL, SQLite…)
Tableun tableau pour un type d'info
Ligne / Colonneun enregistrement / un champ
Typela sorte de donnée d'une colonne (INT, VARCHAR, DATE…)
NULLvaleur absente (≠ 0, ≠ texte vide)
Clé primairel'identifiant unique d'une ligne
Clé étrangèrele lien vers une autre table
Cardinalitécombien de chaque côté (1-N, 1-1, N-N)
MCD (Merise)le plan : entités + associations + cardinalités
Normalisationchaque info à un seul endroit (pas de répétition)
Contrainteune règle imposée (NOT NULL, UNIQUE…)
Indexrepérage pour chercher vite

Vérifie tes acquis

  1. Pourquoi une base de données plutôt qu'un fichier Excel pour beaucoup de données ?
  2. Différence entre une base de données et un SGBD ?
  3. Dans une table, qu'est-ce qu'une ligne ? une colonne ?
  4. À quoi sert le type d'une colonne ? Et que veut dire NULL ?
  5. À quoi sert la clé primaire ?
  6. Qu'est-ce qu'une clé étrangère, et que permet-elle ?
  7. Une relation 1-N : de quel côté place-t-on la clé étrangère ?
  8. Pourquoi normalise-t-on (séparer en plusieurs tables) ?
  9. Cite deux contraintes d'intégrité et ce qu'elles imposent.

Glossaire

MotDéfinition
Base de données (BDD)un ensemble de données organisées et reliées
SGBDle logiciel qui gère la base (MySQL, PostgreSQL, SQLite)
Tableun tableau stockant un type d'information
Ligne / enregistrementun élément concret de la table
Colonne / champun renseignement commun à toutes les lignes
Type de donnéesla sorte de valeur acceptée (INT, VARCHAR, DATE…)
NULLl'absence de valeur (différent de 0 et du texte vide)
Clé primairela colonne qui identifie une ligne de façon unique
Clé étrangèreune colonne qui pointe vers la clé primaire d'une autre table
Cardinalitéle nombre d'éléments de chaque côté d'une relation (1-N, 1-1, N-N)
Entité / attribut / associationvocabulaire Merise : une « chose » / une de ses infos / le lien entre deux
MCDModèle Conceptuel de Données : le plan d'une base (entités + associations)
Normalisationorganiser les tables pour qu'une info ne soit écrite qu'à un seul endroit
Contrainte d'intégritérègle imposée par le SGBD (NOT NULL, UNIQUE, FOREIGN KEY…)
Indexstructure de repérage qui accélère les recherches
NoSQLfamille de bases sans tables (ex. MongoDB, à voir en 2A)

TP terminé ?

Coche chaque livrable quand tu l'as : c'est la preuve que l'étape est acquise.

livrables
–
de série
–
Voir tous les TP