Aller au contenu
Réussir mon BTS SIO

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

Par exemple

Chapitre 112 minDébutant

C'est quoi SQL et une base relationnelle ?

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • dire ce qu'une base de données apporte face à un tableur ;
  • expliquer le rôle du SGBD dans une architecture client-serveur ;
  • repérer les clés primaires et étrangères d'un schéma relationnel ;
  • classer une instruction SQL dans sa famille : LDD, LMD ou LCD.

3 exercices corrigés

SQL (Structured Query Language) est le langage normalisé qui sert à créer une base de données relationnelle, à y ranger des données et à les retrouver. Ce chapitre explique ce qu'est une base relationnelle, le rôle du SGBD et des clés, et les familles d'instructions SQL. Il se termine par l'installation de MySQL sur ta machine.

Fichier, tableur ou base de données

Le service informatique d'une PME suit son parc dans un tableur : une ligne par poste, avec le nom de l'utilisateur, son service, son téléphone et la liste des logiciels installés. Tant qu'il y a vingt postes et une seule personne pour tenir le fichier, ça marche. Ensuite, les ennuis arrivent.

  • Redondance. Karim a deux postes : son service et son téléphone sont recopiés sur deux lignes.
  • Incohérence. Karim change de numéro. Quelqu'un corrige une ligne, oublie l'autre. Laquelle croire ?
  • Accès concurrents. Deux techniciens ouvrent le fichier en même temps. Le dernier qui enregistre écrase le travail de l'autre.
  • Contrôle. Rien n'empêche d'écrire « environ 600 » dans la colonne du prix, ou d'affecter un poste à une personne qui n'existe pas.
  • Sécurité. Qui ouvre le fichier voit tout, y compris les données personnelles.

Une base de données relationnelle range chaque information une seule fois, dans la bonne table, et relie les tables par des clés. Un logiciel spécialisé, le SGBD, fait respecter les règles et gère les accès.

ProblèmeAvec un tableurAvec un SGBD
RedondanceValeurs recopiées sur chaque ligneChaque information stockée une fois, reliée par des clés
CohérenceAucune règleTypes, NOT NULL, UNIQUE, CHECK, clés étrangères
Accès concurrentsLe dernier enregistrement gagneTransactions et verrous (chapitre 13)
SécuritéTout ou rienDroits par compte, table et colonne (chapitre 14)
Volume1 048 576 lignes au maximum par feuille ExcelDes millions de lignes, accélérées par des index
PanneFichier corrompu, version perdueJournaux, sauvegardes, réplication (chapitre 17)

Le SGBD et l'architecture client-serveur

Un SGBD (système de gestion de bases de données) est le logiciel qui stocke les données, exécute les requêtes, vérifie les contraintes, gère les transactions et contrôle les droits. Il fonctionne en client-serveur : le serveur (le programme mysqld pour MySQL) écoute par défaut sur le port TCP 3306. Les clients se connectent avec un compte et un mot de passe, envoient des requêtes SQL et reçoivent les résultats.

Un client, c'est la ligne de commande mysql, une interface graphique comme phpMyAdmin ou DBeaver, ou ton application PHP, Node.js ou C#. Le serveur ne fait aucune différence : il reçoit du SQL.

SGBDLicenceOù tu le croises
MySQL (8.4 LTS)Libre (GPL) et édition commerciale d'OracleHébergeurs web, piles LAMP, sujets du BTS
MariaDBLibre (GPL), dérivé de MySQL depuis 2009Paquet par défaut de Debian, serveurs GLPI
PostgreSQLLibre (licence PostgreSQL)Applications récentes, données géographiques, cloud
SQL ServerPropriétaire (Microsoft), édition Express gratuiteEnvironnements Windows et .NET, sujets d'E7 sur le chiffrement
Oracle DatabasePropriétaireGrandes entreprises, banques, administrations
SQLiteDomaine public, sans serveur : la base est un fichierApplications mobiles, navigateurs, logiciels embarqués

Tous parlent SQL, un langage normalisé par l'ISO depuis 1987. Chacun ajoute ses extensions : les bases du langage restent les mêmes partout, les fonctions de dates ou la syntaxe d'auto-incrément changent.

Le modèle relationnel

Le modèle relationnel a été proposé par Edgar F. Codd en 1970. Il range les données dans des relations, que SQL appelle des tables.

Terme du modèleTerme SQLSens
RelationTableUn ensemble de lignes de même structure
AttributColonneUne propriété : le nom, le prix, la date d'achat
TupleLigne (enregistrement)Une occurrence : un employé précis
DomaineType et contraintesL'ensemble des valeurs permises pour un attribut
DegréNombre de colonnes4 pour la table service ci-dessous
CardinalitéNombre de lignes6 pour la table service ci-dessous

