But de la séance. Savoir reconnaître, formuler et vérifier les contraintes d’intégrité d’une BDR sur le cas « bibliothèque » (Élève, Auteur, Livre, Emprunt), uniquement sur papier (sans SQL), à partir d’instances volontairement bruitées.

Objectifs

  • Distinguer : intégrité d’entité (PK), intégrité référentielle (FK), intégrité de domaine.
  • Repérer des violations : PK dupliquée/NULL, FK orpheline, valeurs hors domaine

Bibliothèque

Élève — instance
id_elevenomemailclasse
1Martine Durandmartine.durand@mail.comT07
2Hermine Nyaleuhermine.nyaleu@mail.comT08
2Hermine Nyaleuh.nyaleu@mail.comT08
Aïcha Djérouniaicha.djerouni@mail.comT07
5Paul Dupontpaul.dupont@mail.comT13
6Paul Dupontpaul.dupont@mail.comT05
Auteur — instance
id_auteurnom
1John Grisham
2René Descartes
2R. Descartes
4
Livre — instance
id_livretitreid_auteurgenreediteurannee_publicationisbn
101Le réseau1romanJCLattès2024978270000001
102Méditations métaphysiques2essaiFlammarion2011978208070000
103Les Misérables3romanLarousse2007
104Le réseau1romanJCLattès2024978270000001
105Belle Greene99romanFlammarion2021978208070123
106Jacaranda5romanGrasset1420978224680000
Emprunt — instance
id_empruntid_eleveid_livredate_empruntdate_retour
111012024-09-252024-10-05
221022024-09-202024-09-30
321022024-09-202024-09-30
461052024-10-012024-10-10
531032024-09-182024-09-10
251012024-10-022024-10-12
79991012024-10-032024-10-12
812024-10-032024-10-12

Activité A : Diagnostiquer les violations

  1. PK (entité) : surlignez les PK dupliquées / NULL dans chaque table.
  2. FK (référentielle) : entourez les FKs orphelines et les FKs NULL non autorisées.
  3. Domaine : repérez les valeurs hors liste (classe), hors bornes (année), formats invalides (email/ISBN), incohérences de dates.
  4. Unicité métier : isolez au moins 2 doublons « métier » (ex. email élève, isbn livre, (id_eleve,id_livre,date_emprunt) emprunt).
Correction : pistes
  • Élève : id_eleve dupliqué (=2), id_eleve NULL, classe=T13 hors liste ; email dupliqué → devrait être UNIQUE.
  • Auteur : id_auteur dupliqué (=2) ; nom vide si NOT NULL.
  • Livre : isbn dupliqué ; id_auteur=99 orphelin ; annee_publication=1420 hors bornes ; isbn NULL si requis.

Check-list des contraintes (par table)

Élève

  • PK : id_eleve (UNIQUE, NOT NULL).
  • email : UNIQUE (unicité métier), format basique (CHECK).
  • classe : domaine fermé {T01…T12} (CHECK/liste).

Auteur

  • PK : id_auteur.
  • nom : NOT NULL, éventuellement non vide (CHECK).

Livre

  • PK : id_livre.
  • FK : id_auteur → Auteur.id_auteur (NOT NULL).
  • isbn : UNIQUE si présent (unicité métier) ; sinon contrainte approximative UNIQUE(titre,id_auteur,annee_publication) (à documenter).
  • annee_publication : borne [1450..année_courante] (CHECK).
  • genre : liste contrôlée (roman/essai/… si utile).

Emprunt

  • Variante 1 (réaliste) : PK=id_emprunt + UNIQUE(id_eleve,id_livre,date_emprunt) (unicité métier de la saisie).
  • Variante 2 (pédago) : PK composée (id_eleve,id_livre,date_emprunt).
  • FK : id_eleve → Eleve.id_eleve ; id_livre → Livre.id_livre (NOT NULL).
  • CHECK : date_emprunt ≤ date_retour (si date_retour non NULL).

Activité B — Politique de suppression (10 min)

  1. Proposez une politique pour Livre → Emprunt et justifiez.
  2. Proposez une autre politique pour Élève → Emprunt (cas RGPD/anonymisation) et justifiez.

Exercices d’application

Exercice 1 : Écrire les contraintes d’un schéma (bibliothèque)

À partir du schéma texte, listez PK/FK/UNIQUE/NOT NULL/CHECK/domains :

Eleve(id_eleve, nom, email, classe)
Auteur(id_auteur, nom)
Livre(id_livre, titre, *id_auteur, genre, editeur, annee_publication, isbn)
Emprunt(id_emprunt, *id_eleve, *id_livre, date_emprunt, date_retour)
-- Variante sans id_emprunt : PK(Emprunt) = (id_eleve, id_livre, date_emprunt)
      
Correction : pistes
  • PK: Eleve.id_eleve, Auteur.id_auteur, Livre.id_livre, Emprunt.id_emprunt (ou PK composée).
  • FK: Livre.id_auteur→Auteur.id_auteur ; Emprunt.id_eleve→Eleve.id_eleve ; Emprunt.id_livre→Livre.id_livre.
  • UNIQUE (métier) : Eleve.email ; Livre.isbn (si présent) ou (titre,id_auteur,annee_publication) ; (id_eleve,id_livre,date_emprunt) sur Emprunt.
  • NOT NULL : toutes PK, FKs, Auteur.nom, éventuellement Livre.titre, Emprunt.date_emprunt.
  • Domaines/CHECK : classe ∈ {T01…T12} ; annee_publication ∈ [1450..année_courante] ; format email/isbn ; date_emprunt ≤ date_retour.

Exercice 2 : Nettoyer une instance

Sur les tables plus haut, proposez des corrections pour respecter toutes les contraintes.

Correction — pistes
  • Élève : fusionner/supprimer doublon id=2 ; affecter un id à la ligne NULL ; corriger classe T13 ; rendre email UNIQUE.
  • Auteur : corriger PK dupliquée (2) ; imposer nom non vide.
  • Livre : corriger FK id_auteur=99 ; supprimer/éditer doublon d’isbn ; bornes année ; décider si isbn peut être NULL.
  • Emprunt : supprimer doublon métier (2,102,2024-09-20) ; corriger id_emprunt dupliqué (=2) ; réparer orphelins ; vérifier date_retour ≥ date_emprunt.

Mini-quiz

  1. Différence entre PK (entité) et FK (référentielle) ? Donnez un exemple dans la bibliothèque.
  2. Donnez un exemple de contrainte de domaine utile pour annee_publication et un exemple de CHECK sur des dates d’emprunt.
  3. Expliquez l’unicité métier et citez 2 colonnes/ensembles concernés dans ce cas.
  4. Quand choisir une PK composée pour Emprunt plutôt qu’un id_emprunt technique ?
  5. Dans quel cas choisir RESTRICT plutôt que CASCADE pour Livre → Emprunt ?
À retenir. Une BDR reste saine si la PK est unique et non NULL, les FK pointent vers des lignes existantes, les valeurs respectent leur domaine, et les règles d’unicité métier évitent les doublons « réels ».