270 likes | 386 Views
Algèbre relationnelle. Witold LITWIN. Algèbre relationnelle. Proposée par E. Codd, 1969 Utilisée en général à l'intérieur de tout SGBD relationnel Un LMD algébrique est possible, mais en général peu commode pour l'homme On préfère les requêtes SQL, QUEL, QBE...
E N D
Algèbre relationnelle Witold LITWIN
Algèbre relationnelle • Proposée par E. Codd, 1969 • Utilisée en général à l'intérieur de tout SGBD relationnel • Un LMD algébrique est possible, mais en général peu commode pour l'homme • On préfère les requêtes SQL, QUEL, QBE... • celles-ci sont traduites en expressions algébriques + procedurales donc + faciles à optimiser par des transformations syntaxiques
Opérateurs traditionnels • Opérateurs ensemblistes: UNION, INTERSECT, DIFFERENCE, TIMES • Ces opérateurs sont reformulés spécifiquement pour le modèle relationnel • Opérateurs relationnels spécifiques RESTRICT, PROJECT, JOIN, DIVIDE • Les expressions algébriques transforment des tables en une table (propriété de fermeture)
Opérateurs ensemblistes UNION INTERSECT DIFFERENCE PRODUCT a x a y b x b y c x c y a b c x y
Opérateurs relationnels a1 b1 c1 a1 b1 c2 a2 b1 c1 a2 b1 c2 a3 b2 c3 • Jointure (naturelle) • Division a1 b1 a2 b1 a3 b2 c1 b1 c2 b1 c3 b2 a x a y a z b x c y x y a
Opérateurs relationnels • Restriction • Projection
Définition syntactique • A TIMES B • Pour les 3 autres, A et B doivent être union-compatibles: • Mêmes attributs et dans le même ordre • Le résultat a les mêmes attributs • A UNION B • A INTERSECT B • A MINUS B S# SNAME STATUS CITY S1 Smith 20 London S4 Jones 10 Paris S# SNAME STATUS CITY S1 Smith 20 London S# SNAME STATUS CITY S1 Smith 20 London S4 Clark 20 London
Propriétés • UNION, INTERSECT, TIMES sont associatifs et commutatifs (A UNION B) UNION C = A UNION (B UNION C) (A UNION B) = (B UNION A) démontre ! • Et MINUS ?
Restriction • A WHERE X theta Y • theta est un opérateur de comparaison • WHERE X theta Y est la condition de restriction • un tuple t de A est sélectionné ssi WHERE X theta Y (t) = 'vrai' • Y = 'littéral' est aussi possible • A WHERE booléen - idem • formellement on procède en fait par les opérateurs ensemblistes, ex. A WHERE c1AND c2 = (A WHERE c1) INTERSECT (A WHERE c2) • S WHERE CITY = 'Paris' AND STATUS > '10'
Projection • A [X, Y,...Z] est une projection de A sur les attributs énumérés, tous distincts • A sans liste est une projection d'identité • A [ ] est une projection nulle • Exemples S S [S#, CITY] (S WHERE STATUS = 10 ) [S#, CITY] (S WHERE STATUS = 10 ) [S#, CITY] WHERE CITY = 'Paris'
Jointure naturelle • La jointure A JOIN B de deux tables A (X, Y) et B (Z, Y) est la table C avec les attributs : C (X, Y, Z) et les tuples (X:x, Y:y, Z:z ) tels que (x, y) est dans A et (y, z) est dans B • X, Y, Z peuvent être composés • La jointure naturelle est associative et commutative ?
-jointures • table C égale à : C = ( A TIMES B ) WHERE X Y • est la jointure de tables A(X,...) et B (Y,...) (S TIMES SP ) WHERE S.S# = SP.S# (((S RENAME CITY AS SCITY) TIMES S ) WHERE SCITY > CITY RENAME SNAME AS SNAME1) RESTRICT WHERE SNAME1 > SNAME) • Est-ce que la jointure est associative et commutative ?
Division • Table C ( X ) notée: A DIVIDEBY B est une division de tables A (X, Y) et B (Y) ssi C contient tous les tuples ( x )tels que( y )B , ( x, y )A S# S1 S# P# S1 P1 S1 P2 S2 P1 S2 P3 P# P1 P2 Les fournisseurs de toutes les pièces DIVIDEBY est-t-il associatif ou commutatif ?
Requêtes algébriques(comment seraient-elles en SQL ?) • (( S JOIN SP ) WHERE P# = 'P2' ) [ SNAME] • (((P WHERE COLOR = 'Red' ) [P#] JOIN SP ) [S#] JOIN S [SNAME] • (((P WHERE COLOR = 'Red' ) [P#, PNAME] JOIN SP ) [S#, PNAME] JOIN S [SNAME] • (( SP [S#, P#] DIVIDEBY P [P#] ) JOIN S ) [SNAME] • SP [S#, P#] DIVIDEBY ( SP WHERE S# = 'S2') [P#] • Est-ce vrai qu'une requête alg. est toujours +compliquée à formuler que celle correspondant en SQL ?
Utilité de l'algèbre • Puissance expressive: • 8 opérateurs de Codd permettent d'exprimer toute expression logique de prédicat de 1-er ordre • note: seulement 5 sont primitives (lesquels ?) • La puissance expressive de l'algèbre dite complétude relationnelle constitue la mesure de la puissance minimale de tout LMD assertionnel digne de ce nom
Utilité de l'algèbre • Technique de choix pour l'implémentation • Il n'y a que 8 opérateurs • Ces opérateurs sont faciles à implementer • Leur propriétés permettent de transformer les expressions en +efficaces à évaluer, en général (( S JOIN SP ) WHERE P# = 'P2' ) [SNAME] = ( S JOIN ( SP WHERE P# = 'P2' )) [SNAME] pourquoi la 2-ème expression semble plus efficace ?
Complétude relationnelle de SQL expression algébrique, une expression équivalente de SQL • Schéma de preuve: • opérateur algébrique, une expression équivalente de SQL • composition d'opérateurs algébriques, une composition équivalente de SQL
• A UNION B SELECT * FROM A UNION SELECT * FROM B ; • A (X) MINUS B (X) SELECT * FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.x1 = B.x1 AND A.x2 = B.x2...); • A TIMES B SELECT * FROM A B ; • A WHERE p SELECT * FROM A WHERE p; • A [x, y.., z] SELECT DISTINCT x,y..z FROM A ;
• Par induction: tablesA et B, sides expressions SQL pour A et B, alors des expressions SQL permettant à appliquer tout opérateur relationnel à A ou B • Prouve cette assertion !
Quelques règles de transformation(améliorations relationnelles) • Sélections d'abord A JOIN B WHERE restriction-sur-B = A JOIN ( B WHERE restriction-sur-B ) A JOIN B WHERE restriction-sur-A AND restriction-sur-B = (A WHERE restriction-sur-A ) JOIN ( B WHERE restriction-sur-B) • Forme conjonctive normaleWHERE p OR ( q AND r) = WHERE (p OR q) AND ( p OR r) • Il suffit qu'une condition soit .FAUX pour rejeter le tuple
Quelques règles d'amélioration • Réduction de restrictions (( A WHERE r1 ) WHERE r2 ) WHERE r3... = ( A WHERE r1 AND r2 AND r3 ...) • Réduction de projections à la dernière ( ((( A [project 1] ) [ project 2]) [project 3] )...[project n] =A [project n] • Etc.
Opérateurs additionnels • ( EXTEND P ADD 'Weight in Gr' , (WEIGHT * 454 ) AS WEIGHT1 ) WHERE WEIGHT1 > 1000 ; • SUMMARIZE SP GROUPBY ( P# ) ADD SUM ( QTY) AS TOTQTY • ( SUMMARIZE ( P WHERE COLOR = 'Red')GROUPBY ( CITY ) ADD COUNT AS N ) WHERE N > 5 ) [CITY]
Opérateurs additionnels • Division généralisée La division de A (X, Y) par B (X, Z) est C ( X, Z) où tout sous-tuple C (X:x) est le tuple de la division relationnelle et vice versa • Jointure externe • Assignation (pour mises à jour) S := S UNION (( S# : 'S6', SNAME : 'Baker') S := S MINUS ( S WHERE CITY = 'Paris')
Conclusion E. Codd à son travail
Conclusion A E. Coddpour les 25 ans du Modèle Relationnel