🧮 L’algèbre relationnel#
Il s’agit du support mathématique cohérent sur lequel repose le modèle relationnel. Il propose un ensemble d’opérations élémentaires qui représente des requêtes sur la BD dont le résultat s’exprime sous la forme d’une relation. C’est le formalisme au coeur du langage SQL
.
Danger
Les notations de l’algèbre relationnelle ne sont pas standardisées.
Opérations élémentaires#
Pour la suite de cette section nous considérerons la relation \(BOARDGAME\) suivante:
avec les enregistrements suivants:
id |
name |
releasedat |
1 |
HeroQuest |
1991-12-15 |
2 |
Raiders of the North Sea |
1993-05-05 |
3 |
Scythe |
1994-04-03 |
4 |
Star Wars Rebellion |
1991-11-20 |
Sélection \(\sigma\)#
La sélection génère une relation regroupant exclusivement toutes les occurrences de la relation \(R\) qui satisfont l’expression logique \(E\).
Un exemple de sélection sur la relation \(BOARDGAME\)
id |
name |
releasedate |
3 |
Scythe |
1994-04-03 |
4 |
Star Wars Rebellion |
1991-11-20 |
Projection \(\Pi\)#
La projection consiste à supprimer les attributs autres que \(A1,A2,..,An\) d’une relation \(R\).
Un exemple de projection sur la relation \(BOARDGAME\)
name |
HeroQuest |
Raiders of the North Sea |
Scythe |
Star Wars Rebellion |
Opérations entre plusieurs relations#
Union \(\cup\)#
Opération ensembliste commutative portant sur deux relations \(R_{1}\) et \(R_{2}\) ayant le même schéma. Le résultat \(R_{3}\) est constituée des n-uplets de \(R_{1}\) et \(R_{2}\) sans doublon.
Attention
\(R_{1}\) et \(R_{2}\) doivent avoir les mêmes attributs.
Si une occurrence existe dans \(R_{1}\) et \(R_{2}\) elle n’apparaît qu’une seule fois dans le résultat.
Le résultat est une nouvelle relation \(R_{3}\) qui posséde les mêmes attributs que \(R_{1}\) et \(R_{2}\).
Si \(R_{1}\) et \(R_{2}\) sont vide alors \(R_{3}\) est vide. Si \(R_{1}\) est vide alors \(R_{2} = R_{3}\) et respectivement.
Soit la relation \(Boardgame\) tel que: |
|
||||||||||
et la relation \(Videogame\) tel que: |
|
L’union de ces deux relations, \(Boardgame \cup Videogame\), retourne:
id |
name |
1 |
HeroQuest |
2 |
Raiders of the North Sea |
3 |
Scythe |
4 |
Star Wars Rebellion |
1 |
Rayman |
2 |
Star Wars Republic Commando |
3 |
StarCraft |
4 |
RedAlert 2 |
Intersection \(\cap\)#
Opération ensembliste commutative portant sur deux relations \(R_{1}\) et \(R_{2}\) ayant le même schéma. Le résultat \(R_{3}\) est constituée des n-uplets appartenant à \(R_{1}\) et \(R_{2}\).
Soit la relation \(VGBen\) tel que: |
|
||||||||
et la relation \(VGHan\) tel que: |
|
L’intersection de ces deux relations, \(VGBen \cap VGHan\), retourne:
id |
name |
2 |
Star Wars Republic Commando |
3 |
StarCraft |
Différence \(-\)#
Opération ensembliste non commutative portant sur deux relations \(R_{1}\) et \(R_{2}\) ayant le même schéma. Le résultat \(R_{3}\) est constituée des n-uplets appartenant uniquement à \(R_{1}\).
Soit la relation \(VGBen\) tel que: |
|
||||||||
et la relation \(VGHan\) tel que: |
|
La différence entre ces deux relations, \(VGBen - VGHan\), retourne:
id |
name |
1 |
Rayman |
L’autre différence entre ces deux relations, \(VGHan - VGBen\), retourne:
id |
name |
1 |
Rayman 2 The Great Escape |
Produit cartésien \(\times\)#
Opération ensembliste commutative portant sur deux relations \(R_{1}\) et \(R_{2}\). Le résultat \(R_{3}\) regroupe exclusivement toutes les possibilités de combinaison des occurences de \(R_{1}\) et \(R_{2}\).
Soit la relation \(Couleur\) tel que: |
|
||||||||||
et la relation \(Videogame\) tel que: |
|
Le produit cartésien de ces deux relations, \(Videogame \times Couleur\), retourne:
id |
name |
couleur name |
1 |
Rayman 2 The Great Escape |
red |
1 |
Rayman 2 The Great Escape |
orange |
1 |
Rayman 2 The Great Escape |
green |
2 |
Star Wars Republic Commando |
red |
2 |
Star Wars Republic Commando |
orange |
2 |
Star Wars Republic Commando |
green |
3 |
StarCraft |
red |
3 |
StarCraft |
orange |
3 |
StarCraft |
green |
Jointure \(\Join\)#
Opération portant sur deux relations \(R_{1}\) et \(R_{2}\). Le résultat \(R_{3}\) regroupe exclusivement toutes les possibilités de combinaison des occurrences de \(R_{1}\) et \(R_{2}\) qui satisfont l’expression logique \(E\).
Important
Si \(R_{1}\) ou \(R_{2}\) ou les deux sont vides, alors la relation qui résulte de la jointure est vide.
Indication
La jointure n’est rien d’autre qu’un produit cartésien suivi d’une sélection: \(R_{1} \Join_{E} R_{2} = \sigma_{(E)}(R_{1} \times R_{2})\).
Soit la relation \(Videogame\) tel que: |
|
||||||||||||||||
Soit la relation \(Budget\) tel que: |
|
Le résultat de la jointure \(Videogame \Join_{((price \leqslant budget) \land (type = type) )} Budget\) retourne:
id |
name |
budget |
type |
id |
name |
price |
type |
1 |
Luke |
25 |
RTS |
2 |
Warcraft |
25 |
RTS |
1 |
Luke |
25 |
RTS |
3 |
StarCraft |
20 |
RTS |
2 |
Han |
15 |
platform |
3 |
Rayman |
15 |
platform |
Thêta-jointure \(\Join_{E}\)#
Jointure dans laquelle \(E\) est une simple comparaison entre un Attribut \(A_{1}\) de la relation \(R_{1}\) et un attribut \(A_{2}\) de la relation \(R_{2}\).
Équi-jointure \(\Join_{A_{1}=A_{2}}\)#
Une équi-jointure est une thêta-jointure dans laquelle \(E\) est un test d’égalité entre un Attribut \(A_{1}\) de la relation \(R_{1}\) et un attribut \(A_{2}\) de la relation \(R_{2}\).
Soit la relation \(Videogame\) tel que: |
|
||||||||||||
Soit la relation \(Category\) tel que: |
|
L’équi-jointure \(Videogame \Join_{(Videogame.category\_id = Category.id)}Category\) retourne:
id |
name |
category_id |
id |
name |
1 |
Rayman |
1 |
1 |
Platform |
2 |
Warcraft |
2 |
2 |
RTS |
3 |
StarCraft |
2 |
2 |
RTS |
Jointure naturelle \(\Join\)#
Jointure dans laquelle \(E\) est un test d’égalité entre les attributs qui portent le même nom dans les relations \(R_{1}\) et \(R_{2}\).
Division \(\div\)#
Opération portant sur deux relations \(R_1\) et \(R_2\), telles que le schéma de \(R_2\) est strictement inclus dans celui de \(R_1\), génère une relation \(R_3\) regroupant toutes les parties d’occurrences de \(R_1\) qui, associées à toutes les occurrences de \(R_2\), se retrouvent dans \(R_1\).
\(R_2\) ne peut pas être vide, tous les attributs de \(R_2\) doivent être présents dans \(R_1\), \(R_1\) doit posséder au moins un attribut de plus que \(R_2\) (inclusion stricte).
Soit la relation \(Droid\) tel que: |
|
|||||||||||||||
et la relation \(ImperialDroid\) tel que: |
|
La division entre ces deux relations, \(Droid \div ImperialDroid\), retourne:
id |
name |
3 |
K2SO |