Vous êtes sur la page 1sur 7

Nom :

Prnom :

Universit Pierre et Marie Curie Paris 6

Page 1
Master d'informatique

BDMD
EXAMEN - 26 MARS 2007

Version CORRIGEE

Documents autoriss
Lorsquun cadre suggre des rponses, entourer la (les) bonne(s) rponse(s). La qualit de la rdaction sera prise
en compte. Ecrire lencre bleue ou noire.

Exercice 1. BD dcisionnelle : schmas toile et flocon

3 pts

Soit le schma TPCH simplifi :


Part (partkey, name, mfgr, brand, type, size, container, retailprice)
mfgr est le nom de groupe du fabricant, brand est la marque du fabricant.
Supplier (suppkey, name, address, nationkey, acctbal)
PartSupp (partkey, suppkey, availqty, supplycost)
Customer (custkey, name, address, nationkey, acctbal, mktsegment)
mktsegment est le secteur de march (automobile, btiment, ...)
Orders (orderkey, custkey, orderstatus, totalprice, orderdate, orderpriority, clerk, shippriority)
LineItem (orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus,
shipdate, commitdate, receiptdate, shipmode)
Nation (nationkey, name, regionkey)
Region (regionkey, name)

Question 1. On veut transformer le schma TPCH en un schma toile de telle sorte quon ne perdre
aucune information contenue dans la base.
a) Les attributs availqty et supplycost de PartSupp appartiendront-ils la table des faits ou une
dimension ? Justifier brivement
Entourer:

fait

dimension

Justif. :

Rponse : ils feront partie de la table des faits


En effet,. availqty et supplycost sont des attributs de la table de Faits. Ils ne dcrivent pas une dimension mais
lassociation entre 2 dimensions (Fournisseur et Produit). Il faut donc ajouter ces 2 attributs ceux de Orders et
LineItem

b) Dfinir la table des faits sous la forme dune requte SQL (i.e., dont le rsultat est lensemble des faits)

Nom :

Prnom :

Page 2

Table des faits : jointure entre Orders LineItem et PartSupp.

c) Dfinir la dimension temporelle telle que son schma soit :


Date (d Date , mois Number(2), anne Number(4))
Lattribut mois est le numro du mois dans [1, 12].

Dimension temporelle: On veut Date(d, mois, anne) :


la date sert didentifiant,
il faut obtenir toutes les dates possibles : union des projections sur les attributs shipdate, commitdate et
receiptdate,
with ItemDate as
(select receiptdate as d from LineItem
union select shipdate as d from LineItem
union select commitdate as d from LineItem)
Select d, extract( month from d) as mois, extract( year from d) as annee
From ItemDate
Order by d;
Syntaxe correcte : Voir fichier d.sql

d) Dfinir chaque autre dimension sous la forme dune expression algbrique.

Nom :

Prnom :

Page 3

Dim des fournisseurs : jointure enntre Supplier, Nation et Rgion


Dim des clients : jointure entre Customer, Nation et Region
Dim des produits : select * from Part

Question 2. On veut transformer le schma TPCH en un schma en flocon. En particulier la dimension


concernant les clients (qui passent des commandes) est dcompose en 3 relations C1, C2, C3 telles que
C1 est associe la table des faits. C2 et C3 sont associes uniquement C1. La relation C2 dcrit la
localisation gographique des clients. La relation C3 dcrit le secteur de march de la clientle. On
suppose que la clientle est sectorise par activit (automobile, btiment, meuble) et par revenu (faible,
moyen, fort).
a) Quels sont les attributs, inexistant dans le schma TPCH, ajouter pour dfinir la dimension des
clients ?

Lattribut mktsegment correspond activit


On ajoute un attribut revenu
Et un attribut secteur pour identifier le secteur de march

b) Donner le schma de C1, C2 et C3.

C1 = Customer
Dplacer lattribut mktsegment vers C3
Ajouter lattribut secteur qui fait rfrence C3.secteur
C2 = CustomerNation = jointure Nation,Rgion
C3 = CustomerSegment(secteur , mktsegment, revenu)

Nom :

Prnom :

Page 4

Rmq : lattribut mktsegment correspond activit

Exercice 2. Requtes analytiques

4 pts

Le journal des accs un site web est stock dans une BD. Son schma est :
A (u, m, s , d, url, taille)
u est lidentifiant de lutilisateur qui navigue sur le site web
m est ladresse IP du client
s est le nom de domaine du client (ex : aol.com, jussieu.fr, ...) :
d est la date de laccs
la date est compose de 5 attributs numriques dj : jour dans [0, 31], dm : mois dans [1, 12], da :
anne dans [1980, 2008], dh : heure dans [0, 23] dmn : minutes dans [0, 59]

url est la page web consulte par lutilisateur


