Vous êtes sur la page 1sur 10

Département d’informatique et de génie logiciel

Pavillon Pouliot

IFT-2004
Modèles et langages des bases de données
Travail pratique 1 – Été 2023

Conditions
SQL : Les requêtes SQL doivent être au format Oracle. Vous avez un compte Oracle sur le serveur du Département,
voir la section Matériel didactique > Logiciels du portail de cours, le lien pour l'installation de SQL Developper et la
connexion à Oracle.

Norme : Le travail doit respecter la norme de conception présentée dans la page Normes, procédures, consignes et
gabarit de la section Contenu et activités du portail du cours.

Remise : Vous devez suivre la procédure de remise de travaux disponible sur le portail de cours. Vous y trouverez aussi
les dates de remise pour le travail préliminaire et le travail final.

Travail à faire en équipe de 3. Le travail est prévu pour une équipe de 3, et il n’est pas recommandé de le faire à
moins de 3. Mais, si vous désirez quand même le faire seul ou à 2, c'est votre choix et responsabilité. Ça va augmenter
beaucoup le temps que vous devrez mettre sur votre travail et sur le cours (vous dépasserez les 135 heures prévues).
Toute communication entre équipes ou avec toute personne autre que l’enseignant est strictement défendue. Les
politiques sur le plagiat, le français et le retard énoncées dans le plan de cours sont totalement applicables.

Agilité: comme pour les vrais projets, des changements peuvent survenir à tout moment suite à des précisions du
client ou à des ajustements. Des versions mises à jour du présent document pourront donc être publiées sur le portail
de cours. Ces ajustements seront précisés dans le document des précisions de la page du portail du Travail (le même
que pour les questions ci-bas).

Vous avez des questions ? (ou même si vous n’en avez pas, allez regarder celles des autres) Vérifiez le
document des précisions de la page du portail du Travail. Vous y retrouverez des réponses aux questions fréquentes,
ainsi que des précisions et ajustements (mentionnés précédemment) s’il y a lieu. Si votre réponse ne s’y trouve pas,
contactez l’enseignant par courriel. Il est là pour ça J

Biens livrables
1) Rapport de temps préliminaire TP1
a) En utilisant le gabarit Excel fourni sur le portail de cours, faites un rapport de temps préliminaire (un document
Excel) incluant pour chaque question (sous-questions à tous les niveaux) du travail une estimation des heures
de travail que vous devrez effectuer pour terminer le travail.
b) Remettre sur le portail de cours dans la page Rapport de temps préliminaire tp 1.

2) Travail pratique 1, dans un fichier .zip:


a) Un rapport (un document Word .doc ou .docx) qui doit contenir toutes les réponses, excluant les requêtes
SQL, aux questions de la section suivante.
b) Votre rapport de temps final. C'est-à-dire le rapport de temps préliminaire (gabarit Excel .xlsx) dont la colonne
temps réel a été complétée ainsi que le ratio temps réel divisé par temps estimé
c) Un fichier tp1.sql (un fichier enregistré à partir de SQL Developer au format texte, mais dont l’extension est .sql)
contenant une copie de toutes les requêtes SQL l’une à la suite de l’autre pouvant être exécutées dans SQL
Developer sans erreur. Attention, ce fichier doit contenir les requêtes et non le résultat de l’exécution de celles-
ci.
d) Remettre sur le portail de cours dans la page Travail pratique 1 > Boîte de dépôt de la section Évaluations et
résultats.

Page 1 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Objectifs
Ce travail vise à vérifier l’atteinte, en tout ou en partie, de ces objectifs du plan de cours :
2. Algèbre relationnelle comme langage de manipulation des tables
3. Utiliser les formes normales pour structurer une base de données
4. Créer/ modifier/ interroger une base de données relationnelle avec SQL
8. Apprendre à évaluer la charge de travail d'un développement de base de données
9. Utiliser une norme de conception pour les bases de données
10. Développer de bonnes aptitudes de communication

