Alg`ebre relationnelle - Calcul relationnel Mod`ele

Transcription

Alg`ebre relationnelle - Calcul relationnel Mod`ele
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Modèle relationnel
2 / 35
1 / 35
Modèle relationnel
!
Modèle défini par Codd en 1970
!
!
Algèbre relationnelle - Calcul relationnel
!
Par la suite, enrichissement du modèle
!
!
Anne-Cécile Caron
!
!
Logique et Modélisation
update
requêtes avec opérateurs arithmétiques, opérateurs d’aggrégation
contraintes d’intégrités
Ce modèle est défini dans divers formalismes, car il est connecté à
divers domaines de l’informatique
!
Lundi 2 novembre 2009
!
!
Algèbre relationnelle - Calcul relationnel
Modèle de données spécifique où les données sont des relations.
Algèbre permettant de spécifier des requêtes
Les bases de données
La logique
La programmation logique
Algèbre relationnelle - Calcul relationnel
Modèle relationnel
Modèle relationnel
3 / 35
Relation
Point de vue ”théorie des ensembles”.
!
!
Une relation est un sous-ensemble fini du produit cartésien d’un ou
plusieurs domaines R ⊆ Dom1 × . . . × Domk
4 / 35
Relation
Point de vue ”logique” conservé par la suite
!
On considère des ensembles infinis dénombrables disjoints :
!
Les éléments (x1 , · · · , xk ) d’une relation d’arité k sont appelés tuples. xi est
la ième composante du tuple.
!
!
Atts un ensemble d’attributs, on considère pour simplifier un ordre total
≤Atts sur Atts.
Dom un ensemble de constantes,
Rels un ensemble de noms de relations.
Une relation est souvent vue comme une table, où chaque ligne est un tuple
et chaque colonne est une composante. Dans ce cas, on nomme les
colonnes par des Attributs
!
A chaque attribut A de Atts, on associe un domaine Dom(A ) inclus dans
Dom.
!
La liste des attributs d’une relation est appelé schéma de la relation.
!
!
Si R relation d’arité k et A1 , · · · , Ak les attributs de R, alors on note
R [A1 · · · Ak ] le schema de la relation R.
Fonction att qui associe à chaque nom de relation R l’ensemble de ses
attributs, sous-ensemble fini de Atts.
!
L’arité d’une relation R est donc | att(R ) |.
!
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Modèle relationnel
Modèle relationnel
5 / 35
Schéma et instance
!
Un schéma relationnel est un nom de relation R.
!
Un tuple est une application de att(R ) dans Dom, qui envoie tout A ∈ att(R )
sur un élément de Dom(A ). On le note %A1 : v1 , · · · , An : vn &.
!
Exemple
On considère les relations r1 et r2 de schémas R1 et R2 .
att(R1 ) = {A , B , C } et att(R2 ) = {D , E , F }. Le domaine
Dom ⊇ {a , b , c , . . . , z }.
A B C
D E F
a b c
r1 =
r2 = b g a
d a
f
d a f
c b d
Une instance d’un schéma relationnel R (ou relation) est un ensemble fini
de tuples sur R.
!
Un schéma de base de données est un ensemble fini de schémas
relationnels
!
Une instance d’un schéma S (ou base de données) est un ensemble
d’instances des schémas relationnels de S.
!
Soit S un schéma de base de données, et I une instance de ce schéma. Par
définition, I est l’union des instances des schémas relationnels de S. Si R
est un nom de relation de S, on note I(R ) l’instance de R dans I.
!
On note aDom(I) le domaine actif de l’instance I, c’est à dire l’ensemble des
constantes de Dom qui apparaissent dans I. Dom peut être infini, par contre
aDom(I) est fini.
6 / 35
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Modèle relationnel
Requêtes conjonctives et algèbre SPJR
7 / 35
Remarques
!
Une relation est un ensemble fini de tuples.
!
Dans la première formulation, on attache de l’importance à la
position des composantes du tuple.
!
Dans la seconde formulation, on attache de l’importance au nom
des attributs, pas à leur position (comme les types record en
programmation). On utilise l’ordre ≤ Atts pour présenter les tuples
toujours de la même manière, par ordre croissant des attributs.
Par la suite, nous allons étudier différents langages de requêtes, basés
sur la logique du premier ordre, ou sur l’algèbre relationnelle.
8 / 35
Requêtes conjonctives
cf cours de Joachim Niehren sur FO et les bases de données
Une requête conjonctive est de la forme :
avec
!
!
!
{e1 , . . . , em | ϕ}
ϕ formule conjonctive sur S (uniquement conjonction, et les
variables non libres sont quantifiées existentiellement),
%e1 , . . . , em & tuple libre, et
les variables de %e1 , . . . , em & sont exactement free(ϕ).
Pour indiquer explicitement la signature de la sortie, on utilise la notation :
{%e1 , . . . , em & : A1 , . . . , Am | ϕ}
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
9 / 35
Exemple
10 / 35
Propriétés
Proposition
q = {x2 , x3 | ∃x1 , ∃x4 , R1 (x1 , b , x2 ) ∧ R2 (x3 , x1 , x4 )}
A
a
instance I : r1 =
d
c
B
b
a
b
C
c
f
d
D
b
r2 = d
c
c
E
a
a
d
g
Les requêtes du calcul conjonctif sont monotones et satisfiables.
F
c
f
e
a
!
!
q(I) = {%c , b &, %c , d &}
Algèbre relationnelle - Calcul relationnel
Monotonicité : si q requête du calcul conjonctif sur S et I et J
instances de S telles que I ⊆ J, alors q(I) ⊆ q(J ).
Satisfiabilité : si q requête sur S, il existe I instance de S telle que
q(I) non vide.
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
11 / 35
Et l’algèbre ?
!
!
!
algèbre SPJR : opérateurs de sélection, projection, jointure et
renommage.
Une expression SPJR sur le schéma S = {R1 , . . . , Rn } est une
expression engendrée par la grammaire :
E ::= R1 | · · · | Rn
noms de relations
| {%A : a &}
singleton unaire
| σA =a (E ) | σA =B (E ) sélection
A , B ∈ Atts ,
| πX (E )
projection
| (E ! E )
jointure naturelle
| ρA →B (E )
renommage
a ∈ Dom, X ⊆ att(E )
Une expression SPJR définit une requête, puisque chaque
opérateur a comme opérandes des relations et comme résultat une
relation.
12 / 35
Opérateurs
!
Sélection :
!
!
!
!
σA =a (r ) = {t | t ∈ r ∧ (t .A = a )}, A ∈ att(r ), a ∈ Dom.
σA =B (r ) = {t | t ∈ r ∧ (t .A = t .B )}, A ∈ att(r ), B ∈ att(r ).
on peut enrichir la syntaxe de l’algèbre SPJR sans changer son
pouvoir d’expressivité, en utilisant des sélections de la forme σF où F
est une conjonction de formules atomiques A = a ou A = B.
Projection :
Soit r une relation et X un ensemble d’attributs tel que X ⊆ att(r ).
πX (r ) = {t .X | t ∈ r }
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
13 / 35
Opérateurs
!
!
!
!
!
Exemple
A
a
r1 =
d
c
Jointure naturelle :
r !s
= {t |
(att(t ) = att(r ) ∪ att(s ))
∧(t .att(r ) ∈ r )
∧(t .att(s ) ∈ s )}
!
B
b
a
b
C
c
f
d
A
σB =b (r1 ) = a
c
L’opérateur ! est associatif, commutatif, et a comme élément neutre
{%&}, la relation 0-aire non vide.
Quand att(r1 ) = att(r2 ), alors r1 ! r2 = r1 ∩ r2
Quand att(r1 ) ∩ att(r2 ) = ∅ alors r1 ! r2 = r1 × r2
A
a
πAC (r1 ) =
d
c
Renommage :
!
14 / 35
ρA →B (r ), A ∈ att(r ), B " att(r ) renomme l’attribut A en B, sans
changer les valeurs des tuples de r.
Par extension, on peut renommer un ensemble d’attributs X en un
ensemble d’attributs Y .
Algèbre relationnelle - Calcul relationnel
D
r2 = b
d
B
b
b
C
c
f
d
C
c
d
E
g
a
F
a
f
A
ρDEF →ABC (r2 ) = b
d
A
r1 ! ρD →B (r2 ) = a
c
B
b
b
B
g
a
C
c
d
C
a
f
E
g
g
F
a
a
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
15 / 35
Algèbre SPJR et requêtes conjonctives
!
Les expressions SPJR définissent des requêtes qui ne sont pas
toujours satisfiables :
σA =a (σA =b (R ))
!
16 / 35
En pratique
!
l’algèbre SPJR permet d’exprimer un bon nombre de requêtes SQL
!
L’analyseur de requête SQL traduit la requête en expression
algébrique (pas uniquement algèbre SPJR)
!
La représentation algébrique est appelée plan logique de la requête.
Il est réécrit afin de trouver un plan logique équivalent qui devrait
prendre moins de temps à l’exécution (l’objectif est de ne pas avoir
de résultats intermédiaires trop gros)
!
A partir du plan logique, on génère un plan physique d’exécution. Là
encore, il faut trouver le plan le moins coûteux (estimation !). Pour
chaque opérateur, on choisit un algorithme d’évaluation (on tient
compte de la taille des données, de l’existence ou non d’index, . . .)
!
Exécution du plan physique par le moteur d’exécution des requêtes.
On appelle algèbre SPJR satisfiable l’ensemble des expressions de
l’algèbre SPJR qui sont satisfiables.
Théorème
L’algèbre SPJR satisfiable et l’ensemble des requêtes conjonctives sont
équivalents
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
17 / 35
Exemple
18 / 35
Exemple
Tables StarsIn(title, year, starName)
!
Plan logique :
Movie(title, year, length, studioName)
πstarName ,studioName
πstarName ,studioName
!
!
Vue create view MovieOf1996 as
select * from Movie
where year = 1996
σyear =1996 (Movie )
σyear =1996
Requête select starName, studioName
Movie
from MovieOf1996 natural join StarsIn
!
Algèbre relationnelle - Calcul relationnel
StarsIn
−→
σyear =1996
σyear =1996
Movie
StarsIn
Plan physique : Si (title, year) clé primaire de Movie et
(title, year) clé étrangère dans StarIn vers Movie, alors
utilisation de l’index de Movie dans l’évaluation de la jointure.
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
19 / 35
Evaluation des requêtes conjonctives
!
Dans le cas général, il faut un temps exponentiel en fonction de la
taille de la données, la taille de la requête, la taille du résultat, pour
évaluer une requête conjonctive.
!
Dans le pire des cas, on calcule un résultat intermédiaire de taille
exponentielle même si le résultat de la requête est vide.
!
Vous avez vu dans un cours précédent (sur FO) que lorsque les
requêtes conjonctives sont acycliques, l’évaluation est plus facile.
20 / 35
Exemple
Soient les schémas relationnels Ri [Ai Ai +1 ], i ∈ [1, n − 1]. Soient les instances Ii
de ces schémas relationnels :
Ai Ai +1
0
a
0
b
1
a
1
b
a
0
a
1
b
0
b
1
Soit le schéma relationnel Rn [An A1 ], et In instance de Rn contient les mêmes
tuples que les autres Ii .
!
R1 ! . . . ! Rk pour k < n contient | R1 | ×2k −1 = 2k +2 tuples résultats. Cette
requête est acyclique
!
R1 ! . . . ! Rn est vide pour n impair, il faut pourtant calculer
R1 ! . . . ! Rn−1 qui contient 2n+1 tuples. Cette requête est cyclique
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives acycliques
21 / 35
Requêtes conjonctives acycliques
!
Requêtes conjonctives acycliques
Algorithme de décision
Pour simplifier, on s’intéresse aux requêtes conjonctives de la forme
!
πX (R1 ! . . . ! Rn )
!
!
!
Un hypergraphe est une paire (V , F ), V ensemble de sommets, F
ensemble d’hyperarcs.
L’hypergraphe d’une requête πX (R1 ! . . . ! Rn ) a pour sommets
l’ensemble des attributs des Ri et pour hyperarcs les schémas
relationnels Ri . Finalement, on ne s’intéresse pas aux attributs de
projections, mais uniquement aux relations. On parlera par la suite de
schéma acyclique, pour un schéma R = (R1 , . . . , Rn ).
algo GYO
!
!
!
Une requête (ou un schéma) est acyclique si l’hypergraphe associé
est acyclique.
!
!
Algèbre relationnelle - Calcul relationnel
F est acyclique ssi la sortie de l’algorithme GYO est (∅, ∅).
Algorithme polynomial en la taille de F .
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives acycliques
23 / 35
Exemples
Requêtes conjonctives acycliques
Arbre de jointure
R = R1 [AB ], R2 [BC ], R3 [AC ] cyclique
!
Un arbre de jointure d’un schéma R est un arbre T = (R, E ) tel que
!
A
!
C
B
!
!
R = S1 [ABC ], S2 [CDE ], S3 [AFE ], S4 [ACE ] acyclique
A
!
B
!
F
D
!
E
chaque arc (R,R’) est étiqueté par l’ensemble des attributs de R ∩ R / .
pour chaque paire (R , R / ) de noeuds distincts, pour chaque
A ∈ R ∩ R / , chaque arc le long de l’unique chemin entre R et R /
contient A .
Un schéma R est acyclique ssi il possède un arbre de jointure.
L’algorithme GYO pour R = (R1 , . . . , Rn ) permet de construire un
arbre de jointure :
!
C
Entrée : hypergraphe F = (V , F )
Sortie : Hypergraphe contenant un sous-ensemble des hyperarcs de
F.
Algorithme : Tant que F contient au moins une oreille
1. Choisir une oreille f de façon non-déterministe
2. Soit F := (V / , F − {f }), où V / = ∪(F − {f }.
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
!
En 1979, Graham d’une part, et l’équipe Yu-Ozsoyoglu d’autre part ont
défini indépendamment un algorithme pour décider si un hypergraphe est
acyclique.
Definition Une oreille d’un hypergraphe F = (V , F ) est un hyperarc f tel que pour un
hyperarc f / distinct de f , aucun sommet de (f − f / ) n’apparaı̂t dans un autre
hyperarc. f / est appelé témoin de l’oreille f .
On peut représenter une requête par un hypergraphe :
!
22 / 35
Tout Ri est un noeud.
A chaque pas de boucle, l’oreille Ri est attaché à son témoin Rj .
Comme les oreilles sont enlevées de l’hypergraphe au fur et à mesure,
on construit bien un arbre (bottom-up).
24 / 35
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives et algèbre SPJR
Requêtes conjonctives acycliques
25 / 35
Exemple
Requêtes conjonctives acycliques
Evaluation d’une requête ACQ
R = S1 [ABC ], S2 [CDE ], S3 [AFE ], S4 [ACE ]
Algorithme de Yannakakis [81].
S2 [CDE ]
CE
!
Entrée : requête ACQ q = πX (R1 ! . . . ! Rn )
!
On construit un arbre de jointure T pour la requête q (application de
l’algo GYO).
!
On calcule une semi-jointure entre les instances Ij et Ik des noeuds
Rj , Rk père-fils de l’arbre, en montant et en descendant (donc deux
semi-jointure par arc de l’arbre). Pour ça, chaque instance est triée
plusieurs fois, en fonction des attributs communs avec son père ou
avec ses fils. On fait au total 2 × n tris, où n est le nombre d’arcs.
S4 [ACE ]
AC
AE
!
S1 [ABC ]
S3 [AFE ]
Algèbre relationnelle - Calcul relationnel
Il reste à reconstruire les tuples résultats à partir des attributs de
projection.
Algèbre relationnelle - Calcul relationnel
Requêtes conjonctives et algèbre SPJR
Algèbre et Calcul relationnel
Requêtes conjonctives acycliques
27 / 35
Exemple
28 / 35
Ajout de l’union et de la négation
R = R1 [ABC ], R2 [BCDE ], R3 [BCDG ], R4 [CDEF ] ;
q = πAE (R1 ! R2 ! R3 ! R4 ).
En montant :
R2 := R2 # R1
R2 := R2 # R3
R4 := R4 # R2
R4 [CDEF ]
I4 :
2
3
3
!
3
1
1
0
0
0
!
1
2
3
Algèbre : on ajoute l’opérateur d’union, et l’opérateur de différence
(pas le complément !). L’ensemble des opérateurs {σ, π, !, ρ, ∪, −}
forme l’algèbre relationnelle.
Logique :
!
!
CDE
I2 :
3
1
1
2
2
3
1
3
1
0
0
0
I1 :
1
1
1
3
2
2
3
2
En descendant :
R2 := R2 # R4
R3 := R3 # R2
R1 := R1 # R2
R2 [BCDE ]
BC
0
3
1
0
26 / 35
R1 [ABC ]
!
BCD
R3 [BCDG ]
I3 :
1
1
1
3
2
3
3
2
3
1
1
1
2
0
1
4
On considère les formules FO, avec les quantificateurs et les
opérateurs habituel (cf cours sur FO), et les symboles de relations.
Il faut imposer des restrictions pour que les requêtes définissent bien
une relation (donc un ensemble fini).
En bases de données, l’ensemble des formules de la logique du
premier ordre pour des structures relationnelles qui ne définit que des
ensembles finis de tuples s’appelle calcul relationnel.
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Algèbre et Calcul relationnel
Algèbre et Calcul relationnel
29 / 35
Opérateur d’union
Ajout de la négation
algèbre R ∪ S telles que att(R ) = att(S ).
A B C
a b c
f
r1 ∪ ρDEF →ABC (r2 ) = d a
c b d
b g a
Algèbre opérateur de différence :
si R et S ont les mêmes attributs
r − s = {t | t ∈ r ∧ t " s }
A
r1 − ρDEF →ABC (r2 ) = a
c
FOL Opérateur ∨. L’ajout de ce seul opérateur peut poser problème :
B
b
b
C
c
d
FOL opérateur de négation (¬).
L’ajout de la négation implique l’ajout de l’union (¬(x ∧ y ) = x ∨ y ), de
l’implication (x → y = ¬x ∨ y ), du quantificateur ∀ (négation de ∃).
q = {x , y , z | R (x , y ) ∨ R (y , z )}
q(I) =
30 / 35
{%vx , vy , vz & |% vx , vy & ∈ I(R ), vz ∈ Dom}
∪{%vx , vy , vz & |% vy , vz & ∈ I(R ), vx ∈ Dom}
Donc q(I) est un ensemble infini ... ce n’est donc pas une relation ! q
n’est pas une requête sûre, elle ne fait pas partie du calcul
relationnel.
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Algèbre et Calcul relationnel
Algèbre et Calcul relationnel
31 / 35
Propriétés de l’algèbre relationnelle
!
!
L’ensemble des opérateurs {σ, π, !, ρ, ∪, −} est non-redondant.
L’algèbre relationnelle est close par composition
!
Une requête de l’algèbre relationnelle n’est pas toujours monotone
!
Une requête de l’algèbre relationnelle n’est pas toujours satisfiable
32 / 35
Sureté des formules FO
Safety
!
En théorie des modèles finis, on interprète les formules dans un
domaine fini.
!
En théorie des bases de données, Dom est infini mais pour une
instance I fixée, aDom(I) est fini.
!
Sémantique habituelle du calcul des prédicats : on interprète les
variables dans Dom, pas dans aDom(I).
Exemples :
!
!
!
q1 : {%x & : name | ¬Frequents(x , ”Le Mondrian”)}
q2 : {%xd , yb & : drinker, bar |
Frequents(xd , ”Le Mondrian”) ∨ Frequents(”Joe”, yb )}
q1 et q2 ont des réponses infinies lorsqu’on considère la sémantique
habituelle, c’est à dire que les variables prennent leurs valeurs dans
Dom.
Algèbre relationnelle - Calcul relationnel
Algèbre relationnelle - Calcul relationnel
Algèbre et Calcul relationnel
Algèbre et Calcul relationnel
33 / 35
Sureté (suite)
!
Exemple
(Ullman et Vianu.)
Definition
Une formule est sûre si son évaluation relativement à Dom est toujours
finie, quelle que soit l’instance I considérée.
!
q1 et q2 du transparent précédent ne sont donc pas sûres
!
Cette propriété est malheureusement indécidable.
Pour éviter les problèmes liés à l’interprétation, on a deux solutions :
!
!
34 / 35
!
!
Schéma : Serves(bar,beer), Frequents(drinker, bar)
Requête : ”Trouver tous les buveurs qui ne fréquentent que des bars
servant de la Coors”.
!
{%d & : drinker | ∀b (Frequents(d , b ) → Serves(b , Coors))}
Se limiter à l’ensemble des formules sûres dont le résultat ne dépend
pas du domaine d’interprétation. La formule suivante est sûre mais
son résultat dépend du domaine d’interprétation :
!
!
Interpréter les formules sûres sur le domaine actif aDom(q) ∪ aDom(I).
Algèbre et Calcul relationnel
35 / 35
!
Les formules conjonctives ont des avantages : elles sont toujours
sûres, et toujours satisfiables. Leur évaluation est exponentielle en
fonction de la taille de l’instance, de la requête et du résultat.
!
Les formules conjonctives acycliques sont plus faciles à évaluer :
Yannakakis a donné en 1981 un algorithme polynomial en fonction
de la taille de l’instance, de la requête et du résultat.
!
L’ajout de l’union ou de la négation pose des problèmes
d’interprétation des formules.
Théorème
Le calcul relationnel indépendant du domaine, le calcul relationnel avec
la sémantique du domaine actif, et l’algèbre relationnelle ont tous des
pouvoirs d’expressivité équivalents.
∃yFrequents(d,y)
∧ ∀b (Frequents(d , b ) → Serves(b , Coors))}
en algèbre :
πdrinker (Frequents ) − πdrinker [
Frequents ! (πbar (Serves ) − πbar (σbeer =Coors (Serves ))) ]
Algèbre relationnelle - Calcul relationnel
Conclusion
requête sûre, indépendante du domaine d’interprétation :
{%d & : drinker |
{%d & : drinker | ∀b (Frequents(d , b ))}
!
requête non sûre :