Vous êtes sur la page 1sur 5

HEC Montréal

Hiver 2021
TECH 20712 : Gestion des bases de données

Examen final
30 % de la note finale

À lire attentivement avant de commencer

Cet examen final contient deux parties. Nous vous suggérons d’allouer votre temps
comme suit :

Partie 1 « Vrai ou Faux »


 10 questions vrai ou faux à répondre dans le même fichier Word utilisé pour la
partie 2.
Partie 2 – Modélisation
 Remettez un seul fichier Word (.doc ou .docx) pour les réponses aux questions
de modélisation. Vous pouvez dessiner les modèles dans le formalisme requis
soit
o En draw.io (puis capture d’écran et coller dans Word),
o À la main LISIBLEMENT (puis prendre une photo et insérer dans Word).
 La réponse à la dernière question de la partie 2 (Création de la table) doit être
ajoutée au fichier sql utilisé pour la partie 3.
Partie 3
 Remettez un seul fichier SQL pour les questions SQL de cette partie.

Pour les deux fichiers, inscrivez votre nom et votre matricule dans le titre des fichiers et
dans un en-tête au début des fichiers. Identifiez clairement les questions auxquelles
vous répondez.

Fichier : Nom_Prenom_111222333.docx Fichier : Nom_Prenom_111222333.sql


Nom, Prénom. 111222333 /*
Nom, Prénom. 111222333
*/
Question 1
Dans cette question, les choses à noter --Question 1
sont : … select * from
Sales.SalesOrderHeader

Question 2 --Question 2
Voilà mon interprétation de la situation… select * from
Sales.SalesOrderDetail

 Sauvegardez fréquemment vos fichiers.


 Assurez-vous de remettre les bons fichiers ! Sans aucune exception, seulement
les fichiers soumis via l’outil « Remise de travaux » de ZoneCours seront évalués.

Page 1/5
Partie 1

A - VRAI ou FAUX (Total 10  points – 1 point par question)

Question Réponse
1. En UML, une classe fille hérite tous les attributs
de la classe mère dont elle hérite.
2. Les transactions peuvent servir à résoudre la
problématique des accès concurrents à la base de
données.
3. Une fonction définie par l’usager peut retourner
une table virtuelle.
4. Une procédure stockée a toujours un type de
renvoi.
5. L’instruction suivante retournera l’âge moyen par
espèce dans la table :
SELECT PetSpecies,
AVG(PetAge)
FROM Pets
6. Lorsqu’on utilise une sous-requête dans la clause
FROM, il est possible de faire des jointures entre
le résultat de la sous-requête et d’autres tables.
7. Une base de données où on retrouve des
dépendances fonctionnelles transitives n’est pas
conforme à la 2e forme normale.
8. Il est possible d’utiliser une fonction d’agrégation
dans une clause WHERE.
(par ex. WHERE X < AVG(Y))
9. L’API et une interface qui prend place entre la
couche métier et la couche des données.
10. Il est possible de combiner les conditions if et
While ensemble dans le code par exemple :
Declare @valeur int;
Set @valeur =0;
If exists (Select * from Sales.SalesOrderDetails)
Begin
While @valeur < 4
Begin
Instruction…
@valeur = @valeur+2;
End
End

TECH 20712 Examen final – Hiver 2021 Page 2/5


Partie 2 - MODÉLISATION (Total 40 points)

11. (40 points) La clinique médicale du quartier

Puisque vous êtes un analyste TI renommé, le directeur de la clinique médicale de


votre quartier, la clinique Guérit Tout, vous contacte pour l’aider dans l’implantation
d’une nouvelle base de données pour un nouveau système d’information dont il
aimerait doter son établissement.
Il est à noter que la clinique offre des services médicaux touchant à un ensemble de
spécialités médicales (médecine générale, Radiographie, dermatologie, …)

Le propriétaire de la clinique vous explique qu’il veut enregistrer les éléments


suivants :
Les patients : il veut enregistrer toute l’information qui est pertinente tels que le
numéro d’assurance maladie, les nom et prénom, le genre et l’adresse domiciliaire.
La clinique accepte autant des personnes détenant une carte d’assurance maladie
valide que des non-résidents du Québec.
Les médecins : il veut enregistrer toute l’information qui est pertinente tels son
numéro d’assurance sociale, ses prénom et nom, sa date de naissance, sa spécialité
et son adresse domiciliaire.
Chaque spécialité est associée à un taux horaire prédéterminé.

Notez que les patients et les médecins partagent un bon nombre d’attributs

L’information sur les visites : Nous voulons garder l’information relative à chaque
visite, soit la date de la visite, le diagnostic relatif à la visite, la prescription découlant
de la visite le cas échéant.

Chaque ligne de la prescription fait référence à un médicament et une posologie


associée à ce dernier.
La clinique a conclu des ententes avec certaines pharmacies à qui une prescription
peut être envoyée directement par le système. Au terme de chaque visite, le patient
peut choisir l’envoi automatique de la prescription vers la pharmacie de son choix
(parmi les pharmacies avec qui la clinique a des ententes préalables)

Votre tâche — En identifiant les besoins exprimés dans l’énoncé de la question et en


détaillant vos suppositions :

a) (20 points) Développez le modèle conceptuel de la solution.