Voici la table service de la base d'exemple que tu vas utiliser tout au long du cours :

id_servicecodelibelleetage
1DIRDirection3
2COMPTAComptabilité2
3COMMCommercial1
4LOGILogistique0
5INFOInformatique2
6JURIJuridiqueNULL

NULL signifie « valeur absente » : le service juridique vient d'être créé et n'a pas encore de bureau. Ce n'est ni zéro ni une chaîne vide (NULL et la logique à trois valeurs).

Deux propriétés du modèle ont des conséquences directes sur tes requêtes. Une relation ne contient pas deux lignes identiques : c'est la clé primaire qui le garantit. Et les lignes n'ont pas d'ordre : si tu veux un résultat trié, tu dois l'écrire avec ORDER BY.

Les clés

Clé candidate. Un ensemble minimal de colonnes dont la valeur identifie chaque ligne. La table service en a deux : id_service et code. La table employe aussi : id_employe et email.

Clé primaire (PRIMARY KEY). La clé candidate choisie pour identifier les lignes. Elle est unique et jamais NULL : c'est l'intégrité d'entité. On préfère souvent une clé artificielle, un entier généré automatiquement (id_employe), à une clé naturelle comme l'email : l'entier est court, stable, et ne change pas quand la personne change d'adresse.

Clé composée. Une clé primaire faite de plusieurs colonnes. La table installation dit quel logiciel est installé sur quel poste : sa clé est le couple (id_poste, id_logiciel). Un même poste apparaît plusieurs fois, un même logiciel aussi, mais un couple n'apparaît qu'une fois.

Clé étrangère (FOREIGN KEY). Une colonne qui fait référence à la clé primaire d'une autre table, ou de la même table. Dans employe, la colonne id_service contient le numéro du service de la personne. Le SGBD refuse un numéro de service qui n'existe pas : c'est l'intégrité référentielle.

Lire un schéma relationnel comme dans les sujets

Les sujets d'examen donnent la base sous forme de schéma relationnel textuel. La clé primaire y est soulignée et chaque clé étrangère est précédée d'un #. Le Markdown ne sait pas souligner : dans ce cours, la clé primaire est en gras.

service (id_service, code, libelle, etage)

