Langages de requêtes

Transcription

Langages de requêtes
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Le modèle relationnel :
Langages de requêtes et de mise à jour
Slide 1
&
%
'
$
Langages de requêtes
Le modèle relationnel défini de manière rigoureuse des langages de
requêtes simples et puissants
Slide 2
– Approche algébrique : Algèbre relationnelle
Langage procédurale, mais très utile pour représenter les plans
d’exécution des requêtes
– Approche logique
– Calcul relationnel
Orienté utilisateur car il est plus proche du langage naturel :
permet à un utilisateur de décrire le résultat recherché sans
spécifier comment l’obtenir (langage déclaratif)
– Datalog
Langage déclaratif à base de règles
Augmente le calcul relationnel avec des capacités d’inférence
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Notions préliminaires
Slide 3
– Une requête est appliquée à des instances de relations,
– Le résultat d’une requête est une instance de relation.
– Le schéma de la relation résultat est déterminé par la définition des
constructeurs du langage de requêtes utilisé
&
%
'
$
Exemple
La relation r1 sur Student
Slide 4
Name
Age
Address
dept
Toto
21
Clermont
Computing
Dupond
35
Paris
Maths
Durand
45
Lyon
linguistics
Dan
34
Lyon
Computing
La relation r2 sur Department
loc
mgr
dept
Bât A
Ullman
Computing
Bât B
Mendelson
Maths
Bât C
Dupond
linguistics
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
L’algèbre relationnelle
Proposée par Codd en 1970
Slide 5
– C’est une collection d’opérateurs algébriques
– Entrée : une ou deux relations
– Sortie : une relation
– Requête relationnelle : composition d’un nombre fini d’opérateurs
algébriques
L’ordre d’évaluation des opérateurs est spécifié dans la requête
(requête procédurale)
– Possibilité de composition des opérations puisque chaque opération
renvoie une relation (propriété de fermeture de l’algèbre relationnelle)
&
%
'
$
Opérateurs de l’algèbre relationnelle
Slide 6
– Opérations de base
– Projection (π) : suppression des attributs d’une relation
– Selection (σ) : sélection d’un sous ensemble de tuples d’une relation.
– Produit cartésien (×) : combinaison de deux relations
– Différence (−) : sélection des tuples d’une relation r1 qui
n’appartiennent pas à une relation r2
– Union (∪) : sélection des tuples d’une relation r1 et de ceux d’une
autre relation r2
– Opérations supplémentaires : Intersection (∩), jointure (./), division
(÷), renommage (ρA→B ) (non essentielles, mais très utiles)
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Projection et sélection
Soit r une relation sur R
Slide 7
– Projection : la projection de r sur Y ⊆ schema(R), notée πY (r), est
définie comme suit : πY (r) = {t[Y ] | t ∈ r}
– Selection
– Une formule de sélection simple sur R est une expression de la
forme : A = a ou A = B, où A, B ∈ Schema(R) et a ∈ Dom(A)
– Une formule de sélection est une expression composée de formules
de sélection simples connectées à l’aide des connecteurs logique
∧, ∨, ¬ et des parenthèses
– Opération de sélection : La sélection des tuples de la relation r par
rapport à F , notée σF (r), est définie comme suit :
σF (r) = {t ∈ r | t |= F }
(cf. notion d’implication logique (|=) dans le transparent suivant)
&
%
'
$
Implication logique (|=)
1. t |= A = a si t[A] = a
Slide 8
2. t |= A = B si t[A] = t[B]
3. t |= F1 ∧ F2 si t |= F1 et t |= F2
4. t |= F1 ∨ F2 si t |= F1 ou t |= F2
5. t |= ¬F si t 6|= F
6. t |= (F ) si t |= F
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Opérations ensemblistes
Soient r1 et r2 deux relations sur R
Slide 9
– Union : r1 ∪ r2 = {t | t ∈ r1 ou t ∈ r2 }
– Différence : r1 − r2 = {t | t ∈ r1 et t ∈
/ r2 }
– Intersection : r1 ∩ r2 = {t | t ∈ r1 et t ∈ r2 }
Note :
– r1 ∩ r2 = r1 − (r1 − r2 )
– σ¬F (r) = r − σF (r)
– σF1 ∨F2 (r) = σF1 (r) ∪ σF2 (r)
– σF1 ∧F2 (r) = σF1 (r) ∩ σF2 (r)
&
%
'
$
Produit cartésien
Slide 10
Soient r1 et r2 deux relations sur R1 et R2 respectivement, avec
schema(R1 ) ∩ schema(R2 ) = ∅.
Le produit cartésien r1 × r2 est une relation sur un schéma de relation
R, avec schema(R) = schema(R1 ) ∪ schema(R2 ), définie par :
r1 × r2 = {t|∃t1 ∈ r1 and ∃t2 ∈ r2 tel que t[schema(R1 )] =
t1 et t[schema(R2 )] = t2 }
– Si schema(R1 ) ∩ schema(R2 ) 6= ∅, alors il y a un conflit entre les
attributs de mêmes noms dans R1 et R2 (résolution de ce type de
conflit à l’aide de l’opérateur de renommage)
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Jointure
Soient r1 et r2 deux relations sur R1 et R2 respectivement.
Slide 11
– Jointure naturelle
La jointure naturelle de r1 et r2 (notée r1 ./ r2 ) est une relation sur
un schéma de relation R, avec
schema(R) = schema(R1 ) ∪ schema(R2 ), définie comme suit :
r1 ./ r2 = {t|∃t1 ∈ r1 and ∃t2 ∈ r2 tel que t[schema(R1 )] =
t1 et t[schema(R2 )] = t2 }
– T heta−jointure : r1 ./F r2 = σF (r1 × r2 )
Note :
– Si schema(R1 ) = schema(R2 ), alors r1 ./ r2 = r1 ∩ r2
– Si schema(R1 ) ∩ schema(R2 ) = ∅, alors r1 ./ r2 = r1 × r2
&
%
'
$
Algorithme Join
Soient r1 et r2 deux relations sur R1 et R2 respectivement et
X = schema(R1 ) ∩ schema(R2 )
Join(r1 , r2 )
1: Result := ∅
Slide 12
2: for all t1 ∈ r1 do
3:
4:
5:
6:
7:
8:
for all t2 ∈ r2 do
if t1 [X] = t2 [X] then
Joined_tuple := a tuple over R s.t.
Joined_tuple[schema(R1 )] = t1 and
Joined_tuple[schema(R2 )] = t2 and
Result := Result ∪ Joined_tuple
Ensure: Result
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Renommage
Soit r une relation sur R, A ∈ schema(R) et B 6∈ schema(R)
Slide 13
Le renommage de A en B dans r, noté ρA→B (r), est une relation sur S
tel que :
– schema(S) = schema(R) − {A} ∪ {B}, et
– ρA→B (r) = {t|∃u ∈ r, t[schema(S) − {B}] =
u[schema(R) − {A}] et t[B] = u[A]}
&
%
'
$
Division
Slide 14
– La division permet d’exprimer la quantification universelle (∀).
Exemple de requête pour la quelle la division est utile : "Donner la
liste des étudiants qui sont inscrits dans tous les départements"
– Définition formelle de la division
Soit r une relation sur R, avec schema(R) = XY , et s une relation
sur S, avec schema(S) = Y . La division de r par s, notée r ÷ s, est
une relation sur un schéma de relation R1 , avec schema(R1 ) = X,
définie par :
r ÷ s = {t[X]|t ∈ r et s ⊆ πY (σF (r)), où X =
{A1 , . . . , Aq } et F est la formule A1 = t[A1 ] ∧ . . . ∧ Aq = t[Aq ]}
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemples de division
r1
Slide 15
r2
sno
pno
s1
p1
pno
s1
p2
p2
s1
p3
r1 ÷ r2
s1
p4
sno
s2
p1
s1
s2
p2
s2
s3
p2
s3
s4
p2
s4
s4
p4
r3
r4
pno
pno
p2
p1
p4
p2
r1 ÷ r3
p4
sno
r1 ÷ r4
s1
sno
s4
s1
&
%
'
$
Expression de r ÷ s
La division n’est pas une opération essentielle car elle peut être exprimée
à l’aide des opérations de projection, différence et produit cartésien
Slide 16
Pour calculer r ÷ s, il faut calculer toutes les valeurs de X dans r qui ne
sont pas disqualifiées par des valeurs de Y dans s
Une valeur de X est disqualifiée si en lui rattachant une valeur de Y de
s, le tuple XY obtenu n’appartient pas à r
– Valeurs disqualifiées de X : πX ((πX (r) × s) − r)
– r ÷ s = πX (r)− valeurs disqualifiées de X
⇒ r ÷ s = πX (r) − πX ((πX (r) × s) − r)
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Complétude
Slide 17
Un langage d’interrogation de bases de données relationnelles est dit
relationnellement complet si il peut exprimer toute requête exprimable
dans l’algèbre relationnelle
Extension de l’algèbre relationnelle
Deux extensions importantes, très utiles en pratiques .. mais qui ne sont
pas considérées comme faisant partie de l’algèbre relationnelle :
– Fermeture transitive
– Fonctions d’agrégation
&
%
'
$
Exemple
Relation
Slide 18
Family
Parent
Child
p1
p3
p1
p4
πGparent,Gchild (ρChild→Jatt (ρP arent→Gparent (F amily))
p2
p4
./ ρP arent→Jatt (ρChild→Gchild (F amily))))
p2
p5
p3
p6
Requête impossible avec l’algèbre relationnelle :
p3
p7
"Donner tous les descendants de p1 "
p7
p12
&
Requête : "Donner la liste des parents
et leurs petits-fils"
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Fermeture transitive
Soit r une relation sur R, avec schema(R) = {att(1) = A, att(2) = B},
et Dom(A) = Dom(B). La fermeture transitive de r, notée r+ , est
définie comme étant le résultat de l’algorithme suivant :
Algorithm r+
Slide 19
1: Result := r
2: T M P := ∅
3: while T mp 6= Result do
T mp := Result
Result := Result ∪ Qjoin (Result)
Ensure: Result
4:
5:
Note : Qjoin (R) dénote la requête suivante :
π{A,B} (ρB→Jatt (R) ./ ρA→Jatt (R))
&
%
'
$
Fonctions d’agrégation
Slide 20
Les fonctions d’agrégation permettent de répondre aux requêtes du
type :
"Quel est le nombre d’étudiants inscrits dans chaque département"
"Quel est l’âge moyen des étudiants"
Définition (fonction d’agrégation)
Soit R un schéma de relation et A ∈ schema(R). Une fonction
d’agrégation fA sur R est une fonction calculable qui pour un ensemble
fini de tuples sur R renvoie une valeur entière.
Exemples de fonctions : M IN, M AX, AV G, COU N T
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Algorithme
Soit fA une fonction d’agrégation sur R, X ⊆ schema(R) et supposant
que Af ∈
/ schema(R). Le resultat de l’application de fA à une relation r
sur R avec une partition X, notée fAX , est une relation sur S, avec
schema(S) = X ∪ Af , définie par l’algorithme suivant :
Slide 21
Algorithm AGG(fa , X, r)
1: Result := ∅
2: P := a partition of r s.t. t1 , t2 are in the same block in P iff t1 [X] = t2 [X]
3: for all block Bi in the partition P do
Agg_tuple[X] := a tuple over S such that
Agg_tuple[X]=t[X] with t ∈ ri and
6:
Agg_tuple[Af ]=fA ({t|t ∈ B}]
7:
Result := Result ∪ {Agg_tuple}
Ensure: Result
4:
5:
&
%
'
$
Langages logiques
Donner les noms et âges des étudiants du département dont le manager
est ‘Ullman’.
Deux approches :
Slide 22
– Approche basée sur les variables domaines
Si les tuples hxna , xag , xad , xde i et hxlo , ‘U llman0 , xde i sont
respectivement dans les relations Student et Department alors
inclure dans la réponse le tuple hN ame : xna , Age : xag i,
où xna , xag , xad , xde , xlo sont des variables.
– Approche basée sur les tuples
Si les tuples t1 et t2 respectivement dans les relations Student et
Department sont tels que le manager dans t1 est "Ullman" et les
noms de département (attribut dept) dans t1 et t2 sont les mêmes
alors nous voulons les nom et âge du tuple t1 .
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Le calcul relationnel
Slide 23
– Deux types de calculs : Calcul relationnel de tuples (TRC) et calcul
relationnel de domaine (DRC).
– Le calcul utilise des variables, des constantes, des opérateurs de
comparison, des connecteurs logiques et des quantificateurs
– TRC : les variables prennent comme valeurs des tuples.
– DRC : les variables prennent comme valeurs des éléments du
domaine.
TRC et DRC sont des sous-ensembles de la logique du premier ordre
– Les expressions dans le calcul sont appelées formules
– Un tuple réponse est une affectation de constantes à des variables qui
permet à la formule d’être évaluée à vrai
&
%
'
$
Syntaxe DRC
Slide 24
Symboles autorisés dans une formule
– Constantes : v1 , . . . , vn membres de l’ensemble D
– Variables : x1 , . . . , xn membres d’un ensemble infini dénombrable V
disjoint de D
– Symboles de relations : R, R1 , R2 , . . ., chacun correspondant au
schéma de relation qui lui est associé
– Opérateurs de comparaison : <, >, =, ≤, ≥, 6=
– Quantificateurs et connecteurs logiques : ∃, ∀, ∧, ∨, ⇒, ¬
– Délimiteurs : () et ,
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Formules DRC
Slide 25
Une formule est définie de manière récursive, commençant par des
formules atomiques simples , et construisant ensuite des formules plus
complexes en utilisant les connecteurs logiques
– Formule atomique
– R(x1 , . . . , xn ), où R est un symbole de relation avec type(R) = n et
∀i[1, n], xi est une constante ou une variable
– x op y, où x est une variable, y une constante ou une variable et
op ∈ {<, >, =, ≤, ≥, 6=}
– Formule bien formée
– Une formule atomique
– (p), ¬p, p ∧ q, p ∨ q, p ⇒ q où p et q sont des formules
– ∃x : A(F ), ∀x : A(F ) où F est une formule, x une variable et A un
nom d’attribut
&
%
'
$
Variables libres et variables liées
Les quantificateurs ∃ et ∀ permettent de lier les variables
Slide 26
– Toutes les variables apparaissant dans une formule atomique sont
libres
– Les variables libres apparaissant dans ¬F sont les mêmes que ceux
apparaissant dans la formule F
– Les variables libres apparaissant dans les formules F1 ∧ F2 , F1 ∨ F2 et
F1 ⇒ F2 sont les variables libres qui apparaissent dans F1 ou dans F2
– Les variables libres qui apparaissent dans ∃x : A(F ) et ∀x : A(F ) sont
les variables libres qui apparaissent dans F excepté les occurrences de
x dans F
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Calcul relationnel de domaine
Soit d = {r1 , . . . , rm } une base de données sur un schéma
R = {R1 , . . . , Rm }.
– Une requête à la forme suivante :
{hx1 : A1 , . . . , xn : An i|F (hx1 , . . . , xn i)}
Slide 27
où : F est une formule bien formée,
A1 , . . . , An sont des attributs distincts appartenant à U
x1 , . . . , xn sont des variables libres dans F
– Réponse : relation r sur un schéma R avec
schema(R) = {A1 , . . . , An } définie par : r = {t | t satisf ait F }
Un tuple hv1 , . . . , vn i satisfait la formule F par rapport à d, si
∀i ∈ [1, n], vi ∈ DOM (Ai ), et une des six conditions suivantes est
vérifiée :
&
%
'
$
Satisfaction d’une formule
1. F est la formule atomique R(y1 , . . . , yk ) (avec R ∈ R) et le tuple
t = hy1 /v1 , . . . , yk /vk i ∈ r où r est la relation sur R dans d
2. F est la formule atomique xi = yj alors on a vi = vj où vi est
substituée à xi et, si yj est une variable alors vj est substituée à yj
ou bien yj est une constante et dans ce cas yj = vj
Slide 28
3. F est la formule (G) et t satisfait la formule G
4. F prend une de ces formes : ¬F, F1 ∧ F2 , F1 ∨ F2 , F1 ⇒ F2 (cf.
sémantique du connecteur logique correspondant)
5. F est la formule ∃xi : A(G(x1 , . . . , xi , . . . , xn )) alors
hv1 , . . . , vi−1 , vi+1 , . . . , vn i satisfait F si il existe une constante
vi ∈ DOM (A) tel que hv1 , . . . , vi−1 , vi , vi+1 , . . . , vn i satisfait G
6. F est la formule ∀xi : A(G(x1 , . . . , xi , . . . , xn )) alors
hv1 , . . . , vi−1 , vi+1 , . . . , vn i satisfait F pour toute constante
vi ∈ DOM (A) le tuple hv1 , . . . , vi−1 , vi , vi+1 , . . . , vn i satisfait G
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemple (rappel)
La relation r1 sur Student
Slide 29
Name
Age
Address
dept
Toto
21
Clermont
Computing
Dupond
35
Paris
Maths
Durand
45
Lyon
linguistics
Dan
34
Lyon
Computing
La relation r2 sur Department
loc
mgr
dept
Bât A
Ullman
Computing
Bât B
Mendelson
Maths
Bât C
Dupond
linguistics
&
%
'
$
Exemples de requêtes
Slide 30
Donner la liste de tous les étudiants qui habitent à ’Clermont’
{x1 : N ame, x2 : Age, x4 : Dept|
∃x3 : address(Student(x1 , x2 , x3 , x4 ) ∧ x1 = ‘Clermont0 )}
La condition Student(x1 , x2 , x3 , x4 ) assure que les variables de domaine
x1 , x2 , x3 et x4 sont liées aux champs du même tuple de la relation r1
sur Student.
– "Donner la liste de tous les étudiants"
{x1 : N ame, x2 : Age, x3 : Address, x4 : Dept|Student(x1 , x2 , x3 , x4 )}
– "Donner les noms et les départements de tous les étudiants"
{x1 : N ame, x4 : Dept|∃x2 : Age(∃x3 :
Address(Student(x1 , x2 , x3 , x4 )))}
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemples de requêtes (cont.)
Slide 31
– "Donner les noms et âges des étudiants qui sont soit inscrits dans le
département Linguistics soit habitent à Clermont"
{x1 : N ame, x2 : Age|∃x3 : Address(∃x4 :
Dept(Student(x1 , x2 , x3 , x4 ) ∧ (x4 =0 Linguistics0 ∨ x3 =0
Clermont0 )))}
ou {x1 : N ame, x2 : Age|∃x4 : Dept(Student(x1 , x2 ,0 Clermont0 , x4 ) ∨
∃x3 : Address(Student(x1 , x2 , x3 ,0 Linguistics0 ))}
– "Donner les noms des étudiants non parisiens qui ne sont pas inscrits
dans le département Computing"
{x1 : N ame|∃x2 : Age(∃x3 : Address(∃x4 :
Dept(Student(x1 , x2 , x3 , x4 ) ∧ (x4 6=0 Computing 0 ∧ x3 6=0 P aris0 ))))}
&
%
'
$
Exemples de requêtes (cont.)
Slide 32
– "Donner les noms des étudiants et les localisations des départements
dans lesquels ils sont inscrits"
{x1 : N ame, x5 : loc|∃x2 : Age(∃x3 : Address(∃x4 : Dept(∃x6 :
mgr(Student(x1 , x2 , x3 , x4 ) ∧ Department(x5 , x6 , x4 )))))}
– "Donner la liste des étudiants qui sont inscrits dans tous les
départements"
{x1 : N ame, x2 : Age, x3 : Address, x4 :
Dept|Student(x1 , x2 , x3 , x4 ) ∧ ¬∃x7 : dep(∃x5 : loc(∃x6 :
mgr(Department(x5 , x6 , x7 ) ∧ ¬Student(x1 , x2 , x3 , x7 ))))}
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Requêtes peu sûres
Slide 33
– Il est possible d’écrire des requêtes de calcul correctes du point de vue
syntaxique .. mais qui ont un nombre infini de réponses
De telles requêtes sont appelées : requêtes peu sûres
Exemple
{x1 : N ame|∃x2 : Age(∃x3 : Address(∃x4 :
dep(¬Student(x1 , x2 , x3 , x4 ))))}
– Chaque requête qui peut être exprimée en algèbre relationnel peut
également être exprimée comme une requête sûre en DRC/TRC ;
l’inverse est également vraie.
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Datalog
Langage logique muni d’une capacité d’inférence (bases de données
logiques ou déductives)
Syntaxe
Slide 34
– Formule atomique : prédicat + arguments (cf. calcul relationnel)
– Prédicat : symbole de relation ou prédicat arithmétique (e.g., <)
– Un prédicat de la forme : R(v1 , . . . , vn ) où toutes les vi sont des
constantes appartenant respectivement à DOM (att(i)) est appelé
atome clos sur R
– Un littéral est soit une formule atomique L (littéral positif) ou sa
négation ¬L (littéral négatif)
&
%
'
$
Notion de règle
Une règle (clause) est une expression de la forme :
tete
Corps
z}|{ z }| {
L `L1 , . . . , Ln
Slide 35
où chaque Li est un littéral
Si n = 0 et L1 est un atome clos, alors L est un fait
Exemple de faits :
Student(Toto, 21, Clermont, Computing),
Department(Bât A, Ullman, Computing)
Une règle est une "usine à fournir des faits"
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Programme Datalog
Slide 36
– Un programme Datalog est une collection de règles
– Deux classes de prédicats/relations
– EDB (extensional database schema) : l’ensemble de tous les noms
de relations apparaissant uniquement dans le corps des règles.
– IDB (intensional database) : l’ensemble de tous les noms de
relations apparaissant au moins une fois dans une tête de règle.
– Un prédicat est soit un IDB soit un EDB
– Deux types de programmes Datalog : récursifs et non recursifs
Exemple : programme Datalog récursif :
Ancêtre(x1 , x2 ) ` P arent(x1 , x2 )
Ancêtre(x1 , x3 ) ` P arent(x1 , x2 ), Ancêtre(x2 , x3 )
&
%
'
$
Exemple d’un programme Datalog
Slide 37
Considérons le Programme Datalog P suivant :
Student(T oto, 21, Clermont, Computing)
Student(Dupond, 35, P aris, M aths)
Student(Durand, 45, Lyon, linguistics)
Student(Dan, 34, Lyon, Computing)
Department(BâtA, U llman, Computing)
Department(BâtB, M endelson, M aths)
Department(BâtC, Dupond, linguistics)
Course−loc(x1 , y2 ) ` Student(x1 , x2 , x3 , x4 ), Department(y1 , y2 , x4 )
–"Requête : Donner la liste de tous les étudiants"
Result1(x1 , x2 , x3 , x4 ) ` Student(x1 , x2 , x3 , x4 )
edb(P ) = {Student, Department}
idb(P ) = {Course−loc, Result1}
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemple de requêtes Datalog
Slide 38
– "Donner la liste de tous les étudiants"
Result(x1 , x2 , x3 , x4 ) ` Student(x1 , x2 , x3 , x4 )
– "Donner les noms et départements de tous les étudiants"
Result(x1 , x2 , x4 ) ` Student(x1 , x2 , x3 , x4 )
– "Donner les noms et âges des étudiants qui sont soit inscrits dans le
département Linguistics soit habitent à Clermont"
Result(x1 , x2 ) ` Student(x1 , x2 , x3 , x4 ), x4 =0 Linguistics0
Result(x1 , x2 ) ` Student(x1 , x2 , x3 , x4 ), x3 =0 Clermont0
– "Donner les noms des étudiants non parisiens qui ne sont pas inscrits
dans le département Computing"
Result(x1 ) ` Student(x1 , x2 , x3 , x4 ), x3 6=0 P aris0 , x4 6=0 Computing 0
&
%
'
$
Exemple (cont.)
Slide 39
– Union entre deux relations Student1 et Student2 de même schéma :
Result(x1 , x2 , x3 , x4 ) ` Student1(x1 , x2 , x3 , x4 )
Result(x1 , x2 , x3 , x4 ) ` Student2(x1 , x2 , x3 , x4 )
– Différence entre deux relations Student1 et Student2 de même
schéma :
Result(x1 , x2 , x3 , x4 ) `
Student1(x1 , x2 , x3 , x4 ), ¬Student2(x1 , x2 , x3 , x4 )
– Intersection entre Student1 et Student2 de même schéma :
Result(x1 , x2 , x3 , x4 ) `
Student1(x1 , x2 , x3 , x4 ), Student2(x1 , x2 , x3 , x4 )
– Division entre deux relations R1 (X, Y ) et R2 (Y ) :
Result(x1 ) ` R1 (x1 , x3 ), ¬DIF F (x1 )
DIF F (x1 ) ` P ROD(x1 , x3 ), ¬R1 (x1 , x2 )
P ROD(x1 , x2 ) ` R1 (x1 , x3 ), R2 (x2 )
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Programmes peu sûrs
Slide 40
Un programme Datalog à un sens uniquement si la relation qui peut
être dérivée en exécutant ces programmes est finie.
Exemples de règles non sûres :
Result(x) ` Student(x1 , x2 , x3 , x4 )
Result(x1 , x2 , x4 ) ` ¬Student(x1 , x2 , x3 , x4 )
Result(x1 ) ` Student(x1 , x2 , x3 , x4 ), x5 = x6
&
%
'
$
Programme Datalog sûrs
Une variable x apparaît positivement dans une règle C ssi :
Slide 41
– x apparaît dans un prédicat R(y1 , . . . , x, . . . , yk ), qui est un littéral
positif dans le corps de C, ou
– x apparaît dans une formule d’égalité x = v, qui est un littéral positif
dans le corps de C, où v est une constante, ou
– x apparaît dans une formule d’égalité x = y ou y = x, qui est un
littéral positif dans le corps de C, où y est une variable qui apparaît
positivement dans C
Definition 1 (Programme Datalog sûrs)
Une règle Datalog C est dite sûre si toutes les variables qui apparaissent
dans les littéraux de C (dans le corps ou dans la tête) apparaissent
positivement dans C
Un programme Datalog P est dit sûr si toutes les règles de P sont sûres
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Remarques
Slide 42
– Dans une règle Datalog sûre C, toutes les variables qui apparaissent
dans la tête doivent apparaître au moins une fois dans le corps de C.
– Toutes les variables apparaissant dans les littéraux négatifs dans le
corps d’une règle sûre doivent également apparaître positivement dans
au moins une formule atomique dans le corps de la règle
&
%
'
$
Définitions
Slide 43
Definition 2 (Schéma d’un programme Datalog)
Le schéma de base de données d’un programme Datalog P , noté
SCHEM A(P ), est l’ensemble des schémas de relations défini par :
SCHEM A(P ) = {R|R est un symbole de relation qui apparaît dans un
littéral d’une règle dans P }
Exemple : SCHEM A(P ) = {Student, Department, Course−loc}
Definition 3 (Substitution de variables)
Soit C une règle Datalog et {x1 , . . . , xq } les variables apparaissant dans
les littéraux du corps de C. Une substitution θ pour C est l’ensemble
des affectations {x1 /v1 , . . . , xq /vq }, où les vi sont des constantes.
Notons C(θ) la clause résultant de l’application de la substitution θ au
littéraux dans C.
Note : Tous les littéraux de la clause C(θ) sont des atomes clos.
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Vérité d’une clause par rapport à une BD
Un littéral L dans le corps d’une clause C d’un programme Datalog P
est vrai par rapport à une substitution θ pour C et une base de données
d sur un schéma SCHEM A(P ) si l’une des conditions suivantes est
satisfaites :
Slide 44
– θ(L) est un atome clos atomique de la forme R(v1 , . . . , vk ) et
hv1 , . . . , vk i ∈ r, où r ∈ d est la relation sur R
– θ(L) est une égalité v = v où v est une constante
– θ(L) est un atome clos de la forme ¬R(v1 , . . . , vk ) et hv1 , . . . , vk i 6∈ r,
où r ∈ d est la relation sur R
– θ(L) est un littéral négatif de la forme ¬(vi = vj ), où vi et vj sont des
constantes distinctes, i.e., vi 6= vj
Une clause C dans un programme P est vraie par rapport à une
substitution θ pour C et une base de données d sur SCHEM A(P ) si
chacun des littéraux du corps de C est vrai par rapport à θ et d
&
%
'
$
Sémantique d’un programme Datalog
Slide 45
La signification d’un programme Datalog P , notée M eaning(P ), est la
base de données résultant de l’augmentation de l’ensemble des faits
initial d’un programme P par tous les nouveaux faits possibles de la
forme θ(L), où θ est une substitution qui rend une règle C de P vraie et
L est la tête de C.
Note : D’autres types de sémantiques sont possibles.
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Algorithme Meaning
Meaning(P)
1: Result := ∅
2: T M P := {hi}
Slide 46
3: while T M P 6= Result do
4:
5:
6:
7:
8:
T M P := Result
Im := ∅
for all clauses C in P and substitutions θ for C such that C is true
with respect to θ and Result do
Im := Im ∪ {θ(L)} where L is the head of C
Result := Result ∪ Im
Ensure: Result
&
%
'
$
Exemple
Slide 47
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Un résultat intéressant
Soit CON ST (P ) l’ensemble des constantes apparaissant dans les
littéraux des clauses d’un programme Datalog P .
Slide 48
θ = {x1 /v1 , . . . , xq /vq } est une substitution sûre pour une clause C dans
P si {v1 , . . . , vq } ⊆ CON ST (P )
– Lors du calcul de M eaning(P ) pour un programme Datalog P sûr, il
suffit de considérer uniquement les substitutions sûres
– Si uniquement les substitution sûres sont considérées, alors les
programme Datalog sûrs et non sûrs sont équivalents
&
%
'
$
Langage de mise à jour pour le modèle relationnel
Notions préliminaires
Slide 49
– Une condition simple sur R est soit une expression de la forme A = a
ou A 6= a, où A ∈ schema(R) et a ∈ Dom(A)
– Une condition C sur R est une conjonction c1 ∧ . . . ∧ cn de conditions
simples ci , i ∈ [1, n], tel que C ne contient pas deux conditions
simples distinctes de la forme (A = a et A = b) ou (A = a et A 6= a)
pour A ∈ schema(R)
– Une condition positive sur R est une condition de la forme
A1 = a1 ∧ . . . ∧ An = an , où {A1 , . . . , An } ∈ schema(R) et
ai ∈ Dom(Ai )
– Une condition complète sur R est une condition positive sur R avec
{A1 , . . . , An } = schema(R)
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Satisfaction d’une condition
Slide 50
Soit r une relation sur R, et t un tuple dans r. Soit C = c1 , . . . , cn une
condition sur R.
t satisfait C, noté t |= C, est définie comme suit :
– t |= A = a si t[A] = a est vraie
– t |= A 6= a si t[A] 6= a est vraie
– t |= C si t |= ci , ∀i ∈ [1, n] est vraie
&
%
'
$
Opérations de mise à jour
Soit r une relation sur un schéma R, avec schema(R) = {A1 , . . . , An }.
Une mise à jour sur R est soit une insertion, une suppression ou une
modification sur R.
Slide 51
– Une insertion sur R est notée insert(C) où C est une condition
complète sur R.
[insert(C)](r) = r ∪ {t | t |= C}
– Une suppression sur R est notée delete(C) où C est une condition sur
R.
[delete(C)](r) = r − {t | t |= C}
– Une modification d’un tuple t sur R par rapport à une condition C,
notée [modif y(C)](t) est définie par :
[modif y(C)](t) = u où u est un tuple sur R tel que
∀Ai ∈ schema(R), u[Ai ] = ai si (Ai = ai ) ∈ C, sinon u[Ai ] = t[Ai ]
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Opérations de mise à jour (cont.)
Slide 52
– Une modification sur un schéma R est une expression de la forme
modif y(C1 ; C2 ), où C1 et C2 sont des conditions sur R telles que
∀A ∈ schema(R), siA 6= a est dans C2 alors A 6= a est aussi dans C1 .
[modif y(C1 ; C2 )](r) = (r − {t | t |= C1 }) ∪ {[modif y(C2 )](t) | t ∈
r et t |= C1 }
&
%
'
$
Exemples
Slide 53
– [insert(N ame = Jean ∧ Age = 24 ∧ Address = P aris ∧ dept =
M aths)](r)
– [delete(N ame = Jean ∧ Address 6= P aris)](r)
– [modif y(dept = M T H; dept = M aths)](r)
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Problème d’équivalence : notions préliminaires
Slide 54
– Domaine actif d’une BD (rappel)
Le domaine actif d’une base de données d, noté ADOM (d), est
l’ensemble des constantes apparaissant dans d
– Domaine actif d’une requête
Le domaine actif d’une requête Q, noté ADOM (Q), est l’ensemble
des constantes apparaissant dans Q
– Indépendance du domaine
Une requête Q est indépendante du domaine si pour toute base de
données d, les réponses de Q sur d dépendent uniquement de
ADOM (Q) ∪ ADOM (d)
– Réponse à une requête
Soit Q une requête ayant pour arguments des schémas de relations
dans un schéma de base de données R. Si d est la base de données
associée à R, la réponse à la requête Q sera notée Q(d).
&
%
'
$
Equivalence de requêtes et de langages
Slide 55
– Equivalence de requêtes
Soient Q1 et Q2 deux requêtes dont les arguments sont des schémas
de relations dans un schéma de base de données R.
Q1 ≡ Q2 si pour toute base de données d sur R, on a : Q1 (d) = Q2 (d).
– Inclusion de langages
Un langage L1 est contenu dans un autre langage L2 si pour toute
requête Q1 de L1 il existe une requête Q2 de L2 tel que : Q1 ≡ Q2 .
– Equivalence de langages
Un langage L1 est équivalent à langage L2 si L1 est contenu dans L2
et vice versa.
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Requêtes indépendantes du domaine
Les requêtes de l’algèbre relationnelle et les requêtes Datalog sûres sont
indépendantes du domaine, celles du calcul relationnels ne le sont pas.
Slide 56
Exemple : soient Etudiant et Inscrit deux schémas de relations avec
schema(Etudiant) = schema(Inscrit) = {nom}. Les requêtes suivantes
ont une réponse infinie si DOM (nom) est infini.
{x : nom|¬Etudiant(x)}
{x1 : nom, x2 : nom|Etudiant(x1 ) ∨ Inscrit(x2 )}
D’où deux problèmes principaux dans les requêtes du calcul :
– La requête contient une formule ¬F telle qu’une des variables de F
n’apparaît pas positivement ailleurs
– La requête contient une formule de la forme F1 ∨ F2 telle que les
variables libres de F1 sont distinctes de celles de F2
&
%
'
$
Requêtes indépendantes du domaine (suite)
Slide 57
Théorème
Déterminer si une requête du calcul relationnel est indépendante du
domaine est indécidable.
Ce résultat impose de restreindre les formules valides de façon à rendre
les requêtes du calcul indépendante du domaine.
Deux notions :
– variables positives
– variables négatives
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Variable positive
Slide 58
Une variable x est positive dans une formule si :
– x est positive dans une formule atomique R(y1 , . . . , x, yk )
– x est positive dans une formule atomique x = v où v est une constante
– x est positive dans la formule ¬F qui contient x, si x est négative
dans F
– x est positive dans la formule F1 ∧ F2 si x est positive dans F1 ou x
est positive dans F2
– x est positive dans la formule F1 ∨ F2 si x est positive dans F1 et x
est positive dans F2
– x est positive dans la formule F1 ⇒ F2 si x est négative dans F1 et x
est positive dans F2
– x est positive dans la formule ∃y : A(F ), si x 6= y et x est positive
dans F
&
%
'
$
Variable négative
Slide 59
Une variable x est négative dans une formule si :
– x est négative dans une formule atomique x = y où y est une variable
– x est négative dans la formule ¬F si x est positive dans F
– x est négative dans la formule F1 ∧ F2 si x est négative dans F1 et x
est négative dans F2
– x est négative dans la formule F1 ∨ F2 si x est négative dans F1 ou x
est négative dans F2
– x est négative dans la formule F1 ⇒ F2 si x est positive dans F1 ou x
est négative dans F2
– x est négative dans la formule ∀y : A(F ), si x 6= y et x est négative
dans F
– si x n’apparaît pas dans une formule F , alors x est négative dans F
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemple
Soient Etudiant, Inscrit et Habite trois schémas de relations avec
schema(Etudiant) = schema(Inscrit) = {nom} et
schema(Habite) = {nom, adresse}.
Soient les formules suivantes :
Slide 60
F1 = Etudiant(x)
F2 = Etudiant(x1 ) ∨ Inscrit(x2 )
F3 = Habite(x1 , x2 ) ∧ ¬Habite(x1 , Lyon)
F4 = Habite(x1 , Antragues) ∨ Habite(x1 , Lyon)
F5 = ∀x : nom(¬Etudiant(x))
F6 = ¬(∃x : nom(Etudiant(x)))
Donner le status des variables dans F1 − F6 .
&
%
'
$
Requête du calcul autorisée
Une formule du calcul F est autorisée si :
Slide 61
– Chaque variable libre x de F est positive dans F
– Pour chaque sous-formule ∃x : A(G) de F , x est positive dans G
– Pour chaque sous-formule ∀x : A(G) de F , x est négative dans G
Une requête de calcul est autorisée si toutes ses formules sont autorisées.
Tester si une requête est autorisée peut se faire par simple récursion sur
la structure de la formule.
Théorème
Toute formule autorisée du calcul relationnel est indépendante du
domaine.
&
%
Introduction aux bases de données - 2009/2010
F.Toumani
$
'
Exemple (suite)
Soient Etudiant, Inscrit et Habite trois schémas de relations avec
schema(Etudiant) = schema(Inscrit) = {nom} et
schema(Habite) = {nom, adresse}.
Slide 62
Les requêtes ci-dessous sont elles indépendantes du domaine ?
{x : nom|¬Etudiant(x)}
{x1 : nom, x2 : nom|Etudiant(x1 ) ∨ Inscrit(x2 )}
{x1 : nom|Habite(x1 , x2 ) ∧ ¬Habite(x1 , Lyon)}
{x1 : nom|Habite(x1 , Antraigues) ∨ Habite(x1 , Lyon)}
{x : nom|∀x : nom(¬Etudiant(x))}
{x : nom|¬(∃x : nom(Etudiant(x)))}
&
%
'
$
Equivalence des langages relationnels
Théorème
Les trois langages relationnels suivants sont équivalents :
Slide 63
– L’algèbre relationnelle
– nr−datalog ¬ (Datalog sûr non récursif avec la négation)
– Le calcul relationnel du domaine autorisé
Résultat fondamental des bases de données
Preuve en TD
&
%