Formulé par E. Codd en 1970
Fondé sur la théorie des relations (partie de la théorie naïve des ensembles)
Propose une solution pour
Facile à traduire/mettre en œuvre dans des langages réels exemple~: Structured Query Language (SQL)
Deux domaines
D1={1,2,5}D2={2,4}
Un produit cartésien
D1×D2={(1,2),(1,4),(2,2),(2,4),(5,2),(5,4)}
Une relation
R={(1,2),(1,4),(5,2),(5,4)}
Une relation est un (sous-) ensemble (d'un produit cartésien)
On peut représenter R par le tableau :
X1 | X2 |
---|---|
1 | 2 |
1 | 4 |
5 | 2 |
5 | 4 |
Chaque ligne de la table correspond à un élément de la relation R
Dans ce cours, toutes les relations ont un nombre fini d'éléments !
On appelle cardinalité d'une relation R, notée |R|, le nombre d'éléments de R.
Soit R⊂D1×D2×⋯×Dk, l'entier k est appelé arité de R.
On parle parfois aussi de degré d'une relation.
Une relation binaire est une relation d'arité 2
Une relation (au sens classique) peut se voir comme une table à deux dimensions :
chaque ligne correspond alors à un k-uplet (si la relation est d'arité k),
chaque élément d'une colonne est à valeur dans un domaine.
Une relation (au sens classique) peut se voir comme une table à deux dimensions :
chaque ligne correspond alors à un k-uplet (si la relation est d'arité k),
chaque élément d'une colonne est à valeur dans un domaine.
En BD relationnelle, on veut pouvoir donner un nom à chaque colonne
Pas deux attributs identiques dans une même table
L'idée de nommer les colonnes plutôt que de les désigner par une position/un numéro se retrouve dans les sytèmes qui manipulent des données tabulaires (Pandas/Python
, R
, Spark
, ...).
ville : ensemble de chaînes de caractères (noms de villes).
heure : ensemble de chaînes de caractères de la forme XYhZT où X,Y,Z,T sont des chiffres
En notation ISO une heure s'écrit 'HH:MM:SS' (s' on oublie le fuseau horaire) 2023-09-15 10:53:35
h-dep | dest | h-arr | prov |
---|---|---|---|
13h15 | Lyon | 15h15 | Paris |
13h22 | Nantes | 15h30 | Paris |
Schéma: Train(h-dep:heure, dest:ville , h-arr:heure , prov:ville)
Arité : 4, Cardinalité : 2
L'ordre (des lignes ou colonnes) n'a pas vraiment d'importance
En BD, l'ordre des éléments et l'ordre des colonnes n'a pas d'importance (on désigne les membres d'un k-uplet par leur nom plutôt que par leur position/rang)
La définition formelle diffère donc de celle d'une relation classique
Soient {A1,...,Ak} un ensemble fini et D1,...,Dk suite de domaines.
Une relation R de schéma R(A1:D1,A2:D2,…,Ak:Dk) est la donnée d'un ensemble d'éléments, noté R et de k fonctions A1:R→D1, ..., Ak:R→Dk.
Pour tout t∈R et i≤k, on note t.Ai=Ai(t) l'image par Ai de t.
Un élément t de R est appelé tuple de la relation R
La relation {Train}(h-dep:heure, dest:ville , harr:heure , prov:ville)
hdep | dest | harr | prov |
---|---|---|---|
13h15 | Lyon | 15h15 | Paris |
13h22 | Nantes | 15h30 | Paris |
est constituée de deux tuples e1, e2 avec :
L'union et l'intersection sont des opérations portant sur deux relations R1 et R2 de même schéma
T=R1∩R2 est constituée des tuples appartenant à R1 et à R2.
Schémas de R1∪R2, R1∩R2 sont les mêmes que ceux de R1 et R2
Train 1
h-dep | dest | num |
---|---|---|
13h15 | Lyon | 213 |
13h29 | Marseille | 1024 |
14h15 | Lyon | 214 |
Train 2
h-dep | dest | num |
---|---|---|
13h39 | Avignon | 43 |
14h15 | Lyon | 214 |
Train 1 ∪ Train 2
h-dep | dest | num |
---|---|---|
13h15 | Lyon | 213 |
13h29 | Marseille | 1024 |
14h15 | Lyon | 214 |
13h39 | Avignon | 43 |
Train 1 ∩ Train 2
h-dep | dest | num |
---|---|---|
14h15 | Lyon | 214 |
Soient:
Dans le contexte "classique" : R1×R2={(e1,e2):e1∈R1,e2∈R2}
R=R1×R2 de schéma R(A1,A2,...,Ak,B1,B2,...,Bℓ). Le schéma de R est l'union des schémas de R1 et R2
En algèbre relationnelle, cette opération est commutative ( R1×R2=R2×R1 ) et associative
R=R1×R2 est la relation de schéma R(A1,A2,...,Ak,B1,B2,...,Bℓ) vérifiant~:
t.A1=t1.A1,…,t.Ak=t1.Ak,t.B1=t2.B1,…,t.Bℓ=t2.Bℓ
t.A1=t1.A1,…,t.Ak=t1.Ak,t.B1=t2.B1,…,t.Bℓ=t2.Bℓ
Train 1 × Train 2
h-dep(1) | dest(1) | num(1) | h-dep(2) | dest(2) | num(2) |
---|---|---|---|---|---|
13h15 | Lyon | 213 | 13h39 | Avignon | 43 |
13h15 | Lyon | 213 | 14h15 | Lyon | 214 |
13h29 | Marseille | 1024 | 13h39 | Avignon | 43 |
13h29 | Marseille | 1024 | 14h15 | Lyon | 214 |
14h15 | Lyon | 214 | 13h39 | Avignon | 43 |
14h15 | Lyon | 214 | 14h15 | Lyon | 214 |
La projection d'une relation R de schéma R(A1,…,Ak) sur les attributs Ai1,…,Aip, i1,...,ip∈{1,...,k}, est la relation S
de schéma S(Ai1,…,Aip)
dont les tuples sont obtenus par élimination des attributs non mentionnés dans Ai1,…,Aip (et par élimination des doublons).
On note S=πAi1,…,Aip(R).
Définition formelle :
s∈S⟺∃t∈R ∀n∈{1,…,p} s.Ain=t.Ain
Élimination des doublons car une projection peut produire plusieurs fois le même tuple.
La sélection d'une relation R par une condition C est une relation S
de même schéma que R
dont les tuples sont ceux de R qui satisfont la condition C.
On note S=σC(R).
La condition C
s'exprime à l'aide des noms d'attributs de la relation ou de constantes (pour les opérandes)
on peut utiliser des opérateurs arithmétiques de comparaison ( =,≠,≤,≥,<,> ) ainsi que des connecteurs logiques ( ¬,∧,∨ )..
La jointure T=R1⋈CR2 de deux relations R1 et R2 de schémas disjoints sous la condition C est la relation T:
de schéma la concaténation des schémas de R1 et R2
formée des tuples du produit cartésien R1×R2 qui satisfont la condition C
Règles de formation de la condition de jointure : comme pour la sélection
Définition formelle~:
R1⋈CR2=σC(R1×R2)
Équi-jointure : Jointure avec égalité entre attributs de types comparables
TrDep⋈numdep=numarrTrArr
hdep | dest | numdep | harr | prov | numarr |
---|---|---|---|---|---|
13h15 | Lyon | 213 | 15h15 | Paris | 213 |
θ-jointure : condition de jointure entre attributs de types comparables et avec un opérateur différent de l'égalité, c'est-à-dire dans {<,>,≤,≥,≠}.
TrDep⋈numdep>numarrTrArr
C'est une équi-jointure concernant les attributs communs de deux relations
On ne garde dans le résultat qu'une copie des attributs communs
On considère
R1 d'attributs A1,..,Ak,B1,...,Bh
R2 d'attributs A1,..,Ak,Bh+1,...,Bℓ
A1,...,Ak : attributs communs et {B1,...,Bh}∩{Bh+1,...,Bℓ}=∅
Soit A′1,....,A′k tels que {A1,...,Ak}∩{A′1,....,A′k}=∅
Considérons S d'attributs A′1,..,A′k,Bh+1,...,Bl définie par :
S=ρA1↦A′1(ρA2↦A′2(⋯(ρAk↦A′k(R2)⋯))
La jointure naturelle sur deux relations R1 et R2 est la relation
d'attributs A1,..,Ak,B1,...,Bh,Bh+1,...,Bℓ
définie par :
πA1,..,Ak,B1,...,Bh,Bh+1,...,Bℓ(R1⋈CS)
où C est (A1=A′1)∧(A2=A′2)∧…∧(Ak=A′k)
on réalise une équi-jointure sur tous les attributs communs et on ne garde qu'un seul "exemplaire" de ces attributs communs par projection.
On note cette opération : R1⋈R2.
Considérons S d'attributs A′1,..,A′k,Bh+1,...,Bl définie par :
S=ρA1↦A′1(ρA2↦A′2(⋯(ρAk↦A′k(R2)⋯))
La jointure naturelle sur deux relations R1 et R2 est la relation
d'attributs A1,..,Ak,B1,...,Bh,Bh+1,...,Bℓ
définie par :
πA1,..,Ak,B1,...,Bh,Bh+1,...,Bℓ(R1⋈CS)
où C est (A1=A′1)∧(A2=A′2)∧…∧(Ak=A′k)
on réalise une équi-jointure sur tous les attributs communs et on ne garde qu'un seul "exemplaire" de ces attributs communs par projection.
On note cette opération : R1⋈R2.
Pour éviter le renommage, on peut décider de préfixer les noms des attributs par ceux de la relation. La condition C devient :
(R1.A1=R2.A1)∧…∧(R1.Ak=R2.Ak)
Inline footnotes text.
Perte d'information dans jointure naturelle : les tuples ne satisfaisant pas la condition (non appariés) disparaissent
On ajoute "symboliquement" une ligne dont les valeurs sont vides (ou avec valeur spéciale NULL
) pour garder les tuples initiaux "non satisfaisants" après la jointure
On note cette opération entre deux relations R et S :
R⋈+S
La division ou quotient
d'une relation R de schéma R(A1,A2,…,Ak)
par une relation S de schéma S(Ap+1,…,Ak)
est la relation T de schéma T(A1,…,Ap) formée des tuples qui complétés par chaque tuple de S donnent un tuple de R.
Autrement dit
t∈T(A1,…,Ap)⟺∀s∈S(Ap+1,…,Ak)∃r∈R{t.A1=r.A1,…,t.Ap=r.Aps.Ap+1=r.Ap+1,…,s.Ak=r.Ak
On note T=R÷S
Voyage
: contient pour chaque numéro de
client la ville de départ et d'arrivée des voyages qu'il a
effectué
numclient | vdep | varr |
---|---|---|
1 | Paris | Marseille |
3 | Marseille | Lyon |
1 | Paris | Nantes |
5 | Marseille | Avignon |
4 | Paris | Nantes |
3 | Paris | Marseille |
2 | Caen | Le Mans |
3 | Paris | Nantes |
Villes
contient des couples villes de départ/villes d'arrivée
vdep | varr |
---|---|
Paris | Marseille |
Paris | Nantes |
L'union, la différence, le produit cartésien, la sélection et la projection et le renommage sont suffisants pour définir tous les opérateurs que l'on a vu.
Mais avoir un panel plus large d'opérateurs simplifie l'écriture des requêtes.
Quelques définitions
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |