VII.CALCUL RELATIONNEL par n-uplet
Les requêtes sont de la forme {t | P(t)} .
C'est l'ensemble des n-uplets tels que le prêdicat P(t) est vrai pour t.
t est une variable n-uplet et t [A] désigne la valeur de l'attribut A dans t
t r signifie que t est un n-uplet de r
P est une formule de la logique de premier ordre
3.1) Rappel sur le calcul des prédicats
Des ensembles d'attributs, de constantes, de comparateurs {<, … }
Les connecteurs logiques 'et' , 'ou' V et la négation
Les quantificateurs et
t r (Q(t)) : Il existe un tuple t de r tel que Q est vrai
t r(Q(t)) : Q est vrai pour tout t de r
3.2) Exemples de requêtes
Considérons les schémas de relations suivants :
Film (Titre, Réalisateur, Acteur) instance f
Programme (Nomciné, Titre, Horaire) instance p f contient des infos sur tous les films et p concerne le programme à Bordeaux
Les films réalisés par Bergman
{t | t f t [Réalisateur] = "Bergman" }
Les films où Jugnot et Lhermite jouent ensembles
{ t | t f s f (t[Titre] = s[Titre] t[Acteur] = "Jugnot" s[Acteur] = "Lhermite") }
Les titres des films programmés à Bordeaux
{t | s p (t[Titre] = s[Titre]) }
Les films programmés à l'UGC mais pas au Trianon
{t | s p ( s[Titre] = t[Titre] s[NomCiné] = "UGC"
u p ( u[NomCiné] = "Trianon" u[Titre] = t[Titre] )) }
Les titres de films qui passent à l'UGC ainsi que leurs réalisateurs
{ t | s p ( u f (s[NomCiné] = 'UGC"
s[Titre] = u[Titre] = t[Titre] t[Réal] = u[Réal])) } 3.3) Expressions "non saines" Il est possible d'écrire des requêtes en calcul qui retournent une relation infinie. Exemple : Soit NumCte(Num) avec l'instance n et la requête {t | t n} i.e les numéros de compte non recensés. Si on considère que le Dom(Num) = N, alors la réponse à cette requête est infinie. Une requête est saine si quelle que soit l'instance de la base dans laquelle on l'évalue, elle retourne une réponse finie. Dépendance du domaine.
3.4) Calcul relationnel par domaine
Les requêtes sont de la forme : { < x1,…,xn > | P(x1,,..., xn )} Les xi représentent des variables de domaine. P(x1 ,... , xn) est une formule similaire à celles qu'on trouve dans la logique des prédicats. Exemple : Les titres de films programmés à l'UGC de Bordeaux { | t, h> p( nc = "UGC") }
3.5) Relation entre les 3 langages
Toute requête exprimée en algèbre peut être exprimée par le calcul.
Toute requête "saine" du calcul peut être exprimée par une requête de l'algèbre.
Les 3 langages sont donc équivalents d'un point de vue puissance d'expression.
L'algèbre est un langage procédurale (quoi et comment) alors que le calcul ne l'est pas (seulement quoi).
|