Vous êtes sur la page 1sur 31

BTS Services informatiques aux organisations – 1re année

EXPLOITATION D’UN SCHÉMA DE DONNÉES


TRAVAUX PRATIQUES

BTS Services informatiques aux organisations – 1re année

José Gil – Élisabeth Martins Da Silva

EXPLOITATION
D’UN SCHÉMA DE DONNÉES

TRAVAUX PRATIQUES
Retrouvez la liste de nos formations sur www.cned.fr
Pour plus d’informations, appelez le 05 49 49 94 94
Du lundi au vendredi, 8 h 30-18 h.
Coût d’une communication ordinaire.

*8014250* 8 2949 TP PA 00 15
www.cned.fr
Sommaire
Conseils généraux 3
TP 1 : Logiciel de gestion de DVD 5
TP 2 : Optimisation par les contraintes de la base « Tour de France » 17

CONNECTÉ À VOTRE AVENIR

Les cours du CNED sont strictement réservés à l’usage privé de leurs destinataires et ne sont pas destinés à une utilisation collective.
Les personnes qui s’en serviraient pour d’autres usages, qui en feraient une reproduction intégrale ou partielle, une traduction sans
le consentement du CNED, s’exposeraient à des poursuites judiciaires et aux sanctions pénales prévues par le Code de la propriété
intellectuelle. Les reproductions par reprographie de livres et de périodiques protégés contenues dans cet ouvrage sont effectuées
par le CNED avec l’autorisation du Centre français d’exploitation du droit de copie (20, rue des Grands Augustins, 75006 Paris).

© CNED 2015
Conseils généraux
Importance des TP
Dans le cadre du cours, vous avez eu l'occasion d'approfondir certaines notions (aussi
bien au niveau du SQL que du MCD) et de découvrir l'utilisation du logiciel de modéli-
sation WinDesign. Les TP représentent une mise en pratique qui va vous permettre de
manipuler concrètement ces notions. Au niveau de l'examen, il faut que vous arriviez à
montrer au jury que vous avez une certaine expérience. Ce sont les TP de chaque mo-
dule qui vont vous permettre d'acquérir cette expérience.

