But de la séance.
Proposer un éclatement en tables (modèle relationnel). Ensuite, formaliser les concepts (relation, attribut, tuple, schéma/instance, PK, FK, etc.).

1. Éclatement du fichier plat (S1)

Rappel (extrait du fichier plat S1 « emprunts_bibliotheque.csv ») :

id_elevenom_eleveemail_eleveclasse titre_livreauteuréditeurannée_publication date_empruntdate_retour
1Martine Durandmartine.durand@mail.comT07 Le réseauJohn GrishamJCLattès202425-09-202405-10-2024
2Hermine Nyaleuhermine.nyaleu@mail.comT08 Méditations métaphysiquesRené DescartesFlammarion201120-09-202430-09-2024
4Aïcha Djérouniaicha.djerouni@mail.comT07 Belle GreeneAlexandra LapierreFlammarion202101-10-202410-10-2024

Questions

  1. Quels « sujets » distincts repérez-vous dans ces colonnes ? (indice : élève, livre, emprunt)
  2. Pour chaque sujet, quelles colonnes lui appartiennent naturellement ?
  3. Pour identifier un élève de façon univoque, que choisiriez-vous ? (exemple : id_eleve, email…)
  4. Pour identifier un livre de façon univoque, que choisiriez-vous ? (exemple : id_livre ou ISBN…)
  5. Proposez un nom de table et une liste d’attributs pour chaque sujet.
  6. Comment lier les tables entre elles ? (quels attributs communs, lien 1–N ou N–N ?)
  7. Comment éviter qu’un même élève soit enregistré deux fois pour le même livre ? (piste : clé composée ou contrainte UNIQUE)

2. Notions

Une base de données relationnelle (BDR) est un ensemble de relations qui sont implémentées à l'aide de tables (tableaux).

2.1 Relation (table) : propriétés essentielles

  • Relation : Une relation est un ensemble d'attributs (les colonnes) et de tuples (les lignes). Elle est implémentée à l'aide d'une table. (exemple : Élève, Auteur, Livre, Emprunt).
  • L'ordre des lignes/colonnes est sans importance pour le modèle.
  • L'unicité des tuples est assurée par une clé primaire (PK).

2.2 Tuple (ligne)

Un tuple est un ensemble ordonné de valeurs, chacune associée à un attribut (ou colonne) spécifique de la table.

exemple : Élève : (1, "Martine Durand", "martine.durand@mail.com", "T07")

Chaque tuple représente une ligne (on dit aussi une instance individuelle ou un enregistrement de données) dans la relation (table).

2.3 Attribut et domaine

  • Attribut : Un attribut est une caractéristique ou une propriété d'une relation. Chaque attribut représente une colonne dans une table. (exemple : email, classe, date_emprunt).
  • Domaine de valeurs : C'est l'ensemble des valeurs qu'un attribut peut avoir.

exemple : classe ∈ {T01,…,T12} ; date_emprunt au format AAAA-MM-JJ.

2.4 Clés

  • Clé candidate : Une clé candidate est un ensemble minimal d'attributs qui peut identifier de manière unique chaque enregistrement dans une table. (exemple : pour Élève : id_eleve, email, parfois num_carte).
    Une table peut avoir plusieurs clés candidates
  • Clé primaire (PK) : Une clé candidate choisie (unique, non NULL).
  • Clé composée : C'est une PK formée de plusieurs attributs (exemple : (id_eleve, id_livre, date_emprunt) si on ne crée pas id_emprunt).

2.5 Références - contraintes d’intégrité

  • Clé étrangère (FK) : C'est un attribut qui référence la clé primaire d’une autre table.
    Elle sert de lien entre deux tables en référant la clé primaire d'une autre table, garantissant la cohérence des données entre les deux tables.
  • Contrainte d’intégrité d’entité : chaque table a une clé primaire unique, non NULL.
  • Contrainte d’intégrité référentielle : toute clé étrangère (FK) pointe vers une clé primaire (PK) existante (pas d’emprunt vers un élève inexistant).
  • Contrainte de domaine : format/ensemble autorisé (exemple : liste de classes, motif de code, bornes de dates).

2.6 Cardinalités

  • Auteur — Livre : 1–N (un auteur écrit 0..N livres ; un livre a exactement 1 auteur).
  • Élève — Emprunt : 1–N (un élève a 0..N emprunts ; un emprunt concerne 1 élève).
  • Livre — Emprunt : 1–N (un livre a 0..N emprunts ; un emprunt concerne 1 livre).
  • Élève — Livre : N–N réalisé par la table d’association Emprunt.

2.7 Schéma relationnel - instance

  • Schéma : C'est la description de la structure (noms d’attributs, PK/FK, domaines, contraintes).
  • Instance : Ce sont les données présentes à un instant (les lignes actuelles).

3. Lier les tables : Schéma relationnel et contraintes

Schéma relationnel
Eleve( id_eleve, nom, email, classe )
Auteur( id_auteur, nom )
Livre( id_livre, titre, id_auteur*, genre, editeur, annee_publication )
Emprunt( id_emprunt, id_eleve*, id_livre*, date_emprunt, date_retour )

