15 minutes de SQL
Comprendre tables, clés et schémas
Le modèle relationnel : les idées essentielles
Une base de données relationnelle organise l’information sous forme de tables (aussi appelées relations). Une table contient des lignes (enregistrements) et des colonnes (attributs).
-
Relation / table : une table regroupe des données de même nature.
Par exemple,
ETUDIANTSpeut contenir une ligne par étudiant. -
Attribut : une colonne décrit une caractéristique des lignes.
Par exemple,
nomouclassepeuvent être des attributs deETUDIANTS. -
Domaine : un attribut admet un certain type de valeurs.
On utilisera typiquement
INTEGERpour des entiers,TEXTpour du texte (et, si besoin, des types commeDATE,FLOAT,VARCHARmais la manipulation de ces types ne fait pas partie du programme). -
Clé primaire (
PRIMARY KEY) : attribut (ou groupe d’attributs) qui identifie de façon unique chaque ligne. Concrètement, deux lignes différentes ne peuvent pas avoir la même valeur de clé primaire. -
Clé étrangère (
FOREIGN KEY) : attribut qui référence la clé primaire d’une autre table. C’est la façon standard de relier deux tables entre elles.
On décrit souvent une table par son nom et la liste de ses attributs :
nom_table(attribut_1, attribut_2, ...).
Quand on manipule plusieurs tables (et qu’elles peuvent avoir des attributs portant le même nom),
on désigne un attribut de façon non ambiguë en écrivant nom_table.attribut,
par exemple ETUDIANTS.nom ou NOTES.id.
Exemple de schéma
On considère deux tables :
ETUDIANTS(id, nom, classe)
NOTES(id, id_etudiant, matiere, note)
-
La table
ETUDIANTSdécrit les étudiants, et la tableNOTESenregistre des notes : une ligne deNOTEScorrespond à une note dans une matière, associée à un étudiant. -
Clés primaires :
dans la table
ETUDIANTS, la clé primaire estid(plusieurs étudiants peuvent avoir le mêmenomou être dans la mêmeclasse, donc on impose un identifiant uniqueidpar étudiant). De même, dans la tableNOTES, la clé primaire estid(plusieurs notes peuvent porter sur la mêmematiere, ou avoir la même valeurnote, donc on impose un identifiant uniqueidpar note). -
Le champ
NOTES.id_etudiantest une clé étrangère qui pointe versETUDIANTS.id. Autrement dit, une note est toujours rattachée à un étudiant existant.
À retenir
- Une base relationnelle organise les données en tables structurées par des attributs.
- La clé primaire garantit l’unicité des lignes dans une table.
- Une clé étrangère permet de relier deux tables en référant la clé primaire de l’une dans l’autre.
- Le schéma d’une base décrit les tables, leurs attributs et les liens qui les connectent.
Exemples commentés
Une librairie en ligne dispose d’une base de données
biblio organisée de la manière suivante :
livres(isbn, titre, auteur, annee, prix)
clients(id_client, nom, ville)
ventes(id_vente, id_client, isbn, date_vente, quantite)
-
Chaque table possède une clé primaire qui identifie
de manière unique ses lignes :
livres.isbn,clients.id_client,ventes.id_vente. Par exemple, plusieurs livres peuvent avoir le mêmetitreou le mêmeauteur, mais l’isbnest un identifiant unique attribué à chaque ouvrage. -
La table
ventesenregistre les transactions : une ligne correspond à l’achat d’un livre par un client à une certainedate_vente, en une certainequantite. -
Les clés étrangères relient les tables entre elles :
ventes.id_clientréférenceclients.id_client;ventes.isbnréférencelivres.isbn. Ainsi, une vente concerne toujours un client existant et un livre répertorié dans la base.
Contenu réservé aux membres
Les exercices interactifs et le feedback IA sont réservés aux membres.
Pour sa gestion courante, un commerce dispose d’une base de données
boutiquestructurée de la façon suivante :clients.id_client,commandes.id_commande,produits.id_produit. Par exemple, plusieurs clients peuvent avoir le mêmenomou habiter la mêmeville, mais chacun possède un identifiant uniqueid_client.lignes_commandemodélise le contenu d’une commande : une ligne correspond à un produit présent dans une commande, avec une certainequantite. Elle joue un rôle d’intermédiaire entrecommandesetproduits.commandes.id_clientréférenceclients.id_client;lignes_commande.id_commanderéférencecommandes.id_commande;lignes_commande.id_produitréférenceproduits.id_produit. Ainsi, une commande est toujours associée à un client existant, et une ligne de commande correspond toujours à un produit existant.