Le modèle relationnel est un modèle de traitement des données qui organise les informations en tables (ou relations) afin de faciliter leur stockage, leur manipulation, et leur extraction. Il a été créé dans les années 1970 par le mathématicien anglais Edgar F. « Ted » Codd qui travaillait au centre de recherche d'IBM aux États Unis.
Ce modèle constitue le fondement des bases de données relationnelles (BDR). Il est implémenté via des SGBDR (Systèmes de Gestion de Bases de Données Relationnelles) et est largement utilisé grâce à sa simplicité et sa puissance, notamment avec l'utilisation du langage SQL.
L'exemple de la gestion des prêts de livres dans une bibliothèque d'un lycée vu sous l'angle d'une BDR.
id_eleve | nom | classe | |
---|---|---|---|
1 | Martine Durand | martine.durand@mail.com | T07 |
2 | Hermine Nyaleu | hermine.nyaleu@mail.com | T08 |
3 | Léon Leroy | leon.leroy@mail.com | T03 |
4 | Aïcha Djérouni | aicha.djerouni@mail.com | T07 |
5 | Philippe Gaspar | philippe.gaspar@mail.com | T05 |
id_auteur | nom |
---|---|
1 | John Grisham |
2 | René Descartes |
3 | Victor Hugo |
4 | Alexandra Lapierre |
5 | Gaël Faye |
id_livre | titre | id_auteur | genre | éditeur | année_publication |
---|---|---|---|---|---|
1 | La chance d'une vie | 1 | roman | JCLattès | 2022 |
2 | Méditations métaphysiques | 2 | essai | Flammarion | 2011 |
3 | Les Misérables | 3 | roman | Larousse | 2007 |
4 | Belle Greene | 4 | roman | Flammarion | 2021 |
5 | Son nom sur la liste | 1 | roman | JCLattès | 2023 |
6 | Le réseau | 1 | roman | JCLattès | 2024 |
7 | Jacaranda | 5 | roman | Grasset | 2024 |
id_emprunt | id_eleve | id_livre | date_emprunt | date_retour |
---|---|---|---|---|
1 | 1 | 1 | 2024-09-15 | 2024-09-25 |
2 | 2 | 2 | 2024-09-20 | 2024-09-30 |
3 | 2 | 7 | 2024-09-20 | 2024-09-30 |
4 | 4 | 3 | 2024-09-18 | 2024-09-28 |
5 | 4 | 4 | 2024-10-01 | 2024-10-10 |
6 | 1 | 5 | 2024-09-25 | 2024-10-05 |
7 | 4 | 1 | 2024-10-01 | 2024-10-10 |
8 | 1 | 6 | 2024-09-25 | 2024-10-05 |
Définitions
1. Relation
Dans une BDR, une entité est modélisée par une relation.
Une relation est un ensemble d'attributs (colonnes) et de tuples (lignes). Elle est implémentée à l'aide d'une table.
-
Propriétés d'une relation
- Ordre des lignes : Dans le modèle relationnel, l'ordre des lignes n'a pas d'importance.
- Ordre des colonnes : L'ordre des colonnes n'est pas significatif non plus, mais chaque colonne doit avoir un nom unique dans la relation.
- Unicité des tuples : Chaque tuple doit être unique, ce qui est souvent assuré par l'utilisation d'une clé primaire.
Une BDR est définie comme une collection de relations (on dit aussi entités) qui sont implémentées à l'aide de tables (tableaux).
Dans l'exemple de la bibliothèque, on a quatre relations (tables) : Eleve, Auteur, Livre et Emprunt.
2. Tuple (ligne), clé primaire, clé candidate, contrainte d'intégrité d'entité
Un tuple est un ensemble ordonné de valeurs, chacune associée à un attribut (ou colonne) spécifique de la table.
Chaque tuple représente une ligne (on dit aussi une instance individuelle ou un enregistrement de données) dans la relation (table).
Exemples de tuple :
(1, "Martine Durand", "martine.durand@mail.com", "T07")
(3, "Les Misérables", 3, "roman", "Larousse", 2007)
-
Caractéristiques d'un Tuple
- Ensemble de valeurs : Chaque tuple contient un ensemble de valeurs pour les attributs définis dans la relation. Chaque valeur correspond à un attribut (colonne) de la table.
- Correspondance avec les attributs : Chaque valeur dans un tuple correspond à une colonne (ou attribut) spécifique de la relation.
-
Unicité :
-
Clé : Une clé est un ou plusieurs attributs (colonnes) d’une table utilisés pour identifier de manière unique chaque tuple (ou ligne) de cette table.
La clé permet de garantir qu'il n'existe pas deux enregistrements identiques en termes de valeurs dans les attributs qui composent cette clé. -
Clé candidate : Une clé candidate est un ensemble minimal d'attributs qui peut identifier de manière unique chaque enregistrement dans une table.
Une table peut avoir plusieurs clés candidates, mais une seule de ces clés est choisie comme clé primaire pour l'identification principale des enregistrements dans la table.
Dans l'exemple de la bibliothèque, Si la table n’a pas de doublon sur l'id_eleve ou email, les deux attributs sont candidats pour devenir la clé primaire.
- La contrainte d'intégrité d'entité impose que chaque ligne d'une table puisse être identifiée de manière unique, généralement par une clé primaire.
La clé primaire doit être unique et ne doit jamais contenir de valeurs NULL.
-
Clé : Une clé est un ou plusieurs attributs (colonnes) d’une table utilisés pour identifier de manière unique chaque tuple (ou ligne) de cette table.
3. Attribut (colonne), domaine de valeurs, clé étrangère, contrainte d'intégrité référentielle
Un attribut est une caractéristique ou une propriété d'une relation (table). Chaque attribut représente une colonne dans une table.
Exemples d'attribut :
id_eleve, nom, auteur, date_emprunt.
-
Caractéristiques d'un attribut
- Nom de l'attribut : Chaque attribut a un nom unique dans une table.
-
Domaine de valeurs : C'est l'ensemble des valeurs qu'un attribut peut avoir.
Il peut être vu comme un type de données (entiers, les chaînes de caractères, les dates, etc.) ou une plage spécifique de valeurs. - Valeur de l'attribut : Chaque ligne dans la table contient une valeur spécifique pour chaque attribut.
-
Une clé étrangère est un attribut ou un ensemble d'attributs d'une table qui établit une relation entre cette table et une autre table dans une BDR.
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.- La table contenant la clé étrangère est appelée table enfant.
- La table référencée (celle avec la clé primaire) est appelée table parent.
-
La contrainte d'intégrité référentielle impose que lorsque des tables sont liées par des clés étrangères, les valeurs de clé étrangère doivent correspondre à des valeurs valides de la clé primaire dans la table référencée.
4. Schéma relationnel d'une relation, schéma relationnel d'une BDR
Si une relation est définie par les attributs A1, A2, ..., An, son schéma relationnel est le suivant :
R(A1, A2, ..., An)
Dans l'exemple de la gestion des prêts de livres dans une bibliothèque :
-
Clés primaires :
- id_eleve dans la table Élève
- id_livre dans la table Livre
- id_auteur dans la table Auteur
- id_emprunt dans la table Emprunt
-
-
Clés étrangères :
- id_auteur dans la table Livre qui référence id_auteur dans Auteur
- id_eleve dans la table Emprunt qui référence id_eleve dans Élève
- id_livre dans la table Emprunt qui référence id_livre dans Livre
Ce schéma relationnel permet de lier les informations entre les élèves, les livres, les auteurs et les emprunts tout en assurant la cohérence des données.
Sachant que les clés primaires sont soulignées et les clés secondaires sont précédées d'un astérisque, il peut être représenté comme suit :
Eleve(id_eleve, nom, email, classe)
Auteur(id_auteur, nom)
Livre(id_livre, titre, *id_auteur, genre, éditeur, année_publication)
Emprunt(id_emprunt, *id_eleve, titre, *id_livre, date_emprunt, date_retour)
Une relation peut être également représentée à l'aide d'un diagramme (modèle UML ou IE).
Très souvent les attributs sont accompagnés de leur domaine de valeurs.
Eleve(id_eleve: INT, nom: VARCHAR(100), email: VARCHAR, classe VARCHAR)
Dans notre exemple :
- Lien Livre – Auteur : chaque livre est écrit par un seul auteur. Cela signifie qu’un auteur peut avoir écrit plusieurs livres, mais chaque livre est associé à un auteur unique.
- Lien Eleve - Emprunt : Chaque élève peut avoir effectué plusieurs emprunts, mais chaque emprunt est associé à un seul élève. Un élève peut également ne pas avoir d’emprunt.
- Lien Emprunt - Livre : Chaque emprunt correspond à un seul livre, mais un livre peut être emprunté plusieurs fois par différents élèves.
Ainsi, le schéma relationnel de la BDR bibliothèque est, par exemple, le suivant :
Algèbre relationnelle et SQL
L'algèbre relationnelle est un ensemble d'opérations formelles utilisées pour manipuler et interroger des relations dans une BDR.
Les opérations de base de l'algèbre relationnelle permettent de créer de nouvelles relations à partir de relations existantes.
1. Opérations sur une seule table
1.1. Projection (SELECT en SQL)
- La projection permet de sélectionner certaines colonnes (attributs) d'une relation. Elle réduit donc le nombre de colonnes pour ne conserver que les informations pertinentes.
-
Par exemple,,
Écrire une requête qui récupère les noms et les adresses email des élèves inscrits à la bibliothèque.
Traduction en requête SQL :
SELECT nom, email
FROM Eleve
Le résultat de cette requête serait : nom email Martine Durand martine.durand@mail.com Hermine Nyaleu hermine.nyaleu@mail.com Léon Leroy leon.leroy@mail.com Aïcha Djérouni aicha.djerouni@mail.com Philippe Gaspar philippe.gaspar@mail.com
1.2. Sélection (WHERE en SQL)
- L'opération de sélection demande à un SGBDR de choisir des lignes (tuples) qui répondent à certains critères logiques.
-
Par exemple,,
Écrire une requête qui récupère les coordonnées des élèves de la T07 inscrits à la bibliothèque.
Traduction en requête SQL :
SELECT *
FROM Eleve
WHERE classe = "T07";Le résultat serait id_eleve nom email classe 1 Martine Durand martine.durand@mail.com T07 4 Aïcha Djérouni aicha.djerouni@mail.com T07
1.3. Projection puis sélection (SELECT puis WHERE en SQL)
- L'opération sélectionne certaines colonnes puis choisit des lignes (tuples) qui répondent à certains critères logiques.
-
Par exemple,,
Écrire une requête qui récupère les titre et les éditeurs des livres publiés avant 2020 ?
Traduction en requête SQL :
SELECT titre, éditeur, année_publication
FROM Livre
WHERE année_publication < 2020;Le résultat serait titre éditeur année_publication Méditations métaphysiques Flammarion 2011 Les Misérables Larousse 2007
2. Opérations sur plus d'une table
2.1. Produit cartésien (CROSS JOIN en SQL)
Le produit cartésien est une opération qui permet de combiner les lignes (tuples) de deux tables en une seule, où chaque ligne (tuple) de la première table est associée à chaque ligne (tuple) de la seconde.
Il génère toutes les paires de lignes possibles à partir de deux tables.
Un exemple avec deux tables dans une BDR :
id_pays | nom_pays |
---|---|
1 | France |
2 | USA |
3 | Cameroun |
id_devise | nom_devise |
---|---|
1 | Euro |
2 | Dollar |
3 | FCFA |
Le produit cartésien de Pays et Devise va créer une nouvelle table où chaque pays est associé à chaque devise :
id_pays | nom_pays | id_devise | nom_devise |
---|---|---|---|
1 | France | 1 | Euro |
1 | France | 2 | Dollar |
1 | France | 3 | FCFA |
2 | USA | 1 | Euro |
2 | USA | 2 | Dollar |
2 | USA | 3 | FCFA |
3 | Cameroun | 1 | Euro |
3 | Cameroun | 2 | Dollar |
3 | Cameroun | 3 | FCFA |
Dans ce cas, le produit cartésien génère une table de 3 × 3 lignes ; soit 9 lignes.
Dans la pratique, le produit cartésien est toujours accompagné d'une condition : jointure.
2.2. θ-jointure (JOIN en SQL)
Une θ-jointure est une opération qui permet de combiner les données de plusieurs tables en une seule, en associant les lignes en fonction de conditions spécifiques, généralement basées sur une ou plusieurs colonnes communes.
Syntaxe
FROM table1
JOIN table2 ON table1.colonne_commune = table2.colonne_commune
JOIN table3 ON table2.colonne_commune = table3.colonne_commune
...
Exemple 1 : Écrire une requête qui récupère les titres, les éditeurs et l'année de publication des livres écrits par John Grisham.
FROM Auteur
JOIN Livre ON auteur.id_auteur = livre.id_auteur;
nom | titre | éditeur | année_publication |
---|---|---|---|
John Grisham | La chance d'une vie | JCLattès | 2022 |
John Grisham | Son nom sur la liste | JCLattès | 2023 |
John Grisham | Le réseau | JCLattès | 2024 |
FROM Eleve
JOIN Emprunt ON Eleve.id_eleve = Emprunt.id_eleve
JOIN Livre ON Emprunt.id_livre = Livre.id_livre;
nom | classe | titre | date_emprunt | date_retour |
---|---|---|---|---|
Martine Durand | La chance d'une vie | T07 | 2024-09-15 | 2024-09-25 |
Hermine Nyaleu | Méditations métaphysiques | T08 | 2024-09-20 | 2024-09-30 |
Hermine Nyaleu | Jacaranda | T08 | 2024-09-20 | 2024-09-30 |
Aïcha Djérouni | Les Misérables | T07 | 2024-09-18 | 2024-09-28 |
Aïcha Djérouni | Belle Greene | T07 | 2024-10-01 | 2024-10-10 |
Martine Durand | Son nom sur la liste | T07 | 2024-09-25 | 2024-10-05 |
Aïcha Djérouni | La chance d'une vie | T07 | 2024-10-01 | 2024-10-10 |
Martine Durand | Le réseau | T07 | 2024-09-25 | 2024-10-05 |
Une 2e syntaxe possible
FROM liste_de_tables
WHERE condition
Exemple 1, s'écrit alors :
FROM auteur, livre
WHERE auteur.id_auteur = livre.id_auteur;
Et l'exemple 2, s'écrit :
FROM eleve, livre, emprunt
WHERE eleve.id_eleve = emprunt.id_eleve AND emprunt.id_livre = livre.id_livre;
2.3. Fonctions d'agrégation (COUNT, SUM, MAX, MIN, AVG en SQL)
Exemple 1 : Écrire une requête qui récupère le nombre total d'inscrits à la bibliothèque (avec renommage).
FROM Eleve
Exemple 2 : Écrire une requête qui renvoie le nombre moyen de prêts (avec renommage).
FROM Emprunt
Commandes de modification de la BDR
1. Insertion d'un nouvel enregistrement
VALUES(valeur1, valeur2, valeur3, ...);
2. Suppression d'un enregistrement
WHERE condition;
3. Modification d'un enregistrement existant
SET colonne1 = nouvelle_valeur;
WHERE condition;