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 & %