Td3i009 2017 Etudiants
Td3i009 2017 Etudiants
Td3i009 2017 Etudiants
Support de TD
2017
Équipe pédagogique
Bernd Amann
Mohamed-Amine Baazizi
Camelia Constantin
Anne Doucet
Stéphane Gançarski
Hubert Naacke
Support de TD
2017
Équipe pédagogique
Bernd Amann
Mohamed-Amine Baazizi
Camelia Constantin
Anne Doucet
Stéphane Gançarski
Hubert Naacke
10 Légumes
20 Boissons
Indiquez si les instances suivantes de la relation Etagere sont valides ou non, et justifiez votre réponse.
1 10 20 4 20 20 4 20 20
2 10 25 3 10 25 3 10 25
1 30 10 4 20 10 3 20 10
1
2. CONCEPTION D'UN SCHÉMA E-A : FÉDÉRATION DE CYCLISME
3. CALCUL RELATIONNEL
Rappel :
Dans le calcul relationnel à variable n-uplet (ou calcul n-uplet), une requête est représentée par une
expression de la forme { t.A0, t.A1, … | F(t) }, qui désigne une projection sur les attributs A0, A1, … de
l’ensemble des n-uplets t satisfaisant le prédicat F(t) de la logique du premier ordre. Dans cette expression,
la variable t représente un n-uplet d’une seule relation ou une concaténation de n-uplets appartenant à des
relations différentes (variables non quantifiées ou libres dans F).
2
On considère la base TENNIS de schéma :
JOUEUR (NUJOUEUR, NOM, PRENOM, ANNAISS, NATIONALITE)
RENCONTRE (NUGAGNANT, NUPERDANT, LIEUTOURNOI, ANNEE, SCORE)
GAIN (NUJOUEUR, LIEUTOURNOI, ANNEE, PRIME, SPONSOR).
1. Exprimer dans le formalisme du calcul relationnel à variables n-uplet les requêtes ci-dessous:
a) Numéro et tournoi d’engagement (défini par le lieu et l’année) des joueurs sponsorisés par Peugeot
entre 1990 et 1994 ;
b) Nom et année de naissance des joueurs ayant participé à Roland Garros en 1994 ;
c) Nom et nationalité des joueurs ayant participé à la fois au tournoi de Roland Garros et à celui de
Wimbledon, en 1992 ;
d) Nom et nationalité des joueurs ayant été sponsorisés par Peugeot et ayant gagné à Roland Garros au
moins un match (avec un sponsor quelconque);
d-bis) Nom et nationalité des joueurs qui n'ont jamais perdu une rencontre;
d-ter) Nom et nationalité des joueurs qui n'ont jamais perdu une rencontre à Roland Garros;
d-quart) Nations qui n'ont jamais participé à Roland Garros;
3
Licence d’Informatique UPMC Module Bases de Données
TD 2 : ALGÈBRE RELATIONNELLE
masquer=1
1. RAPPELS
Les requêtes sont traduites, dans le modèle de l’algèbre relationnelle, par la combinaison d’opérations
portant sur les relations de la base. La représentation de chaque opérateur est donnée ci-dessous.
1. Opérateurs de base :
Projection P liste-d’attributs(R)
Sélection scondition(R)
Renommage rnom-attribut → nouveau_nom(R)
Union RÈ S
Différence R-S
Produit cartésien RS
2. Opérateurs dérivés :
Jointure R¥S
Division R¸ S
Intersection RÇS
Schéma
Soit la base de schéma (voir TD 1) :
JOUEUR (NUJOUEUR, NOM, PRENOM, ANNAISS, NATIONALITE)
RENCONTRE (NUGAGNANT, NUPERDANT, LIEUTOURNOI, ANNEE , SCORE)
4
Licence d’Informatique UPMC Module Bases de Données
Requêtes
Exprimer (quand c'est possible) les requêtes suivantes, à l'aide de l'algèbre relationnelle (arbres
algébriques et/ou expressions algébriques) :
a) Numéro et tournoi d’engagement (défini par le lieu et l’année) des joueurs sponsorisés par
Peugeot entre 1990 et 1994.
b) Nom et année de naissance des joueurs ayant participé à Roland Garros en 1994.
c) Nom et nationalité des joueurs ayant participé à la fois au tournoi de Roland Garros et à
celui de Wimbledon, en 1992.
d) Nom et nationalité des joueurs ayant été sponsorisés par Peugeot et ayant gagné à Roland
Garros au moins un match (avec un sponsor quelconque).
e) Nom des joueurs ayant toutes leurs primes à Roland Garros supérieures à 1MF.
f) Numéros des joueurs qui ont toujours gagné à Roland Garros.
g) Liste des vainqueurs de tournoi, mentionnant le nom du joueur avec le lieu et l’année du
tournoi qu’il a gagné.
h) Nom des joueurs ayant participé à tous les tournois disputés en 1994.
i) Nombre de joueurs ayant participé au tournoi de Wimbledon en 1993.
j) Numéros des joueurs ayant eu au moins deux sponsors.
k) Numéros des joueurs ayant eu exactement deux sponsors.
Requêtes supplémentaires :
1. Quel joueur n’a jamais été sponsorisé par Peugeot ?
2. Quels joueurs ont perdu au premier tour à Roland Garros en 2013 ?
3. Quel joueur a gagné la plus grande prime ?
4. Quel joueur a gagné une plus grande prime que tous les joueurs de sa nationalité
5. ...
5
Licence d’Informatique UPMC Module Bases de Données
TD 3 : OPTIMISATION
masquer=1
1
6
Licence d’Informatique UPMC Module Bases de Données
Caractéristiques des attributs :
R2 : SELECT c.Nom
FROM Client c, Réservation r
WHERE r.NumC = c.NumC AND r.NumH = 536
2
7
Licence d’Informatique UPMC Module Bases de Données
2.3.3. Pour la requête R3 :
• Quel est le facteur de sélectivité de la sélection dont le prédicat est : type=’tennis’ ?
• Quel est le facteur de sélectivité de la sélection dont le prédicat est : altitude>1400 ?
2.3.4. Donner la taille et la cardinalité de chaque opérateur de l'arbre R3 initial, de l’arbre R3a
obtenu à la question précédente et de l’arbre R3b suivant :
A rbre R 3b
N um C
N um H
N um H R é s e r v a tio n
N um S
N um S H ô te l
N um S N um S
2.3.5. (Question facultative) : Donner le nombre d’arbres équivalents pour la requête suivante :
R5: SELECT *
FROM Hôtel H, Activité A, Station S
WHERE H.NumS = S.NumS AND A.NumS = S.NumS
3
8
TD 4 et 5 - Optimisation de requêtes (suite)
Plan d’exécution d’une requête
Préparation des exercices. Explication du plan d’une requête avec le mode explain
L’objectif de ce TD est de savoir traduire une requête SQL en un plan d’exécution (explain plan). Il faut savoir lire
un plan d’exécution produit par une requête SQL et comprendre comment l’exécution se déroule. Le plan d’une requête
SQL est construit en ajoutant les mots explain plan for devant la requête. Il peut ensuite être affiché avec plus ou
moins de détails (cf. le TME 4).
Représentation d’un plan
Un plan est représenté par un arbre dont les n nœuds sont numérotés de 0 (pour la racine) à n-1. La numérotation se fait en
largeur, de gauche à droite. L’arbre est binaire et chaque nœud a de 0 (feuille) à 2 fils. Dans la représentation textuelle du
plan, chaque nœud correspond à une ligne et la hiérarchie est signalée par l’indentation des lignes (un fils est décalé d’un
espace à droite par rapport à son parent).
Par exemple, la requête suivante affiche le nom des joueurs de tennis français avec le lieu du tournoi :
SELECT j.nom, g.lieutournoi
FROM Joueur j, Gain g
WHERE j.nujoueur = g.nujoueur AND j.nationalite = ‘France’ ;
et son plan est :
Id Operation Name
0 SELECT STATEMENT
1 JOIN
2 TABLE ACCESS FULL JOUEUR
3 TABLE ACCESS FULL GAIN
Un nœud a un identifiant (Id), un nom (Operation) et d’autres informations qu’on expliquera plus tard. Le nom correspond
à un opérateur « physique » du SGBD. Les fils d’un nœud (opérateur) sont ses opérandes (les paramètres de l’algorithme
qui réalise l’opérateur). Un nœud peut évaluer des prédicats (Predicate Information) et des projections (Projection
Information).
Un exemple de Predicate Information associée au nœud n°1 est :
IdOp Predicate
1 filter(NATIONALITE='France')
Un exemple de Projection Information associée au nœud n°1 est :
IdOp Column
1 NOM, LIEUTOURNOI
Remarques : plusieurs nœuds (opérateur physiques) peuvent être nécessaires pour évaluer une opération algébrique telle
qu’une jointure ou une sélection, notamment lorsque des index sont utilisés. Inversement, un nœud peut aussi correspondre
à une ou plusieurs opérations algébriques, en particulier lorsqu’une projection ou une sélection sont ajoutés à une jointure.
Travail demandé
L’explication doit apporter des éléments de réponses aux questions suivantes :
1) Quel algorithme est utilisé pour évaluer chaque morceau de la requête ?
2) Dans quel ordre les opérations sont-elles évaluées ?
3) Quelle est la cardinalité estimée d’une opération (nbre de nuplets produits) ?
4) Est-ce que certaines opérations sont évaluées plusieurs fois (imbrication) ?
9
5) Combien d’opérations unitaires de lecture sont effectuées ?
Le SGBD connait les statistiques suivantes (la commande permettant de calculer les statistiques sera vue en TME) :
explain plan for select * from Joueur j where j.annaiss > 1960;
10
Plan :
Id Operation Name Rows
0 SELECT STATEMENT 11
1 TABLE ACCESS FULL JOUEUR 11
Predicate Information:
Id Predicate
1 filter("J"."ANNAISS">1960)
Plan :
Id Operation Name Rows
0 SELECT STATEMENT 5
1 TABLE ACCESS FULL JOUEUR 5
Predicate Information:
Id Predicate
1 filter(j.nationalite=’France’)
Plan:
Id Operation Name Rows
0 SELECT STATEMENT 14
11
1 TABLE ACCESS FULL JOUEUR 14
Projection Information:
IdOp Column
1 NOM"[VARCHAR2,12], "PRENOM"[VARCHAR2,14]
g) Tri : Les nom et prénom des joueurs français. Afficher le résultat trié par année croissante et par nom.
12
Etape Id Op Description Card
A
B
C
h) Jointure. Les joueurs Suédois ayant déjà participé à Rolland Garros. Afficher le nom du joueur et l’année du
tournoi.
Plan:
Id Operation Name Rows
0 SELECT STATEMENT 5
1 HASH JOIN 5
2 TABLE ACCESS FULL JOUEUR 3
3 TABLE ACCESS FULL GAIN 24
Predicate Information:
IdOp Predicate
1 access(J.NUJOUEUR = G.NUJOUEUR)
2 filter(J.NATIONALITE ='Suede')
3 filter(G.LIEUTOURNOI ='Roland Garros')
Projection Information:
IdOp Column
1 J.NOM, G.ANNEE
2 J.NUJOUEUR, J.NOM
3 G.NUJOUEUR, G.ANNEE
13
B
i) Nom et nationalité des joueurs ayant participé à la fois au tournoi de Roland Garros et à celui de Wimbledon, en
1992 ;
14
Exercice 2 : Plan d’une requête utilisant un index
On a les relations :
Annuaire (nom, prenom, age, cp, tel) contenant 2000 personnes.
On connait les statistiques suivantes sur les personnes :
Attribut Nb valeurs distinctes Domaine Rmq
nom 2 000 Le nom est unique
cp 850 [1 000, 100 900] En moyenne, il y a 2,3 personnes par code postal
age 100 [1, 100] On connait aussi le nbre de personnes pour chaque âge
Les index permettent un accès ciblé aux données et exprimé dans le plan par une suite de deux opérations :
• INDEX RANGE SCAN INDEXAGE avec le prédicat d’accès noté Access(age=18)
Traverser l’index âge pour atteindre la feuille contenant 18. Lire les rowid des personnes ayant 18 ans. Cette
opération ne lit aucun nuplet de la table Annuaire.
• TABLE ACCESS BY INDEX ROWID ANNUAIRE. Pour chaque rowid lire le nuplet de la personne
correspondante dans la table Annuaire
15
b) Le nom et prénom des personnes âgées de 20 à 26 ans.
explain plan for select a.nom, a.prenom
from Annuaire a
where a.age between 20 and 26;
Plan:
Id Operation Name Rows
0 SELECT STATEMENT 124
1 TABLE ACCESS BY INDEX ROWID Annuaire 124
2 INDEX RANGE SCAN IndexAge 124
Predicate Information:
IdOp Predicate
2 Access(age>=20 AND age<=26)
c) Le nom et prénom des personnes de moins de 70 ans et dont le code postal de résidence est 93000 ou 75000.
explain plan for select a.nom, a.prenom
from Annuaire a
where a.age < 70 and (a.cp = 93000 or a.cp = 75000)
Plan:
Id Operation Name Rows
0 SELECT STATEMENT 3
1 TABLE ACCESS BY INDEX ROWID Annuaire 3
2 INDEX RANGE SCAN IndexCP 5
Predicate Information:
IdOp Predicate
1 Filter(age < 70)
2 Access(cp=75000 or cp = 93000)
Projection Information:
IdOp Column
1 a.nom, a.prenom
2 a.rowid
d) Le nom et prénom des personnes de 20 ans et dont le code postal est 13000.
explain plan for select a.nom, a.prenom
from Annuaire a
where a.age = 20 and a.cp = 13000 and a.nom like ‘T%’;
Quelles seraient les étapes d’un plan qui exécute cette requête en utilisant les 2 index ?
16
1 HASH JOIN 20
2 TABLE ACCESS BY INDEX ROWID Annuaire 20
3 INDEX RANGE SCAN IndexAGE 20
4 TABLE ACCESS FULL VILLE 1000
Predicate Information:
IdOp Predicate
1 Access(a.cp = v.cp)
3 Access(a.age=18)
Projection Information:
IdOp Column
1 a.nom, a.prenom, v.ville
2 a.nom, a.prenom, a.cp
3 a.rowid
4 v.ville, v.cp
17
NESTED LOOP
/ \
G D
- On itère sur G : : pour chaque nuplet de G, on évalue la jointure par une itération sur D.
En conséquence, G est évalué une seule fois mais D est évalué plusieurs fois (i.e. autant de fois qu’il y a de
nuplets produits par G).
Soit la requête :
select *
from R, S
where a = c and b =1
18
Pour chaque question, énumérer tous les plans équivalents (notés P1 à P4) et calculer leur coût. Pour cela, représenter un
plan d’exécution sous la forme d’un arbre d’opérateurs. Donner le coût et la cardinalité de chaque opérateur de l’arbre,
donner le coût total de l’arbre.
1) Il y a seulement un index sur R.a et un index sur R.b,
2) Il y a seulement un index sur S.c
3) Il y a seulement un index sur R.b et un index sur S.c.
3) Pour chaque relation (Joueur, Club et Finance) estimer le nombre de nuplets qui sont sélectionnés après avoir traité les
prédicats de sélection et avant de traiter les jointures.
4) D'après la réponse à la question précédente, quel est l'arbre de jointure de coût minimum que l'optimiseur construit ?
19
= cout(R) + card(R) * card(S) sinon.
o On suppose que R1, R2, R3 ont les caractéristiques suivantes :
o il y a un index sur l’attribut B de R1, A est clé primaire de R1, R2 et R3 (il existe un index pour chaque clé
primaire)
o card(R1) = card(R2) = card(R3) = 1000, πA(R1) = πA(R2) = πA(R3)
o il y a 10 valeurs possibles pour B, uniformément réparties dans R1 et aussi dans R2 et dans R3.
Questions :
a) Quelle est la cardinalité du résultat de la requête ?
b) Pour simplifier, on ignore les projections (car leur coût est nul). Donner l’expression algébrique de P1’ (resp P2’)
correspondant à P1 (resp. P2) sans aucune projection.
c) Donner le coût de P1’ et P2’. Préciser votre réponse en détaillant le coût et la cardinalité des résultats
intermédiaires.
d) Quel est l’arbre de coût minimal pour évaluer la requête ? Quel est son coût ?
20
TD6 Index – Arbre B+
Notations et conventions
Nombre de valeurs dans un nœuds. Pour un arbre B+ d'ordre d, le nombre de valeurs qu'un nœud peut contenir est :
dans l'intervalle [1, 2.d] pour la racine,
dans l'intervalle [d, 2.d] pour les nœuds intermédiaires et les feuilles.
Certains exercices n'indiquent pas l'ordre de l'arbre mais directement le nombre de valeurs dans un nœud.
Dessin d'un arbre. Pour repérer facilement les nœuds d'un arbre quand on le dessine, on peut attribuer un nom à chaque
nœud : R pour la racine, Ni pour les nœuds intermédiaires et Fi pour les feuilles. On peut utiliser la syntaxe suivante pour
représenter le contenu d'un nœud : N( v1, v2, …) où N est le nom du nœud et les vi sont les valeurs.
Insertion d'une valeur en cas de débordement : quand la feuille F déborde, on garde les d+1 plus petites valeurs dans F, les
d autres valeurs vont dans une nouvelle feuille. Quand le nœud intermédiaire N déborde on garde les d plus petites valeurs
dans N, les d plus grandes valeurs vont dans un nouveau nœud. La valeur restante est insérée dans le nœud père.
Suppression d'une valeur. Si le nœud ne contient que d valeurs avant la suppression, alors on considère d'abord la
redistribution avec le nœud voisin (de même père) situé à gauche, puis avec celui situé à droite. Si aucune redistribution
n'est possible, on considère la fusion avec le voisin (de même père) situé à gauche, puis avec celui situé à droite. Une
suppression avec redistribution nécessite d'ajuster le contenu du nœud père. Une suppression avec fusion nécessite de
supprimer une valeur dans le nœud père.
Décompte du nombre de nœuds lus et écrits. Une opération d'insertion ou de suppression peut nécessiter de lire, modifier
ou créer des nœuds. On appelle L le nombre de nœuds lus pendant une opération, et respectivement E le nombre de nœuds
écrits ou créés.
21
Exercice 3 : Insertion, suppression, perte d’un niveau
On considère un arbre B+ d'ordre d=2. La racine de l'arbre A1 contient la valeur 50. Un seul niveau intermédiaire contient
(tous nœuds confondus) les valeurs 8, 18, 32, 40 73, 85. Les feuilles contiennent (toutes feuilles confondues) les valeurs 1,
2, 5, 6, 8, 10, 18, 27, 32, 39, 41, 45, 52, 58, 73, 80, 91, 99.
1) Dessinez l'arbre A1.
2) Dessiner l'arbre A2 après l'insertion de la valeur 9 dans A1. Combien valent L et E ?
3) Dessiner l'arbre A3 après l'insertion de la valeur 3 dans A1. Combien valent L et E ?
4) a) Dessiner l'arbre A4 après suppression de la valeur 8 dans A1. Si nécessaire, on envisage une redistribution à gauche.
Combien valent L et E ?
b) Même question mais en considérant uniquement la redistribution à droite si possible, sinon fusionner 2 feuilles.
5) Montrer l'état de l'arbre résultant, à partir de l'arbre A1, de l'insertion de la clé 46 suivie de la suppression de la clé 52
6) Montrer l'état de l'arbre résultant, à partir de l'arbre A1, de la suppression successive des clés 32, 39, 41, 45 et 73.
22
Licence d’Informatique UPMC Module 3I009
TD 7 : CONCURRENCE
masquer=1
1. ISOLATION ET SÉRIALISABILITÉ
1.1 Soit transfert la procédure de transfert(X,Y,Z) entre comptes bancaires suivante :
procedure transfert ( CompteDébité, CompteCrédité, montant )
(1) variable := Lire( CompteDébité );
(2) Ecrire (CompteDébité, variable – montant );
(3) variable := Lire ( CompteCrédité );
(4) Ecrire(CompteCrédité, variable + montant );
On lance simultanément les programmes transfert(A, B, 150) et transfert(B, C, 70). Chacun des
processus (i.e., chacune des transactions de transfert) utilise une variable locale à son propre espace
mémoire. Soient A0, B0, C0 les valeurs initiales des trois comptes concernés.
1.1.1 Quel est l’état final des comptes A, B et C dans chacun des cas ci-dessous, où ABi représente
l’ième instruction du transfert de A vers B et BCj la jème instruction du transfert de B vers C?
1.1.4 Donnez dans chacun des cas (a), (b) et (c) de l'exercice précédent le graphe de précédence du
transfert de A vers B, et du transfert de B vers C.
2.1.1. Écrire la série d’instructions obtenue, en supposant que deux comptes différents appartiennent
à des granules différents.
1
23
Licence d’Informatique UPMC Module 3I009
2.1.2. Les exécutions (b) et (c), décrites dans l’exercice précédent, sont-elles alors possibles ? Si
non, donner une exécution possible ayant le même ordonnancement initial jusqu’à la
première instruction non réalisable.
2.2 Soit la procédure somme qui affiche la somme des soldes de deux comptes bancaires :
procédure somme ( Compte1, Compte2 );
(1) var1 := Lire ( Compte1);
(2) var2 := Lire ( Compte2);
(3) Imprimer ( var1 + var2);
où la procédure Lire recopie le solde du compte dans une variable en mémoire.
2.2.1. Écrire en SQL la série d’instructions (1) à (3).
2.2.2. transfert étant la procédure de l'exercice 1.2, on considère une exécution concurrente de
transfert(A,B,150) et somme(A,B), au cours de laquelle somme commence son exécution
après les deux premières instructions de transfert. Dans le cas d’un verrouillage en deux
phases, la procédure somme peut-elle s’exécuter en entier avant la reprise de transfert ?
2.2.3. Dans le cas d’un protocole qui lèverait le verrou posé par une transaction sur un granule dès
que cette transaction aurait fini d’accéder au granule, la procédure somme pourrait-elle alors
s’exécuter en entier avant la reprise de transfert ? Quel serait, dans ce cas, le résultat de
l’exécution des deux transactions ?
2.3 Soit une base composée de quatre granules A, B, C, D et une exécution de six transactions T1 à
T6 avec les accès suivants sur les granules :
A: E2(A) E3(A) L5(A)
B: L2(B) L4(B) L1(B)
C: E5(C) L1(C) L3(C) E4(C)
D: L6(D) L2(D) E3(D)
Ei(X) et Li(X) représentent une opération d'écriture (respectivement de lecture) du granule X par la
transaction i.
2.3.1. Donner le graphe de précédence de cette exécution.
2.3.2. On suppose que le contrôle de concurrence est effectué par du verrouillage en deux phases
strict, et que les demandesd’accès se font dans l’ordre suivant :
E2(A) L2(B) L6(D) E5(C) E3(A) L5(A) L1(C) L2(D) L3(C) E4(C) E3(D) L4(B) L1(B).
- Indiquer pour chaque granule les verrous en cours, et les demandes en file d’attente.
- Donner le graphe d’attentes et conclure.
2.4 Soient cinq transactions T1, T2, T3, T4 et T5 et quatre granules X, Y, Z, T. On considère
l’exécution suivante :
2
24
Licence d’Informatique UPMC Module 3I009
L4(Z) L5(X) L3(Y) L4(Y) E5(X) E3(Y) L4(T) L3(Y) L3(Z) L4(Z) E4(T) L5(T) E1(T) E1(X) L2(Y)
L4(Z) L3(X) E2(T)
2.5 Soient cinq transactions T1, T2, T3, T4 et T5 et quatre granules X, Y, Z, T. On considère
l’exécution suivante :
L2(T) L3(Y) L3(X) L3(T) E2(T) E2(X) E3(Y) E5(X) L2(Y) L2(Z) E4(Z) E1(X) L1(Y) E1(Y) L4(T)
L1(Z) E4(T)
2.5.1. En supposant que chaque transaction effectue une demande de verrou sur un granule juste
avant d’essayer d’y accéder et que toutes les transactions respectent le protocole de
verrouillage en deux phases, insérer les commandes de verrouillage et déverrouillage dans
chaque transaction.
2.5.2. On suppose que les demandes d’accès arrivent dans l’ordre de l’exécution (ce qui ne veut pas
dire que ces demandes seront satisfaites dans le même ordre). Indiquer comment se passe
l’exécution des cinq transactions.
3. ESTAMPILLAGE
Soient les granules a, b, c et les transactions T1, T2, T3. On considère les exécutions suivantes:
a) L1(a), L1(b), E1(a), L2(b), E3(b), C3, E1(a), C1, L2(b), C2
b) L1(a), E2(a), C2, E1(a), C1, L3(a), C3
c) E1(a), L2(c), L2(a), C2, E1(a), L3(a), L1(c), C1, E3(b), C3
d) E1(a), L1(a), L3(b), E3(a), C3, L2(c), E2(a), E1(c), C1, L2(a), C2
3
25
Licence d’Informatique UPMC Module 3I009
d) E1(a), L1(a), L3(b), E3(a), C3, L2(c), E2(a), E1(c), C1, L2(a), C2
4
26
Licence d’Informatique UPMC Module 3I009
TD 8 : DÉPENDANCES FONCTIONNELLES
masquer=1
Exercice 1.1
Soient R (A,B,C,D) et F = { A B; B C }.
1.1.1 Quelle est la fermeture [A]+F de A?
1.1.2 Donnez les clés de R par rapport à F ?
Exercice 1.2
Soient R(A, B,C, D, E, F, G, H) et Df= {AB C, B D, CD E, CE GH, G A}.
1.3 Donnez les clés de R par rapport à Df.
3. ENSEMBLE MINIMAL
Soient R{A, B,C, E, H} et les deux ensembles de dépendances fonctionnelles
F = {A B ; CE H; C E ; A CH} et G = {A BC; C EH ; AE → H}
3.1 L'ensemble F est-il minimal ? L'ensemble G est-il minimal ?
3.2 Les deux ensembles de dépendances fonctionnelles F et G sont-ils équivalents ?
27
Licence d’Informatique UPMC Module 3I009
masquer=1
Exercice
On considère le schéma de relation R(A,B,C) et la dépendance fonctionnelle AC.
2.1. Donnez une instance R du schéma R(A,B,C) qui respecte la DF et telle que
ПA, B R ПB,C R ≠ R
2.2. Montrez formellement que la décomposition (R1(A,B), R2(B,C)) n'est pas Sans Perte
d'Information (SPI)
Exercice
Soit S le schéma de base de données relationnelle suivant, sur lequel on a défini un ensemble F de
dépendances fonctionnelles.
S = { R(A,B,C,D) } F = { BC D , D C , C A}
2.3. Quelles sont les clés minimales de R ? Montrez comment vous les obtenez ;
2.4. Le schéma S est-il en forme normale de Boyce-Codd ? S est-il en 3ème forme normale ?
2.5. Quelles sont les dépendances projetées sur R1 et sur R2 dans la décomposition de S en un
nouveau schéma S’={ R1(A,D) , R2(B,C,D) } ? La décomposition de S en S’ est-elle sans
perte de dépendances ?
Exercice
On considère le schéma de relation R(A,B,C,D,E) et les dépendances fonctionnelles suivantes:
F={AC, BC, CD, DEC,CEA}
2.6. Déterminer, en utilisant l’algorithme du tableau, si la décomposition suivante est Sans Perte
d'Information (SPI):
D1 = R1(A,D) R2(A,B) R3(B,E) R4(C,D,E) R5(A,E)
28
Licence d’Informatique UPMC Module 3I009
2.10. (plus difficile) Donnez une instance R du schéma R(A,B,C,D,E) telle que
ПA,D R ПA,B R ПB,E R ПC,D R ПA,E R ≠ R
2 FORMES NORMALES
Soit la relation UFR, de schéma :
UFR (N°TD, SALLE, JOUR, HEURE, N°ENSEIGNANT, NOM-ENSEIGNANT, PRENOM-
ENSEIGNANT, COD-MOD, DIPLOME, MATIERE, N°ETUDIANT, NOM-ETUDIANT,
PRENOM-ETUDIANT, ADRESSE, DATE-INSCRIPTION )
29
Licence d’Informatique UPMC Module 3I009
Exercice : Décomposition 1
On considère maintenant la décomposition suivante, de la relation UFR :
ENSEIGNEMENT (N°TD, COD-MOD, JOUR, HEURE, SALLE, N°ENSEIGNANT, NOM-
ENSEIGNANT, PRENOM-ENSEIGNANT)
INSCRIPTION (N°ETUDIANT, NOM-ETUDIANT, PRENOM-ETUDIANT, ADRESSE, COD-MOD,
DIPLOME, MATIERE, DATE-INSCRIPTION, N°TD)
2.4. Donnez l'ensemble des DF projetées pour chacune des deux relations.
2.5 (facultatif) Cette décomposition préserve-t-elle les dépendances fonctionnelles ? Démontrez le.
2.5. Donnez l'ensemble des DF (projection) pour chacune des deux relations.
2.6. Donnez les clés de ces deux relations ENSEIGNEMENT et INSCRIPTION,
2.7. Montrer que cette décomposition est sans perte d'information.
2.8. Les deux relations sont-elles en 3ème forme normale ?
Exercice : Décomposition 2
2.10. Proposer une nouvelle décomposition de la relation UFR telle que toutes les relations soient
en troisième forme normale. Cette décomposition doit être sans perte d’information et
préserver les dépendances fonctionnelles.
30
Licence d’Informatique UPMC Module 3I009
31
Licence d’Informatique UPMC Module Bases de Données
TD 10 : TRIGGERS
masquer=1
1. RAPPELS TRIGERS
La syntaxe d'une expression de création de trigger en SQL3 est la suivante :
Les expressions entre [ … ] sont optionnelles. Le symbol '|' sépare les options :
Il est évident qu’à un événement de type INSERT (resp. DELETE) ne peut pas correspondre une
delta-structure OLD (resp. NEW). Une règle AFTER ne devrait en principe pas modifier la valeur
de la variable temporaire déclarée par NEW (cette valeur est déjà écrite dans la base), une règle
BEFORE ne devrait pas en principe modifier la base par une commande INSERT, UPDATE ou
DELETE sur les relations de la base (puisque l'événement n'a pas encore eu lieu réellement), elle ne
peut modifier que les variables temporaires.
1
32
Licence d’Informatique UPMC Module Bases de Données
La table EMPLOYE contient pour chaque employé son identifiant, son nom et prénom, sa fonction
(optionnel), et son salaire. La table PROJET contient les identifiants et noms des projets et une
référence vers l'employé qui dirige le projet. La table PARTICIPE stocke les employés avec les
projets auxquels ils participent.
Nb : dans Oracle ON UPDATE CASCADE n'est pas implanté et ON DELETE RESTRICT est par
défaut.
2.1 Écrire un trigger BEFORE qui évite qu’un salaire ne puisse diminuer
2.2 Idem avec un trigger AFTER
2.3 Écrire un trigger qui empêche qu’on supprime plus de 50 n-uplets à la fois dans la relation
EMPLOYE
2.4 Écrire les triggers AFTER qui simulent les actions ON DELETE | UPDATE associés aux clés
étrangères de la table PROJET :
2.5 Écrire les triggers AFTER qui simulent les actions ON DELETE | UPDATE associés aux clés
étrangères de la table PARTICIPE :
2
33