Vous êtes sur la page 1sur 6

Cours : BDD avancées Département d’Informatique

Promo : RSD-GL (2017/2018) Enseignante : a.HALFAOUI

Examen final (Durée 1h30, Documents interdits)


Remarques : - Le temps prévisionnel de chaque exercice est donné à titre indicatif.
- Les réponses aux questions des exercices sont indépendantes les unes des autres. Le barème des
exercices est détaillé par question
Exercice 1 : Temps estimé (45 à 50 mn). Barème de points (8 pts)
On considère les deux collections : Cinéma et Agenda_Ciméma de la base ProgrammeCiné donnant des
informations sur les cinémas, les films et leurs diffusion en salles de cinéma. un exemple de documents contenus
dans les deux collections est donné dans la feuille 2
Partie 1 :
1. Sachant que l'objectif de l'application à construire est de visualiser une liste des salles de cinémas ; avec
pour chacune d’entre elles la liste des films avec leurs programmes de diffusion, cette solution est-elle
adaptée. Justifier. (1 pt)
2. Expliquer les requêtes suivantes et donner le résultat obtenu sur la base : (1pt x 3)
a- db.Agenda_Cinema.update({"film":"TAXI 5"}, {$addToSet: {"programme.0.séances":"17h00"}})
b- db.Agenda_Cinema.find({"salle_cinéma":"Salle Ibn Khaldoun"}).forEach(function(doc)
{db.Agenda_Cinema.update({_id: doc._id},{$set:{"tarif": doc.tarif + 100 }});})
c- db. Agenda_Cinema.aggregate([{ $group : { _id : "$film", Liste_cinema:{$push:"$salle_cinéma"}}},
{$out:"Films"}]);

Partie 2 : donnez les requêtes qui permettent de : (1pt x 5)


1. Rajouter le genre ‘’Comédie’’ au film ‘’TAXI 5’’ .
2. Afficher le nombre de salles de cinéma situées à Alger qui ont une capacité de salle supérieure à 200
places
3. Afficher Le nom des salles où passe un film d’action policier le 05 avril 2018.
4. Donnez pour chaque cinéma la liste de tous les films diffusés. Le résultat de l’exécution de la requête est:
{ "_id" : "Salle El Mouggar",
"Liste_films" : [ "TAXI 5" ]
}
{ "_id" : "Salle Ibn Khaldoun",
"Liste_films" : [ "TAXI 5", "Tomb Raider" ]
}
5. On voudrait rajouter au document Agenda_Cinéma, les informations de chaque cinéma dans le champ
‘information_ciné’. Donnez la requête adéquate
Exercice 2 : Temps estimé (15 à 20 mn). Barème de points (4,5 pts)
Soit le schéma de l’entrepôt de données pour l’analyse des accidents de la route :
date (date_id, jour, année, mois, semestre, jour_fériés)
lieu (lieu_id, categorie_route, ville, pays)
usager (usager_id, gravite, categorie, genre, trajet, securite)
accident ( accident_id, date_id, usager_id, lieu_id, nbAccidents, taux_dégat), taux dégat: est un pourcentage des dégats
causés sur le vehicule. accident _id représente le numéro attribué au constat d’accident lors de l’insertion dans la base de production.

Un accident est analysé par rapport au lieu ainsi que la date où s’est produit l’accident exemple : le 14 Avril 2017
sur la route nationale 5. L’accident est aussi analysé par rapport à l’usager du véhicule. Un exemple de la table
Usager peut être (1, 1,'Indemne', 'passager', 'masculin', 'domicile_travail', 'avec_casque').
1. Quel est le type de schéma de cet entrepôt ? (0,5 pt)
2. Indiquez la table des faits, Quel est sa granularité et la nature des mesures (1 pts)
3. La table des faits ne contient que les clés des différentes dimensions. Que représente, dans ce cas, le champ
accident_id ? Expliquer (1 pts)
4. Identifiez un groupe d’attributs formant une hiérarchie dimensionnelle (1pt)
5. On souhaite agrandir l’entrepôt en créant un autre datamart qui servira à analyser le fait d’assurance et le
remboursement après accident. Ce datamart partagera les dimensions temps et usager. Comment appelle-t-
on ces deux dimensions. (1pts)

Page 1
Nom et Prénom : Master :

Questions : : Temps estimé (15 à 20 mn). Barème de points (8 pts) : 1 à 9 (0,5 pt)
1. Le serveur Mondrian est un serveur de type :  MOLAP
 ROLAP 5. Le traitement des données des entrepôts est
 MOLAP effectué sur les bases de données de production
 OLTP  Vrai Faux
