Travaux Pratiques « fichiers et bases de données 1»
Deuxièmes candidatures en informatique - 2005 -
Enseignants :
Si vous souhaitez nous rencontrer en dehors du cours, veuillez prendre rendez-vous par e-mail.
Partie I : Structured Query Language (SQL) [Alain Buys]
Les slides de cours et les fichiers de script sql sont téléchargeables sur le site ftp de l'UMH :
TPSQL.
Partie II : Query-By-Example (QBE) [Raphael Astier]
[Page 2003, avec des exemples introductifs de code html et php.]
Travail demandé
Le but est de créer une interface web qui puisse interroger une base de données,
et ceci de façon identique à ce que fait le logiciel QBE (proposé
commercialement par IBM au dessus de DB2 depuis 1983). La description exacte de l'interface attendue est présentée lors du premier tp. Voir ci-dessous pour un récapitulatif de cette interface.
Vous devrez aussi rendre un rapport (format indifférent) qui détaille le travail que vous avez
effectué, (qui explique ce que vous avez fait en plus, le cas échéant), et qui réponde (de façon justifiée) à quelques
questions (voir la section Questions ci-dessous). Vous pourrez y joindre en annexe votre code, clairement documenté et présenté.
Pour la description du logiciel QBE :
- Voir le document distribué au 1er tp (« Overview of the QBE language »),
-
La description donnée dans le livre « Bases de données », G. Gardarin (Eyrolles,
2002) est fournie ici sous forme de fichiers pdf :
Pages 1 à 4.
-
Des exemples de requêtes QBE tirées du « Livre de sql », S. Pasleau (PSI, 1989) : page-qbe.pdf.
Le modèle est basé sur celui du client-serveur, et votre interface QBE devra être
cliente d'un serveur de bases de données.
Description de l'interface
En fait on souhaite qu'elle corresponde exactement à celle décrite ci-dessus pour le logiciel QBE. Cela peut sembler restrictif et contraignant, mais c'est le but : les fioritures sont interdites !
Vous devrez présenter un projet qui donne une interface web capable de faire des sélections/projections/jointures sur une base de donnée quelconque, avec un graphisme identique à QBE. C'est tout, mais elle doit fonctionner parfaitement, même dans des cas de sélection/projection/jointure compliqués, ou d'erreurs d'entrée de l'utilisateur, donc ATTENTION, le jour de la présentation du projet, il sera trop tard pour réfléchir à la conception.
Concrètement :
- Il faut d'abord pouvoir se connecter à un serveur de bases de données (demander le nom du serveur, le nom d'une base de données, un nom d'utilisateur, et un password associé),
- puis il faut proposer la liste des tables de la base sélectionnée et une option de déconnexion (revenir à ce point après chaque requête effectuée), ainsi que permettre le choix de tables pour la requête,
- puis, les tables ayant été choisies, il faut pouvoir faire la requête en utilisant précisément les notations :
- «P.» pour afficher une colonne d'une table,
- «P.AO» pour afficher une colonne dans l'ordre croissant, (resp. «P.DO» pour décroissant),
- «P.ALL» pour afficher TOUTES las valeurs de la colonne (y compris les doublons : c'est le comportement par défaut de MySQL), autrement par défaut c'est «P.DISTINCT» (peut être surchargé),
- les constantes (numériques ou string) sont entourées de quotes : " " (précédées au besoin de "<", "<=", "!=", par défaut sont considérées précédées par "=", mais peut-être surchargé),
- «_X» pour effectuer une jointure entre plusieurs tables (ou «_Y», ou «_nom»...).
On peut donc trouver des assemblages de type : « P.AO.ALL._X » ou « P.DISTINCT.DO.<"10" », ou encore « P.>"5".<"10" » dans une colonne.
Attention à gérer des erreurs utilisateurs comme « A0.X » ou « "10".P », et éviter d'afficher dans une seule page html 4000 lignes d'une table...
-
Attention, la sélection/projection/jointure est strictement incluse dans le « select ... from ... where ... » du SQL, et si vous avez compris la description de QBE, vous voyez que dans la condition « where », exprimer des conditions utilisant un "or", comme "A < 5 or A > 10" (pour une colonne de nom A), ne sera pas possible, à moins d'utiliser une ligne supplémentaire pour chaque table choisie, dans laquelle on écrirait ces conditions ("boîte condition" du QBE).
De même, faire une jointure sur une même table, une union, une différence, une intersection entre deux tables, n'est pas trivial en QBE.
Exemples de fonctionnalités supplémentaires :
Les exemples suivants ne sont pas requis pour avoir une note honorable (bonne) au projet, mais s'il vous reste du temps, et si vous êtes sûrs que votre interface est jusqu'ici exempte de bugs (...), vous pouvez rajouter :
- des fonctions de calcul sur les colonnes («P.AVG», «P.SUM», «P.COUNT»...),
- la possiblité d'insertion ou d'effacement de tuples.
Détails pratiques
La présentation de votre projet (i.e. de votre interface) se fera à l'aide du serveur fbd-serv.swapping.umh.ac.be
(serveur intranet UMH uniquement), qui contient un serveur web Apache, un serveur MySQL, et le navigateur Mozilla 1.7.3.
Votre interface devra fonctionner (au moins) avec ce navigateur.
Vous disposez d'un compte sur ce serveur, (login&passwd vous seront donnés au 1er tp), vous pouvez y accéder depuis les machines Windows des salles Escher/Turing
par ssh, Cygwin, y copier vos fichiers via scp, ou même par drag&drop
(mettre dans la barre d'URL "\\fbd-serv\homes").
En fait c'est dans votre répertoire "public_html/" sur ce serveur que vous placez vos scripts, qui pourront être exécutés par le programme php du serveur, et dont le résultat (html) sera envoyé au client (navigateur Internet) par le serveur Apache. Tout ceci sera montré lors des premiers tp.
Votre interface sera donc accessible depuis le navigateur à l'adresse :
http://fbd-serv.swapping.umh.ac.be/~login
,
si vous prenez bien soin de mettre un fichier index.php
(ou index.html
) dans votre répertoire public_html
.
Toutes les spécificités de cette machine (serveur web, mysql, moteur php, phpMyAdmin, Cygwin...) sont
accessibles depuis l'URL : http://fbd-serv.swapping.umh.ac.be
.
Sur le serveur MySQL de cette machine, vous trouverez une base de donnée nommée « Geographie », qui peut vous servir à « mettre au point » votre interface. Vous y avez accès en lecture seule ("select only"), par l'intermédiaire du compte MySQL : fbdcommun/fbdserv.
Attention : Lors de votre présentation, la base de données sur laquelle vous testerez votre interface sera nommée différemment, et vous découvrirez son contenu, ainsi que les questions que j'aurais prévues pour le test (questions «en français», auxquelles vous répondrez via votre interface), plus mon jeu de tests.
Le langage à utiliser pour créer votre interface QBE n'est pas imposé, disons que le PHP est le plus simple d'accès et le plus documenté sur le web, mais sont aussi
possibles par exemple : perl, python, caml, scripts shell, xml...
Pour s'entraîner chez soi...
Deux possiblités au moins pour Windows :
sont deux paquetages qui permettent de
simuler (chez soi...) serveur web, serveur MySQL et interpréteur PHP. Cependant
si vous utilisez ceci, je vous conseille de recopier chez vous les fichiers de
configuration de fbd-serv (php.ini, httpd.conf) pour éviter des surprises lors de votre présentation...
Pour Linux, il faut configurer les différents composants (MySQL, PHP, Apache), ceux-ci étant déjà normalement présents par défaut dans toute distribution récente.
Avec votre interface :
- Savez-vous gérer des attributs de même nom dans des tables différentes ?
- Quels sont les différents cas de figure pour des jointures sur un nombre de tables >= 3 ? Est-il possible d'égaliser le même attribut sur 3 tables ou encore d'égaliser les attributs par paires ?
- Pouvez faire du "order by" ? Si oui est-il possible de le faire sur plusieurs colonnes en même temps ? Expliquez ce qui se passe dans votre code.
- Pouvez-vous répondre à des questions de type : « Quels clients ont loué tous les articles ?». Expliquer comment ou pourquoi.
- Pouvez-vous faire des requêtes utilisant "not exists" ? Comment ou pourquoi ?
- Pouvez-vous faire des sous-requêtes ? Comment ou pourquoi ?
Planning
Présentation et remise du rapport (version papier) le mercredi 23 mars à 13h15, salle Turing.
Service de Science des Systèmes d'Information, Institut d'Informatique, Université de Mons-Hainaut, Belgique
Last modified : Monday, 13-Feb-2006 17:09:15 NFT Raphael Astier