b) (10 points) Convertissez le modèle conceptuel en modèle logique en 3NF.

c) (10 points) Écrire toutes les instructions DML nécessaires à la création de la


table « Patient » (instructions SQL permettant la création de la table et de ses
attributs, les définitions des clé primaire et clé(s) étrangère(s) et les
différentes contraintes nécessaires).

Pour toutes questions ci-dessus, il est impératif de préciser les hypothèses utilisées
dans le même fichier contenant votre réponse.

TECH 20712 Examen final – Hiver 2021 Page 3/5


Partie 3 - REQUÊTES SQL (Total 50 points)

1. (12.5 Points) Le directeur des ventes chez AdventureWorks vous demande quelques
dernières requêtes :
Pour tout produit disponible à la vente, obtenez le nombre de fois où le prix de
vente a été modifié ou mis à jour (Cette information se trouve dans la table
Production.ProductCostHistory.)
Ne considérez pas les produits dont le prix de vente n'a jamais été modifié ou mis à
jour.
On vous demande aussi de ne retenir que les produits dont le nombre de
modifications de prix est supérieur à la moyenne du nombre de modifications de
prix.
Votre requête doit afficher uniquement les attributs suivants :
 Numéro du produit et Nom du produit, votre information sera affichée de la
manière suivante dans une seule colonne (PN : <Numéro de Produit> ---
Name : <Nom du Produit)> )
 ProductID
 Nombre de modifications de prix
Triez le jeu de données par selon l’attribut « Nombre de modifications de prix » en
ordre décroissant, puis par ProductID en ordre croissant.


2. (5 Points) Le directeur des ventes, vous explique que la nouvelle assistante
administrative n’a pas les droits nécessaires pour accéder aux tables de productions,
il vous demande de lui créer une vue à partir de la réponse de la question 1.
La nouvelle employée n’aura besoin que de rouler la commande suivante :
select * from ModStatsView

En l’exécutant, elle devrait avoir la table obtenue à la question 1, à laquelle on aura


amputé les deux dernières colonnes. En d’autres termes, elle ne verra que les
colonnes suivantes :
 Numéro du produit et Nom du produit, votre information sera affichée de la
manière suivante dans une seule colonne (PN : <Numéro de Produit> ---
Name : <Nom du Produit)> )
 ProductID


3. (10 points) Donnez la liste des ventes faites aux clients individuels pour lesquelles le
code postal de livraison diffère du code postal de facturation. Affichez :

 Le numéro de facture
 Le nom complet du client, en incluant le titre, le prénom, deuxième prénom,
nom de famille et suffixe
 Le code postal de livraison
 La ville de livraison
 Le code postal de facturation
 La ville de facturation

TECH 20712 Examen final – Hiver 2021 Page 4/5


Ordonnez le résultat par le nom complet du client en ordre alphabétique ascendant.

Le résultat final ressemblerait à ceci :

4. (12.5 points) Chez Adventureworks, on a remarqué que les frais de livraisons sont
beaucoup plus chers lorsque le BillToAddress et ShipToAddress dans la table de
SalesOrderHeader sont différents.
L’entreprise a donc décidé de charger des frais de 10% supplémentaires aux clients
dont la commande a un BillToAddress est différent du ShipToAddress.
On ne vous demande pas de modifier les tables. On vous demande simplement de
créer une fonction
CalculFraisLivraison (@BillToAddress int ,@ShipToAddress int, @totalDue money)

qui retournera le nouveau TotalDue incluant l’augmentation de 10% si les


BillToAddress et les ShipToAddress sont différents.
On vous demande aussi d’appeler votre nouvelle fonction en utilisant une requête
select qui retournera les données suivantes :
 BillToAddressID
 ShipToAddressID
 TotalDue (le TotalDue original dans la table)
 NewTotalDue (le nouveau TotalDue incluant l’augemntation de 10%)
 DeltaTotalDue (la différence entre le NewTotalDue et le TotalDue original)

Dans le résultat final, nous ne voulons voir que les tuples pour lesquels le
DeltaTotalDue est positif

BillToAddressID ShipToAddressID totalDue NewTotalDue DeltaTotalDue


--------------- --------------- --------------------- --------------------- ------------------
938 30 137343,2877 151077,6165 13734,3288
628 11382 130416,4829 143458,1312 13041,6483
1066 28 14074,0241 15481,4265 1407,4024
1025 11381 3859,279 4245,2069 385,9279
938 30 142312,2199 156543,4419 14231,222
628 11382 118206,3408 130026,9749 11820,6341
1066 28 5861,3493 6447,4842 586,1349
1025 11381 28866,9646 31753,6611 2886,6965
938 30 101020,1731 111122,1904 10102,0173

24143 225 87.2729 96.0002 8.7273

5. (10 points) Pour les produits qu’AdventureWorks vendus à rabais, quelle est la
remise moyenne (« average discount »), en dollars (format monnaie), par catégorie
de produits ? Affichez les détails suivants :
 l’id de la catégorie
 le nom de la catégorie
 la remise moyenne (« average discount ») en dollars (format monnaie)

Dans le cas de l’ID et du nom de la catégorie, l’absence d’une catégorie « officielle »


sera considérée comme une catégorie elle-même.

TECH 20712 Examen final – Hiver 2021 Page 5/5

Vous aimerez peut-être aussi