Opérations dans le modèle de données relationnel

Dans la précédente section nous avons défini la notion mathématique de modèle relationnel. Maintenant nous savons comment les données peuvent être stockées en utilisant un modèle de données relationnel mais ne savons que faire pour retrouver quelque chose dans la base. Par exemple quelqu'un peut demander les noms de tous les fournisseurs qui vendent la pièce 'vis' (Screw). Deux sortes de notations pour exprimer les opérations sur les relations ont pour cela été définies :

Algèbre relationnelle

E.F. Codd mit au point l'algèbre relationnelle en 1972. Il consiste en un ensemble d'opérations sur les relations :

Pour une description plus détaillée et une définition de l'algèbre relationnelle voir : Principles of Database and Knowledge (Jeffrey D. Ullman, Computer Science Press , 1988) ou An Introduction to Database Systems (C. J. Date, 1994, Addison-Wesley.)

Exemple 2-3. Une requête utilisant l'algèbre relationnelle

Rappelons que nous avons formulé tous ces opérateurs relationnels pour pouvoir retrouver des données dans la base. Tâchons de déterminer les noms des fournisseurs qui vendent la pièce Screw. La réponse peut être obtenue en utilisant l'algèbre relationnelle :
πSUPPLIER.SNAMEPART.PNAME='Screw'(SUPPLIER ∏ SELLS ∏ PART))
      

Nous appelons cette opération une requête. Si nous l'évaluons (appliquons) à nos tables d'exemples, nous obtiendrons le résultat suivant :
                             SNAME
                            -------
                             Smith
                             Adams
      

Calcul relationnel

Le calcul relationnel est basé sur la logique de premier ordre. Il existe deux variantes du calcul relationnel :

Nous parlerons du calcul relationnel de tuple seulement parce qu'il est l'un des fondements de la plupart des langages relationnels. Pour plus de détails voir : An Introduction to Database Systems (C. J. Date, 1994, Addison-Wesley) et Principles of Database and Knowledge (Jeffrey D. Ullman, Computer Science Press , 1988).

Calcul relationnel de tuple

Les requêtes utilisées en TRC (Tuple Relational Calculus) ont la forme suivante : x(A) ∣ F(x) où x est un tuple variable, A est un ensemble d'attributs et F une formule. La relation résultante consiste en tous les tuples t(A) qui satisfont F(t).

Si nous voulons répondre à la question de l'exemple utilisant TRC nous formulerons la requête suivante :
     {x(SNAME) ∣ x ∈ SUPPLIER ∧ \nonumber
                       ∃ y ∈ SELLS ∃ z ∈ PART (y(SNO)=x(SNO) ∧ \nonumber
                        z(PNO)=y(PNO) ∧ \nonumber
                        z(PNAME)='Screw')} \nonumber
     

Algèbre relationnelle contre calcul relationnel

L'algèbre relationnelle et le calcul relationnel ont la même puissance d'expression; donc toutes les requêtes qui peuvent être formulées en utilisant l'un peuvent aussi l'être grâce à l'autre. Ce fut vérifié en premier par E.F. Codd en 1972. La preuve est fondée sur un algorithme (appelé "algorithme de réduction de Codd") par lequel une expression arbitraire du calcul relationnel peut être réduite à une expression au sens équivalent de l'algèbre relationnelle.

Certains déclarèrent que les langages basés sur le calcul relationnel sont de "haut niveau" ou "plus déclaratifs" que les langages basés sur l'algèbre relationnelle parce que ce dernier spécifie (partiellement) l'ordre des opérations tandis que le calcul laisse le compileur ou l'interpréteur déterminer l'ordre d'évaluation le plus efficace.