taille est la taille dune page en octets
Ecrire les requtes en SQL en utilisant si possible les fonctions analytiques de classement et dagrgation
sur une plage glissante.
Question 1 : Pour toutes les dates existant dans la base, donner le nombre daccs qui ont eu lieu pendant
les 10 minutes prcdentes. Le schma du rsultat est (d, accs).

select distinct d, count(*) over (order by d range between interval '10' minute
preceding and current row) as acces
from A
order by d desc;

Question 2 : Donner le classement des 10 utilisateurs qui ont tlcharg le plus gros volume de donnes.
Afficher leur rang. Le schma du rsultat est (u, volume, rang).

Voir TP AP

Nom :

Prnom :

Page 5

Question 3 : Pour chaque page web, donner le classement des domaines (attribut s) ayant fait le plus
daccs cette page. Le schma du rsultat est (url, s, accs, rang)

select url, s, count(*) as accs,


rank() over ( partition by url order by count(*) desc) as rang
from A
group by url, s
;

Question 4 : On considre que la session dun utilisateur se termine lorsque lutilisateur ne consulte plus
le site pendant 3 minutes ou plus. Afficher le nombre de sessions pour chaque utilisateur. Le schma du
rsultat est (u, nb_session).

Nom :

Prnom :

Page 6

Sol1 : fenetre temporelle glissante


Sol 2 : On commence par slectionner les accs qui ne sont pas des dbuts de sessions
T1 =

Select distinct a2.u, a2.d


From A a1, A a2
Where a1.u = a2.u and a2.d - a1.d <=3

Puis

select u , count(*) as nb_session


From T1
Group by u

Exercice 3. Entrepts de donnes

6 pts

On considre un entrept de donnes permettant dobserver les ventes de produits dune entreprise. Le
schma des tables est le suivant :
CUSTOMER (cust_id, city, state, region, country)
PRODUCT (prod_id, prod_name, category, cost_price, sell_price, supplier)
TIME (time_key, month, month_name, quarter, year)
PURCHASES(prod_id, time_key, cust_id, ship_date, purchase_price, shipping_charge)
Question 1. Indiquez quelles sont les tables de faits et les tables de dimension du schma en toile de cet
entrept.
Table de fait : purchases
Tables de dimensions : customer, product, time.

Question 2. On veut transformer ce schma en schma en flocon. Donnez la nouvelle reprsentation de


la table TIME.
La table TIME est dcompose en plusieurs tables :
TIME (time_key, month_key)
MONTH (month_key, month, month_name, quarter_key)
QUARTER(quarter_key, quarter, year)

Question 3. Ecrire la requte SQL permettant dafficher la moyenne des ventes (purchase_price) par
catgorie (category) et par anne (year).
SELECT p.category, t.year AVG(purchase_price) average_sales
FROM product p, time t, purchases f
Where p.prod_id = f.prod_id
And t.time_key = f.time_key
GROUP BY p.category, t.year ;

Question 4. Calculer le cube permettant dobtenir la somme des ventes par categorie, par anne et par
rgion en utilisant la clause GROUP BY CUBE.
Select p.category, t.year, c.region, sum(f.purchase_price) total_sales
From product p, time t, purchases f, customer c
Where p.prod_id = f.prod_id
And t.time_key = f.time_key
AND c.cust_id = f.cust_id
GROUP BY CUBE (p.category, t.year, c.region);

Nom :

Prnom :

Page 7

Question 5. On considre la mme requte, mais en remplaant la clause GROUP BY CUBE par la
clause GROUPE BY ROLLUP. Quelles diffrences ce changement implique-t-il ? Vous pouvez expliquer
les diffrences laide dun exemple.
Dans le premier cas (CUBE) on a des agrgations sur tous les niveaux de regroupement
(category, year, region), tandis que dans le deuxime, on se limite aux regroupements
(category, year, region), (category, year ) et (category). On na que des rsultats
partiels du cube.

Question 6. On souhaite maintenant observer les ventes de 2006 par rgion, et tudier particulirement
les ventes qui ont lieu pendant les vacances. On veut obtenir une relation de schma (region,
month_name, sales), qui contient, pour chaque rgion, la somme des ventes par mois ainsi que la somme
des ventes qui ont eu lieu pendant les vacances (somme des ventes des mois de juillet et aot). Dans ce
dernier cas, lattribut month_name prendra la valeur vacances.
Ecrire la requte permettant dobtenir ce rsultat.
Select region, month_name, sales
From (select t.month_name, c.region, sum(f.pourchase_price) sales from purchases f, time t, customer c
Where f.time_key = t.time_key and t.year = 2006 and c.cust_id = f.cust_id
Group by c.region, t.month_name)
Model
Partition by (region)
Dimension by (month_name)
Measures (sales)
Rules (sales[vacances] = sales[juillet] + sales[aot])