Vous êtes sur la page 1sur 21

L2A

Semestre 4
Mehdi Benzine
Introduction
L'algèbre relationnelle est un langage algébrique.
Exprime le comment. A inspiré le langage SQL.

Le calcul relationnel est un langage prédicatif (à base de prédicats logiques).


Exprime le quoi. A inspiré le langage QBE (Query By Example), DATALOG…

Le calcul relationnel se base sur la logique du premier ordre (prédicats). Utilise, pour
exprimer des formules logiques, les connecteurs et (), ou (), non ()et l'implication ,
ainsi que les quantificateurs  et .

Répondre à une requête, sur une base de données, consiste à énoncer une formule logique.
Les données vérifiant cette formule constituent le résultat de la requête.

Le calcul relationnel peut être


A variables tuples
A variables domaines

2
Schéma Exemple
Projet (Num_Projet, Description, Date_Début, Date_Fin, Budget)

Employé (Num_Employé, Nom, Prénom, Date_Naissance, Fonction,


Est_Cadre)

Affectation (Num_Employé, Num_Projet, Debut_Affect, Fin_Affect,


Supérieur)

3
Relation Projet
Num_Projet Description Date_Début Date_Fin Budget
103 Mise en place d'un réseau 12/09/2010 05/12/2010 39000.00
intranet
122 Développement d'une 07/01/2011 13/05/2011
application de gestion 86000.00
133 Réalisation d'un CD-ROM 04/11/2011 02/07/2012 15000.00
interactif de formation
208 Développement d'un site 15/06/2011 06/03/2012 50000.00
internet

4
Relation Employé
Num_Employé Nom Prénom Date_Naissance Fonction Est_Cadre
1001 Belaid Toufik 12/05/1965 Concepteur true
1009 Touati Rachid 13/09/1941 Chef de projet true
1023 Kadri Amine 23/11/1970 Développeur true
1053 Djabi Fatiha 04/06/1980 Analyste false
1026 Bouras Kamel 19/04/1968 Administrateur true
1005 Djabi Fatiha 22/08/1976 Développeur false

5
Relation Affectation
Num_Employé Num_Projet Début_Affect Fin_Affect Supérieur
1009 122 07/03/2011 13/11/2011 NULL
1001 122 08/03/2011 28/06/2011 1009
1023 122 15/06/2011 04/10/2011 1009
1009 103 12/09/2010 01/11/2010 NULL
1001 208 15/06/2011 12/10/2011 1009
1009 208 15/06/2011 06/03/2012 NULL
1023 208 01/09/2011 17/12/2011 1009
1009 133 06/11/2011 19/02/2012 NULL
1053 208 01/09/2011 06/03/2012 1026
1026 208 19/08/2011 06/03/2012 1009

6
Calcul relationnel à variables tuples
Les variables utilisées dans les formules logiques sont
des tuples.

{t/ Employé(t)}
t est une variable tuple.
Employé(t): t est un tuple de la relation Employé.

Cette formule sélectionne les tuples t tels que t est un


tuple de la relation Employé.

7
Calcul relationnel à variables tuples
{t/ Employé(t)  t.Fonction = 'Concepteur'}
t.Fonction est la valeur de l'attribut Fonction du tuple t.

Cette formule sélectionne les concepteurs.

{t.Nom, t.Prénom/ Employé(t)  t.Fonction =


'Concepteur'  t.Est_Cadre = true}

Cette formule sélectionne les noms et prénoms des


concepteurs.

8
Expression des opérateurs
algébriques
Les opérateurs de l'algèbre relationnelle peuvent être
exprimés par des formules logiques.
 Sélection: {t/ Employé(t)  t.Fonction='Concepteur'}
 Projection: {t.Nom, t.Prénom/ Employé(t)}
 Union: {t / Employé(t)  Retraité(t)}
 Intersection: {t / Employé(t)  Retraité(t)}
 Différence: {t / Employé(t)  Retraité(t)}

9
Expression des opérateurs
algébriques
Produit cartésien: {t/  u,  v, Projet(u)  Affectation(v)
 t.Num_Projet = u.Num_Projet  t.Description =
u.Description  t.Date_début = u.Date_Début 
t.Date_Fin = u.Date_Fin  t.Budget = u.Budget 
t.Num_Employé = v.Num_Employé  t.Num_Projet =
v.Num_Projet  t.Début_Affect = v.Début_Affect 
t.Fin_Affect = v.Fin_Affect  t.Supérieur = v.Supérieur}

10
Expression des opérateurs
algébriques
Jointure naturelle: {t/  u,  v, Projet(u)  Affectation(v)
 u.Num_Projet = v.Num_Projet
 t.Num_Projet = u.Num_Projet  t.Description =
u.Description  t.Date_début = u.Date_Début 
t.Date_Fin = u.Date_Fin  t.Budget = u.Budget 
t.Num_Employé = v.Num_Employé  t.Début_Affect =
v.Début_Affect  t.Fin_Affect = v.Fin_Affect  t.Supérieur
= v.Supérieur}

11
Expression des opérateurs
algébriques
R = {t.Num_Employé, t.Num_Projet/ Affectation(t)}
R: relation contenant les numéros d'employés et les projets aux
quels ils participent.
S = {t.Num_Projet/ Projet(t)}
S: relation contenant uniquement les numéros de projets.

 Division: R  S = {t/ u, S(u)( v, R(v) 


t.Num_Employé = u.Num_Employé 
t.Num_Employé = v.Num_Employé 
u.Num_Projet = v.Num_Projet)}

