Vous êtes sur la page 1sur 25

Bases de donnes relationnelles

Calculs relationnels

LMD relationnels algbriques (rappel)


n

Lalgbre relationnelle permet de spcifier quelles


sont les oprations excuter pour calculer le
rsultat de la requte
Limplantation des oprateurs algbriques dfinit un
moteur algbrique pour lexcution des requtes.
u Ce composant "moteur algbrique" constitue le noyau
des SGBD relationnels
u SQL est une version oriente utilisateur de lalgbre
relationnelle
u

BDA 8.2

LMD prdicatifs
n

Un langage prdicatif permet de ne spcifier que le


rsultat cherch (pas comment le calculer)
spcification des prdicats qui doivent tre vrifis par les
donnes pour former le rsultat

Ces langages sont dits prdicatifs car il sont bass


sur le calcul de prdicats (logique 1er ordre)
Un langage prdicatif est donc plus simple quune
algbre

BDA 8.3

LMD relationnels prdicatifs


n

Il existe deux types de langages prdicatifs


relationnels
Calcul de tuples : les variables dans les expressions
logiques portent sur les tuples des relations (QUEL)
x Etudiant

Calcul de domaines : les variables dans les


expressions logiques portent sur les valeurs des
attributs des tuples (QBE)
x Etudiant.nom
BDA 8.4

Calcul de tuples

Exemple de requte
n
n

Etudiant (n, nom, prnom, anne)


Requte : nom et prnom des tudiants ns aprs
1980
[nom, prnom] [anne > 1980] Etudiant
dclaration de
variable
e Etudiant
{ e.nom, e.prnom | e.anne > 1980 }
spcification du
format du
rsultat

prdicat satisfaire par


les tuples dsigns par e
BDA 8.6

Requte multi-relation
Etudiant (n, nom, prnom, anne)
Inscription (not, nomC, note1, note2)
n

Requte : no, prnom, notes des tudiants de nom


"Rochat" inscrits au cours "BD"
e Etudiant , i Inscription
{ e.no, e.prnom, i.note1, i.note2 |
e.nom = "Rochat" i.nomC = "BD" e.no = i.not }
: ET
: OU
: NON
BDA 8.7

Algbre / calcul
[no, prnom, note1, note2] (( [nom = "Rochat"] Etudiant)
*[no = not] ( [nomC ="BD"] Inscription))
ou
[no, prnom, note1, note2]
[nom = "Rochat" nomC = "BD"]
( Etudiant *[no = not] Inscription )
e Etudiant , i Inscription
{ e.no, e.prnom, i.note1, i.note2 |
e.nom = "Rochat" i.nomC = "BD" e.no = i.not }

Mme puissance d'expression


BDA 8.8

Format d'une requte


x1 R1 , x2 R2 , xi Ri Rj , .. xn Rn
dclaration des variables (tuples)
sur des relations ou des unions de relations compatibles

{ x1.A, x1.B, xi.D / fx1,x2,xn }


spcification du format du rsultat /
spcification du prdicat
fx1,x2,xn est une formule logique valide ayant pour
variables libres exactement x1 ... xi
(Les autres variables xi+1 ... xn doivent tre lies)
xi.D reprsente la valeur de l'attribut D dans le tuple xi
BDA 8.9

Formule valide
n

Formule lmentaire :
x.A oper-comparaison constante
u x.A oper-comparaison y.B
oper-comparaison : =, ? , <, >, =, =
u x et y sont des variables libres
u

Exemples
u
u

x.nom="Rochat"
x.nom = y.nom

Une formule avec variables libres ne peut pas tre


value

BDA 8.10

Formule valide (suite)


n

Formule valide :
uformule

lmentaire
uformule formule
uformule formule
u formule
u (formule)
u Si fx est une formule valide o x est une variable libre,
alors :
x fx est une formule valide o x est lie
"il existe au moins un tuple x tel que fx soit vrai"
x fx est une formule valide o x est lie
"pour tous les tuples x, fx est vrai"

BDA 8.11

Formules valides - Exemples


Etudiant (n, nom, prnom, anne)
x Etudiant
n

x.nom = "Rochat"
u

x est une variable libre

x (x.nom="Rochat")
est vrai s'il y a un Rochat dans Etudiant
u

???

x est une variable lie

x (x.anne>1980)
est vrai si tous les tudiants sont ns aprs 1980
u

x est une variable lie


BDA 8.12

Quantificateur "il existe"


n

Etudiant (n, nom, prnom, anne)

Inscription (nt, nomC, note1, note2)

Requte : nom, prnom des tudiants


ayant russi brillamment un cours
e Etudiant, i Inscription
{ e.nom, e.prnom |
i (e.no = i.not i.note1 = 6 i.note2 = 6) }

BDA 8.13

Quantificateur "pour tous"


n

Requte : nom, prnom des tudiants


ayant russi brillamment tous les cours
e Etudiant , i Inscription
{ e.nom, e.prnom |
i (e.no ? i.not (i.note1 = 6 i.note2 = 6))
i (e.no = i.not) }
Etudiant

