☀️ Stage Pré-rentrée · dès le 24 aoûtRéserver ma place →
Majorant
📘 Fiche de cours · 1re année📐 MPSI💻 Informatique Informatique communeNiveau · Spé

Bases de données : le modèle relationnel

Tout le vocabulaire des bases de données avant d'écrire une requête : relation, attribut, tuple, domaine, schéma, et surtout clé primaire vs clé étrangère et l'intégrité référentielle — illustré sur un schéma Eleve/Note concret, avec trois exercices corrigés.

Fiche rédigée par les mentors Majorant — alumni Polytechnique, CentraleSupélec et Mines Paris.

7 définitionsMis à jour le 2026-08-02

Vue d'ensemble

Comment un logiciel de gestion de notes, un site de reservation ou un reseau social rangent-ils des millions d'informations sans jamais les melanger ? Presque tous utilisent le meme outil, invente par Edgar Codd en 1970 : le modele relationnel. L'idee est d'une simplicite redoutable : on range les donnees dans des tables (des tableaux a lignes et colonnes), et on relie ces tables entre elles. Cette fiche pose tout le vocabulaire — relation, attribut, tuple, cle primaire, cle etrangere — que tu reutiliseras des que tu ecriras une requete.

Au programme (Spe, informatique commune). Vocabulaire du modele relationnel : relation (table), attribut (colonne) et son domaine, tuple (ligne), schema d'une relation. Notions de cle primaire (identification unique d'un tuple), de cle etrangere (lien vers une autre relation) et d'integrite referentielle. Cette fiche est conceptuelle : l'interrogation d'une base en SQL fait l'objet de la fiche suivante.

Prerequis

  • Aucun prerequis informatique strict : on part de zero.
  • Utile seulement pour une analogie : le dictionnaire Python, qui associe a une cle une valeur — on retrouvera cette idee d'acces « par la cle ».
  • Savoir lire un tableau a double entree (lignes / colonnes).
🎯 Accompagnement Majorant

Le vocabulaire des bases de donnees se retient en 20 minutes bien accompagnees. Nos mentors alumni X · Centrale · Mines te font manipuler un vrai schema des la premiere seance, pour que « cle primaire » et « cle etrangere » ne soient plus jamais confondues.

Trouver un mentor →

1. Une base relationnelle, ce sont des tables

Une base de donnees est un ensemble organise de donnees, stocke de facon durable, que l'on peut consulter et modifier. Dans le modele relationnel, cette organisation prend la forme la plus familiere qui soit : des tableaux.

Definition 1.1 — Relation (table)

Une relation, aussi appelee table, est un tableau a deux dimensions : chaque colonne decrit une caracteristique (un attribut), chaque ligne decrit une entite (un tuple). Le mot « relation » est le terme mathematique historique ; en pratique on dit « table ».

Definition 1.2 — Attribut et domaine

Un attribut est une colonne de la table : il porte un nom (par exemple nom, classe). Le domaine d'un attribut est l'ensemble des valeurs qu'il a le droit de prendre — autrement dit son type : entiers, texte, nombres decimaux, dates… Toutes les valeurs d'une meme colonne appartiennent au meme domaine.

Definition 1.3 — Tuple (enregistrement)

Un tuple (ou enregistrement) est une ligne de la table : c'est la donnee complete d'une entite, une valeur pour chaque attribut. Un tuple de la table des eleves, c'est « un eleve » avec toutes ses caracteristiques.

📝 Remarque — vocabulaire a double face

Chaque notion a deux noms : le nom theorique (relation, attribut, tuple) et le nom concret du tableau (table, colonne, ligne). Les sujets de concours emploient les deux ; il faut savoir passer de l'un a l'autre sans hesiter.

Correspondance des trois vocabulaires
Terme theoriqueTerme du tableauAnalogie dictionnaire
RelationTableLe dictionnaire entier
AttributColonneUn champ d'information
TupleLigne (enregistrement)Une entree cle → valeur
DomaineType de la colonneLe type des valeurs

2. Le schema d'une relation

Avant de remplir une table, il faut la decrire : quel est son nom ? Quels attributs contient-elle, et de quel domaine ? C'est le role du schema.

