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

Post on 04-Apr-2015

111 views 1 download

Tags:

transcript

Algèbre relationnelle

Dominique LaurentUniversité de Tourslaurent@univ-tours.fr

Eléments de base

Univers : ensemble fini d ’attributs, UAttribut : associé à un ensemble de

valeurs appelé domaine, dom(A)Schéma relationnel : sous-

ensemble non vide de l ’universn-uplet sur le schéma R :

application de R dans l ’union des domaines des attributs de R

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 n1num_c n2

Notation : t = (n1, n2)

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

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]

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

Opérations de base

Opérations ensemblistes : union, intersection, différence

Opérations relationnelles : projection sélection jointure renommage

Projection

r[R] et X sous-ensemble de RProjection 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}

Projection - Exemple

etud[num_et, nom_et, adr_et]X = nom_et, adr_etx(etud)

liste des noms et adresses des étudiants

Attention : si Y = nom_et, adr_p y(etud) n ’est pas défini

Sélection

r[R] relation définie sur RC condition de sélection de la forme

C = (A comp a), ou C = (A comp B) C combinaison par les connecteurs

logiquesSé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

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

Jointure

r[R] et s[S] deux relationsJointure 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

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

Jointure - Exemple (suite)

etud prof définie? Sur quel schéma? Signification intuitive?

etud etud définie? Sur quel schéma? Signification intuitive?

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 ?

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 : A1A(r)

A1A(r) contient les mêmes n-uplets que r

Utilisation : avoir deux versions distinctes d ’une même relation

Renommage - Exemple

Numéros des étudiants inscrits à plus d ’un cours ? inscrit[num_et, num_c] (1ère

version)

nnum_c(inscrit) (2ème version)

nnum_c(inscrit) inscrit (jointure)

num_cn(nnum_c(inscrit) inscrit)(sélection)

num_et(num_cn(nnum_c(inscrit) inscrit))

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

Opérations ensemblistes - Exemples

Liste de tous les noms, prof et étudiants nom_p(prof) nom_et(etud) non défini

nnom_p(nom_p(prof)) nnom_et(nom_et(etud))

Numéros des étudiants inscrits à un seul cours num_et(inscrit) -

num_et(num_cn(nnum_c(inscrit) inscrit))

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) ?

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)

Extension : quotient relationnel

r[R] et s[S] telles que S RQuotient de r par s

relation définie sur R - S notation : r s r s = {t | (us)(v r)(v.R=t et v.S=u)}

Propriété : r s = R-S(r) - R-S ((R-S(r) s) - r)

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

Algèbre relationnelle et SQL - Exemples

nom_et,adr_et(num_c123(etud inscrit))

SELECT nom_et, adr_et FROM etud, inscrit WHERE num_c 123

AND etud.num_et = inscrit.num_et

Algèbre relationnelle et SQL - Exemples

num_et(num_cn(nnum_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

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 ?

Quotient relationnel et SQL

r[A, B] , s[B]r s défini sur A par

SELECT distinct A FROM rWHERE NOT EXISTS

((SELECT r’.A, s.B FROM r r’ , s

WHERE r.A = r’.A)MINUS

(SELECT * FROM r))

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

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 inscritWHERE num_et = 123

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 inscritGROUP BY num_et

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 resultGROUP BY num_etHAVING count(distinct num_c) > 3