Vous êtes sur la page 1sur 2

Travaux dirigés

“Entrepôts de données et OLAP ”


Hiver 2012/13
Melanie Herschel (melanie.herschel@lri.fr)

6ème feuille d’exercices

Exercice 1: Query Containment


Dans cet exercice, nous considérons la base de données de films composée des tables suivantes:

Film(FID, title, year, rating)


FilmGenre(FID → Fim, GID → Genre)
Genre(GID, genre)
Cast(FID → Film, AID → Actor, isMainActor, role)
Actor(AID, name, dateOfBirth, gender)

1. Sont données les requêtes Datalog q1 à q4 . Traduisez chaque requête en requête SQL équivalente.
Pensez à la sémantique d’ensembles utilisée par Datalog qui doit être traduite de manière explicite.

q1 (F ID, T, N) : − F (F ID, T, 2010, R), C(F ID, AID, ‘oui’, R), A(AID, N, DOB, ‘f’)
q2 (F ID, T ) : − F (F ID, T, Y, R), C(F ID, AID, MA, R), A(AID, N, DOB, ‘f’), Y > 2000
q3 (N) : − A(AID, N, DOB, S), C1 (F ID1 , AID, ‘oui’, R1 ), C2 (F ID2 , AID, ‘non’, R2 )
q4 (N) : − A(AID, N, DOB, S), C1 (F ID1 , AID, ‘non’, R1 ), C2 (F ID2 , AID, ‘oui’, R2 ),
F1 (F ID1 , T1 , 2010, R1 ), F2 (F ID2 , T2 , 2010, R2 )

2. Vérifiez pour chaque paire de requêtes qi , qj , i 6= j spécifiées en (1) si qi ⊆ qj . Pour cela, utilisez la
définition de containment mapping vue en cours.

• Spécifiez la mappe d’inclusion pour chaque paire où qi ⊆ qj .


• Pour chaque autre paire, précisez au moins un des critères de containment mapping non satisfait
(parmi les quatre vus en cours).

q1 q2 q3 q4
q1 x q1 ⊆ q2 q1 6⊆ q3 (1/2/4) q1 6⊆ q4 (1/2/4)
q2 q2 6⊆ q1 (1/2/3/4) x q2 6⊆ q3 (1/2/3/4) q2 6⊆ q4 (1/2/3/4)
q3 q3 6⊆ q1 q3 6⊆ q2 x q3 6⊆ q4
q4 q4 6⊆ q1 q4 6⊆ q2 q4 ⊆ q3 x

3. Pour chaque paire de requête satisfaisant l’inclusion de requête, existe-t-il également un containment
mapping élargi? Justifiez votre réponse.
Exercice 2: Query Rewriting

Nous continuons à travailler sur le schéma relationnel de l’exercice 1. Supposons que les vues suivantes soient
matérialisées.

SELECT DISTINCT F.FID, F.title, F.year, F.rating, G.Genre


FROM Film F, FilmGenre FG, Genre G
Vue v1
WHERE F.FID = FG.FID AND G.GID = FG.GID
AND rating > 5

SELECT C.FID, name, isMainActor, gender, COUNT(*) AS CNT


FROM Cast C, ACTOR A
Vue v2
WHERE C.AID = A.AID
GROUP BY C.FID, name, isMainActor, gender

SELECT F.FID, FG.GID, A.gender, A.dateOfBirth, COUNT(*) AS CNT


FROM Film F, FilmGenre FG, Cast C, Actor A
Vue v3 WHERE F.FID = FG.FID AND F.FID = C.FID AND C.AID = A.AID
AND dateOfBirth >= ‘1.1.1980’ AND rating > 8
GROUP BY F.FID, FG.GID, A.gender, A.dateOfBirth

Les requêtes suivantes sont posées contre le schéma relationnel de l’exercice 1:

SELECT DISTINCT title, genre


FROM Film F, FilmGenre FG, Genre G
Requte q1
WHERE F.FID = FG.FID AND G.GID = FG.GID
AND rating > 7

SELECT DISTINCT F.FID, A.name, isMainActor, gender


FROM Cast C, Actor A, Film F
Requte q2
WHERE F.FID = C.FID AND C.AID = A.AID
AND F.rating > 5

SELECT F.FID, COUNT(*)


FROM Film F, FilmGenre FG, Genre G, Cast C, Actor A
WHERE F.FID = FG.FID AND FG.GID = G.GID AND C.FID = F.FID AND C.SID = A.AID
Requte q3
AND rating > 8 AND genre = ‘Action’
AND A.dateOfBirth >= ‘1.1.1980’ AND A.dateOfBirth <= ‘31.12.1980’
GROUP BY F.FID

1. Répondez aux questions suivantes pour chaque requête. Justifiez vos réponses.

(a) Quelles vues matérialisées sont utilisables?


(b) Quelles réécritures SQL sont possibles en réutilisant vos résultats de (a)?

2. Dans le cas de plusieurs réécritures possibles, laquelle vous semble la plus adéquate pour minimiser le
temps de traitement de requête. Justifiez votre réponse.

Vous aimerez peut-être aussi