Bases de données
Modèle relationnel
Nadime Francis
Université Gustave Eiffel
LIGM - 4B130 Copernic
[Link]@[Link]
1 / 17
Modèle relationnel
Modèle logique de données (MLD)
Définition de schémas logiques de bases de données
Basé sur les notions mathématiques d’ensemble et de relation
Objectifs
Fondements théoriques des systèmes de gestion de base de données
relationnelle (SGBDR) – relational database management systems (RDBMS)
Description formelle de l’organisation structurelle de la base
Spécification des opérations sur les données (calcul relationnel)
2 / 17
Une première table
idF titre année nomDir prénomDir annéeNaissDir
1 Alien 1979 Scott Ridley 1943
2 Reservoir Dogs 1992 Tarantino Quentin 1963
3 The Thing 1982 Carpenter John 1948
4 Volte-face 1997 Woo John 1946
5 Pulp Fiction 1995 Tarantino Quentin 1963
Quelles sont les informations structurelles de cette table ?
Quelles sont les données ?
3 / 17
Domaines, relations
Produit cartésien, attributs, enregistrements
Domaines
Ensemble de valeurs, intuitivement du même “type”
Ex : les entiers, les réels, les mots de trois lettres de l’alphabet,
l’ensemble {bleu, rouge, jaune, vert, blanc, noir}, . . .
Le produit cartésien des domaines D1 , D2 , . . . , Dn , noté
D1 × D2 × . . . × Dn , est l’ensemble de toutes les combinaisons
(a1 , a2 , . . . , an ), où a1 ∈ D1 , a2 ∈ D2 , . . . , an ∈ Dn
Ex : Si D1 = {a, b, c} et D2 = {1, 2}, alors
D1 × D2 = {(a, 1), (a, 2), (b, 1), (b, 2), (c, 1), (c, 2)}
Relations
Sous-ensemble du produit cartésien d’une liste de domaines
Représentée sous la forme d’un tableau à double entrée
En colonne : les attributs, identifiés par un nom
En ligne : les enregistrements (ou n-uplets)
Attention, les relations sont des ensembles :
pas de duplication ni d’ordre sur les enregistrements
4 / 17
Exemple : relation sur les films et leurs réalisateurs
idF titre année nomDir prénomDir annéeNaissDir
1 Alien 1979 Scott Ridley 1943
2 Reservoir Dogs 1992 Tarantino Quentin 1963
3 The Thing 1982 Carpenter John 1948
4 Volte-face 1997 Woo John 1946
5 Pulp Fiction 1995 Tarantino Quentin 1963
Relation sur entiers × chaines × entiers × chaines × chaines × entiers
Attributs : idF, titre, année, nomDir, prénomDir, annéeNaissDir
Enregistrements :
(1, Alien, 1979, Scott, Ridley, 1943),
(2, Reservoir Dogs, 1992, Tarantino, Quentin, 1963),
(3, The Thing, 1982, Carpenter, John, 1948),
(4, Volte-face, 1997, Woo, John, 1946),
(5, Pulp Fiction, 1995, Tarantino, Quentin, 1963).
5 / 17
Clefs primaires et étrangères
Clefs primaires (primary keys)
Ensemble d’attributs choisi pour identifier les enregistrements
Deux enregistrements différents ne peuvent pas avoir les mêmes
valeurs sur les attributs de la clef primaire
Les relations ont (presque) toujours une clef primaire
Clefs étrangères (foreign keys)
Ensemble d’attributs d’une relation faisant référence à la clef
primaire d’une autre relation
Les domaines des attributs doivent être identiques, les noms peuvent
être différents
6 / 17
Exemple : relation sur les films et leurs réalisateurs
idF titre année nomDir prénomDir annéeNaissDir
1 Alien 1979 Scott Ridley 1943
2 Reservoir Dogs 1992 Tarantino Quentin 1963
3 The Thing 1982 Carpenter John 1948
4 Volte-face 1997 Woo John 1946
5 Pulp Fiction 1995 Tarantino Quentin 1963
6 Terminator 1984 Cameron James 1954
7 Ghosts of Mars 2001 Carpenter John 1948
8 The Game 1997 Fincher David 1962
9 The Game 1970 Winner Michael 1935
Clef primaire : idF
Autres possibilités : idF, (titre, nomDir), (titre, année), . . .
Questions : Comment supprimer un film ? Ajouter un réalisateur ?
Modifier la date de naissance d’un réalisateur ?
7 / 17
Exemple : deux relations et une clef étrangère
Films
idF titre année idDir Réalisateurs
1 Alien 1979 1 idDir nom prénom naissance
2 Reservoir Dogs 1992 2 1 Scott Ridley 1943
3 The Thing 1982 3 2 Tarantino Quentin 1963
4 Volte-face 1997 4 3 Carpenter John 1948
5 Pulp Fiction 1995 2 4 Woo John 1946
6 Terminator 1984 5 5 Cameron James 1954
7 Ghosts of Mars 2001 3 6 Fincher David 1962
8 The Game 1997 6 7 Winner Michael 1935
9 The Game 1970 7
FK : idDir dans Films fait référence à idDir dans Réalisateurs
Questions : Comment supprimer un film ? Ajouter un réalisateur ?
Modifier la date de naissance d’un réalisateur ?
8 / 17
Schéma d’une relation, d’une base de données
Schéma d’une relation
Donnée du nom de la relation, de ses attributs (avec leurs
domaines), et de la clef primaire (soulignée)
Ex : films(idF, titre, année, idDir)
Schéma d’une base de données
Ensemble des schémas des relations de la base de données
Donnée des clefs primaires et étrangères de chaque relation
Ex : films(idF, titre, année, idDir)
réalisateurs(idDir, nom, prénom, naissance)
FK : films(idDir) fait référence à réalisateurs(idDir)
Les clefs étrangères sont parfois repérées par un #
Ex : films(idF, titre, année, #idDir)
9 / 17
Traduction schéma entité-association – modèle relationnel
Chaque type d’entité devient une relation
Chaque propriété d’une entité devient un attribut de la relation
La propriété identifiante devient la clef primaire de la relation
Film
nIMDb =⇒ film(nIMDb, titre, année)
titre
année
La traduction des types d’association et de leurs propriétés dépend
des cardinalités maximales de l’association
10 / 17
Traduction des associations : cardinalités 1 vers 1
Si les cardinalités maximales de l’association sont 1 :
L’association est intégrée à l’une ou l’autre des deux entités
L’identifiant de l’entité 2 est ajouté en clef étrangère à l’entité 1
Les attributs de l’association sont ajoutées à ceux de l’entité 1
Ex :
chauffeur(numLicence, nom, numImmat, dateDébut)
Chauffeur taxi(numImmat, modèle)
numLicence FK : chauffeur(numImmat) fait référence à taxi(numImmat)
nom
1,1 =⇒ OU
Taxi
conduit chauffeur(numLicence, nom)
numImmat
date début 0,1
modèle taxi(numImmat, modèle, numLicence, dateDébut)
FK : taxi(numLicence) fait référence à chauffeur(numLicence)
Remarque : ce cas induit un choix.
Il ne faut pas faire simultanément les deux traductions.
11 / 17
Traduction des associations : cardinalités 1 vers n
Si les cardinalités maximales de l’association sont 1 vers n :
L’association est intégrée à l’entité de cardinalité 1
L’identifiant de l’entité de cardinalité n est ajouté en clef étrangère à
l’entité de cardinalité 1
Les attributs de l’association sont ajoutées à ceux de l’entité de
cardinalité 1
Ex :
Œuvre
idO
année œuvre(idO, année, titre, idM, depuis)
titre
0,1
=⇒ musée(idM, adresse, nom)
Musée
est exposée
idM
FK : œuvre(idM) fait référence à musée(idM)
depuis 0,n adresse
nom
12 / 17
Traduction des associations : cardinalités n vers n
Si les cardinalités maximales de l’association sont n vers n :
L’association devient une nouvelle relation
Sa clef primaire se compose des identifiants des deux entités
Les attributs de l’association sont ajoutés à cette nouvelle relation
Ex :
Étudiant étudiant(numEtud, nom, prénom)
numEtud
nom
cours(idCours, intitulé)
prénom
0,n
=⇒ passeExamen(numEtud, idCours, note)
Cours
passe examen FK : passeExamen(numEtud) fait référence à étudiant(numEtud)
idCours
note 0,n
intitulé FK : passeExamen(idCours) fait référence à cours(idCours)
Remarque : chaque enregistrement de passeExamen, identifié par un
numéro étudiant et un identifiant de cours, correspond à une copie, à
laquelle est attribuée une note.
Étudiant
Copie Cours
présente concerne
Quelle différence avec le cas suivant ? numEtud
nom 0,n 1,1
idCopie
1,1 0,n
idCours
note intitulé
prénom
13 / 17
Traduction des associations : cas des arités ≥ 3
Si l’association est d’arité ≥ 3, on procède comme dans le cas précédent :
L’association devient une nouvelle relation
Sa clef primaire se compose des identifiants des entités concernées
Ex :
Service fournisseur(numFour, nom)
ref
descriptif
client(numClient, nom, prénom, adresse)
0,n service(ref, descriptif)
Client
=⇒
Fournisseur fournit(numFour, numClient, ref, prix)
fournit numClient
numFour nom
0,n prix 0,n FK : numFour, numClient et ref de fournit font référence à
nom prénom
adresse fournisseur(numFour), client(numClient) et service(ref)
Remarque : chaque enregistrement de fournit correspond à
l’abonnement, à un prix donné, d’un client à un service d’un fournisseur.
14 / 17
Traduction des associations : cas des associations récursives
Pour les associations récursives :
On procède comme dans les cas précédents, suivant les cardinalités
Il est généralement nécessaire de renommer l’un des attributs
Ce renommage se reporte dans la description des clefs étrangères
Ex :
Etudiant
0,n parraine étudiant(num, nom, prénom, numParrain)
num
nom 1,1
=⇒
FK : étudiant(numParrain) fait référence à étudiant(num)
prénom
15 / 17
Une traduction complète
Traduire le schéma entité-association suivant :
Étudiant
Groupe 1,n appartient
numEtud
idGroupe 1,1 nom
prénom
1,n
0,n
Professeur
enseigne passe examen
numProf
nom 1,n heures note
prénom
1,n 0,n
0,n
Cours
supervise 0,n requiert
idCours
1,1 0,n note min
intitulé
16 / 17
Une traduction complète : solution
Étudiant
Groupe 1,n appartient
numEtud groupe(idGroupe)
idGroupe 1,1 nom
prénom étudiant(numEtud, nom, prénom, idGroupe)
1,n
Professeur
0,n professeur(numProf, nom, prénom)
enseigne passe examen
numProf cours(idCours, intitulé, numProf)
nom 1,n heures note
prénom enseigne(numProf, idGroupe, idCours, heures)
1,n 0,n
0,n passeExamen(numEtud, idCours, note)
Cours
supervise 0,n requiert
idCours
requiert(idCours, idCoursRequis, noteMin)
1,1 0,n note min
intitulé
FK : idCours dans enseigne, passeExamen et requiert fait référence à idCours dans cours
FK : idGroupe dans étudiant et enseigne fait référence à idGroupe dans groupe
FK : numProf dans cours et enseigne fait référence à numProf dans professeur
FK : numEtud dans passeExamen fait référence à numEtud dans étudiant
FK : idCoursRequis dans requiert fait référence à idCours dans cours
17 / 17