Inscription

e
x ( A B) x (A B)

BDA 8.14

Logique du 1er ordre - Rappels


n

L'oprateur logique => (implique) ne fait pas partie


des oprateurs du calcul
f1 => f2 est quivalent : f1 f2

x fx

Quantificateurs sur un ensemble vide

est quivalent :

x (fx )

Soit xR
si R est vide , alors
u x fx = Vrai
u x fx = Faux

BDA 8.15

Rappels (suite)
n

Pour mieux comprendre


La structure du prdicat (variables libres et lies,
occurrences de relations)
u La smantique du prdicat
u

on peut crire les formules sous forme prenexe


(tous les quantificateurs en dbut de la formule)
n

Formule sous forme prenexe :


Q1x1, Q2x2, ...Qnxn (x1, ..., xn)
pas de quantificateur dans x1, ..., xn
et Q : ou

Toute formule peut se mettre sous forme prenexe


BDA 8.16

Smantique d'une requte (1)


n

xR, yS, zT
{ x.A, y.B | fx,y,z }
Faire le produit des relations variables libres
RxS

Slectionner les tuples du produit qui satisfont la


formule fx,y,z

BDA 8.17

Smantique d'une requte (2)


n

xR, yS, zT
{ x.A, y.B | fx,y,z }
Pour tout tuple, x, de R faire :
Pour tout tuple, y, de S faire :
Si fx,y,z est vrai alors ajouter <x.A,y.B> au
rsultat
fin pour tout y de S
fin pour tout x de R

NB Le test de fx,y,z implique pour chaque variable lie


(ici z) le parcours de la relation correspondante (ici
T)
BDA 8.18

Equivalence algbre / calcul


n

Toute expression d'algbre peut s'crire en calcul


u
u

chaque oprateur peut se traduire


dmonstration par rcurrence

Toute requte de calcul peut s'crire en algbre


R (A, B, C)
S (D, E, F)
u xR, yS
u { x.A, x.B }
u { x.A, y.E }
u { x.A | y (y.E=x.B)} }
u . . .

[A, B]R
[A, E] (RxS)
[A] (R*[B=E]S)

BDA 8.19

Exemples - Bars bires


n

Bire (bire, degr, couleur, pays, got)

Bar (bar, quartier)

Personne (nom, quartier, age, sexe)

Sert (bar, bire)


tel bar sert telle bire
Abu (buveur, bire, bar, jour, mois, anne, qt)
tel jour, tel buveur a bu telle bire dans tel bar en
telle quantit (qt)

BDA 8.20

Exemples (1)
n

Noms des bars frquents par Philippe ce mois ci

u Abu
{ u.bar / u.buveur="Philippe" u.mois=12
u.anne=2003 }
n

Noms des bars frquents par Philippe ce mois ci


avec les bires bues et leur pays

u Abu , i Bire
{ u.bar, u.bire, i.pays / u.buveur="Philippe"
u.mois=12 u.anne=2003 u.bire=i.bire }

BDA 8.21

Exemples (2)
n

Nom, ge et quartier des personnes qui ont


frquent au moins un bar

p Personne , u Abu
{ p.nom, p.age, p.quartier / u (p.nom=u.buveur)}
n

Nom, ge et quartier des personnes qui ont


frquent tous les bars

p Personne , a Bar , u Abu


{ p.nom, p.age, p.quartier / a u (p.nom=u.buveur
u.bar=a.bar) }

BDA 8.22

Exemples (3)
n

Nom des personnes qui n'ont jamais frquent un


bar

p Personne , u Abu
{ p.nom / u (p.nom=u.buveur) }

Nom, ge et quartier des personnes qui ont


frquent au moins un bar du quartier de la gare

p Personne , u Abu , a Bar


{ p.nom, p.age, p.quartier / a u (
a.quartier="gare" u.bar=a.bar p.nom=u.buveur)
}
BDA 8.23

Exemples (4)
n

Nom, ge et quartier des personnes qui ont


frquent tous les bars du quartier de la gare

p Personne , u Abu , a Bar


{ p.nom, p.age, p.quartier / a (a.quartier? "gare"
u (u.bar=a.bar p.nom=u.buveur) ) }
OU
p Personne , u Abu , a Bar
{ p.nom, p.age, p.quartier / a (a.quartier="gare"
u (u.bar=a.bar p.nom=u.buveur) ) }

BDA 8.24

Exemples (5)
n

Nom des personnes qui ont bu une brune et une


blonde le mme jour dans le mme bar

u1 Abu , u2 Abu , b1 Bire, b2 Bire


{ u1.buveur / u2 (u1.bar=u2.bar u1.jour=u2.jour
u1.mois=u2.mois u1.anne=u2.anne
u1.buveur=u2.buveur
b1 (u1.bire=b1.bire b1.couleur="blonde")
b2 (u2.bire=b2.bire b2.couleur="brune")
)}

BDA 8.25

Vous aimerez peut-être aussi