Contexte
Avant de commencer, voici un rappel de consigne sur le plan de cours pour les travaux pratiques : « Chaque travail
pratique comprend l'atteinte des objectifs de plusieurs semaines de cours. Ils nécessitent aussi beaucoup plus
d'autonomie que des laboratoires, car ce ne sont pas des tutoriels, mais des problèmes à résoudre. Il faut donc
considérer un effort beaucoup plus important que pour un laboratoire. »

Aussi, notez qu’il s’agit d’un cas où vous devez faire de l’analyse. C’est-à-dire que comme dans la réalité avec le contact
avec un cas réel, vous devez lire la documentation, comprendre la situation, comprendre le besoin, détecter ce qui est
utile au modèle de données et ce qui pourrait ne pas l’être. Il n’y a pas qu’une seule réponse possible à ce cas. Vous
arriverez normalement à des modèles de données différents les uns des autres. De plus, comme dans un cas réel, tout
n’est pas dit dans les documents. Il faut parfois se fier au bon sens, à l’expérience ou à la vie en général. On doit aussi
demander au client ce qui n’est pas assez précis. Comme nous n’avons pas accès au client, vous simulerez les
questions posées au client. Et vous allez décider de ses réponses. Vous inscrirez le tout à la question 1)a)iii). Tant que
ces réponses ne contredisent pas l’énoncé et respectent le bon sens, elles seront acceptées. Par exemple, est-ce que
quelqu’un peut indiquer un prix négatif? Oui? Ça ne contredit pas l’énoncé, c’est vrai, mais ça n’a pas de bon sens,
donc ce serait refusé.

En résumé, le travail couvre plusieurs laboratoires et représente un effort plus grand que ces laboratoires réunis. De
plus, les questions sont précises, mais le cas, comme dans la réalité, est, au départ imprécis. C’est à vous de le faire
vôtre et de le clarifier. Et comme avec un « vrai » client, c’est un processus itératif. Vous devrez probablement
recommencer certaines parties à mesure que votre compréhension du besoin du client augmente.
Initiative Glanage Portneuf de la Sécurité alimentaire Portneuf - SAP
Il s’agit du cas réel de Glanage Portneuf. Le glanage consiste à donner accès à ses terres afin que des citoyens viennent
ramasser les surplus. Trop de citrouilles? Venez les cueillir. La météo a été trop clémente et il y a trop de tomates,
venez nous aider à les cueillir et repartez avec le tiers de la cueillette.

Sécurité alimentaire Portneuf (SAP dans le reste du texte) utilise le glanage pour éviter que des ressources alimentaires
se retrouvent à la poubelle. Elle met donc en contact des producteurs qui auraient des surplus ou des propriétaires
privés qui n’ont tout simplement pas le temps ou les ressources pour cueillir avec des citoyens-cueilleurs (CC) pour faire
des sorties de récoltes. Lors de ces sorties, le tiers des aliments est conservé par le producteur/propriétaire (qui peut
aussi les redonner à SAP), un autre tiers va aux cueilleurs et le dernier tiers à SAP pour être livré à des Ressources
d'aide (RA) où les denrées peuvent être distribuées à des personnes qui en ont besoin. Pour livrer à ses RA, SAP utilise
des entrepôts et pour le moment 1 camion réfrigéré (mais d’autres camions vont s’ajouter). Ce(s) camion(s) utilise(nt)
des routes de livraisons pour passer d’un RA à l’autre et répartir les aliments. SAP élabore et conserve des statistiques
dans Excel de ses sorties.

Actuellement, la gestion de tout ça se fait manuellement. Les producteurs, les propriétaires, les CC doivent s’inscrire
par des Google Forms. Ensuite, ce sont des échanges par courriel ou des événements Facebook qui permettent de
gérer les présences aux sorties. SAP aimerait donc simplifier le tout par une base de données qui permettrait de gérer
le tout en ligne. Ainsi, les producteurs/propriétaires, une fois inscrits, pourraient créer des sorties pour lesquelles les CC
inscrits dans la base de données pourraient s’inscrire à la sortie. Les employés de SAP pourraient s’assurer que les
sorties répondent aux besoins avant de les approuver et même chose pour les citoyens-cueilleurs (par exemple, SAP
essaie de favoriser les CC de la région de Portneuf bien qu’elle accepte des CC de l’extérieur de la région).