employe (id_employe, nom, prenom, email, telephone, date_embauche, #id_service, #id_responsable)

  • id_service : clé étrangère en référence à id_service de service
  • id_responsable : clé étrangère en référence à id_employe de employe

La deuxième clé étrangère porte un autre nom que la colonne qu'elle référence : id_responsable contient l'identifiant d'un employé, le responsable. C'est une association réflexive. Lis toujours les lignes de contraintes sous le schéma : le nom d'une colonne ne suffit pas à savoir vers quelle table elle pointe.

Certains sujets ajoutent un dictionnaire de données, un tableau qui détaille chaque colonne. Pour la table employe :

ColonneTypeContraintesDescription
id_employeINTClé primaire, auto-incrémentIdentifiant interne
nomVARCHAR(50)ObligatoireNom de famille
prenomVARCHAR(50)ObligatoirePrénom
emailVARCHAR(100)Obligatoire, uniqueAdresse professionnelle
telephoneVARCHAR(20)FacultatifLigne directe
date_embaucheDATEObligatoireDate d'arrivée
id_serviceINTObligatoire, clé étrangèreService de rattachement
id_responsableINTFacultatif, clé étrangèreResponsable direct (NULL pour la directrice)

Les familles d'instructions SQL

FamilleRôleInstructions
LDD, langage de définition des donnéesCréer et modifier la structureCREATE, ALTER, DROP, TRUNCATE, RENAME
LMD, langage de manipulation des donnéesAjouter, modifier, supprimer des lignesINSERT, UPDATE, DELETE
LID, langage d'interrogation des donnéesLireSELECT
LCD, langage de contrôle des donnéesGérer les droitsGRANT, REVOKE
Contrôle des transactionsValider ou annuler un groupe d'opérationsSTART TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT

Beaucoup d'ouvrages rangent SELECT dans le LMD. Le référentiel du BTS SIO parle de « langage d'interrogation de données » : les deux classements existent, retiens surtout qui fait quoi.

Installer ton environnement

Il te faut un serveur et un client. Trois façons d'obtenir le serveur :

  • Docker (recommandé si tu l'as déjà) : un conteneur jetable, la même version que tout le monde.
  • Un paquet de ton système : sudo apt install mariadb-server sous Debian ou Ubuntu, l'installeur MySQL sous Windows, brew install mysql@8.4 sous macOS.
  • Une pile tout-en-un sous Windows (XAMPP, WampServer, Laragon) : elle installe Apache, PHP et MySQL ou MariaDB d'un coup. Pratique pour PHP, mais vérifie la version du SGBD fournie.
bash
# MySQL 8.4 dans un conteneur, accessible sur le port 3306 de ta machine
docker run --name mysql-cours -e MYSQL_ROOT_PASSWORD=change-moi -p 3306:3306 -d mysql:8.4

# Ouvrir le client en ligne de commande dans le conteneur
docker exec -it mysql-cours mysql -u root -p

# Exécuter un fichier de ta machine (parc.sql, le script de la base d'exemple) dans le conteneur
docker exec -i mysql-cours sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < parc.sql

Dans la dernière commande, -i transmet le fichier parc.sql au conteneur, et le mot de passe vient de la variable fixée au docker run : sans terminal, le client ne pourrait pas te le demander.

Côté client, tu as le choix :

ClientTypeRemarque
mysql (ou mariadb)Ligne de commandeToujours disponible sur un serveur, indispensable en SISR
phpMyAdminInterface webFournie par les piles WAMP, LAMP et par les hébergeurs
DBeaverApplication de bureauGratuite, se connecte aussi à PostgreSQL, SQL Server et SQLite
MySQL WorkbenchApplication de bureauÉditée par Oracle, dessine aussi les schémas

Exercices

Exercice 1 sur 3 Repérer les clés Réussi À revoir

Voici le schéma de la table des postes, au format des sujets :

poste (id_poste, num_inventaire, type_poste, marque, modele, date_achat, prix_achat, #id_employe)

  1. Quelle est la clé primaire ?
  2. Quelle autre colonne pourrait servir de clé candidate ?
  3. Quelle est la clé étrangère et vers quelle table pointe-t-elle ?
  4. Un poste en stock n'est affecté à personne. Quelle valeur prend sa clé étrangère ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. id_poste, soulignée dans un sujet.
  2. num_inventaire : chaque poste porte une étiquette unique (PC-0001). Dans la base, elle est déclarée UNIQUE et NOT NULL.
  3. id_employe, qui référence id_employe dans la table employe.
  4. NULL. La colonne doit donc accepter les valeurs nulles : la clé étrangère est facultative.

Tu avais trouvé ?

Exercice 2 sur 3 Les défauts d'un tableur Réussi À revoir

Un technicien suit les tickets dans ce tableau :

n°titredemandeurservice du demandeurétage du service
1Écran noirJulie LefèvreComptabilité2
2ImprimanteKarim MorelComptabilité2
5Odoo lentSofiane BenaliCommercial1
  1. Que se passe-t-il si la comptabilité déménage au 3e étage ?
  2. Comment enregistrer le nouveau service Juridique, qui n'a encore ouvert aucun ticket ?
  3. Que perd-on si l'on supprime le ticket 5 ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Tu dois modifier toutes les lignes des tickets de la comptabilité. Si une ligne est oubliée, la base devient incohérente : c'est une anomalie de mise à jour.
  2. Impossible sans inventer un faux ticket : c'est une anomalie d'insertion.
  3. On perd la seule trace de l'étage du service commercial : c'est une anomalie de suppression.

La solution relationnelle sépare les informations en trois tables, ticket, employe et service, reliées par des clés étrangères. C'est l'objet de la normalisation (repérer une table mal conçue et cours Merise).

Tu avais trouvé ?

Exercice 3 sur 3 Classer les instructions Réussi À revoir

Range chaque instruction dans sa famille (LDD, LMD, LID, LCD ou contrôle des transactions) : ALTER TABLE, GRANT, UPDATE, ROLLBACK, SELECT, TRUNCATE, DELETE, REVOKE, CREATE VIEW, COMMIT.

Voir la réponseMasquer la réponse de l'exercice 3
  • LDD : ALTER TABLE, TRUNCATE, CREATE VIEW
  • LMD : UPDATE, DELETE
  • LID : SELECT
  • LCD : GRANT, REVOKE
  • Contrôle des transactions : ROLLBACK, COMMIT

TRUNCATE vide une table comme un DELETE sans condition, mais c'est bien une instruction du LDD : elle recrée la table et ne s'annule pas (DROP, TRUNCATE et DELETE).

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : La base d'exemple : schéma et scriptRevoir le sommaire du cours