• Aucun résultat trouvé

Les opérateurs relationnels

3.2 Les bases de l'algèbre relationnelle

3.2.3 Les opérateurs relationnels

Opérateur de projection Après les opérateurs ensemblistes, nous poursuivons notre étude

en abordant maintenant les opérateurs relationnels. Comme pour le produit cartésien, les tables ne doivent pas nécessairement être compatibles avec l'union. L'opérateur de projection (projection operator, en anglais) SM(R) construit, à partir de la table R,une sous-table dont les noms d’attributs sont définis dans M. À titre d'exemple, considérons une table R avec les attributs (A,B,C,D). L'expression SA,C(R) signifie que R sera réduite à deux colonnes A et C. Dans une projection, les noms de colonnes peuvent apparaître dans un ordre quelconque. Ainsi, R' := SC,A(R) est la projection de la table R = (A,B,C,D) sur R' = (C,A). Dans la figure 3-7, la première projection SVille(EMPLOYÉ)

produit une table dont l'unique colonne contient, sans duplication, toutes les villes extraites de la table des employés. La seconde projection SAffectation,Nom(EMPLOYÉ) génère une sous-table

EMPLOYÉ

avenue de la Gare rue Faucigny

E# Nom Rue Ville

D6

contenant tous les numéros de département et les noms des employés qui y travaillent.

Opérateur de sélection

Un deuxième opérateur important VF(R) permet la sélection (selection, en anglais) des tuples d'une table R d'après une formule F.

La formule F contient un nombre déterminé de noms d'attributs ou de constantes liés entre eux par des opérateurs de comparaison tels que

«<», «>» ou «=», ou par des opérateurs logiques AND,OR et NOT. Par conséquent, VF(R) nous donne comme résultat des tuples de R qui satisfont la condition de sélection F.

Figure 3-8

La figure 3-8 montre des exemples de sélection de tuples depuis la table EMPLOYÉ. Le premier consiste à sélectionner tous les employés qui remplissent la condition «Ville = Fribourg», c'est-à-dire qui habitent à Fribourg. Le deuxième exemple, avec la condition

«Affectation = D6», sélectionne uniquement les employés qui travaillent au département D6. Enfin, le troisième exemple combine les deux critères de sélection précédents par l’opérateur logique AND dans la formule «Ville = Fribourg AND Affectation = D6». La table qui en résulte contient un élément unique, car Brodard est le seul employé qui vienne de Fribourg et qui, en même temps, travaille au département D6.

E# Nom Rue Ville

D3

avenue de la Gare rue du Tilleul

Romont Fribourg

E# Nom Rue Ville

D6 D6

Affectation

VAffectation=D6(EMPLOYÉ)

E4 Brodard rue du Tilleul Fribourg

E# Nom Rue Ville

D6

Affectation

VVille=Fribourg AND Affectation=D6(EMPLOYÉ)

Il est possible de combiner les opérateurs Il est naturellement possible de combiner les opérateurs de

l'algèbre relationnelle que nous venons d'étudier. Par exemple, si, après avoir extrait tous les employés du département D6 par la sélection VAffectation=D6(EMPLOYÉ), nous appliquons une projection de la table résultante sur l'attribut Ville par l'opérateur SVille(VAffectation=D6(EMPLOYÉ)), le résultat final sera une table contenant deux villes, Romont et Fribourg.

Opérateur de jointure (équi-jointure) Considérons maintenant l'opérateur de jointure (join operator,

en anglais) qui permet de composer deux tables en une seule. La jointure R_u_PS de deux tables R et S d'après le prédicat P est une combinaison de tous les tuples de R avec ceux de S, qui satisfont le prédicat de jointure P. Le prédicat de jointure contient un attribut de la table R et un attribut de S. Ces deux attributs sont liés par des opérateurs de comparaison, «<», «>» ou «=», définissant ainsi le critère de combinaison des tables R et S. Si le prédicat de jointure P contient l'opérateur de comparaison «=», on parle d'une équi-jointure (equi-join, en anglais).

La jointure demande des précautions ! On éprouve souvent des difficultés à comprendre l’opérateur de

jointure qui risque par conséquent de fournir des résultats erronés ou indésirés. L'oubli ou la définition incorrecte d’un prédicat pour combiner deux tables en sont généralement la cause.

La définition d’une jointure demande des précautions La figure 3-9 donne deux exemples de jointure, le prédicat de

jointure étant présent dans le premier et absent dans le second. En spécifiant EMPLOYÉ_u_Affectation=D#DÉPARTEMENT, nous joignons les deux tables EMPLOYÉ et DÉPARTEMENT pour compléter les données de chaque employé par des informations sur son département. Dans la seconde jointure où nous omettons le prédicat de jointure P en spécifiant seulement EMPLOYÉuDÉPARTEMENT, le résultat est un produit cartésien des tables EMPLOYÉ et DÉPARTEMENT. Cette combinaison des deux tables n'a pas beaucoup de sens, car elle joint tous les employés à tous les départements. Ainsi, nous constatons que la table résultat contient également des employés combinés avec des départements auxquels ils ne sont pas affectés (voir la table TOURNOI dans la figure 3-6 à titre de comparaison).