Page 2 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Les sorties se font habituellement à la même adresse que l’adresse du producteur/propriétaire. Par contre, comme les
terrains peuvent être grands, il arrive parfois que la cueillette soit, en soi, loin de l’adresse postale, et parfois même à
un endroit différent de la sortie précédente (un champ de pomme serait 500m à l’ouest de la maison, et un champ de
citrouille à 400m à l’est par exemple). C’est-à-dire que la position de la cueillette peut varier d’une sortie à l’autre pour
le même producteur. Donc, la position de la sortie sera indiquée par une adresse postale, mais aussi par des
coordonnées GPS (longitude et latitude) qui pourraient être réutilisées sur une carte (comme Plans d’Apple ou Google
Maps).

Vous trouverez en annexe:


• Lien vers le formulaire d’inscription d’un producteur
• Lien vers le formulaire d’inscription d’un propriétaire
• Lien vers le formulaire d’inscription d’un citoyen-cueilleur CC
• Liste de Ressources d’aide RA
• Exemple de document de statistiques

Notez qu’une autre raison pour aller vers une base de données et le côté limitatif d’un formulaire comme ceux utilisés.
Par exemple, lorsque l’on demande de saisir les enfants et adultes qui accompagnent, on peut actuellement difficilement
contraindre la saisie des valeurs. Donc, on voudra conserver toutes les informations de ces autres personnes. Ou pour
les disponibilités, les choix sont assez limités. On aimerait donc, à la manière de Doodle, avoir les disponibilités des
gens, mais pour des périodes de temps, avec dates (je suis disponible tel ou tel jour, de telle heure à telle heure, entre
telle date et telle date par exemple). Votre solution devra donc améliorer la conservation de ces données.

Si vous voulez avoir plus de détails sur Glanage Portneuf, on vous invite à consulter leur page Facebook ;
(2) Glanage Portneuf | Facebook

Les étudiants intéressés peuvent aussi s’inscrire comme CC pour aller essayer le glanage cet été J

Page 3 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Travaux
1) (50 points) Normalisation
a) (15 points) À partir du cas présenté ci-haut, ainsi que des questions sur l’algèbre et le SQL plus bas en 2):
i) Identifier tous les attributs potentiels, en faire la liste
ii) Identifier les dépendances fonctionnelles entre ces différents attributs permettant de modéliser tout ce que
doit gérer l’entreprise. Vous devez considérer les contraintes énumérées dans le texte de la section
Contexte. Présenter les dépendances sous la forme Aà B, C (où A, B et C peuvent être 1 ou plusieurs
attributs – ça ne veut pas dire d’utiliser des lettres, mais plutôt que vous devez écrire les dépendances sur
une ligne (ou plus) avec une flèche et non avec des boîtes et des flèches en dessous – voir exemple en
annexe B).
iii) Pour vous aider à identifier les attributs et les dépendances, si nécessaire (ou si ce n’est pas expliqué dans
le cas), et comme on ne peut contacter réellement le client, simuler les questions que vous lui auriez posées
et les réponses qu’il vous aurait données. Ces réponses ne doivent toutefois pas contredire ce qui est
mentionné dans l’énoncé. Donnez ces questions et réponses dans votre rapport.
b) (35 points) À l'aide des dépendances identifiées en a):
i) Créer une table (et seulement une – elle sera grande, car elle contiendra tous les attributs – elle peut être
sur plus d’une ligne pour que ce soit affichable dans Word - voir la norme ou l’exemple donné à la semaine
3) UNF avec tous les attributs trouvés dans le contexte ci-haut (Rappel, nous utilisons l'approche
ascendante, on part des attributs et on va vers les tables et non l'inverse):
(1) Passage à 1NF : Comme il n’y a peu ou pas de données d’exemple, vous pouvez considérer votre table
comme en 1NF et sauter cette étape en expliquant pourquoi vous le faites.
ii) Convertir la table de 1NF à 2NF, décrire et justifier tout ce que vous devez faire pour y arriver
iii) Convertir vos tables de 2NF à 3NF, décrire et justifier tout ce que vous devez faire pour y arriver
iv) Convertir vos tables de 3NF à BCNF, décrire et justifier tout ce que vous devez faire pour y arriver
v) Convertir vos tables de BCNF à 4NF, décrire et justifier tout ce que vous devez faire pour y arriver
vi) Dans vos relations en 4NF, identifier :
(1) Les clés primaires (en gras)
(2) Les clés candidates (faire la liste ici)
(3) Les clés alternatives (faire la liste ici)
(4) Les clés étrangères (avec un #)

2) (25 points) SQL


