1 / 31

Algèbre relationnelle

Algèbre relationnelle. Dominique Laurent Université de Tours laurent@univ-tours.fr. Eléments de base. Univers : ensemble fini d ’attributs, U Attribut : associé à un ensemble de valeurs appelé domaine, dom(A) Schéma relationnel : sous-ensemble non vide de l ’univers

mariel
Télécharger la présentation

Algèbre relationnelle

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algèbre relationnelle Dominique Laurent Université de Tours laurent@univ-tours.fr

  2. Eléments de base • Univers : ensemble fini d ’attributs, U • Attribut : associé à un ensemble de valeurs appelé domaine, dom(A) • Schéma relationnel : sous-ensemble non vide de l ’univers • n-uplet sur le schéma R : application de R dans l ’union des domaines des attributs de R

  3. Eléments de base (exemple) • U = {num_et, nom_et, adr_et, num_p, nom_p, adr_p, num_c, nom_c} • R= {num_et, num_c} • t : R  dom(num_et)  dom(num_c) num_et  n1 num_c  n2 • Notation : t = (n1, n2)

  4. Eléments de base (suite) • Relation sur R : ensemble fini de n-uplets définis sur R • Base de données sur U : ensemble de relations définies sur des schémas de U • Remarque : plusieurs relations d ’une même base peuvent avoir le même schéma

  5. Exemple • BD = {etud, prof, cours, inscrit} • Avec : • etud[num_et, nom_et, adr_et] • prof[num_p, nom_p, adr_p] • cours[num_c, nom_c, num_p] • inscrit[num_et, num_c] • Remarque : on peut ajouter • anc_etud[num_et, nom_et, adr_et]

  6. Algèbre relationnelle • Combine les relations pour exprimer les requêtes • Formalisme rigoureux dont le pouvoir d ’expression est « fort » : ~ logique du 1er ordre • Propriétés formelles pour optimiser le calcul des réponses

  7. Opérations de base • Opérations ensemblistes : • union, intersection, différence • Opérations relationnelles : • projection • sélection • jointure • renommage

  8. Projection • r[R] et X sous-ensemble de R • Projection de r sur X : • relation définie sur X contenant les restrictions sur X des n-uplets de r • notation : x(r) • x(r) = {u |  t dans r tel que u=t.R} • Remarque : attention à l ’écriture • x(r) = {t.R | t dans r}

  9. Projection - Exemple • etud[num_et, nom_et, adr_et] • X = nom_et, adr_et • x(etud) • liste des noms et adresses des étudiants • Attention : si Y = nom_et, adr_p • y(etud) n ’est pas défini

  10. Sélection • r[R] relation définie sur R • C condition de sélection de la forme • C = (A comp a), ou C = (A comp B) • C combinaison par les connecteurs logiques • Sélection de r selon C • relation définie sur R • notation : C(r) • C(r) est l ’ensemble des n-uplets de r qui satisfont C

  11. Sélection - Exemple • etud[num_et, nom_et, adr_et] • C = (adr_et = Casa ou num_et > 100) • C(etud) • liste des étudiants dont l ’adresse est Casa ou dont le numéro est supérieur à 100 • nom_et(C(etud)) • liste des noms de ces étudiants • Attention : si C = (nom_p = nom_et) • C(etud)n ’est pas défini

  12. Jointure • r[R] et s[S] deux relations • Jointure de r par s • relation définie sur R  S • notation : r s • r s = {t | t.R  r et t.S  s} • Remarques • une jointure est toujours définie • opération coûteuse à calculer

  13. Jointure - Exemple • etud[num_et, nom_et, adr_et] inscrit[num_et, num_c] • etud inscrit • définie sur num_et, nom_et, adr_et, num_c • liste des inscriptions des étudiants • nom_et,num_c(etud inscrit) • liste des noms des étudiants et des numéros des cours auxquels ils sont inscrits

  14. Jointure - Exemple (suite) • etud prof • définie? Sur quel schéma? • Signification intuitive? • etud etud • définie? Sur quel schéma? • Signification intuitive?

  15. Jointure - Propriétés • R(r s) = r ? • R(r s) S(r s) = r s ? • r[RS], R(r) S(r) = r ? • C(r s) = C(r) s ?

  16. Renommage • r[R] , A attribut de R , A1 nouveau nom pour A • Renommage de A en A1 dans r • relation définie sur (R - {A})  {A1} • notation : A1A(r) • A1A(r) contient les mêmes n-uplets que r • Utilisation : avoir deux versions distinctes d ’une même relation

  17. Renommage - Exemple • Numéros des étudiants inscrits à plus d ’un cours ? • inscrit[num_et, num_c] (1ère version) • nnum_c(inscrit) (2ème version) • nnum_c(inscrit) inscrit (jointure) • num_cn(nnum_c(inscrit) inscrit) (sélection) • num_et(num_cn(nnum_c(inscrit) inscrit))

  18. Opérations ensemblistes • r[R] et s[R] définies sur le même schéma R • r  s , r  s , r - s • définies sur R • sémantique habituelle • Remarque : r  s = r s

  19. Opérations ensemblistes - Exemples • Liste de tous les noms, prof et étudiants • nom_p(prof)  nom_et(etud) non défini • nnom_p(nom_p(prof))  nnom_et(nom_et(etud)) • Numéros des étudiants inscrits à un seul cours • num_et(inscrit) - num_et(num_cn(nnum_c(inscrit) inscrit))

  20. Opérations ensemblistes - Propriétés • Sélection • C(r  s) = C(r) C(s) ? • Projection • x(r  s) = x(r)  x(s) ? • x(r  s) = x(r)  x(s) ? • x(r - s) = x(r) - x(s) ? • Jointure • (r  r’) s = (r  s) (r’  s) ?

  21. Extension : quotient relationnel • Liste des numéros des étudiants inscrits à tous les cours ? • n est dans la réponse si pour tout n_c dans cours, (n, n_c) est dans inscrit • D ’où la formule pour la réponse : • {n | ( (n_c,x)  cours), (n, n_c)  inscrit} • Ecriture algébrique : • inscrit  num_c(cours)

  22. Extension : quotient relationnel • r[R] et s[S] telles que S  R • Quotient de r par s • relation définie sur R - S • notation : r  s • r  s = {t | (us)(v r)(v.R=t et v.S=u)} • Propriété : • r  s = R-S(r) - R-S ((R-S(r) s) - r)

  23. Algèbre relationnelle et SQL • Projection, sélection, jointure : • SELECT <attributs de la projection> • FROM <relations de l ’expression> • WHERE <condition de sélection> AND<conditions de jointure> • Renommage : • au niveau des attributs • au niveau des relations

  24. Algèbre relationnelle et SQL - Exemples • nom_et,adr_et(num_c123(etud inscrit)) • SELECT nom_et, adr_et • FROM etud, inscrit • WHERE num_c  123 AND etud.num_et = inscrit.num_et

  25. Algèbre relationnelle et SQL - Exemples • num_et(num_cn(nnum_c(inscrit) inscrit)) • SELECT inscrit.num_et • FROM inscrit, inscrit inscr • WHERE inscrit.num_c  inscr.num_c AND inscrit.num_et = inscr.num_et

  26. Algèbre relationnelle et SQL • Opérations ensemblistes • union, intersect, minus • entre deux clauses SELECT FROM WHERE • Liste des noms et adresses des étudiants inscrits seulement au cours de numéro 123 • Algèbre relationnelle ? • SQL ?

  27. Quotient relationnel et SQL • r[A, B] , s[B] • r  s défini sur A par • SELECT distinct A FROM r WHERE NOT EXISTS ((SELECT r’.A, s.B FROM r r’ , s WHERE r.A = r’.A) MINUS (SELECT * FROM r))

  28. Quotient relationnel et SQL • Utilisation des vues • CREATE VIEW <nom_de_vue> AS (<requête SQL>) • Liste des noms des étudiants habitant Casa et inscrits à tous les cours assurés par un prof habitant Tours • Créer une vue pour chaque relation r et s • Appliquer la requête précédente

  29. Fonctions en SQL • Fonctions classiques : • min, max, avg, count, sum • Exemple : inscrit[num_et, num_c] • Nombre de cours où l ’etudiant de num 123 est inscrit • SELECT count(distinct num_c) FROM inscrit WHERE num_et = 123

  30. Fonctions en SQL et groupements • Généraliser la requête précédente pour chaque étudiant • Utilisation de GROUP BY • SELECT num_et, count(distinct num_c) FROM inscrit GROUP BY num_et

  31. Fonctions en SQL et groupements - Exemple • result[num_et, num_c, note] • Liste des numéros des étudiants inscrits à plus de 3 cours, avec leur moyenne générale • SELECT num_et, avg(note) FROM result GROUP BY num_et HAVING count(distinct num_c) > 3

More Related