Cours Info - 18 - Bases de Données (II)

Transcription

Cours Info - 18 - Bases de Données (II)
Cours Info - 18
Bases de Données (II)
D.Malka
MPSI 2015-2016
D.Malka
Cours Info - 18
MPSI 2015-2016
1 / 21
Sommaire
Sommaire
1
Clé
Clé primaire
Clé étrangère
2
Jointure
Produit cartésien
Jointure (symétrique)
3
Fonctions agrégat
Agrégats
Conditions sur les agrégats
Fonctions sur les agrégats
D.Malka
Cours Info - 18
MPSI 2015-2016
2 / 21
Clé
Sommaire
1
Clé
Clé primaire
Clé étrangère
2
Jointure
Produit cartésien
Jointure (symétrique)
3
Fonctions agrégat
Agrégats
Conditions sur les agrégats
Fonctions sur les agrégats
D.Malka
Cours Info - 18
MPSI 2015-2016
3 / 21
Clé
Clé
Clé d’une relation
Soit R (S ) est une relation de S. Une clé est un ensemble d’attributs K = {Ai , . . . , Aj }
du schéma relationnel S tel que pour tous tuples t1 , t2 ∈ R (S ), t1 (K ) = t2 (K ) ⇒ t1 = t2 .
Autrement dit, une clé identifie de façon unique chaque tuple t de la relation R (S ).
I
L’ensemble des attributs constituant un schéma relationnel forme une clé
pour ce schéma ! Mais ce n’est peut-être pas la meilleur clé !
I
Contrainte d’intégrité du SGBD : tout schéma relationnel doit posséder au
moins une clé.
D.Malka
Cours Info - 18
MPSI 2015-2016
4 / 21
Clé
Clé
Exemple de clé – Relation livre
numero
auteur
titre
"78 BA"
"156 ES"
"18 CL"
"155 ES"
"Barbusse"
"Eschyle"
"Clausewitz"
"Eschyle"
"Le Feu"
"Les Perses"
"De la Guerre"
"L’Orestie"
auteur n’est pas une clé.
auteur,titre est une clé. numero aussi.
D.Malka
Cours Info - 18
MPSI 2015-2016
5 / 21
Clé
Clé primaire
Clé primaire
Clé primaire d’une relation
Une clé primaire d’une relation R (S ) est une clé contenant un nombre minimal
d’attributs.
Exemple de clé primaire – Relation livre :
numero
auteur
titre
"78 BA"
"156 ES"
"18 CL"
"156 ES"
"Barbusse"
"Eschyle"
"Clausewitz"
"Eschyle"
"Le Feu"
"Les Perses"
"De la Guerre"
"L’Orestie"
auteur,titre est une clé mais pas primaire.
numero est une clé primaire. titre est une clé primaire.
Il est préférable que la clé primaire n’est aucune valeur sémantique.
D.Malka
Cours Info - 18
MPSI 2015-2016
6 / 21
Clé
Clé étrangère
Clé étrangère
Clé étrangère d’une relation
L’expression S1 [A1, ..., An] ⊂ S2 [B1, ..., Bn] est une clé étrangère de S1 référençant S2
si B1, ..., Bn est une clé de S2 et si pour tout t1 ∈ R1 (S ) il existe t2 ∈ R2 (S ), tel que
t1 [A1, ..., An] = t2 [B1, ..., Bn]
I
I
Une clé étrangère indique un lien entre deux relations
Une clé étrangère définit une contrainte d’intégrité référentielle :
lors d’une insertion dans la table référençant, la valeur des attributs doit exister
dans la table référencée
lors d’une suppression dans la table référencée, les tuples référençant doivent
être supprimés
Exemple de clé étrangère
I
relation livre(numero,auteur,titre)
I
relation emprunt(id_emprunt,emprunteur,num)
num est une clé étrangère de emprunt référençant l’attribut numero de la relation
livre.
D.Malka
Cours Info - 18
MPSI 2015-2016
7 / 21
Jointure
Sommaire
1
Clé
Clé primaire
Clé étrangère
2
Jointure
Produit cartésien
Jointure (symétrique)
3
Fonctions agrégat
Agrégats
Conditions sur les agrégats
Fonctions sur les agrégats
D.Malka
Cours Info - 18
MPSI 2015-2016
8 / 21
Jointure
Produit cartésien
Produit cartésien
Opération d’origine ensembliste.
Produit cartésien
Soit R (S ) et R 0 (S 0 ) deux relations de schémas disjoints, leur produit cartésien est :
0
0
) ∈ R0}
)|(a1 , . . . , an ) ∈ R et (a10 , . . . , am
R × R 0 = {(a1 , . . . , an , a10 , . . . , am
Son schéma est :
S ∪ S 0 = (A1 , . . . , An , A01 , . . . , A0m )
où S = (A1 , . . . , An ) et S 0 = (A01 , . . . , A0m ).
SQL multi-ensembliste : le résultat d’un produit cartésien peut contenir des doublons à
moins d’utiliser le mot clé DISTINCT dans la requête.
D.Malka
Cours Info - 18
MPSI 2015-2016
9 / 21
Jointure
Produit cartésien
Produit cartésien
Exemple de produit cartésien
I
I
I
Relation livre :
numero
auteur
titre
"78 BA"
"156 ES"
"Barbusse"
"Eschyle"
"Le Feu"
"Les Perses"
Relation emprunt :
id_emprunt
emprunteur
num
12
59
Nono
Roux
"78 BA"
"156 ES"
Résultat du produit cartésien :
numero
auteur
titre
num
emprunteur
"78 BA"
"156 ES"
"78 BA"
"156 ES"
"Barbusse"
"Eschyle"
"Barbusse"
"Eschyle"
"Le Feu"
"Les Perses"
"Le Feu"
"Les Perses"
"78 BA"
"156 ES"
"156 ES"
"78 BA"
Nono
Roux
Roux
Nono
D.Malka
Cours Info - 18
MPSI 2015-2016
10 / 21
Jointure
Produit cartésien
Produit cartésien
En SQL
SELECT numero, auteur, titre, num, emprunteur # Projection
FROM livre, emprunt # Produit cartésien
D.Malka
Cours Info - 18
MPSI 2015-2016
11 / 21
Jointure
Jointure (symétrique)
Jointure (symétrique)
Jointure (symétrique)
Soient R (S ) et R 0 (S 0 ) deux relations de schémas disjoints, et A ∈ S, A0 ∈ S 0 tels que
dom(A) = dom(A0 ), on note :
R [A = A0 ]R 0 = {e ∈ R × R 0 |e.A = e.A0 } = σA=A0 (R × R 0 )
est appelé la jointure symétrique de S et S 0 selon (A, A0 ).
I
En théorie, les tuples de la table résultant de la jointure contient les attributs
A et A0
I
En pratique, on réalise le plus souvent une jointure entre une clé primaire et
une clé étrangère : les attributs A et A0 sont alors redondants.
I
Dans cas, on peut réaliser une projection pour éliminer cette redondance.
D.Malka
Cours Info - 18
MPSI 2015-2016
12 / 21
Jointure
Jointure (symétrique)
Jointure
Exemple de jointure symétrique
I
I
I
Relation livre :
numero
auteur
titre
"78 BA"
"156 ES"
"Barbusse"
"Eschyle"
"Le Feu"
"Les Perses"
Relation emprunt :
id_emprunt
emprunteur
num
12
59
"78 BA"
"156 ES"
Nono
Roux
Résultat de la jointure : livre[numero = num]emprunt
numero
auteur
titre
num
emprunteur
"78 BA"
"156 ES"
"Barbusse"
"Eschyle"
"Le Feu"
"Les Perses"
"78 BA"
"156 ES"
Nono
Roux
Les tuples du produit cartésien qui n’avaient pas de sens ont disparu !
D.Malka
Cours Info - 18
MPSI 2015-2016
13 / 21
Jointure
Jointure (symétrique)
Jointure
Littéralement, en SQL
SELECT numero, auteur, titre, num, emprunteur # Projection
FROM livre, emprunt # Produit cartésien
WHERE num=numero AND . . . # Restriction
Mauvaise idée car alors la complexité mémoire et temporelle est O (n1 × n2 ) avec n1 et
n2 les tailles des deux tables.
D.Malka
Cours Info - 18
MPSI 2015-2016
14 / 21
Jointure
Jointure (symétrique)
Jointure
En SQL avec JOIN...ON
SELECT numero, auteur, titre, num, emprunteur # Projection
FROM livre
JOIN emprunt ON num=numero # Jointure symétrique
WHERE . . . # Restriction
La complexité de la requête est alors O (n log(n)).
D.Malka
Cours Info - 18
MPSI 2015-2016
15 / 21
Fonctions agrégat
Sommaire
1
Clé
Clé primaire
Clé étrangère
2
Jointure
Produit cartésien
Jointure (symétrique)
3
Fonctions agrégat
Agrégats
Conditions sur les agrégats
Fonctions sur les agrégats
D.Malka
Cours Info - 18
MPSI 2015-2016
16 / 21
Fonctions agrégat
Agrégats
Fonctions sur les agrégats
Un exemple
Comment exprimer la requête suivante :
Renvoyer le salaire moyen des employés de chaque département de l’entreprise
comptant plus de 10 salariés.
La condition plus de 10 salariés ne pas porte sur un tuple mais sur des groupes de
tuples (des partitions). La restriction via le mot clé WHERE n’est donc pas adaptée à
cette situation.
De même, le salaire moyen est calculé sur des groupes de tuples.
D.Malka
Cours Info - 18
MPSI 2015-2016
17 / 21
Fonctions agrégat
Agrégats
Agrégats
Agrégats
Partitions de la table renvoyée par une requête : GROUP BY.
N’a d’intérêt que si combiné avec une fonction d’agrégation.
EN SQL
SELECT A1,. . .
FROM R1,R2. . .
WHERE . . .
GROUP BY A1
D.Malka
Cours Info - 18
MPSI 2015-2016
18 / 21
Fonctions agrégat
Conditions sur les agrégats
Conditions sur les agrégats
Condition sur les Agrégats
Condition appliquée à chaque partition (et non pas l’ensemble des tuples) d’une table :
HAVING
EN SQL
SELECT A1,. . .
FROM R1,R2. . .
WHERE . . .
GROUP BY A1
HAVING <condition sur un ou des attributs>
D.Malka
Cours Info - 18
MPSI 2015-2016
19 / 21
Fonctions agrégat
Fonctions sur les agrégats
Fonction sur les agrégats
Fonction sur les agrégats
Fonctions appliquées à chaque partition (et non pas à l’ensemble des tuples) :
I
MAX
I
MIN
I
COUNT (nombre de tuples dans la partition)
I
AVG (moyenne des valeurs de l’attributs de la partition)
I
SUM (somme des valeurs de l’attributs de la partition)
D.Malka
Cours Info - 18
MPSI 2015-2016
20 / 21
Fonctions agrégat
Fonctions sur les agrégats
Fonctions sur les agrégats
Utilisation des fonctions d’agrégation
I
employe(nss, nom, prénom, salaire, departement)
I
departement(nom, localisation, responsable)
SELECT e.departement, AVG(salaire)
FROM employe e
GROUP BY departement
HAVING COUNT(departement)>10
Cette requête renvoie une table du type :
d.nom
"Achat"
"Marketing"
"Production"
AVG(salaire)
3020
3250
1865
Les départements de moins de 10 employés ne figurent pas dans le résultat.
D.Malka
Cours Info - 18
MPSI 2015-2016
21 / 21