a) Donnez les requêtes SQL de création de tables pour 5 tables du modèle du cas présenté que vous avez
trouvées à la fin de la normalisation de la question 1
i) NOTES :
(1) Vous aurez probablement trouvé plus de 5 tables à la question 1
(2) Vous devrez probablement créer plus de 5 tables pour répondre à toutes les questions du tp1 ou pour
faire fonctionner votre fichier tp1.sql
(3) Vous pouvez créer toutes les tables dont vous avez besoin. Vous pouvez donc créer toutes les tables
trouvées à la question 1.
(4) Comme différentes équipes vont normalement arriver à un nombre différent de tables, on ne vous en
demande que 5 requêtes pour la correction. C’est-à-dire que nous ne corrigerons que les 5 requêtes
de création de tables que vous indiquerez par le commentaire suivant : -- À corriger.
(5) Pour permettre éventuellement à votre script dans le fichier .sql de fonctionner d’un bloc (comme un
script) et de pouvoir le répéter afin d’accélérer vos tests et de permettre la correction, ajoutez au début
du fichier, avant tous les create table, pour chaque table créée un drop table NOM_TABLE
cascade constraints; Mettre tous les drop table ensemble, puis tous les create table
ensemble.
(6) N'oubliez pas la norme du cours (dont les préfixes comme TP1_ pour les noms des tables)
ii) Dans ces 5 requêtes de création de tables (et non avec des alter table) :
(1) Vous devez exprimer toutes les contraintes suivantes :
(a) Clé primaire,
(b) Clé étrangère,
(c) Clé alternative (unique),

Page 4 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

(d) Null ou not null


(e) Valeurs par défaut s’il y a lieu.
(2) Vous devez aussi faire respecter les domaines des variables à l'aide de contraintes (commande
CONSTRAINT … CHECK). Afin de limiter le travail (il y en aurait sûrement trop), vous devez exprimer
seulement 5 contraintes différentes de domaines (excluant celles du point (a)). On parle de 5 contraintes
totales et non 5 contraintes par table. Pour les contraintes non spécifiées, vous devez vous fier au
tableau à la fin de l’énoncé. Pour les domaines non explicites ou non décrits en Annexe A, vous devez
faire des hypothèses (les questions simulées avec le client) et fixer le domaine. Ces contraintes doivent
être exprimées à même le create table et non avec des alter table.
b) Ajouter 3 autres contraintes (3 au total et non 3 par tables) de domaines, comme en à la question précédente,
mais à l’aide de commande alter table.

3) (25 points) Donnez la requête d'algèbre relationnelle (pas de SQL pour cette partie, ce sera au tp2) pour:
a) Listez les noms et prénoms et courriels de tous les citoyens-cueilleurs.
b) Listez toutes les informations des sorties de la ville de Saint-Raymond pour la période du 1er juillet 2023 au 31
juillet 2023
c) Listez les noms et les adresses des propriétaires et pour chaque propriétaire, donnez le nombre de sorties
dans les 3 dernières années (par rapport à sysdate() représentant la date du jour).
d) Listez, en une seule colonne, tous les prénoms de tous les types de personnes (propriétaires, producteurs, et
citoyens-cueilleurs).
e) Donnez le poids maximal, le poids minimal et le poids moyen des sorties pour chaque producteur pour les
sorties depuis le 1er mai 2022.
f) Donnez les requêtes de projection en algèbre de votre choix, qui sont différentes de celles demandées dans
les questions précédentes et qui se rapportent au cas présent. Pour chacune, expliquer le but de la requête en
lien avec le cas. Faites une requête pour chacun des types suivants:
i) Une jointure gauche et un critère de restriction
ii) Un regroupement et une agrégation
iii) Un U (union).