2. La phase qui prend le plus de temps dans la mise 6. Un schéma en flocon de neige détaille l’analyse
en place d’un entrepôt de donnée est : des faits d’un schéma en étoile
 L’élaboration du modèle décisionnel  Vrai Faux
 L’intégration et la consolidation des données 7. Le modèle en flocon de neige est plus
performant que le modèle en étoile
 Le choix des outils
 Vrai Faux
3. Les vues permettent : 8. Pour interroger des données dans un cube, on
 une écriture simplifiée de requêtes complexes utilise
 d'affiner la gestion de la confidentialité des  SQL Etendu
données  NDX
 d'offrir aux utilisateurs une vision des données  SQL 3
dépendantes de la façon dont elles sont  MDX
structurées dans la base 9. Quel est le format supporté par MongoDB ?
4. Une base de production est de type  SQL
 OLAP  XML
 OLTP  BSON

10. Compléter le tableau comparatif suivant par les valeurs : Horizontal, Vertical, Définit au départ, ACID, très grand,
BASE, Schémaless, Faible (1 pt)
Paramètres Relationnel NoSQL
Schéma
Transactions
Scalabilité
volume de données

11. Soit la base suivante (2,5 pts)


Film (idFilm, titre, annéeSortie);
acteur(idActeur, nom, dateNaissance, nbrole); nbRoles donne le nombre de rôles ayant été joués par une personne dans tous
les films le nombre de rôle dans le même film sont aussi comptabilisés, nbrole est initialisé à 0.
RoleFilm(idrole, idFilm*, idActeur*, nom_personage); un acteur peut jouer plusieurs rôles dans un même film
Compléter le déclencheur qui permet de mettre à jour le champ nbrole et d’interdir à un acteur de jouer plus de trois rôles dans
un même film.
CREATE OR REPLACE TRIGGER TRIGGER1
… … … INSERT ON ROLEFILM
for each row
DECLARE
nombreroles INTEGER;
BEGIN
Nombreroles := 0 ;
Select … … …

if nombreroles < 3 then

… … …

ELSE
RAISE_APPLICATION_ERROR(-20006, 'le nombre max de roles par film est de 3');
End if;
END;
Collection : cinéma Collection : Agenda_Cinéma