-- Intégrité d'entité :
--   PK(Eleve) = id_eleve ; PK(Auteur) = id_auteur ; PK(Livre) = id_livre ; PK(Emprunt) = id_emprunt
-- Intégrité référentielle :
--   FK(Livre.id_auteur)  → Auteur.id_auteur
--   FK(Emprunt.id_eleve) → Eleve.id_eleve
--   FK(Emprunt.id_livre) → Livre.id_livre
-- Domaines/Unicité (exemples utiles) :
--   Eleve.email UNIQUE ; Eleve.classe ∈ {T01..T12}
--   (Option) UNIQUE(Livre.titre, Livre.id_auteur, Livre.annee_publication)
--   (Option) UNIQUE(Emprunt.id_eleve, Emprunt.id_livre, Emprunt.date_emprunt)

-- Variante pédagogique sans id_emprunt :
--   Emprunt( id_eleve, id_livre, date_emprunt, date_retour )
--   PK(Emprunt) = (id_eleve, id_livre, date_emprunt)
  

Convention : PK soulignée, FK précédée d’un *.

Lecture des cardinalités

  • Auteur 1–N Livre : un auteur → 0..* livres ; un livre → 1 auteur.
  • Élève 1–N Emprunt et Livre 1–N Emprunt ; la relation Élève–Livre est N–N via Emprunt.

Activité A : De l’éclatement aux clés

  1. Listez les clés candidates de Élève et Livre; choisissez une PK et justifiez (unicité + stabilité).
  2. Repérez les FK dans Emprunt et indiquez les tables/PK référencées.
  3. Proposez une contrainte qui empêche l’enregistrement deux fois du même couple (id_eleve, id_livre) le même jour.

4. Lier les tables : Schéma relationnel et UML

Diagramme (Élève, Auteur, Livre, Emprunt) avec cardinalités 1–N et N–N
Lecture : un Auteur a 0..* livres (chaque Livre a 1 Auteur) ; un Élève a 0..* emprunts ; un Livre a 0..* emprunts.

5. Exercices

Exercice 1 : Clés candidates

Repérez les clés candidates et choisissez la PK (unicité + stabilité).

Élève : instance (extrait)
id_elevenomemailnum_carteclasse
1Martine Durandmartine.durand@mail.comC-1024T07
2Hermine Nyaleuhermine.nyaleu@mail.comC-1030T08
4Aïcha Djérouniaicha.djerouni@mail.comC-1077T07
5Paul Dupontpaul.dupont@mail.comC-1092T05
Livre : instance (extrait)
id_livretitreauteurediteurannee_publication
101Le réseauJohn GrishamJCLattès2024
104Le réseauJohn GrishamJCLattès2024
102Méditations métaphysiquesRené DescartesFlammarion2011
  • Élève : candidats = id_eleve, email, num_carte. PK conseillée : id_eleve (technique, stable). Contrainte UNIQUE sur email.
  • Livre : candidat sûr = id_livre. Le trio (titre, auteur, année) n’est pas garanti unique (exemple : rééditions).

Exercice 2 : PK composée à partir de deux FKs

Dans Emprunt, interdire qu’un élève soit enregistré deux fois pour le même livre.

Emprunt : instance (extrait)
id_eleveid_livredate_emprunt
11012024-09-25
21022024-09-20
41032024-10-01
41032024-10-01

Travail demandé

  1. Indiquez les FK et leur table/PK cible.
  2. Proposez la PK composée et justifiez.
  3. Repérez la ligne qui viole la contrainte et expliquez.
  • FK : id_eleve → Élève.id_eleve ; id_livre → Livre.id_livre.
  • PK composée : (id_eleve, id_livre) (version pédagogique) ou contrainte UNIQUE incluant la date.
  • Doublon : (4, 103, 2024-10-01) répété.

6. Quiz

  1. Donnez une différence claire entre schéma et instance.
  2. Citez 2 clés candidates pour Élève et choisissez la PK.
  3. Pourquoi Emprunt a-t-il besoin d’une clé composée ou d’une contrainte UNIQUE ?
  4. Donnez un exemple de domaine (format) pour l’attribut classe.
  5. Complétez : « Une FK dans Emprunt pointe vers la PK de .............».
  • Schéma = structure (colonnes, clés, contraintes) ; Instance = données courantes (lignes).
  • Élève : candidats = id_eleve, email… PK retenue : id_eleve. Contrainte UNIQUE sur email.
  • Pour éviter les doublons d’association, utiliser PK composée (id_eleve, id_livre) ou UNIQUE(...).
  • exemple : domaine : classe ∈ {T01…T12} ; date AAAA-MM-JJ.
  • Vers la PK de Élève et de Livre.
À retenir. On part d’un fichier plat, on identifie les sujets (Élève, Livre, Emprunt), puis on structure en tables reliées par des clés. La cohérence vient des PK/FK, des domaines et, si besoin, des clés composées.