Page 5 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Annexe A

Quelques domaines standards pouvant être utiles (mais pas tous nécessairement utilisés) pour la
création de tables
Type de données Domaine
Code postal 7 caractères des lettres et des chiffres en alternance
avec un espace au milieu A9A 9A9
Téléphone, fax et cellulaire 10 chiffres au format (999)999-9999
Nom (personne, ville, organisation, Au plus 40 caractères
etc.)
Description Au plus 50 caractères
Description longue ou note Au plus 500 caractères
NAS 9 chiffres 999999999
Nombre (en tant que dénombrement) Entier positif
Adresse Au plus 50 caractères
Courriel Au plus 40 caractères
Pourcentage Nombre réel entre 0.00 et 1.00
Un prix ou un montant Nombre réel avec 2 chiffres après la virgule
Quantité Entier positif ou réel positif
Longitude et Latitude Voir sur Google Maps
Photo ou image quelconque On ne garde que le chemin dans la table donc
varchar2(200)

Page 6 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Annexe B
Bon exemple de format de dépendances fonctionnelles
Df1 NUM_PERSONNEL → NOM_PER, FONCTION_PER, SALAIRE_PER, NUM_FILIALE,
ADRESSE_FIL
Df2 NUM_FILIALE → ADRESSE_FIL
Df3 ADRESSE_FIL → NUM_FILIALE
Df4 NUM_FILIALE, FONCTION_PER → SALAIRE_PER
Df5 ADRESSE_FIL, FONCTION_PER → SALAIRE_PER

Vous ne devez pas faire des boîtes avec des flèches en dessous :

Page 7 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Annexe C

Formulaires

Producteurs
https://docs.google.com/forms/d/e/1FAIpQLScTO9D4tpDZNeTw0EHjP7vMbpDkXMa1-
RZRQYtn3YcAymvh3A/viewform?fbclid=IwAR05AICuc0KNRTXWk4t1Fl_NhGdtMfEY8QC2D9OZec8-AxrIO9dk-m0bx_w

Donateurs privés :
https://docs.google.com/forms/d/e/1FAIpQLScsrWBdr-
MbGUwf9hro3FP4QNx_noDnL24rRidA8pWp7n0R3g/viewform?fbclid=IwAR2xXjOsMqsCxbWwcUJDSTXb6CcW6opLnCm
MpgCSbkTvO03Gomh4NZin0iU

Citoyens-cueilleurs :
https://docs.google.com/forms/d/e/1FAIpQLSfGoaF_Gc1-
JuQTJ8nBC9VeB0OKI8D6B9ZK5N1tJqUJ5iRd2w/viewform?fbclid=IwAR36FD5fuj7Wg60mj6VbPFl7tkej62OUxOVQtmF0A
RaRlEqKeaLqyv3GUU8

Ressources d'aide où les denrées peuvent être distribuées


213
Association des personnes handicapées de Portneuf
Association des proches aidants Capitale-Nationale – région de Portneuf
Carrefour F.M.
Centre de formation (Saint-Raymond et Donnacona)
Centre Femmes de Portneuf
CERF Volant
Collation-Santé-Portneuf (distributions et réserves-écoles)
Cuisine communautaire de Rivière-à-Pierre
Écoles secondaires de Donnacona et Saint-Raymond (classes spécialisées, brigades culinaires, etc)
Frigos solidaires (11) et frigos indépendants (2)
L'Arc-en-Ciel
L'Ardoise (centre d'alphabétisation)
Le Halo / La Licorne
Mijote ta vie
Mirépi, maison d'hébergement
Office municipal d'habitation du Grand Portneuf
Saint-Vincent de Paule de Donnacona (Oeuvre Béthel)
Saint-Vincent de Paul de Saint-Marc
S.O.S. Accueil