/* 1 */ /* 1 */
{ { "_id" : ObjectId("5af8a730f952dd77ff60f743"),
"_id" : ObjectId("5af2ed8c7afa5a2e7cb6997e"), "salle_cinéma" : { nom : "Salle Ibn Khaldoun",
"nom" : "Salle Ibn Khaldoun", "adresse" : {
"adresse" : { "rue" : "12, Rue Docteur Saâdane",
"rue" : "12, Rue Docteur Saâdane", "ville" : "Alger"
"ville" : "Alger" },
}, "téléphone" : "021 40 30 22",
"téléphone" : "021 40 30 22", "capacité salle" : 240
"capacité salle" : 240
} }
/* 2 */ "film" : "TAXI 5",
{ "année_sortie" : 2018,
"_id" : ObjectId("5af2f1497afa5a2e7cb69980"), "mois_sortie" : "avril",
"nom" : "Le Mouggar", "durée" : "1h 40mn",
"adresse" : { "genre" : [ "Action", "Policier" ],
"rue" : "Rue Asselah Hocine", "tarif" : 600,
"ville" : "Alger" "synopsys" : "Sylvain Marot, super flic parisien et pilote
}, d’exception, est muté ….",
"téléphone" : "021 40 87 06", "programme" : [
"capacité salle" : 160 { "date" : "05 avril 2018",
} "séances" : [ "10h00", "17h00" ] },
{ "date" : "07 avril 2018",
"séances" : [ "20h00", "21h45" ] },
{ "date" : "17 mai 2018",
"séances" : [ "10h00", "20h00" ] }
]
}
/* 2 */
{ "_id" : ObjectId("3ef978a4c755e06f72118e19"),
"salle_cinéma" : "Salle El Mouggar",
"film" : "TAXI 5",
"année_sortie" : 2018,
"mois_sortie" : "avril",
"durée" : "1h 40mn",
"genre" : [ "Action", "Policier" ],
"tarif" : 700,
"synopsys" : "Sylvain Marot, super flic parisien et pilote
d’exception, est muté ...",
"programme" : [
{ "date" : " 08 mai 2018",
"séances" : [ "13h45", "20h00" ] },
{ "date" : "17 mai 2018",
"séances" : [ "20h00", "21h45" ] }
]
}
/* 3 */
{
"_id" : ObjectId("5af8a792f952dd77ff60f78d"),
"salle_cinéma" : "Salle Ibn Khaldoun",
"film" : "Tomb Raider",
"année_sortie_salle" : 2018,
- Page 2 - " ll " " "
Corrigé examen +Barème

Partie 1 (8 pts): Répondez aux questions suivantes


1. Le serveur Mondrian est un serveur de type : 6. Le traitement des données des entrepôts est
ROLAP effectué sur les bases de données de
 MOLAP production
 OLTP  Vrai Faux
2. La phase qui prend le plus de temps dans la 7. Un schéma en flocon de neige détaille
mise en place d’un entrepôt de donnée est : l’analyse des faits d’un schéma en étoile
 L’élaboration du modèle décisionnel  Vrai Faux
L’intégration et la consolidation des données 8. Le modèle en flocon est plus performant que
le modèle en étoile
 Le choix des outils
 Vrai Faux
3. Les vues permettent :
9. Pour interroger des données dans un cube, on
une écriture simplifiée de requêtes complexes utilise
d'affiner la gestion de la confidentialité des SQL Etendu
données  NDX
 SQL 3
 d'offrir aux utilisateurs une vision des données
MDX
dépendantes de la façon dont elles sont
10. Quel est le format supporté par MongoDB ?
structurées dans la base
 SQL
4. Une base de production est de type
 XML
 OLAP
 BSON
OLTP
 MOLAP
5. Compléter le tableau comparatif suivant (0,25x4)pts
Paramètres Relationnel NoSQL
Schéma Défini au départ schémaless
Transactions ACID BASE
Scalabilité Verticale Horizontale
volume de données faible Très grand

Soit la table suivante


Film (idFilm, titre, annéeSortie);
acteur(idActeur, nom, dateNaissance, nbrole); nbRoles donne le nombre de rôles ayant été joués par une personne dans tous
les films le nombre de rôles dans le même film est aussi comptabilisé
RoleFilm(idrole, idFilm*, idActeur*, nom_personage); un acteur peut jouer plusieurs rôles dans un même film
Compléter le déclencheur qui permet de mettre à jour le champ nbrole et d’interdir à un acteur de jouer plus de trois rôles dans
un même film.
CREATE OR REPLACE TRIGGER TRIGGER1
BEFORE (0,5 pts)INSERT ON ROLEFILM
for each row
DECLARE
nombreroles INTEGER;
BEGIN
Nombreroles := 0 ;
Select count(*) into nombreroles from RoleFilm where 1pt
idfilm= :new.idfilm and idacteur= :new.idacteur ;
if nombreroles < 3 then
update acteur set nbrole = nbrole + 1 where idacteur = :new.idacteur; 1pt
ELSE
RAISE_APPLICATION_ERROR(-20006, 'le nombre max de roles par film est de 3');
End if;
END;
Exercice 1 : (7,5 pts)
On considère les deux collections : Cinéma et Agenda_Ciméma d'une base ProgrammeCiné donnant des
informations sur les cinémas, les films et leurs diffusion en salles de cinéma. un exemple de documents
contenus dans les deux collections est donné dans feuille 2/2
Partie 1 : 3,5pts

1. Sachant que l'objectif de l'application à construire est de visualiser une liste des salles de cinémas ; avec
pour chacune d’entre elles la liste des films avec leurs programmes de diffusion, cette solution est-elle
adaptée. Justifier. (0.5 pt)
- Non cette solution n’est pas optimale 0.25pt car on a une répétition des salles pour chaque film.
Exemple la salle ibnkheldoun se repète deux fois pour les deux film taxi5 et Tomb Raider. Le champ
film ne peut contenir qu’une seule valeur, il aurait fallu qu’il soit sous forme de tableau d’objets
pour contenir la liste des films avec leurs programmes. La collection Agenda_Cinema est orienté
film et non cinéma. 0.25
2. Expliquer les requêtes suivantes et donner le résultat obtenu sur la base : (1pt x 3)
a- db.Agenda_Cinema.update({"film":"TAXI 5"}, {$addToSet: {"programme.0.séances":"17h00"}})
- la requête permet de rajouter une séance de 17h (si cette séance n’existe pas : addToSSet) 0.25 pt
à la première date de diffusion (programme.0) . la séance sera rajouté au premier film 0.25 Taxi5
de la base (il n’y a pas $multi) 0.25pt
- au niveau du document rien à ajouter car la séance existe déjà 0.25 pt
b- db.Agenda_Cinema.find({"salle_cinéma":"Salle Ibn Khaldoun"}).forEach(function(doc)
{db.Agenda_Cinema.update({_id: doc._id},{$set:{"tarif": doc.tarif + 100 }});})
- Rajouter 100 da au tarif des film diffusés à la salle ibn khaldoun 0.5 pt
- Le premier document de la collection (‘’tarif’’ : 700).0.25 pt, le deuxième document ibn khaldoun
rajouter le champ ‘’tarif’’ : NAV (sans valeur) 0.25 pt. Attention il faudra tester l’existence du champ
tarif sinon le champ va être rajouté (sans valeur) au deuxième document de la salle ibn kheldoun.
c- db. Agenda_Cinema.aggregate([{ $group : { _id : "$film", Liste_cinema:{$push:"$salle_cinéma"}}},
{$out:"Films"}]);
- crée et retourne la collection film 0.25 pt, cette dernière affiche pour chaque film la liste des
cinémas où ils sont diffusés 0.25 pt.
- Résultat de la collection
{
"_id" : "Tomb Raider",
"Liste_cinema" : [ "Salle Ibn Khaldoun" ]
}
{
"_id" : "TAXI 5",
"Liste_cinema" : [ "Salle Ibn Khaldoun", "Salle El Mouggar" ]
}

Partie 2 : donnez les requêtes qui permettent de : 4 pts: (0.75pt x 4) + 1

1. Rajouter le genre ‘’Comédie’’ au film ‘’TAXI 5’’ . 0 ,25 pt


0 ,25 pt 0 ,25 pt
db.Agenda_Cinema.update({"film":"TAXI 5"},{$push:{"genre":"Comédie"}},{multi:1})
2. Afficher le nombre de salles de cinéma situées à Alger qui ont une capacité de salle supérieure à 200
places 0 ,25 pt 0 ,25 pt 0 ,25 pt
db.Cinema.find({"adresse.ville": "Alger","capacité salle": {$gte:200}}).count()
3. Afficher Le nom des salles où passe un film d’action policier le 05 avril 2018.
db.Agenda_Cinema.find({"genre":{$all:["Action", "Policier"]}, "programme.date":"05 avril
0 ,25 pt 0 ,25 pt
2018"},{salle_cinéma:1, _id:0})
0 ,25 pt
4. Donnez pour chaque cinéma la liste de tous les films diffusés. Exemple du résultat de la requête :
{ "_id" : "Salle El Mouggar",
"Liste_films" : [ "TAXI 5" ]
}
{ "_id" : "Salle Ibn Khaldoun",
"Liste_films" : [ "TAXI 5", "Tomb Raider" ]
} 0 ,25 pt 0 ,25 pt
0 ,25 pt
db.Agenda_Cinema.aggregate([{ $group : { _id : "$salle_cinéma",Liste_films:{$push:"$film"}}}]);
5. On voudrait rajouter aux documents de la collection Agenda_Cinéma, les informations de chaque
cinéma dans le champ ‘information_ciné’. Donnez la requête adéquate
db.Agenda_Cinema.aggregate([ { $lookup:
{ from: "Cinema", 0 ,25 pt
localField: "salle_cinéma", 0 ,25 pt
foreignField: "nom", 0 ,25 pt
as: "information_ciné" 0 ,25 pt
} } ])

Deuxième solution avec for each

db.Cinema.find({}).forEach(function(doc)
{var salle_cinéma = doc.nom;
db.Agenda_Cinema.update({salle_cinéma},{$set:{"info":doc}});})

Exercice 2 : (4,5 pts)

Soit le schéma de l’entrepôt de données pour l’analyse des accidents de la route :


date (date_id, jour, année, mois, semestre, jour_fériés)
lieu (lieu_id, categorie_route, ville, pays)
usager (usager_id, gravite, categorie, genre, trajet, securite)
accident ( accident_id, date_id, usager_id, lieu_id, nbAccidents, taux_dégat), taux dégat: est un pourcentage des
dégats causés sur le vehicule. accident _id représente le numéro attribué au constat d’accident lors de l’insertion dans la base de
production.

Un accident est analysé par rapport au lieu ainsi que la date où s’est produit l’accident exemple : le 14 Avril
2017 sur la route nationale 5. L’accident est aussi analysé par rapport à l’usager du véhicule. Un exemple de la
table Usager peut être (1, 1,'Indemne', 'passager', 'masculin', 'domicile_travail', 'avec_casque').
1- Quel est le type de schéma de cet entrepôt ? (0,5 pt)
Shéma en etoile
2- Indiquez la table des faits, Quel est sa granularité et la nature des mesures (1 pts)
La table Accident. Deux mesures : nbAccidents : additif, taux dégat : non additif
3- La table des faits ne contient que les clés des différentes dimensions. Que représente, dans ce cas, le champ
accident_id ? Expliquer (2pts)
c’est la clé d’une dimension dégénérée , la table de la dimension n’existe pas dans la base de d’entrepôt
4- Identifiez un groupe d’attributs formant une hiérarchie dimensionnelle (0,5pt)
Jour -> année-> mois. Année-> jours fériés . ville->pays
(0,5pts) 5-On souhaite agrandir l’entrepôt en créant un autre datamart qui servira à analyser le fait
d’assurance et le remboursement après accident. Ce datamart partagera les dimensions temps et
usager. Comment appelle-t-on ces deux dimensions.
Dimensions conformes

Vous aimerez peut-être aussi