Envoyé par
SQLpro
Je dirais l'inverse... Une jointure interne est un raffinement du produit cartésien...
Plaît-il ? Veux-tu dire qu’au moyen du seul opérateur produit (TIMES), on peut réaliser une jointure ? Que sous-entend le mot « raffinement » ? Sois précis !
J’en reste au fait que le produit est un cas particulier de la jointure et que l’« inverse » est faux (il est faux que la jointure puisse être obtenue à partir du seul produit). En effet, considérons les relations R1 et R2 d’en-têtes composés respectivement des attributs
X1, X2, ..., Xm, Y1, Y2, ..., Yn
et
Y1, Y2, ..., Yn, Z1, Z2, ..., Zp
Y1, Y2, ..., Yn étant les seuls attributs « joignables » (même nom, même type).
Pour simplifier la rédaction, utilisons les attributs composés
X = {X1, X2, ..., Xm} ; Y = {Y1, Y2, ..., Yn} et Z = {Z1, Z2, ..., Zp}
Alors la jointure naturelle (JOIN) de R1 et R2
R12 = R1 JOIN R2
est une relation ayant pour en-tête {X, Y, Z} et pour corps l’ensemble des tuples {X x, Y y, Z z}, tel que le tuple {X x, Y y} appartient à R1 (c'est-à-dire avec la valeur x pour X et la valeur y pour Y), et le tuple {Y y, Z z} appartient à R2 (c'est-à-dire avec la valeur y pour Y et la valeur z pour Z).
En passant aux cas particuliers :
– Si m= p = 0, R1 JOIN R2 dégénère en R1 INTERSECT R2 (intersection) ;
– Si n = 0 (c'est-à-dire si R1 et R2 n’ont aucun attribut en commun), R1 JOIN R2 dégénère en R1 TIMES R2 (produit cartésien).
Mais si n est > 0, au moyen du seul opérateur produit (TIMES), on ne peut pas réaliser la jointure de R1 et R2.
Maintenant, soit R3 la relation résultant du produit de R1 et R2, d’en-tête
{X1, X2, ..., Xm, Y1, Y2, ..., Yn Y’1, Y’2, ..., Y’n, Z1, Z2, ..., Zp}
dans lequel il aura fallu renommer en Y’1, Y’2, ..., Y’n les attributs Y1, Y2, ..., Yn de R2.
A partir du produit :
R3 = R1 TIMES R2
pour parvenir à réaliser la jointure R1 JOIN R2 il est nécessaire d’effectuer en plus une 2e opération, une restriction portant sur R3, c'est-à-dire faire intervenir l’opérateur RESTRICT (WHERE) avec R3 pour opérande :
R3 WHERE p
Où p est une expression booléenne, en fait un prédicat qui est la condition de restriction :
Y1 = Y’1 AND Y2 = Y’2 AND ... Yn = Y’n
Cette 2e opération correspond-elle au raffinement dont tu parles ?
Partager