Page 8 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

Exemple de statistiques
Durée de Nb
Numéro la Fruits / Part des Part du Part Poids cueilleur Nb Nb cueilleurs Nb cueilleurs Nb total Nb heures
de la Responsabl cueilllette Légumes cueilleurs producteu TCSAP total s cueilleurs enfants (0-12 ados (13-17 cueilleur de
récolte e Date (h) Lieu récoltes (KG) r (KG) (KG) (KG) Hommes Femmes ans) ans) s bénévolat
L'Arc-en-
8-juill- Ciel du
GP 01 Jean 2022 3 Paradis Fraises 58,6 50 84 192,6 2 12 4 2 20 60
L'Arc-en-
13-juill- Ciel du
GP 02 Jean 2022 3 Paradis Fraises 109,75 50 109,75 269,5 6 13 2 2 23 69
13- Ferme
août- Aux Petits
GP 03 Sylvie 2022 4 fruits Bleuets 52 1 54 107 5 5 10 40
24- Ferme
août- Aux Petits
GP 04 Jean 2022 4 fruits Bleuets 35 0 70 105 3 7 1 11 44
27- Ferme
août- Aux Petits
GP 05 Jean 2022 4 fruits Bleuets 48 0 96 144 5 16 2 0 23 92
12-
Sylvie août- Domaine Pommes/
GP 06 (tournage) 2022 Hébert framboise 0 5 5 0 0
30- Ferme
sept- Grenier
GP 07 Jean 2022 3 Long Patates 136 0 145 281 2 10 0 0 12 36
30- Ferme
sept- Grenier
Jean 2022 Long Haricots 27 11 41 79 2 10 0 0 12 0
Ferme
1-oct- Reine des Courges et
GP 08 Sylvie 2022 3 prés citrouilles 50 0 510 560 16 16 48
Ferme
19-oct- Grenier
GP 09 Jean 2022 4 Long Patates 542,6 0 1085,2 1627,8 1 7 0 0 8 32
L'Arc-en-
21-oct- Ciel du
GP 10 Jean 2022 4 Paradis Poireaux 12,8 0 25,6 38,4 8 21 0 0 29 116
L'Arc-en-
21-oct- Ciel du
Jean 2022 Paradis Carottes 247,3 0 494,5 741,8 0 0
L'Arc-en-
21-oct- Ciel du
Jean 2022 Paradis Betteraves 335,2 0 670,5 1005,7 0 0
L'Arc-en-
21-oct- Ciel du
Jean 2022 Paradis Oignons 38 0 76,1 114,1 0 0

Page 9 sur 10
Département d’informatique et de génie logiciel
Pavillon Pouliot

L'Arc-en-
21-oct- Ciel du
Jean 2022 Paradis Zucchinis 73,2 0 146,4 219,6 0 0
L'Arc-en-
21-oct- Ciel du
Jean 2022 Paradis Choux 44,8 0 89,8 134,6 0 0
Ferme
2-nov- Béland et
GP 11 Jean 2022 3 fille Patates 280 0 560 840 1 3 0 0 4 12
Ferme
2-nov- Béland et
Jean 2022 fille Carottes 113 0 226 339 1 3 0 0 4 0
Ferme
2-nov- Béland et
Jean 2022 fille Poireaux 30,2 0 60,5 90,7 1 3 0 0 4 0
Ferme
3-nov- Grenier
GP 12 Jean 2022 3 Long Carottes 81,5 0 163 244,5 3 3 0 0 6 18
Ferme
Jean 3-nov- Béland et
GP 13 (seul) 2022 3 fille Poireaux 0 0 25 25 0 0 0 0 0 0

2314,95 112 4737,35 7164,3 40 129 8 5 182 567

Page 10 sur 10

Vous aimerez peut-être aussi