TP d introduction aux bases de données 1 TP d introduction aux bases de données Le but de ce TP est d apprendre à manipuler des bases de données. Dans le cadre du programme d informatique pour tous, on va se servir de bases de données déjà créées sur lesquelles on va réaliser des requêtes SQL à l aide du logiciel EasyPHP. 1 Introduction et installation 1.1 Définitions d une base de données Une base de données est un grand ensemble de données structurées et mémorisées sur un support permanent. Cela permet un accès direct à des données précises, plutôt que de devoir faire une lecture et une analyse de toutes les informations contenues dans un fichier quelconque afin d obtenir l information souhaitée. Les bases de données permettent aussi d éviter la perte d information en cas de pannes ou d erreurs logicielles ou matérielles. Les données sont stockées dans des tableaux à deux dimensions appelés tables. Chaque colonne a un nom appelé attribut, leur ordre n a pas d importance, mais ils doivent être distincts. À chaque attribut A est associé un domaine noté Dom(A), qui représente l ensemble des valeurs possibles de l attribut. Un domaine est décrit par un type (chaine de caractères, entier etc.) auquel on peut associer des contraintes. Par exemple, le domaine de l attribut couleur défini par {rouge, vert, bleu} est de type CHAR. Une ligne de la table contient des valeurs pour chacun des attributs et est appelée n-uplet ou tuple. Ils ne sont pas ordonnés et les doublons ne sont pas pris en compte. L ensemble des n-uplets d une table s appelle une relation. Une base de données relationnelle (BDR) est formée d un ensemble de relations. Un schéma de relation R(A 1, A 2,..., A n ) est constitué d un nom R et d une liste d attributs A 1, A 2,..., A n. Par exemple, la base de données Aéroport que nous allons utiliser est composée des trois schémas de relation suivants 1 : Avion(NumAV,NomAV,Capacite,Localisation) Pilote(NumP,NameP,Adresse,Salaire) Vol(NumV,NumP,NumAV,Dep T,Arr T,Dep H,Arr H) 1. le modèle entité-association qui permet de modéliser le réel sous cette forme n est pas au programme.
TP d introduction aux bases de données 2 où les attributs sont entre parenthèses : NumAV représente le Numéro de l AVion etc. Cette base de données est remplie des tuples suivants : Avion NumAV NomAV Capacite Localisation 101 A300 300 Marseille 102 A330 300 Nice 103 A300 300 Paris 104 A330 300 Marseille 105 A330 300 Marseille 106 A320 300 Nice 107 A320 300 Marseille 108 A330 300 Paris 109 A350 500 Paris Pilote NumP NomP Adresse Salaire 2 Pierre Nice 325 000 3 Pierre Paris 250 000 4 Alain Marseille 250 000 5 Roger Marseille 250 000 6 Brice Nice 300 000 7 Norbert Marseille 325 000 8 Roger Paris 250 000 9 Roger Paris 300 000 Vol NumV NumP NumAV DEP H DEP V ARR H ARR V 1002 3 104 2 : 00 PM Marseille 2 : 20 PM Nice 1003 4 105 1 : 00 AM Paris 2 : 05 AM Nice 1004 2 101 12 : 00 AM Paris 1 : 00 PM Marseille 1005 3 101 12 : 00 AM Marseille 12 : 45 PM Lyon 1006 4 107 9 : 00 AM Nice 9 : 20 AM Marseille 1007 5 101 10 : 00 AM Paris 10 : 45 AM Lyon 1008 6 101 7 : 00 PM Lyon 7 : 45 PM Marseille 1009 7 101 4 : 00 PM Paris 5 : 00 PM Marseille 1010 2 109 8 : 00 AM Nice 9 : 00 AM Paris On remarque que certains attributs sont soulignés ou en italique. C est ce que l on appelle des clés : une clé primaire représente l ensemble minimal d attributs qui permet d identifier de façon unique chaque tuple d une relation. La clé est souvent limitée à un seul attribut, qui prend des valeurs distinctes pour chaque tuple de la relation. Il peut y avoir plusieurs clés, on les appelle alors des clés candidates et on en choisit alors une qui devient la clé primaire. Dans le cas présenté, on n a pas le choix, seule NumAV convient pour la relation Avion. une clé étrangère explicite les liens entre les tables de la base de données. Elle permet d assurer que les relations entre tables demeurent cohérentes. Quand une table possède une clé étrangère vers une autre table, il n est pas possible d ajouter un tuple dans la première si un tuple correspondant n existe pas dans l autre. C est le cas de NumV et NumP dans la relation Vol. 1.2 Opérations sur une base de données On cherche un langage qui puisse : définir les données : création et destruction d une relation, ajout et suppression d un attribut, définition des contraintes (clés) ; les manipuler : saisie des tuples d une relation, affichage et modification de ceux-ci mais aussi pouvoir faire des requêtes, c est-à-dire consulter des relations. En théorie, on se base sur l algèbre relationnelle, qui est un langage procédural (on indique comment trouver le résultat), facile à programmer mais difficile pour un utilisateur. En pratique, on utilise le langage SQL (Structured Query Language), qui est un langage déclaratif (on indique ce que l on veut faire). C est plus facile et naturel pour l utilisateur, SQL se charge ensuite de traduire et d optimiser la requête en utilisant l algèbre relationnelle. Les opérations sur une base de données prennent en entrée une ou deux relations (ensembles de tuples) et le résultat est toujours une relation (un ensemble aussi). On parle d opérations relationnelles (ensemblistes).
TP d introduction aux bases de données 3 Il y a 5 opérations de base pour exprimer toutes les requêtes. Deux opérations unaires que sont la projection et la sélection et trois opérations binaires que sont l union, la différence et le produit cartésien. D autres opérations s expriment en fonction de ces 5 opérations de base : la jointure, l intersection et la division. On ne les détaillera pas ici, on se limitera plutôt à leur utilisation au travers de la syntaxe SQL dans la partie suivante. 1.3 Installation 1.3.1 Prérequis On a besoin de trois choses : Un serveur, par exemple Apache, pour stocker la base de données. Un système de gestion de base de données (SGBD 2 ) qui est un logiciel système destiné à stocker et à partager des informations dans une base de données. Cela tout en garantissant la qualité, la pérennité et la confidentialité des informations, et en cachant la complexité des opérations. Il y en a des commerciaux 3 comme Oracle Express, IBM DB2 ou Microsoft SQL Server mais aussi des libres comme MySQL que nous utiliserons. Un logiciel d administration de MySQL au travers d une interface utilisateur passant par une page web. On utilisera PhpMyAdmin. On peut les installer séparément quelque soit le système d exploitation et les paramétrer, mais il est plus aisé d utiliser un package tout fait. Sous Windows, on dispose d EasyPhp (voir ci-dessous) ou de WAMP (pour Windows Apache MySQL Php). Sous Linux et Mac, on trouve les équivalents LAMP et MAMP. 1.3.2 Installation sous Windows Le logiciel libre EasyPhp comprend le SGBD MySQL, un serveur Apache pou stocker la base de données et l interface d administration PhpMyAdmin. Pour l installer, il suffit d aller sur le site http: //www.easyphp.org et de télécharger la dernière version. Une fois le logiciel installé, une petite icône en forme de e carré apparait dans la barre des tâches. En cliquant dessus, on peut vérifier que les serveurs MySQL (et Apache) ont bien été démarrés. Ouvrir un navigateur internet pour se rendre à l adresse locale http://localhost/home. Sur cette page d accueil, repérer le module Administration MySQL : phpmyadmin et cliquer sur open. 2. ou DBMS, pour database management system, en anglais. 3. qui sont souvent gratuits pour usage particulier ou éducatif.
TP d introduction aux bases de données 4 On se retrouve alors sur l interface phpmyadmin de gestion de la base de données suivante : On peut alors : Changer la langue en français. Aller dans l onglet Bases de données et créer une base de données qui a pour nom : avions. Celle-ci apparaît alors dans le bandeau de gauche. Cliquer dessus pour la sélectionner puis aller dans l onglet Importer. Dans la partie Fichier à importer, parcourir son ordinateur afin de charger la base de données déjà remplie avions.sql et cliquer sur le bouton Exécuter en bas de la page.
TP d introduction aux bases de données 5 On voit alors apparaître des nouvelles tables dans l onglet de gauche, cliquer dessus pour voir ce qu elles contiennent. On remarque alors, en haut, un bandeau vert détaillant ce que phpmyadmin a fait, le temps qu il a mis et surtout, en dessous, la requête SQL correspondant à ce qu il vient de faire 4. 2 Utilisation SQL est le langage des requêtes standard pour les SGDB relationnels. Il n est pas sensible à la casse (majuscule ou minuscule) mais nous indiquerons la syntaxe en majuscule pour plus de lisibilité. 2.1 Projection La projection définit une partie des attributs (colonnes) d une table. Par exemple, pour connaître le nom et la localisation des avions, on projette la relation Avion en ne gardant que les attributs NomAV et Localisation avec : NomAV, Localisation Avion NomAV Localisation A300 Marseille...... A350 Paris Q1. Remarques : On peut obtenir l intégralité d une table avec * suivi du nom de celle-ci. On peut ordonner le résultat en rajoutant ORDER BY suivi de l attribut et au besoin de DESC (descendant) ou ASC (ascendant). On peut limiter les résultats aux tuples entre d et d + n en rajoutant LIMIT d,n. Écrire une requête donnant la liste des pilotes par ordre alphabétique descendant avec leurs salaire. 2.2 Sélection La sélection permet de ne choisir que certains tuples (lignes) d une table à l aide de la clause WHERE. Par exemple, pour connaître tous les attributs des avions de type A330, on écrit : * Avion WHERE NomAV = A330 NumAV NomAV Capacite Localisation 102 A330 300 Nice 104 A330 300 Marseille 105 A330 300 Marseille 108 A330 300 Paris Q2. Remarque : D autres opérateurs sont compris par SQL, comme > ou <=, par exemple. On peut, bien entendu, combiner sélection et projection. Écrire une requête donnant la localisation et le numéro des avions de plus de 300 places. 4. c est un des intérêts d EasyPHP et cela permet de se familiariser avec la syntaxe SQL.
TP d introduction aux bases de données 6 2.3 Union, intersection et différence À l aide des opérateurs AND, OR, NOT, on peut réaliser des sélections sur des unions, intersections ou différences de domaines d attributs, qui sont des ensembles. Par exemple, pour connaître les heures de départ et d arrivée de tous les vols partant de Paris et allant à Marseille, on écrit : WHERE DEP_H, ARR_H Vol DEP_V = Paris AND ARR_V = Marseille DEP H ARR H 12 : 00 AM 1 : 00 PM 4 : 00 PM 5 : 00 PM Q3. Q4. Écrire une requête donnant les numéros et noms des avions localisés à Nice ou qui ont moins de 350 passagers. Écrire une requête donnant les adresses et salaires des pilotes s appelant Roger sauf ceux qui habitent Marseille. 2.4 Agrégation L agrégation calcule un résultat sur le domaine d un attribut. Les fonctions d agrégation possibles sont MAX, MIN, SUM, AVG (moyenne), COUNT. Par exemple, pour connaître le salaire moyen d un pilote, on écrit : AVG(Salaire) Pilote AVG(Salaire) 281250.0000 Q5. Écrire une requête donnant le nombre d A330. 2.5 Produit cartésien Le produit cartésien de deux relations (tables) est composé de tuples, obtenus en formant toutes les associations possibles de tuples de chacune des deux relations. Par exemple, on fait le produit cartésien d Avion et Pilote en écrivant : * Avion, Pilote NumAV NomAV Capacite Localisation NumP NomP Adresse Salaire 101 A300 300 Marseille 2 Pierre Nice 325 000 101 A300 300 Marseille 3 Pierre Paris 250 000........................ 109 A350 500 Paris 8 Roger Paris 250 000 109 A350 500 Paris 9 Roger Paris 300 000 La table correspondante est imposante (elle contient 9 8 = 72 tuples) et possède beaucoup d information redondante. C est d ailleurs une des raisons pour laquelle on préfère séparer les tables lorsque l on utilise des bases de données! Il est plus utile de limiter le produit cartésien aux données qui nous intéressent, cf ci-après.
TP d introduction aux bases de données 7 2.6 Jointure Lorsque l on veut faire une sélection sur plusieurs relations à la fois, on les réunit avec une jointure. On réalise pour cela le produit cartésien des relations puis on sélectionne les tuples qui vérifient une condition particulière. Par exemple, pour connaître les noms de pilotes des différents vols, on réunit les relations Vol et Pilote grâce à la clé commune NumP, puis on sélectionne les données demandées ainsi : ON NumV, NomP Vol JOIN Pilote Vol.NumP=Pilote.NumP NumV NomP 1004 Pierre 1010 Pierre 1002 Pierre 1005 Pierre 1003 Alain 1006 Alain 1007 Roger 1008 Brice 1009 Norbert Q6. Écrire une requête donnant la localisation actuelle des avions ainsi que l heure de départ et la ville de laquelle ils doivent partir pour leur vol. 2.7 On mélange tout! Q7. Écrire une requête donnant le nombre de vols dont le pilote gagne au moins 300 000 euros et habite à Nice. On s intéressera aux requêtes imbriquées et aux regroupements de tuples dans le TP suivant...