🧮 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:

\[BOARDGAME(\underline{id}, name, releasedate)\]

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\).

\[\sigma_{(E)}R\]

Un exemple de sélection sur la relation \(BOARDGAME\)

\[\sigma_{(id{}\geq{}3)}BOARDGAMES\]

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\).

\[\Pi_{(A1, A2, .., AN)}R\]

Un exemple de projection sur la relation \(BOARDGAME\)

\[\Pi_{(name)}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.

\[R_{1} \cup R_{2}\]

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:

id

name

1

HeroQuest

2

Raiders of the North Sea

3

Scythe

4

Star Wars Rebellion

et la relation \(Videogame\) tel que:

id

name

1

Rayman

2

Star Wars Republic Commando

3

StarCraft

4

RedAlert 2

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}\).

\[R_{1} \cap R_{2}\]

Soit la relation \(VGBen\) tel que:

id

name

1

Rayman

2

Star Wars Republic Commando

3

StarCraft

et la relation \(VGHan\) tel que:

id

name

1

Rayman 2 The Great Escape

2

Star Wars Republic Commando

3

StarCraft

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}\).

\[R_{1} - R_{2}\]

Soit la relation \(VGBen\) tel que:

id

name

1

Rayman

2

Star Wars Republic Commando

3

StarCraft

et la relation \(VGHan\) tel que:

id

name

1

Rayman 2 The Great Escape

2

Star Wars Republic Commando

3

StarCraft

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}\).

\[R_{1} \times R_{2}\]

Soit la relation \(Couleur\) tel que:

name

red

orange

green

et la relation \(Videogame\) tel que:

id

name

1

Rayman

2

Star Wars Republic Commando

3

StarCraft

4

RedAlert 2

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\).

\[R_{1} \Join_{E} R_{2}\]

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:

id

name

1

Rayman

2

Star Wars Republic Commando

3

StarCraft

4

RedAlert 2

Soit la relation \(Budget\) tel que:

id

name

budget

type

1

Luke

25

RTS

2

Han

15

platform

3

Ben

10

RTS

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}\).

\[R_{1}\Join_{E}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}\).

\[R_{1}\Join_{A_{1} = A_{2}}R_{2}\]

Soit la relation \(Videogame\) tel que:

id

name

category_id

1

Rayman

1

2

Warcraft

2

3

StarCraft

2

Soit la relation \(Category\) tel que:

id

name

1

Platform

2

RTS

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}\).

\[R_1 \Join_{A_1, A_2, .., A_n} 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_1 \div R_2\]

\(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:

id

name

matricule

1

Z6PO

C3PO

2

D2R2

R2D2

3

K2S0

K2SO

4

BB8

BB8

et la relation \(ImperialDroid\) tel que:

matricule

K2S0

La division entre ces deux relations, \(Droid \div ImperialDroid\), retourne:

id

name

3

K2SO