t sont les employés pour lesquels quelque soit le projet u , il existe


une affectation v de l'employé t à ce projet.

12
Exemple de division
(Num_Employé, Num_Projet) ÷ (Num_Projet)
 Division: R  S = {t/ u, S(u)( v, R(v) 
t.Num_Employé = u.Num_Employé 
t.Num_Employé = v.Num_Employé 
u.Num_Projet = v.Num_Projet)}
Num_Employé Num_Projet
1009 122 Num_Projet
1001 122 103
1023 122 Num_Employé
1009 103 ÷ 122
= 1009
133
1001 208
1009 208 208
1023 208
1009 133
1053 208
1026 208 13
Calcul relationnel à variables
domaines
 Chaque variable prend ses valeurs dans le domaine de
valeurs de l'attribut associé.
{<n, d, dd, df, b> / Projet(<n, d, dd, df, b>)}
n a pour type le type de l'attribut Num_Projet.
d a pour type le type de l'attribut Description.
dd a pour type le type de l'attribut Date_Debut.
df a pour type le type de l'attribut Date_Fin.
b a pour type le type de l'attribut Budget.

14
Expression des opérateurs
algébriques
 Sélection: {<n, d, dd, df, b> / Projet(<n, d, dd, df, b>)
 b > 50000.00}
 Projection: {<d, dd, df> / n, b, Projet(<n, d, dd, df,
b>) }
 Union: {<ne, n, p, d, f, e> / Employé(< ne, n, p, d, f,
e>)  Retraité(< ne, n, p, d, f, e >)}
 Intersection: {<ne, n, p, d, f, e> / Employé(< ne, n, p, d,
f, e>)  Retraité(< ne, n, p, d, f, e >)}
 Différence: {<ne, n, p, d, f, e> / Employé(< ne, n, p, d, f,
e>)  Retraité(< ne, n, p, d, f, e >)}

15
Expression des opérateurs
algébriques
 Produit cartésien: {<n, d, dd, df, b, ne, np, da, fa, s> /
Projet(<n, d, dd, df, b>)  Affectation(<ne, np, da, fa,
s>)}

 Jointure naturelle: {<n, d, dd, df, b, ne, da, fa, s> /


Projet(<n, d, dd, df, b>)  Affectation(<ne, n, da, fa,
s>)}

16
Expression des opérateurs
algébriques
R = {<ne, np> / da, fa, s, Affectation(<ne, np, da, fa,
s>)}
S = {<n> / d, dd, df, b, Projet(<n, d, dd, df, b>)}

 RS = {<ne> / np, S(<np>)  R(<ne, np>)}

17
Conclusion
Il est possible de démontrer que:
 L'algèbre relationnelle
 Le calcul relationnel à variables tuples
 Le calcul relationnel à variables domaines
sont des langages équivalents (permettent d'exprimer les
mêmes requêtes).

18
Exercice
1. Quel sont les noms et prénoms des développeurs ?
2. Quels sont les noms et prénoms des cadres ?
3. Quels sont les noms, prénoms et dates de naissance des employés
nés avant 1975 ?
4. Quels sont les noms, prénoms et dates naissance des employés
nés entre 1970 et 1979 ?
5. Quels sont les Numéros des projets sur lesquels travaille l'employé
'Belaid' ?
6. Quelle est la date de début des projets sur lesquels a travaillé
l'employé 'Kadri' ?
7. Quel est le nom et le prénom de l'employé responsable du projet
122 ? (Supérieur est NULL)
8. Quel est le nom et le prénom des employés ayant travaillé sur des
projets dont le budget est supérieur à 70000.00 DA ?

19
Corrigé (Calcul relationnel à
variables tuples)
1. {t.Nom, t.Prénom/ Employé(t)  t.Fonction = 'Développeur'}

2. {t.Nom, t.Prénom/ Employé(t)  t.Est_Cadre = true}

3. {t.Nom, t.Prénom, t.Date_Naissance/ Employé(t) 


t.Date_Naissance < '01/01/1975'}

4. {t.Nom, t.Prénom, t.Date_Naissance/ Employé(t) 


t.Date_Naissance >= '01/01/1970'  t.Date_Naissance <=
'31/12/1979'}

5. {t.Num_Projet/u, v, Employé(u)  Affectation(v) 


u.Num_Employé = v.Num_Employé  t.Num_Projet =
v.Num_Projet  u.Nom = 'Belaid'}
20
Corrigé (Calcul relationnel à
variables tuples)
6. {t.Date_Debut/u, v, w, Employé(u)  Affectation(v)  Projet(w)
 u.Num_Employé = v.Num_Employé  v.Num_Projet =
w.Num_Projet  t.Date_Début = w.Date_Début  u.Nom = 'Kadri'}

7. {t.Nom, t.Prénom/ u, v, Employé(u)  Affectation(v) 


u.Num_Employé = v.Num_Employé  t.Nom = u.Nom  t.Prénom =
u.Prénom  v.Supérieur est NULL}

8. {t.Nom, t.Prénom/ u, v, w, Employé(u)  Affectation(v) 


Projet(w)  u.Num_Employé = v.Num_Employé 
v.Num_Projet = w.Num_Projet  t.Nom = u.Nom  t.Prénom =
u.Prénom  w.Budget > 70000.00}

21

Vous aimerez peut-être aussi