Organisation du fascicule
Ce fascicule contient deux TP.
Le premier TP représente la création d'une petite application de gestion de DVD. Le
but est de vous faire utiliser le logiciel de modélisation WinDesign pour contrôler si les
con-naissances abordées dans le cours sont acquises, puis vous faire exploiter une base
de données dans une application. La base de données sera au format MySQL. Pour cette
première application réalisée spécifiquement dans l'option SLAM, vous allez travailler
avec C# que vous avez découvert dans le module 2944 "Base de la programmation". Si
vous n'avez pas fait le TP sur C# dans le module 2944, vous devez le faire avant d'atta-
quer ce TP car les connaissances abordées dans le module 2944 sur ce langage sont con-
sidérées comme acquises. Le but ici n'est pas de vous faire découvrir un nouveau langage
ni d'aborder des fonctionnalités complexes, mais de vous montrer comment gérer une
application qui exploite une base de données. C'est aussi l'occasion de voir qu'un SGBDR
peut être utilisé avec différents langages. Dans le module suivant (2950 "Programmation
objet"), vous attaquerez un nouveau langage (Java) où vous aborderez des notions de
Conseils généraux
programmation nettement plus complexes. Vous pouvez télécharger la correction de ce
TP directement sur le site du CNED, au même endroit que ce fascicule. Page 3
Le second TP représente le travail que vous pourriez avoir à faire sur une base de don-
nées existante. Le but est de vous faire appliquer les contraintes découvertes dans la
partie cours. Vous verrez les manipulations graphiques ainsi que les instructions SQL
correspondantes.
Le dessin du petit professeur vous signalera les étapes de tests à réaliser.

Logiciels nécessaires
Pour réaliser les TP, vous allez avoir besoin de plusieurs outils que vous avez normale-
ment déjà installés puisqu'ils ont été utilisés soit dans le cours correspondant à ce mo-
dule, soit dans des modules précédents. Voici tout de même quelques rappels pour
récupérer et installer ces outils.
WinDesign
Ce logiciel permet de faire de la conception de schéma conceptuel de données afin de
générer le script qui pourra construire une base de données relationnelle.
Si vous ne l'avez pas encore installé, référez-vous aux conseils généraux et à la séquence
2 du fascicule de cours.

8 2949 TP PA 00
MySQL
SGBDR gratuit et intégré dans Wamp que vous avez utilisé dans le TP du module "Déve-
loppement d'applications". WampServer est gratuit et téléchargeable sur le site officiel
(http://www.wampserver.com/).
C#
Vous avez déjà installé C# dans le module 2944 "Base de la programmation". Si ce n'est
pas le cas, ce TP a été réalisé avec la version Ultimate 2013 (with update 2) de Visual
Studio. Mais à priori, toutes les versions approchantes devraient permettre les mêmes
manipulations. Ce logiciel est récupérable grâce à l'abonnement étudiant dreamspark
dont vous bénéficiez par le CNED.

Bon courage à tous !

Conseils généraux

Page 4

8 2949 TP PA 00
TP 1
Logiciel de gestion de DVD
Cette séquence va vous permettre de mettre en pratique les connaissances acquises dans
les séquences 1, 2 et 3 du cours. Vous allez en particulier utiliser le logiciel WinDesign et
créer une application qui accède et manipule une base de données sous MySQL. Le Lan-
gage C# a été choisi pour ce TP car vous l'avez déjà abordé dans le module 2944 "Base
de la programmation". Le but ici n'est pas de découvrir un nouveau langage mais plutôt
d'insister sur l'aspect accès aux données. Les codes sources de cette application sont télé-
chargeables sur le site, au même endroit que ce fascicule de TP.

u Capacités attendues en fin de TP


Savoir générer une base de données à partir d'un logiciel de modélisation.
Avoir compris comment exploiter une base de données à partir d'une applica-
tion classique.

u Contenu
1. Création de la base de données ...................................................................... 6
2. Création de l'application................................................................................... 8 TP 1

Logiciel
de gestion
de DVD

Page 5

8 2949 TP PA 00
Vous allez créer une petite application de gestion de DVD qui va exploiter une base de
données.
Voici les étapes que vous allez suivre pour créer cette application :
• création du schéma conceptuel de données sous WinDesign ;
• génération du schéma logique de données correspondant ;
• génération du script SQL ;
• création de la base de données sous MySQL à partir du script ;
• configuration de l'accès à la base de données à partir d'une application ;
• création de l'application qui exploite cette base de données.

1. Création de la base de données


Attention, pour réaliser cette première partie, vous devez avoir fait et compris correc-
tement la séquence 2 du fascicule de cours. Vous ne trouverez ici aucune indication mais
juste le travail demandé. Si vous n'y arrivez pas, refaites la séquence 2 du cours pour
apprendre à manipuler WinDesign.

Travail sous WinDesign


Création du MCD
TP 1 L'application sue vous allez créer dans ce TP va gérer des DVD classés par genre et avec,
pour chaque film, la liste des acteurs concernés.
Logiciel
de gestion Voici le schéma conceptuel de données :
de DVD

Page 6

Et voici le détail des types de chaque attribut :


nom type précision longueur
numDvd compteur 4
titre alphanumérique variable 30
duree numérique entier 2
numActeur compteur 4
nom alphanumérique variable 30
numGenre compteur 4
libelle alphanumérique variable 30

8 2949 TP PA 00
À partir de ces indications, créez sous WinDesign le schéma correspondant et testez-le
avec l'outil de contrôle. Pensez à l'enregistrer sous le nom "gestionDvd", dans le dossier
de votre choix.
Génération du MLD
Générez le MLD correspondant, en choisissant le SGBDR MySQL (sans oublier de sélec-
tionner l'utilisation par défaut des types de cette base de données).
Vous devriez obtenir le schéma suivant :

TP 1

Logiciel
de gestion
de DVD
Enregistrez ce MLD aussi sous le nom de "gestionDvd" (c'est en fait l'extension qui
change). Page 7

Génération du script SQL


Vous pouvez maintenant générer le script mais attention, gardez toutes les options par
défaut (ne décochez rien, contrairement à ce que vous aviez fait dans le cours, à la sé-
quence 2). Pensez tout de même à bien sélectionner le dossier qui va recevoir le fichier
de script.
Allez sur le disque et ouvrez le fichier SQL qui vient d'être créé. Il contient entre autres
tous les ordres de création des tables. Vous allez apporter une petite modification au
fichier en supprimant les lignes qui permettent de détruire et créer la base de données
(alors que vous allez créer la base de données vous-même sous MySQL). Donc, en début
de fichier, supprimez les 3 lignes suivantes :
DROP DATABASE IF EXISTS gestionDvd;
CREATE DATABASE IF NOT EXISTS gestionDvd;
USE gestionDvd;
Enregistrez et fermez le fichier.
Le travail sous WinDesign est terminé. Fermez le logiciel. Inutile d'enregistrer l'espace
de travail.

8 2949 TP PA 00
Travail sous MySQL
Il faut maintenant passer à la construction de la base de données sous MySQL. Norma-
lement vous connaissez la procédure. Voici tout de même un rappel :
• Lancez WampServer et attendez que l'icône soit vert.
• Allez sous phpMyAdmin (lancez un navigateur, mettez "localhost" en adresse, et
dans la page d'accueil de wamp, cliquez sur phpMyAdmin).
• Créez une nouvelle base de données nommée "gestiondvd".
• Sélectionnez la base de données et exécutez le script pour créer les tables.
• Vérifiez que les tables ont bien été créées.
Normalement le travail sous MySQL est terminé car la gestion du contenu de la base de
données va se faire dans l'application. Cependant, pour que l'on puisse voir dès le dé-
but du programme que certains points fonctionnent, avant même d'utiliser les ordres
d'ajouts et de modification, vous allez remplir un peu les tables sous MySQL.
En remplissant les tables, faites attention de ne pas saisir d'informations dans les champs
correspondants aux clés primaires générées automatiquement (dans les tables acteur,
dvd et genre). Insérez 3 acteurs, 3 genres, 3 dvd en utilisant les genres saisis et faites
correspondre films et acteurs dans la tables acteur_dvd en faisant en sorte qu'il y ait au
moins un acteur rattaché à 2 dvd, et un dvd relié à 2 acteurs.
Cette fois le travail sous MySQL est terminé.

TP 1

Logiciel 2. Création de l'application


de gestion
de DVD Ce TP a été réalisé avec la version Ultimate 2013 (with update 2) de Visual Studio. Mais
à priori, toutes les versions approchantes devraient permettre les mêmes manipulations.
Page 8 Lancez Visual Studio et créez un projet C# du nom de gestionDvd.
Ce projet va permettre de gérer la base de données de façon conviviale, à travers des
fenêtres et du code que vous allez créer.

Lien avec la base de données


Avant même de commencer à créer le contenu de la première fenêtre, il faut gérer le
lien avec la base de données.
Installation des outils
Il faut installer le fichier qui permet de se connecter à une base MySQL de l'extérieur et
l'installeur qui permet de l'utiliser :
• Récupérez le fichier mysql-connector-net-6.9.6.msi (version adaptée à VS 2013) ici :
http://dev.mysql.com/downloads/connector/net/6.9.html
(en prenant bien la version pour Windows)
ATTENTION ne cliquez pas n'importe où :-) mais plutôt ensuite sur le petit lien en
bas qui dit "No thanks, juste start my download"
Lancez l'installation en choisissant bien l'installation complète.
• De la même façon, récupérez et installez mysql-for-visualstudio-1.2.3.msi ici :
http://dev.mysql.com/downloads/windows/visualstudio/
• Récupérez le fichier mysql-installer-community-5.6.24.0.msi (ou plus récent) ici :
http://dev.mysql.com/downloads/installer/
(sélectionnez Windows et surtout le second lien, donc par la version web)

8 2949 TP PA 00
Lancez l'installation. Normalement la fenêtre qui apparaît montre le connecteur
et "MySQL for Visual Studio". Sinon faites add, allez les chercher dans la liste de
gauche pour les ajouter dans la liste de droite, puis next. Une fois que tout est bon,
vous pouvez fermer la fenêtre de MySQL installer.
Configuration sous Visual Studio
Fermez Visual Studio et relancez-le en vous repositionnant sur votre projet.
Le but maintenant est de configurer Visual Studio pour qu'il se connecte à une base
MySQL.
• Dans la partie "Explorateur de serveurs" (à gauche), faites un clic droit sur
"Connexions de données" et choisissez "Ajouter une connexion". Si vous ne voyez
pas "Explorateur de serveurs", allez dans le menu Affichage > Explorateur de ser-
veurs.
• Dans la fenêtre qui s'ouvre, sélectionnez comme source de données "MySQL
Database" et cliquez sur "continuer". Puis donnez les informations de connexion
suivantes :
Server name : localhost
User name : root
Password : laissez la zone vide
Cliquez sur "Tester la connexion" : si la connexion est réussie, tout va bien.
Cliquez sur la flèche pour ouvrir "Database name" : normalement la liste des bases
de données MySQL de votre ordinateur doit apparaitre. TP 1
Sélectionnez la base gestiondvd puis faites ok.
Normalement, la connexion à la base a été ajoutée à gauche dans la liste des Logiciel
de gestion
connexions de données.
de DVD
Il faut rattacher cette connexion à votre projet :
• Menu Projet > Ajoutez une nouvelle source de données. Suivant. Page 9
• Sélectionnez Dataset puis Suivant.
• Normalement "localhost (gestiondvd)" est déjà sélectionné. Cliquez sur "+" pour la
chaine de connexion : vous devriez voir apparaitre :
server=localhost;user id=root;database=gestiondvd
• Suivant. Suivant et vous tombez sur l'écran :

8 2949 TP PA 00
Sélectionnez les tables, puis Terminer.
• dd
Vous allez ainsi avoir accès aux classes MySQL de connexion à la base de données.
Pour que l'application se connecte à la base de données, il faudra que le serveur de la
base de données soit actif (donc que wamp soit lancé, pour les tests en local) et que la
chaine de connexion soit renseignée dans l'application pour pouvoir se connecter à la
base de données.
Maquette de l'interface
Avant de commencer à coder, la maquette de la première interface va être créée.
Vous devez placer les objets graphiques nécessaires pour obtenir ceci :

Vous devez placer les objets graphiques nécessaires pour obtenir ceci :

btnSupprDvd cboGenre txtTitre


lstDvd
btnAjoutDvd btnModifDvd txtDurée txtAjoutGenre

btnSupprGenre

btnAjoutGenre

btnAjoutActeurDvd
TP 1
btnSupprActeurDvd

Logiciel
de gestion
de DVD

Page 10

lstActeur
txtAjoutActeur btnSupprActeur
cboActeur
btnAjoutActeur

Normalement vous
Normalement savez
vous créer
savez une une
créer maquette. Il suffitIlde
maquette. sélectionner
suffit les objets les
de sélectionner gra-objets gra-
phiques dans la barre d'outils qui se trouve à gauche, et de les placer dans la fenêtre.
phiques dans la barre d'outils qui se trouve à gauche, et de les placer dans la fenêtre.
Créez la fenêtre en donnant à chaque objet graphique (excepté les labels) les "name"
Créez la
mentionnésfenêtre en donnant à chaque objet graphique (excepté les labels) les "name"
ci-dessus.
mentionnés ci-dessus.
Fonctionnement global
Fonctionnement
Voici le fonctionnement global
global de l'application. Il est présenté dès maintenant pour
que vous compreniez mieux le but, mais vous n'allez pas coder tout de suite.
Voici le fonctionnement global de l'application. Il est présenté dès maintenant pour que
La liste des dvd sera chargée dès le démarrage de l'application. À chaque sélection d'un
vous
dvd, ses compreniez
informations mieux
serontleaffichées
but, mais vous :n'allez
à droite pas coder
titre, durée, tout de
genre (dans suite. liste
le combo)
La
desliste
acteursdesdu dvd sera chargée dès le démarrage de l'application. À chaque sélection d'un
dvd.
dvd,
Le comboses informations seronttous
des genres contient affichées à droite
les genres (même: si titre,
celuidurée, genreest
qui apparait (dans le combo) liste
le genre
du dvd),
des acteurs le combo des acteurs contient tous les acteurs.
du dvd.
Les boutons + et - permettent d'ajouter ou d'enlever un acteur au film (l'ajout se fait à
Le combo
partir des genres
d'un acteur contient
sélectionné danstous les genres
le combo (même si celui qui apparaît est le genre du
des acteurs).
dvd), le combo
Il est possible des acteurs
d'ajouter contient
un nouveau genretous
au les
comboacteurs.
des genres en saisissant le genre
Les
dansboutons
txtGenre +etet en- cliquant
permettent d'ajouter
sur Ajout genre. ou d'enlever
Il est unsupprimer
possible de acteur auunfilm (l'ajout
genre du se fait à
combo après l'avoir sélectionné et cliqué sur
partir d'un acteur sélectionné dans le combo des acteurs). "Suppr genre", à condition que le genre
ne soit lié à aucun dvd. Le principe d'ajout et de suppression est le même pour les ac-
Ilteurs.
est possible d'ajouter un nouveau genre au combo des genres en saisissant le genre
dans
Cliquer txtGenre
sur l'ajoutetd'un
en cliquant sur Ajout
dvd va ajouter un dvd genre.
dans laIl base
est possible
de donnéesdeàsupprimer un genre du
partir des in-
formations saisies dans le titre et la durée, et du genre sélectionné. Cet ajout n'est pos-
sible que si des informations ont été saisies et si le titre n'existe pas déjà dans la base.
Attention, l'ajout d'un dvd ne s'occupe pas de l'ajout des acteurs : l'ajout des acteurs ne
peut se faire qu'avec le bouton +.

8 2949 TP PA 00
combo après l'avoir sélectionné et cliqué sur "Suppr genre", à condition que le genre ne
soit lié à aucun dvd. Le principe d'ajout et de suppression est le même pour les acteurs.
Cliquer sur l'ajout d'un dvd va ajouter un dvd dans la base de données à partir des in-
formations saisies dans le titre et la durée, et du genre sélectionné. Cet ajout n'est pos-
sible que si des informations ont été saisies et si le titre n'existe pas déjà dans la base.
Attention, l'ajout d'un dvd ne s'occupe pas de l'ajout des acteurs : l'ajout des acteurs ne
peut se faire qu'avec le bouton +.
Cliquer sur la suppression d'un dvd va supprimer le dvd dans la base de données ainsi
que tous les liens existants avec les acteurs. Cette suppression se fait après demande de
confirmation.
Cliquer sur la modification d'un dvd va modifier le dvd actuellement sélectionné en pre-
nant en compte les modifications de titre, durée et genre (sans s'occuper des acteurs).

Classe d'accès aux données


Avant de coder les différents événements, vous allez utiliser une classe qui va vous faci-
liter la vie pour accéder à la base de données. L'intérêt de cette classe technique est
qu'elle peut être très facilement adaptable à un autre SGBDR si vous désiriez en chan-
ger : il suffirait de modifier les imports.
Récupérez la classe ConnexionSql.cs et intégrez-la à votre projet. Modifiez si nécessaire
le namespace si ce n'est pas le bon.
Normalement la classe contient les commentaires nécessaires pour bien comprendre son
utilisation. TP 1

Utilisation de la classe Logiciel


de gestion
Dans votre programme principal (le code derrière la fenêtre) vous allez devoir déclarer
de DVD
en propriété privée une chaine contenant la chaîne de connexion.
Ensuite, dans le code, vous aurez parfois besoin de gérer des curseurs (exécuter une Page 11
requête select et exploiter le résultat) et parfois besoin d'exécuter des requêtes de mo-
dification (update, insert ou delete). Voici la procédure qu'il faudra suivre quand vous
en aurez besoin (donc suivant les fonctionnalités demandées dans les pages suivantes).
Mode opératoire pour exécuter une requête de modification :
• Déclarer un objet de type ConnexionSQL et lui affecter une instance de la classe
correspondante, en mettant en paramètre la chaine de connexion.
• Utiliser la méthode reqUpdate sur l'objet créé, en mettant la requête en para-
mètre.
• Fermer l'accès avec la méthode close sur l'objet créé.
• Mode opératoire pour exécuter une requête de sélection :
• Déclarer un objet de type ConnexionSQL et lui affecter une instance de la classe
correspondante, en mettant en paramètre la chaine de connexion.
• Utiliser la méthode reqSelect sur l'objet créé, en mettant la requête en paramètre.
• Utiliser les méthodes suivantes, sur l'objet créé, pour exploiter le résultat de la requête :
–– suivant() : avance d'une ligne dans le curseur ;
–– champ("nomDuChamp") : retourne le contenu du champ don le nom est passé
en paramètre (le type retourné est Object, donc il faut le transtyper dans le
type voulu ou appliquer la méthode toString() pour obtenir le résultat sous
forme de chaîne) ;
–– fin() : retourne vrai si la fin du curseur est atteinte (vrai dès le début si le cur-
seur est vide)

8 2949 TP PA 00
• Fermer l'accès avec la méthode close sur l'objet créé.
Voici un exemple d'utilisation :
ConnexionSql crs = new ConnexionSql(this.chaineConnexion);
crs.reqSelect("select titre from dvd");
while (!crs.fin())
{
this.lstDvd.Items.Add((crs.champ("titre")).ToString());
crsActeur.suivant();
}
crsActeur.close();
Cette exemple récupère les titres de dvd et les ajoute dans lstDvd.
Fonctionnalités
On prendra pour hypothèse que les noms doivent être uniques (titre de dvd, libellé de
genre et nom d'acteur).
Voici maintenant la liste des fonctionnalités attendues :

Événement Opérations à réaliser


Remplir cboGenre avec le libellé des genres récupérés dans la base
de données (par défaut, aucun genre ne doit être sélectionné).
Remplir cboActeur avec le nom des acteurs récupérés dans la base
Chargement de la fenêtre de données (par défaut, aucun acteur ne doit être sélectionné).
TP 1
Remplir lstDvd avec le titre des dvd récupérés dans la base de
données (par défaut, le premier dvd doit être sélectionné sauf s'il
Logiciel
n'y a aucun dvd).
de gestion
de DVD Contrôler qu'un dvd est bien sélectionné dans lstDvd (sinon,
mettre -1 dans la propriété numDvd).
Page 12 Récupérer dans la base de données le dvd correspondant à
l'élément sélectionné.
Désélectionner les éléments de cboActeur (pour éviter qu'un
acteur soit par défaut visible).
Valoriser la propriété numDvd (en transtypant en int l'information
Changement de sélection dans lstDvd
récupérée dans la base de données).
Valoriser les zones de texte txtTitre et txtDuree.
Récupérer dans la base de données le libellé du genre
correspondant au numgenre du dvd concerné. Dans cboGenre,
sélectionner le genre correspondant.
Récupérer dans la base de données les noms des acteurs du dvd
concerné. Remplir lstActeur avec les noms récupérés.
Contrôler que txtAjoutGenre est bien rempli et que le genre saisi
dans txtAjoutGenre n'est pas déjà présent dans cboGenre (sinon
Clic sur btnAjoutGenre l'ajout ne doit pas se faire).
Ajouter le contenu de txtAjoutGenre dans le combo et dans la
base de données.
Contrôler qu'un élément est sélectionné dans cboGenre.
Contrôler dans la base de données qu'aucun dvd n'est lié à ce
Clic sur btnSupprGenre
genre (sinon la suppression ne doit pas se faire).
Supprimer le genre dans la base de données et dans cboGenre.

8 2949 TP PA 00
Contrôler que txtAjoutActeur est bien rempli et que l'acteur saisi
dans txtAjoutActeur n'est pas déjà présent dans cboActeur (sinon
Clic sur btnAjoutActeur l'ajout ne doit pas se faire).
Ajouter le contenu de txtAjoutActeur dans le combo et dans la
base de données.
Contrôler qu'un élément est sélectionné dans cboActeur.
Contrôler dans la base de données qu'aucun dvd n'est lié à cet
Clic sur btnSupprActeur
acteur (sinon la suppression ne doit pas se faire).
Supprimer l'acteur dans la base de données et dans cboActeur.
Contrôler qu'un acteur est bien sélectionné dans cboActeur et que
l'acteur n'est pas déjà présent dans lstActeur (les acteurs du film)
sinon l'ajout n'est pas possible.
Clic sur btnAjoutActeurDvd Récupérer dans la base de données numacteur correspondant à
l'acteur sélectionné. Ajouter le couple (acteur, dvd) dans la table
acteur_dvd (pour associer cet acteur avec ce dvd). Ajouter l'acteur
dans lstActeur.
Contrôler qu'un acteur est bien sélectionné dans lstActeur.
Récupérer dans la base de données numacteur correspondant
Clic sur btnSupprActeurDvd à l'acteur sélectionné. Supprimer le couple (acteur, dvd) dans la
table acteur_dvd (pour dissocier cet acteur de ce dvd). Supprimer
l'acteur de lstActeur.
Contrôler que le titre, la durée sont bien remplis et un genre
sélectionné.
Contrôler que le titre n'existe pas déjà (sinon l'ajout ne doit pas TP 1
se faire).
Logiciel
Avertir que les acteurs ne seront pas ajoutés.
Clic sur btnAjoutDvd de gestion
Récupérer dans la base de données le numgenre correspondant de DVD
au genre sélectionné.
Ajouter le dvd dans la base de données. Page 13
Réinitialiser complètement la fenêtre (comme lors du
chargement).
Demander une confirmation de suppression.
Clic sur btnSupprDvd Supprimer dans la base de données, le dvd sélectionné et les liens
avec les acteurs (dans acteur_dvd).
Avertir que la modification ne prend pas en compte les acteurs.
Contrôlez que le nouveau titre n'est pas déjà présent dans les
titres des dvd autres que le dvd actuellement sélectionné (sinon la
modification ne doit pas être enregistrée).
Clic sur btnModifDvd Récupérer dans la base de données le numgenre correspondant
au genre sélectionné.
Modifier le dvd dans la base de données.
Réinitialiser complètement la fenêtre (comme lors du
chargement).
À la fin de chaque événement, redonner le focus à lstDvd (activer)
pour que l'utilisation des flèches soit directement opérationnelle
sur cette liste.

Petite information importante : pensez à déclarer en propriété privé :


• chaineConnexion qui va contenir la chaîne de connexion à la base ;
• numDvd qui contiendra le numéro de dvd actuellement sélectionné (numéro corres-
pondant à numdvd dans la base de données).

8 2949 TP PA 00
Utilisation des contrôles graphiques
Voici les tableaux des propriétés, méthodes et événements utiles pour cette application,
par rapport aux objets graphiques utilisés :
Propriétés

Type objet Propriété Type propriété Contenu


ListBox et ComboBox Items ObjectCollection Éléments de la liste
Index de base 0 de
l'élément actuellement
SelectedIndex int
sélectionné (-1 si aucun
élément sélectionné)
Élément actuellement
SelectedItem object
sélectionné
Nombre d'éléments de la
ObjectCollection Count int
collection
TextBox Text string Contenu texte

Méthodes
Type objet Méthode Rôle
ObjectCollection Clear() Vide la collection
TP 1 Add(object item) Ajoute un élément à la collection
Remove(object item) Enlève l'élément spécifié de la collection
Logiciel
de gestion Retourne l'index du premier élément qui
FindString(string s)
de DVD correspond à la chaines
Active le contrôle (méthode valable sur
Controle Select()
Page 14 tous les contrôles)

O Penourdouble-cliquant
générer les événements, n'écrivez pas l'en-tête vous-même. Générez l'en-tête
sur l'objet graphique ou sur le nom de l'événement dans la liste
des événements (au même endroit que les propriétés). Ceci est obligatoire car sinon
la méthode ne sera pas automatiquement appelée. En effet, la méthode événe-
mentielle nécessite du code qui est automatiquement généré dans l'autre partie
non visible de la classe.

Boîtes de messages
Pour afficher une boîte de messages, voici la syntaxe :
MessageBox.Show("le message à afficher");

Et si vous voulez afficher une boîte de confirmation :


if (MessageBox.Show("la question à poser", "titre de la boite",
MessageBoxButtons.YesNo)==DialogResult.Yes)
{
// code si la réponse est oui
}

8 2949 TP PA 00
Vous utiliserez les messages à chaque fois que nécessaire, pour informer l'utilisateur :
par exemple si l'utilisateur tente de supprimer un genre qui est lié à un dvd, alors que ce
n'est pas possible. Vous utiliserez la boîte de confirmation avant de supprimer un dvd.

Écriture du code
Maintenant vous avez tous les éléments pour coder ces fonctionnalités. Il est conseillé de
le faire dans l'ordre du tableau de fonctionnalités. Pensez à tester chaque fonctionnalité
codée avant de passer à la suivante.

Optimisation
Le but est d'éviter au maximum la répétition de code.
Par exemple, pour remplir le combo des acteurs et le combo des genres, le code est qua-
siment identique. Donc autant créer une méthode paramétrée qui sera appelée 2 fois,
avec les bons paramètres. Sachez que vous avez le droit de mettre un paramètre de type
ComboBox : du coup tout traitement fait sur ce paramètre modifiera le ComboBox qui
a été affecté à ce paramètre. Cela vient du fait que les objets sont toujours transférés
par adresse.
Faites les optimisations nécessaires pour limiter les répétitions de code.

TP 1

Logiciel
de gestion
de DVD

Page 15

8 2949 TP PA 00
TP 2
Optimisation par les contraintes
de la base « Tour de France »
Ce TP porte exclusivement sur la mise en place de contraintes afin de mettre en pratique
les concepts vus dans la séquence 4 du cours. Pour cela, nous allons reprendre la base de
données « Tour de France » telle qu’elle était à la fin du TP « Exploitation des données ».

u Capacités attendues en fin de TP


Savoir mettre en place des contraintes.

u Contenu
1. Analyse des besoins........................................................................................ 18
2. Mise en place d’une contrainte d’unicité....................................................... 18
3. Mise en place d’une contrainte de validation simple................................... 20
4. Mise en place de contraintes de validation complexes................................ 21
TP 2
5. Création d’un domaine................................................................................... 24
Optimisation
6. Gestion de l’intégrité référentielle................................................................. 25 par les contraintes
7. Et Win Design dans tout ça ?.......................................................................... 29 de la base
"Tour de France"

Page 17

8 2949 TP PA 00
1. Analyse des besoins
Comme lors du TP "Exploitation des données", nous allons imaginer que vous continuez
d’assister un journaliste sportif qui prépare une émission sur le Tour de France. Lors d’une
entrevue avec lui, vous avez noté les règles métiers suivantes :
• sur chaque étape d’une épreuve, il ne peut y avoir qu’un seul coureur par classe-
ment (il ne peut pas y avoir, par exemple, plusieurs coureurs classés "n° 5") ;
• l’identifiant de pays est composé de 3 lettres majuscules ;
• l’identifiant de coureur international attribué par l’UCI est fabriqué de la manière
suivante :

F R A 1 9 7 9 0 6 2 2

Année de Mois de Jour de


Nationalité
naissance naissance naissance

• lorsqu’un coureur abandonne une étape, il n’a pas de classement sur cette étape, et
il n’a pas non plus de temps mémorisé ;
• il apparaît clairement que, dans le monde du cyclisme, beaucoup d’items sont iden-
tifiés avec un code de 3 lettres majuscules (nationalité, équipes, épreuves…) ;
TP 2 • l’identifiant d’épreuve peut être amené à être changé (il a été question de l’identi-
fiant du "Paris-Nice" qui pourrait passer de "PNC" à "PNI"). Il faut donc prévoir que
Optimisation les identifiants d’épreuve puissent évoluer sans avoir à faire de grosses opérations
par les contraintes
de la base
de maintenance.
"Tour de France"

Page 18
2. Mise en place d’une contrainte d’unicité
L’objectif, ici, est de faire en sorte que, sur chaque étape d’une épreuve, un classe-
ment ne puisse concerner qu’un seul coureur. Pour cela, nous allons mettre en place la
contrainte d’unicité "uni_classement" qui va concerner la table "resultatEtape" et, plus
précisément, les champs "idEtape", "idEpreuve" et "classement".
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la table "resultatEtape", puis choisissez
"Ajouter un objet  Ajouter une contrainte d’unicité" :

8 2949 TP PA 00
• La fenêtre "Ajouter une contrainte d’unicité…" s’ouvre. Complétez le champ
"Nom". Passez ensuite dans l’onglet "Colonnes". À l’aide du menu déroulant
"Colonne", ajoutez les colonnes concernées par la contrainte d’unicité.

TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 19

• La nouvelle contrainte apparaît dans la partie "Contraintes" :

• Dès lors, on ne peut plus saisir 2 coureurs d’une même étape dans une même
épreuve avec le même classement sans se heurter à une violation de contrainte
d’unicité :

8 2949 TP PA 00
Mise en place avec SQL
En SQL, la création de cette contrainte se fait avec l’instruction suivante :

ALTER TABLE resultatetape


ADD CONSTRAINT uni_classement
UNIQUE (idepreuve,idetape,classement) ;

3. Mise en place d’une contrainte de validation simple


L’objectif, ici, est de vérifier que les identifiants de pays que l’on saisit ne contiennent
que 3 lettres en majuscules. Nous allons, pour cela, utiliser un opérateur de comparaison
spécifique à PostgreSQL (nous avons vu dans la partie cours comment faire en respectant
la norme SQL).
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la partie "Contraintes" de la table "pays" et choi-
sissez "Ajouter un objet  Ajouter une contrainte de vérification" :

TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 20 • Nommez ensuite cette contrainte "chk_idPays" puis, dans l’onglet "Définition",
saisissez la vérification "idPays ~'[A-Z][A-Z][A-Z]'" puis validez avec "OK" :

Le caractère "~" (tilde) s’obtient avec la combinaison des touches "Atl Gr + é". Ce carac-
tère permet d’utiliser des expressions rationnelles lors de comparaisons sous PostgreSQL.
Cette vérification revient à faire la vérification suivante :

SUBSTRING(idPays FROM 1 FOR 1) BETWEEN 'A' AND 'Z'


AND SUBSTRING(idPays FROM 2 FOR 1) BETWEEN 'A' AND 'Z'
AND SUBSTRING(idPays FROM 3 FOR 1) BETWEEN 'A' AND 'Z'

8 2949 TP PA 00
Mise en place avec SQL
En SQL, la création de cette contrainte se fait avec l’instruction suivante :

ALTER TABLE pays


ADD CONSTRAINT chk_idPays
CHECK ( idPays ~ '[A-Z][A-Z][A-Z]' ) ;

Ou alors :

ALTER TABLE pays


ADD CONSTRAINT chk_idPays
CHECK (
SUBSTRING(idPays FROM 1 FOR 1)
BETWEEN 'A' AND 'Z'
AND SUBSTRING(idPays FROM 2 FOR 1)
BETWEEN 'A' AND 'Z'
AND SUBSTRING(idPays FROM 3 FOR 1)
BETWEEN 'A' AND 'Z'
) ;

4. Mise en place de contraintes de validation complexes TP 2

Optimisation
Lors de l’analyse des besoins, nous avons découvert que le code UCI était créé en s’ap- par les contraintes
de la base
puyant sur la nationalité et la date de naissance d’un coureur. Nous allons donc mettre "Tour de France"
en place une contrainte de validation qui veillera à ce qu’il ne puisse pas y avoir d’erreur
sur les codes UCI, ni sur les dates de naissance des coureurs. Page 21
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la partie "Contraintes" de la table "coureur" et
choisissez "Ajouter un objet  Ajouter une contrainte de vérification" :

8 2949 TP PA 00
• Nommez ensuite cette contrainte "chk_codeUCI" puis dans l’onglet
"Définition" saisissez la vérification ci-dessous et validez avec "OK" :

Mise en place avec SQL


En SQL, la création de cette contrainte se fait avec l’instruction suivante :
ALTER TABLE coureur
ADD CONSTRAINT chk_codeUCI
CHECK
(
SUBSTRING(codeUCI FROM 1 FOR 3) = nationalite
AND CAST(SUBSTRING(codeUCI FROM 4 FOR 4) AS INT)
TP 2
= EXTRACT(YEAR FROM dateDeNaissance)
Optimisation AND CAST(SUBSTRING(codeUCI FROM 8 FOR 2) AS INT)
par les contraintes = EXTRACT(MONTH FROM dateDeNaissance)
de la base AND CAST(SUBSTRING(codeUCI FROM 10 FOR 2) AS INT)
"Tour de France"
= EXTRACT(DAY FROM dateDeNaissance)
) ;
Page 22
Lors de l’analyse des besoins, nous avons également vu que, lorsqu’un coureur aban-
donne une étape, il n’a pas de classement sur cette étape, et il n’a pas non plus de temps
mémorisé. Nous allons donc mettre en place une contrainte qui va nous assurer que cette
règle métier sera bien respectée.
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la partie "Contraintes" de la table
"resultatEtape" et choisissez "Ajouter un objet  Ajouter une contrainte de véri-
fication" :

8 2949 TP PA 00
• Nommez ensuite cette contrainte "chk_abandon" puis dans l’onglet
"Définition" saisissez la vérification ci-dessous et validez avec "OK" :

Mise en place avec SQL


En SQL, la création de cette contrainte se fait avec l’instruction suivante :

ALTER TABLE resultatEtape


ADD CONSTRAINT chk_abandon
CHECK (
( abandon = TRUE
AND classement IS NULL
TP 2
AND temps IS NULL
) Optimisation
OR par les contraintes
de la base
( abandon = FALSE
"Tour de France"
AND classement IS NOT NULL
AND temps IS NOT NULL Page 23
)
) ;

8 2949 TP PA 00
5. Création d’un domaine
Lors de l’analyse des besoins, nous nous sommes aperçus que, dans le monde du cyclisme,
les codes à 3 lettres majuscules étaient très fréquents (nationalité, équipes, épreuves…).
Nous allons donc créer un domaine "id_cyclisme" que nous pourrons réutiliser par la
suite.
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la partie "Domaines" et choisissez "Ajouter un
domaine" :

• Nommez ce domaine "id_cyclisme" puis dans l’onglet "Définition" saisissez le "Type


TP 2 de base", puis la vérification ci-dessous, la longueur de ce nouveau domaine et vali-
dez avec "OK" :
Optimisation
par les contraintes
de la base
"Tour de France"

Page 24

8 2949 TP PA 00
Maintenant que le domaine est créé, il faudrait l’appliquer dans les différentes tables
concernées. Le problème, ici, c’est que pgAdmin (comme beaucoup de clients gra-
phiques) ne permet pas de modifier les types de colonnes si ce n’est pour proposer un
type proche. Nous allons devoir utiliser directement du SQL, ce qui, encore une fois,
justifie sa connaissance et son apprentissage !

Mise en place avec SQL


En SQL, la création de ce domaine se fait avec l’instruction suivante :

CREATE DOMAIN id_cyclisme


AS character(3)
CHECK (VALUE ~ '[A-Z][A-Z][A-Z]')
);

Une fois le domaine créé, il nous suffit de l’utiliser à la place de "character(3)" dans les
différentes tables :
• contratCoureur (idEquipe) ; • etape (idEpreuve)
• contratDirecteur (idEquipe) ; • participer (idEpreuve)
• coureur (nationalite) • pays (idPays)
• epreuve (idEpreuve) • resultatEtape (idEpreuve)
• equipe (idEquipe, nationalite)

Pour chaque table, il nous suffit de modifier le type. L’exemple suivant nous montre TP 2
l’instruction qui nous permet de modifier les types des colonnes "idEquipe" et "nationa-
lite" de la table "equipe". Inspirez-vous-en pour modifier toutes les tables : Optimisation
par les contraintes
de la base
ALTER TABLE equipe
"Tour de France"
ALTER COLUMN idEquipe TYPE id_cyclisme,
ALTER COLUMN nationalite TYPE id_cyclisme ; Page 25

6. Gestion de l’intégrité référentielle


Nous allons, ici, faire en sorte que la modification de l’identifiant d’une épreuve soit non
seulement possible, mais aussi automatiquement répercutée sur les tables contenant des
références. Pour cela, il faut configurer les clés étrangères des tables filles afin que l’ac-
tion réalisée sur l’événement "ON UPDATE" soit "CASCADE" et non plus "NO ACTION".

8 2949 TP PA 00
Mise en place graphique avec l’outil pgAdmin
• Cliquez avec le bouton droit sur la contrainte "fk_epreuve" de la table "etape" et
choisissez "Supprimer" :

• Cliquez ensuite avec le bouton droit sur la partie "Contraintes" de la table "etape"
et choisissez " Ajouter un objet  Ajouter une clé étrangère" :

TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 26

• Nommez cette contrainte "fk_epreuve" puis dans l’onglet "Définition" choisissez


"epreuve" dans le menu déroulant "Références". Dans l’onglet "Colonnes", choi-
sissez "idEpreuve" dans le menu déroulant "Colonne locale". Et enfin, dans l’onglet
"Action", choisissez l’action "CASCADE" pour l’événement "Lors d’une mise à jour"
et validez avec "OK" :

8 2949 TP PA 00
TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 27

Deux remarques :
• Cette modification n’est pas la seule à apporter. Il y a les tables “participer” et
“resultatEtape” qui s’appuient également sur la clé étrangère “idEpreuve” (direc-
tement pour “participer” et indirectement pour “resultatEtape”). Vous allez donc
devoir modifier également les clés étrangères dans ces 2 tables.
• Dans un environnement de production, ces manipulations “telles quelles” seraient,
bien évidemment, à proscrire. Dès lors que vous avez supprimé une contrainte de
clé étrangère, vous avez mis la base de données en péril. En effet, le temps que vous
reconstruisiez la nouvelle clé, la base a pu recevoir des données incohérentes…
Comment opérer lorsque l’on doit faire ce genre de manipulation ?
– Soit vous coupez les accès à la base de données (on débranche le câble réseau,
on ajoute temporairement une règle de pare-feu…).
– Soit vous faites vos opérations de suppression/création au sein d’une transac-
tion. Cette dernière solution est sans aucun doute celle à privilégier, et c’est
celle que nous verrons plus loin !

8 2949 TP PA 00
Mise en place avec SQL
Comme cela vient d’être dit, la suppression d’une contrainte de clé étrangère est loin
d’être anodine. Dans un environnement de production, il peut en résulter de terribles
conséquences. C’est pourquoi nous allons travailler ici avec des transactions :
START TRANSACTION ;
ALTER TABLE etape
DROP CONSTRAINT fk_epreuve ;
ALTER TABLE etape
ADD CONSTRAINT fk_epreuve FOREIGN KEY (idEpreuve)
REFERENCES epreuve (idEpreuve)
ON UPDATE CASCADE
ON DELETE NO ACTION ;
COMMIT;

Il suffit ensuite de vous inspirer de cette transaction pour procéder au remplacement des
contraintes de clés étrangères dans les tables "participer" et "resultatEtape". D’ailleurs,
rien ne nous empêche de tout faire au sein d’une même transaction :
START TRANSACTION ;
ALTER TABLE participer
DROP CONSTRAINT fk_participer_epreuve ;
ALTER TABLE participer
TP 2 ADD CONSTRAINT fk_participer_epreuve
FOREIGN KEY (idEpreuve)
Optimisation
par les contraintes REFERENCES epreuve (idEpreuve)
de la base ON UPDATE CASCADE
"Tour de France"
ON DELETE NO ACTION ;
ALTER TABLE resultatetape
Page 28
DROP CONSTRAINT fk_etape ;
ALTER TABLE resultatetape
ADD CONSTRAINT fk_etape
FOREIGN KEY (idEpreuve, idEtape)
REFERENCES etape (idEpreuve, idEtape)
ON UPDATE CASCADE
ON DELETE NO ACTION ;
COMMIT;
Dès lors, plus rien ne nous empêche de modifier l’identifiant du "Paris-Nice" de "PNC"
en "PNI". Vous pouvez d’ailleurs faire le test, soit via pgAdmin en modifiant directe-
ment l’identifiant dans l’éditeur de données (7e icone en forme de tableau), soit à l’aide
de l’instruction suivante :
UPDATE epreuve
SET idEpreuve = 'PNI'
WHERE idEpreuve = 'PNC' ;
Cette modification aura bien pour résultat la modification "en cascade" de toutes les
tables "filles" !

8 2949 TP PA 00
7. Et Win Design dans tout ça ?
Maintenant que vous comprenez l’objectif des contraintes, vous devez prendre
conscience que ces contraintes doivent être prises en compte dès les premières étapes
d’analyse et, donc, dès la conception du schéma conceptuel des données. Voici quelques
pistes qui devraient vous permettre d’intégrer les contraintes "métiers" dès les premières
esquisses conceptuelles.
• Prenons le cas du schéma conceptuel du Tour de France :

• Il suffit ensuite d’accéder aux attributs et types de la table "COUREUR", de sélec-


tionner la propriété sur laquelle on souhaite poser une contrainte (ici, "codeUCI")
et d’appuyer sur le bouton "Domaine de valeurs". Puis sur le bouton "Règles". Il
faut ensuite définir la contrainte (ici, "chk_codeUCI") et appuyer sur le bouton
"Composition". Dans l’onglet "Propriétés", il faut ajouter les propriétés qui vont
servir dans la contrainte. Et enfin, dans l’onglet Description, c’est là que l’on va
décrire la contrainte au niveau conceptuel (c’est-à-dire avec nos mots, il n’y a rien
d’orienté "technologie" à ce niveau) : TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 29

8 2949 TP PA 00
• À la génération du modèle logique, il suffit ensuite de se rendre de nouveau au
même endroit pour définir "techniquement" la contrainte, c’est-à-dire dans le lan-
gage du SGBDR ciblé (puisque la génération du script SQL est l’étape suivante) :

• À l’étape suivante (il ne faut pas oublier de cocher la case qui concerne les
TP 2 contraintes dans les options de génération), on peut voir que la contrainte a bien
été intégrée au script SQL :
Optimisation
par les contraintes
de la base
"Tour de France"

Page 30

8 2949 TP PA 00
Et ça, c’est juste une infime partie des possibilités qu’offre un outil comme Win Design !

Encore une fois, l’important pour vous est avant tout de prendre l’habitude de manipuler
les outils. Que ce soit Win’Design, pgAdmin ou directement le SQL, rien ne s’obtient sans
pratique. C’est pourquoi je vous invite à travailler régulièrement sur ces outils et à chercher
à acquérir le maximum de savoir-faire. Soyez curieux, et recherchez toujours la manière
d’optimiser vos productions si vous voulez acquérir le maximum de compétences.

TP 2

Optimisation
par les contraintes
de la base
"Tour de France"

Page 31

8 2949 TP PA 00

Vous aimerez peut-être aussi