IFT 6800 – Démonstration 2 But de la démonstration Préalables

Département d’informatique et de
recherche opérationnelle
IFT 6800 – Démonstration 2
But de la démonstration
Cette démonstration vise à vous présenter une introduction aux bases de données
relationnelles et aux systèmes de gestion de bases de données (SGBD) associés. Ici, nous
utiliserons un système de gestion base de données appelé mysql, gratuit et populaire1.
Préalables
Révisez les notes de cours de la séance 3 du cours, en particulier ce qui touche au langage
SQL, un langage de manipulation de bases de données.
Connexion au SGBD mysql
Ouvrez d’abord une session Linux tel qu’expliqué lors de la précédente démonstration.
Au DIRO, mysql est installé sur une machine dédiée, soit la machine
mysql.iro.umontreal.ca. Pour vous connecter à mysql, faites
mysql -u nom_usager -p -h mysql.iro.umontreal.ca
Entrez le mot de passe pour mysql. Celui-ci est construit avec la recette :
en minuscules, les 2 premiers caractères du nom de famille
en minuscules, les 2 premiers caractères du prénom
le dernier chiffre de l'année de naissance
en MAJUSCULES pour les HOMMES, en minuscules pour les femmes : la lettre
représentant l’ordre du mois de naissance (A = janvier, B = février, C = mars, ...,
L = décembre)
les 2 chiffres du jour de naissance, entre 01 et 31
Le système vous souhaite alors la bienvenue et vous offre une invite de commande
(« prompt ») qui a cette forme :
mysql>
C’est de cette invite que nous contrôlerons la base de données. Lorsque vous aurez
terminé avec mysql, tapez exit.
Pour changer votre mot de passe, sortez de mysql et faites dans Linux :
mysqladmin -h mysql -u nom_usager -p password leNouveauMotDePasse
Il y a plus d’informations sur le site du soutien technique, à
http://support.iro.umontreal.ca/doku.php?do=show&id=logiciel%3Amysql .
1 http://www.mysql.com
2
Nous citerons des sections du document utilisé par votre enseignant, présenté en cours et
disponible à
http://www.iro.umontreal.ca/~nie/IFT6800/ (lien Bases de données). Les autres liens de
cette section sont également très utiles.
Changement du moteur
Pour pleinement profiter des possibilités du modèle relationnel, entrez toujours la
commande suivante avant de travailler :
set storage_engine=InnoDB;
Partie I : une agence de voyage
Dans cet exercice, nous allons créer, peupler, interroger et modifier les tables d’une
agence de voyage fictive. Ces tables sont au nombre de quatre : Station, Activite,
Client, Sejour.
Au DIRO, vous ne pouvez créer ou manipuler que les bases de données dont
les noms commencent par votre nom d’utilisateur. Par conséquent, dans ce
texte, lorsqu’on se réfère à une base de données NomDeLaBase, en fait, vous
devez utiliser le nom nomutilisateur_NomDeLaBase pour que mysql
accepte vos commandes.
Création de la base de données
Avant de créer les tables de l’agence de voyage, créons la base de données qui les
contiendra. Pour ce faire, entrez les commandes suivantes :
CREATE DATABASE nomutilisateur_Agence;
USE nomutilisateur_Agence;
Notez le préfixe nomutilisateur, sans quoi mysql vous refuse l’accès au DIRO.
Création des tables (pages 36 et suivantes)
Créez les tables de l’agence de voyage en vous servant des descriptions et des contraintes
qui suivent. Pour chaque station, les champs et leurs contraintes respectives sont
expliqués.
Comme vu en cours, lorsqu’un champ est souligné, c’est qu’il fait partie de la clé
primaire d’une table. C’est-à-dire qu’on peut se servir de cette clé pour désigner un
enregistrement (appelé aussi n-uplet dans les notes ou « record » ou « rows » en anglais).
Ainsi, votre code permanent pourrait servir de clé primaire pour vous identifier, car il est
unique pour chaque personne. Votre prénom ne suffirait pas, puisque bien des gens le
partagent, à moins de vous appeler Dweezil Zappa.
Station
nomStation
capacite
tarif
La capacité et le lieu ne doivent pas être nuls (vides).
Le tarif doit être par défaut à 0.
3
Solution pour cette table
CREATE TABLE Station (
nomStation VARCHAR(32),
capacite INTEGER NOT NULL,
lieu VARCHAR(32) NOT NULL,
tarif FLOAT(10,2) DEFAULT '0.0',
PRIMARY KEY(nomStation)
);
La 2e ligne indique que le champ nomStation est de type VARCHAR(32) (chaîne de
caractères de longueur variable comptant au plus 32 caractères). Elle est déclarée comme
clé primaire (on peut identifier uniquement un enregistrement en l’utilisant) à la dernière
ligne à l’aide de l’instruction PRIMARY KEY. Remarquez que NOT NULL permet de
satisfaire la contrainte sur les champs capacite et lieu qui veut que ces champs ne
peuvent être vides dans un enregistrement. DEFAULT stipule la valeur par défaut.
Terminez toujours vos instructions par le point-virgule. Notez également que tarif est
de type FLOAT, pas INTEGER, ce qui veut dire que c’est un nombre fractionnaire (un
prix doit pouvoir être fractionnaire, naturellement). En spécifiant FLOAT(10,2), on
demande qu’il puisse contenir 10 chiffres avant la virgule et 2 après.
Pour voir la structure d’une table, faites DESC nomDeLaTable;
La table est donc créée, et elle est vide (elle ne contient pas encore d’enregistrements).
Créez le reste des tables.
Par convention, certains auteurs2 utilisent les majuscules pour les mots-clés de
mysql, la majuscule initiale seulement pour les noms de tables et de bases de
données, et la minuscule pour les noms des champs. Nous suivrons cette
convention ici. mysql, lorsqu’il tourne sous Linux, tient compte de la casse
dans les noms des bases, tables et champs. Les mots-clés, eux, peuvent être
écrits en majuscules ou en minuscules indifféremment.
Activite
nomStation
libelle
prix
Le prix par défaut est de 0,00 $.
nomStation fait référence à la table Station.
Indice Il faut utiliser l’instruction FOREIGN KEY (p. 43).
Client
id
nom
prenom
ville
solde
id est un nombre entier.
Le nom, la ville et le solde ne doivent pas être nuls (vides).
2 Voir notamment le livre Apprendre SQL avec MySQL cité dans les sources.
4
Sejour
id
nomStation
nbPlaces
Le nombre de places ne peut être nul.
debut est une date, type de données DATE (p. 36 pour les types).
id fait référence à la table Client.
nomStation fait référence à la table Station.
Peuplement des tables (p. 62 et suivantes)
Toutes les tables créées sont vides pour le moment. On utilisera la commande INSERT
pour ajouter des enregistrements à une table (lignes grisées dans les tableaux qui suivent).
Station
nomStation
capacite
tarif
Mont Tremblant
1300
1200
Saint-Sauveur
1000
1500
Chutes du Niagara
1800
2000
Par exemple, pour le premier enregistrement, on aurait l’instruction qui suit.
INSERT INTO Station(nomStation, capacite, lieu, tarif)
VALUES('Mont Tremblant', 1300, 'Mont Tremblant', 1200);
Notez les guillemets simples autour des chaînes de caractères et leur absence autour des
nombres. Rappelez-vous que, comme pour un terminal Linux, vous pouvez rappeler la
dernière commande soumise à mysql en tapant la flèche vers le haut.
Pour voir à quoi ressemble une table que vous peuplez, faites simplement :
SELECT * FROM nomDeLaTable; (on en reparle plus bas)
En cas d’erreur de frappe, vous pouvez supprimer un enregistrement en utilisant la
commande suivante :
DELETE FROM nomDeLaTable
WHERE NOM_CLE_PRIMAIRE = VALEUR_DE_ENREGISTREMENT_A_DETRUIRE;
Complétez les autres tables avec les données qui suivent.
Activite
nomStation
libelle
prix
Saint-Sauveur
ski de fond
150
Saint-Sauveur
ski alpin
120
Chutes du Niagara
voile
200
Mont Tremblant
motoneige
500,50*
*Pour taper le point décimal, utilisez un point plutôt qu’une virgule (500.50).
5
Client
id
nom
prenom
ville
solde
10
Kepoura
Adrienne
Montreal
12690
20
Therieur
Alain
Quebec
256
30
Therieur
Alex
Quebec
659
40
Oma
Modeste
Ste-Foy
145
Sejour
id
nomStation
nbPlaces
20
Saint-Sauveur
4
10
Chutes du Niagara
3
30
Mont Tremblant
2
40
Chutes du Niagara
5
*Les dates ont le format AAAA-MM-JJ et sont entourées de guillemets simples.
Violation des contraintes
Tentez les requête suivante et expliquez-vous pourquoi mysql refuse de les exécuter :
INSERT INTO Station(nomStation, capacite, lieu, tarif)
VALUES('Mont Tremblant', 1200, 'dummy', 300);
INSERT INTO Station(nomStation, capacite, lieu, tarif)
VALUES('Jay Peak', NULL, 'dummy', 300);
INSERT INTO Activite(nomStation, libelle, prix)
VALUES('Jay Peak', 'ski de fond', 150);
Questions
Utilisez l’instruction SELECT pour les questions qui suivent.
1) Sélectionnez tous les champs (colonnes) de la table Station.
2) Sélectionnez les champs nomStation et capacite de Station.
3) Sélectionner tous les champs de la table Station pour les stations où la capacité
excède 1200 personnes.
4) Sélectionnez les champs id et nomStation de la table Sejour où le nombre de
places est soit 2, soit 4, soit 5.
5) Sélectionnez tous les champs de la table Client pour les clients dont le prénom
commence par un « A » et dont le solde excède 300 $.
6) Sélectionnez tous les champs de la table Client pour les clients dont le prénom ne
commence pas par un « A ».
7) Sélectionnez les champs libelle et prix de la table Activite et triez les
résultats en ordre croissant de prix.
8) Sélectionnez les champs libelle et prix de la table Activite et triez les
résultats en ordre décroissant de prix.
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !