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 :