Definition 2.1 — Schema d'une relation

Le schema d'une relation est la donnee de son nom suivi de la liste de ses attributs, chacun avec son domaine. On le note souvent :

L'attribut souligne est la cle primaire (voir §3). Le schema decrit la structure de la table ; les tuples en sont le contenu.

Prenons deux relations qui vont nous servir de fil rouge : une table des eleves et une table de leurs notes.

L'etoile sur id_eleve dans Note signale une cle etrangere vers Eleve — on y arrive au §4. Voici les deux tables une fois remplies :

Table Eleve — extrait de donnees (3 tuples)
id_eleve (cle primaire)nomclasse
1DialloMP2I
2NguyenMPSI
3MartinMP2I
Table Note — extrait de donnees (4 tuples). La colonne id_eleve pointe vers la table Eleve
id_note (cle primaire)id_eleve (cle etrangere →)matierevaleur
1011Informatique17.0
1021Maths14.5
1032Informatique12.0
1043Maths18.0
💡 Exemple — lire un lien a la main

La note d'id_note = 102 a pour id_eleve la valeur 1. On va chercher, dans la table Eleve, le tuple dont id_eleve vaut 1 : c'est Diallo (MP2I). Cette note de 14,5 en Maths est donc celle de Diallo. Diallo a d'ailleurs deux notes (101 et 102) : un meme eleve peut apparaitre dans plusieurs tuples de Note.

3. La cle primaire : identifier chaque tuple sans ambiguite

Dans la table Eleve, deux eleves pourraient s'appeler tous les deux « Martin » et etre en MP2I. Comment les distinguer ? Il faut un attribut qui ne se repete jamais : c'est la cle primaire.

Definition 3.1 — Cle primaire

La cle primaire d'une relation est un attribut (ou un groupe d'attributs) qui identifie de facon unique chaque tuple de la table. Elle doit verifier deux proprietes :

  • Unicite : deux tuples differents ne peuvent pas avoir la meme valeur de cle primaire.
  • Non-nullite : la cle primaire ne peut jamais etre vide (valeur nulle) — sinon on ne pourrait pas identifier le tuple.

Dans Eleve, la cle primaire est id_eleve : connaitre id_eleve, c'est connaitre un seul eleve.

📐 Methode — reperer une bonne cle primaire

Demande-toi : « Si je connais cette valeur, est-ce que je designe un seul tuple ? » Le nom est un mauvais candidat (deux eleves peuvent avoir le meme). Un numero d'identifiant attribue une fois pour toutes (id_eleve) est un bon candidat. En pratique, on ajoute souvent un attribut identifiant artificiel expres pour servir de cle primaire.

📝 Remarque — cle composee (plusieurs attributs)

Une cle primaire n'est pas forcement un seul attribut. Imagine une table Presence(id_eleve, date, present) qui dit si un eleve etait la un jour donne : aucun des deux attributs id_eleve ou date n'est unique a lui seul (un eleve a plusieurs dates ; une date concerne plusieurs eleves). En revanche, le couple l'est : c'est une cle primaire composee.

⚠ Piege — « valeur qui se repete » n'est pas « cle impossible »

Ce n'est pas parce qu'une valeur se repete dans la colonne qu'elle ne peut jamais servir de cle : elle ne peut simplement pas servir seule. On peut la combiner avec un autre attribut pour former une cle composee. Ne conclus pas trop vite « impossible ».

4. La cle etrangere : relier les tables entre elles

On a separe les eleves (Eleve) et les notes (Note) dans deux tables. Il faut donc un moyen de dire « cette note appartient a cet eleve ». C'est exactement le role de la cle etrangere.

Definition 4.1 — Cle etrangere