Figure 3-9 Jointure de deux tables avec et sans prédicat de jointure

La jointure vue comme un produit cartésien restreint

Comme les exemples à la figure 3-9 le montrent, l'opérateur de jointure _u_avec un prédicat de jointure P n'est rien d'autre qu'une restriction du produit cartésien. En principe, une jointure de deux tables R et S sans le prédicat de jointure équivaut à un produit cartésien de R et S. En d'autres termes, un prédicat vide, P={}, entraîne l'égalité suivante :

R_u_P={} S = R uS.

avenue de la Gare rue Faucigny

E# Nom Rue Ville

D6

avenue de la Gare rue Faucigny

E# Nom Rue Ville

D6 EMPLOYÉ |X|Affectation=D#DÉPARTEMENT

E# Nom Rue Ville Affectation D# Description

EMPLOYÉ XDÉPARTEMENT

Savoy

avenue de la Gare avenue de la Gare avenue de la Gare rue Faucigny

Si, dans une sélection, nous utilisons un prédicat de jointure comme prédicat de sélection, nous obtenons l’équation suivante :

R_u_P S = VP(R uS).

Selon cette formule générale, chaque jointure équivaut donc à une suite de deux opérations : la première effectue un produit cartésien et la seconde une sélection.

Les deux étapes de calcul

d’une jointure Considérons l’exemple de la figure 3-9. La jointure désirée

EMPLOYÉ_u_Affectation=D#DÉPARTEMENT peut être calculée en deux étapes : d'abord, nous évaluons le produit cartésien des tables EMPLOYÉ et DÉPARTEMENT ; ensuite, nous effectuons la sélection VAffectation=D#(EMPLOYÉuDÉPARTEMENT) sur la table résultat intermédiaire pour en extraire les tuples qui satisfont le prédicat de jointure «Affectation=D#». Le résultat final contient les mêmes tuples que ceux obtenus par évaluation directe de la jointure EMPLOYÉ_u_Affectation=D#DÉPARTEMENT (voir les tuples grisés, c'est-à-dire sélectionnés, dans la figure 3-9).

Opérateur de division Ladivision (division, en anglais) d'une table R par une table S est

possible à condition que S soit une sous-table contenue dans R.

L'opérateur de division RyS produit une sous-table R' à partir de R, telle que toutes les combinaisons de tuples r' dans R' avec les tuples s dans S sont contenues dans la table R. En d'autres termes, le produit cartésien R'uS doit être contenu dans la table R.

Figure 3-10

R : Les employés et leurs projets

P2 P4 Proj#

S : Combinaison de projets

E1 E4 E#

R' = R y S

Tous les employés qui participent aux projets P2 et P4

Un exemple de division

Dans la figure 3-10, la table R nous montre la participation des employés aux divers projets. Nous désirons maintenant connaître les employés qui travaillent simultanément sur les projets P2 et P4. À cet effet, nous créons une table S contenant les numéros de projet P2 et P4. Il est évident que S est contenu dans R. Par conséquent, la division R' := RyS est possible et nous donne comme résultat la table R' contenant les employés E1 et E4. Une rapide vérification nous confirme que E1 et E4 travaillent sur les projets P2 et P4 en même temps, car les tuples (E1,P2) et (E1,P4), ainsi que (E4,P2) et (E4,P4), existent dans la table R.

On peut exprimer l'opérateur de division en fonction des opérateurs de projection, de différence et du produit cartésien. Pour cette raison, en algèbre relationnelle il figure parmi les opérateurs substituables qui comprennent aussi les opérateurs d'intersection et de jointure.

Ensemble minimal d’opérateurs

En résumé, l'union, la différence, le produit cartésien, la projection et la sélection constituent l'ensemble minimal des opérateurs de base qui offrent toutes les fonctionnalités de l'algèbre relationnelle. Les opérateurs d'intersection, de jointure et de division peuvent être dérivés de ces cinq opérateurs de base, tout en admettant que la substitution est parfois complexe.

Conception des ordinateurs de bases de données

Les opérateurs de l'algèbre relationnelle ne présentent pas seulement un intérêt sur le plan théorique. Leur portée pratique est aussi importante. Ainsi, nous en aurons besoin pour optimiser les requêtes au niveau du langage des systèmes de bases de données relationnelles (voir 4.2.2). En outre, ils trouvent leur application dans la conception des ordinateurs de bases de données : au lieu d’être mis en œuvre sous forme logicielle, les opérateurs de l'algèbre relationnelle et leurs formes dérivées sont implantés directement dans des composants matériels de l'ordinateur.