Une cle etrangere est un attribut (ou un groupe d'attributs) d'une relation qui reference la cle primaire d'une autre relation. Sa valeur, dans chaque tuple, designe le tuple correspondant de la table referencee ; c'est ce qui relie les deux tables.

Dans Note, l'attribut id_eleve est une cle etrangere qui reference Eleve(id_eleve). La valeur 1 dans une ligne de Note renvoie a l'eleve dont la cle primaire vaut 1.

💡 Exemple — le role exact de la cle etrangere

Reprends la note 103 : id_eleve = 2. On lit dans Eleve que le tuple de cle 2 est Nguyen (MPSI). Donc « 12,0 en Informatique » est la note de Nguyen. La cle etrangere id_eleve n'invente aucune information : elle pointe vers un tuple existant de Eleve et recupere ainsi tout ce qu'on sait de cet eleve. C'est le contraire de tout recopier (nom, classe…) dans chaque note.

⚠ Piege — cle primaire vs cle etrangere (LE piege du chapitre)

Le meme nom d'attribut id_eleve joue deux roles opposes selon la table :

  • Dans Eleve, id_eleve est la cle primaire : elle identifie, elle est unique et non nulle.
  • Dans Note, id_eleve est une cle etrangere : elle pointe vers Eleve, et elle peut se repeter (Diallo a deux notes → deux lignes avec id_eleve = 1).

Retiens : la cle primaire identifie chez elle ; la cle etrangere renvoie chez le voisin.

🎯 Accompagnement Majorant

« Primaire ou etrangere ? » est la question qui fait perdre des points en colle. Nos mentors alumni X · Centrale · Mines t'entrainent a annoter n'importe quel schema en quelques secondes, un reflexe qui paie a l'ecrit comme a l'oral.

Trouver un mentor →

5. L'integrite referentielle

Une cle etrangere ne doit jamais « pointer dans le vide ». Si une ligne de Note portait id_eleve = 99 alors qu'aucun eleve n'a la cle 99, la note appartiendrait a un fantome. Le modele relationnel l'interdit.

Definition 5.1 — Integrite referentielle

La contrainte d'integrite referentielle impose que toute valeur d'une cle etrangere corresponde a un tuple reellement existant dans la table referencee (ou soit eventuellement nulle si l'attribut l'autorise). Le systeme de gestion de base de donnees refuse toute operation qui la violerait.

💡 Exemple — ce que le systeme accepte ou refuse

Sur nos tables (eleves de cles 1, 2, 3) :

  • Inserer Note(105, id_eleve=2, 'Physique', 10.0)accepte : l'eleve 2 existe.
  • Inserer Note(106, id_eleve=99, 'Physique', 10.0)refuse : aucun eleve de cle 99 (integrite referentielle violee).
  • Supprimer l'eleve 1 alors que les notes 101 et 102 le referencent → refuse par defaut : on laisserait des notes orphelines.

Declaration concrete (SQL DDL)

Quand on cree reellement ces tables, on declare les cles au systeme. Voici la declaration en SQL (langage de definition de donnees). Tu la reverras en detail dans la fiche SQL ; l'important ici est de reconnaitre les mots-cles qui traduisent chaque notion.

CREATE TABLE Eleve (
    id_eleve INTEGER PRIMARY KEY,
    nom      TEXT NOT NULL,
    classe   TEXT NOT NULL
);

CREATE TABLE Note (
    id_note  INTEGER PRIMARY KEY,
    id_eleve INTEGER NOT NULL,
    matiere  TEXT NOT NULL,
    valeur   REAL NOT NULL,
    FOREIGN KEY (id_eleve) REFERENCES Eleve(id_eleve)
);
🔍 Decryptage ligne par ligne
CREATE TABLE Eleve (cree une nouvelle relation (table) nommee Eleve ; entre parentheses viendra la liste de ses attributs avec leur domaine.
id_eleve INTEGER PRIMARY KEY,attribut id_eleve de domaine entier ; PRIMARY KEY le declare cle primaire, donc le systeme garantit automatiquement l'unicite ET la non-nullite.
nom TEXT NOT NULL,attribut nom de domaine texte ; NOT NULL interdit de laisser ce champ vide, sans pour autant en faire une cle.
classe TEXT NOT NULLattribut classe, texte, obligatoire lui aussi. Fin des attributs de Eleve.
CREATE TABLE Note (on cree la deuxieme table, Note, qui va referencer Eleve.
id_note INTEGER PRIMARY KEY,cle primaire de Note : identifie chaque note de facon unique. C'est la cle de cette table.
id_eleve INTEGER NOT NULL,l'attribut qui portera le lien vers un eleve ; entier, obligatoire (une note appartient forcement a quelqu'un). Il n'est pas encore dit que c'est une cle etrangere.
matiere TEXT NOT NULL,attribut matiere de domaine texte, obligatoire : la matiere concernee par la note (Informatique, Maths…).
valeur REAL NOT NULL,la note elle-meme, de domaine reel (nombre decimal), obligatoire.
FOREIGN KEY (id_eleve) REFERENCES Eleve(id_eleve)LA ligne cle : elle declare que id_eleve est une cle etrangere qui REFERENCES (reference) la cle primaire id_eleve de Eleve. C'est elle qui active l'integrite referentielle : toute valeur devra correspondre a un eleve existant.

Que se passe-t-il vraiment quand on remplit ces tables puis qu'on tente les insertions de l'exemple ? Voici l'execution reelle (verifiee avec le moteur SQLite) :

Execution pas a pas — le systeme applique les contraintes
Operation tenteeContrainte concerneeResultat du systeme
INSERT Note(105, id_eleve=2, …)Integrite referentielleAccepte ✓ (l'eleve 2 existe)
INSERT Note(106, id_eleve=99, …)Integrite referentielleRefuse — FOREIGN KEY constraint failed
INSERT Eleve(1, 'Autre', …)Unicite de la cle primaireRefuse — UNIQUE constraint failed
📝 Remarque — pourquoi separer en deux tables ?

On aurait pu tout mettre dans une seule table geante (nom, classe et note sur chaque ligne). Mais alors le nom et la classe de Diallo seraient recopies a chaque note : gaspillage et surtout risque d'incoherence (corriger la classe a un endroit et pas a l'autre). Separer en Eleve + Note reliees par une cle etrangere evite cette redondance : chaque fait est ecrit une seule fois.

6. Exercices corriges

Exo 1Vocabulaire sur un schemaFacile

On donne le schema . La table contient 500 lignes. Reponds :

  1. Comment appelle-t-on une ligne de cette table ?
  2. Combien la table a-t-elle d'attributs, et lesquels ?
  3. Quel est le domaine plausible de annee ?
  4. Deux livres peuvent-ils avoir le meme id_livre ?
Voir la correction detaillee

1. Une ligne est un tuple (ou enregistrement). La table a donc 500 tuples.

2. Trois attributs : id_livre, titre, annee (le nom de la table, Livre, n'est pas un attribut).

3. annee a pour domaine les entiers (une annee comme 1998). Son domaine, c'est le type des valeurs autorisees.

4. Non : id_livre est souligne, c'est la cle primaire — elle est unique, donc deux livres ne peuvent pas partager la meme valeur.

Exo 2Primaire ou etrangere ?Intermediaire

Une mediatheque utilise :

  1. Quelle est la cle primaire de Emprunt ?
  2. Quel(s) attribut(s) de Emprunt sont des cles etrangeres, et vers quoi ?
  3. La valeur de id_adherent peut-elle se repeter dans la table Emprunt ? Pourquoi ?
Voir la correction detaillee

1. La cle primaire de Emprunt est id_emprunt (l'attribut souligne) : elle identifie chaque emprunt de facon unique.

2. id_adherent est une cle etrangere vers Adherent(id_adherent) ; id_livre est une cle etrangere vers la table des livres (Livre(id_livre)). Une table peut avoir plusieurs cles etrangeres.

3. Oui, elle peut se repeter : un meme adherent emprunte plusieurs livres, donc apparait sur plusieurs lignes de Emprunt. Une cle etrangere, contrairement a une cle primaire, n'a aucune obligation d'unicite.

Exo 3Cle composee et integriteDifficile

On modelise l'inscription d'etudiants a des options avec :

Un etudiant peut suivre plusieurs options, et une option est suivie par plusieurs etudiants ; mais un etudiant ne s'inscrit qu'une fois a une option donnee.

  1. Aucun des deux attributs id_etudiant ou id_option n'est unique. Proposer une cle primaire pour Inscription et la justifier.
  2. La table Etudiant(id_etudiant, nom), de cle primaire id_etudiant, ne contient que les identifiants 1, 2, 3. Un logiciel tente d'inserer Inscription(id_etudiant=4, id_option=10, note=15). Le systeme l'accepte-t-il ? Quelle contrainte est en jeu ?
Voir la correction detaillee

1. On prend la cle primaire composee . Le couple est unique : puisqu'un etudiant ne s'inscrit qu'une fois a une option donnee, il n'existe jamais deux lignes avec le meme couple. Chacun des deux attributs pris seul se repete, mais leur combinaison identifie un tuple unique — c'est precisement le cas d'usage d'une cle composee.

2. Refuse. id_etudiant est une cle etrangere vers Etudiant, or aucun etudiant n'a l'identifiant 4. C'est une violation de l'integrite referentielle : le systeme rejette l'insertion tant que l'etudiant 4 n'existe pas dans Etudiant.

Recap final — Ce qu'il faut absolument retenir

Le modele relationnel range les donnees dans des tables et les relie par des cles. Verifie que tu maitrises chaque brique du vocabulaire :

  • Sais-tu nommer les trois vocabulaires equivalents : relation = table, attribut = colonne, tuple = ligne ?
  • Sais-tu ce qu'est le domaine d'un attribut (l'ensemble/type des valeurs autorisees) ?
  • Sais-tu dire ce que contient le schema d'une relation (nom + attributs avec leur domaine) ?
  • Sais-tu enoncer les deux proprietes d'une cle primaire (unicite ET non-nullite) ?
  • Sais-tu qu'une cle primaire peut etre composee de plusieurs attributs ?
  • Sais-tu expliquer le role d'une cle etrangere (referencer la cle primaire d'une autre table pour la relier) ?
  • Sais-tu distinguer, pour un meme nom d'attribut, son role de cle primaire (chez elle, unique) et de cle etrangere (chez le voisin, peut se repeter) ?
  • Sais-tu ce qu'exige l'integrite referentielle (une cle etrangere pointe vers un tuple existant) ?

Débloque la fiche complète

Théorèmes, démonstrations à savoir refaire, méthodes-types et pièges de concours : crée ton compte gratuit pour tout lire. Une seule fois pour toutes les fiches et ressources Majorant.

Gratuit · vos données restent confidentielles.

Valide tes acquis

Quiz — Modèle relationnel

11 questions · une à la fois · seuil de maîtrise 80 %.

Informatique commune · SpéQuiz — Bases de données : le modèle relationnelQuestion 1 / 11
FacileChoix unique1 pt

Dans une base relationnelle, une colonne d'une table porte le nom technique de :

Sélectionne une réponse pour valider.

Fiches associées

📐 MPSI·Informatique

Recherche par dichotomie

La recherche dichotomique dans un tableau trié, expliquée ligne par ligne : code Python commenté, exécution pas à pas, preuve de terminaison et de correction (variant \(d-g\), invariant de boucle), version récursive et complexité \(O(\log n)\).

📐 MPSI·Informatique

Variables, types et affectations

Les briques de base de Python pour bien démarrer la prépa : affectation, types int/float/bool/str, conversions, opérateurs (/ // %), f-strings — avec les pièges classiques et deux exercices corrigés.

📐 MPSI·Informatique

Conditions et booléens

Faire choisir un programme : booléens, comparaisons, if / elif / else, rôle de l'indentation, et combinaison de conditions avec and / or / not — avec pièges et exercices corrigés.

📐 MPSI·Informatique

Boucles for et while

Répéter une action : boucle for avec range, boucle while qui termine, et le motif de l'accumulateur (somme, compteur) — avec table de trace, pièges et exercices corrigés.

📐 MPSI·Informatique

Fonctions : paramètres et valeurs de retour

Définir et appeler une fonction, comprendre paramètres et valeur de retour, et surtout ne jamais confondre return (renvoie) et print (affiche) — avec pièges et exercices corrigés.

📐 MPSI·Informatique

Listes et chaînes de caractères

Créer, indexer, parcourir et découper des listes et des chaînes ; comprendre qu'une liste est modifiable et une chaîne non — avec les pièges d'indices et deux exercices corrigés.

Tu veux aller plus loin sur ce chapitre ?

Nos mentors alumni de Polytechnique, CentraleSupélec et Mines Paris t'accompagnent en cours particuliers — démonstrations détaillées, exos type concours, oraux blancs.

Trouver un mentor →