Ecole Industrielle et Commerciale de la ville de Namur. Structure et application des bases de données. Y. Mine
|
|
|
- Bruno Chrétien
- il y a 10 ans
- Total affichages :
Transcription
1 Ecole Industrielle et Commerciale de la ville de Namur Structure et application des bases de données 2è graduat en informatique et systèmes * technologie de l information Y. Mine
2 Table des matières Chapitre 1 Les bases de données relationnelles 1.1 Introduction 1.2 Pourquoi une base de données 1.3 Différentes formes 1.4 Le stockage des données (les tables) 1.5 L algèbre relationnel 1.6 Le SGBD 1.7 Le matériel 1.8 Les différents modèles de bases de données 1.9 Les identificateurs 1.10 Notions de clé primaire Chapitre 2 Le modèle entité/associations 2.1 Les entités et leurs attributs 2.2 Les associations 2.3 Les cardinalités 2.4 Traduction en mode relationnel 2.5 Création d une base de données Chapitre 3 Présentation de l interface 3.1 Les index 3.2 L onglet «Afficher» 3.3 Les onglets «SQL» et «Rechercher» 3.4 L onglet «Insérer» 3.5 L onglet «Exporter» 3.6 L onglet «Opérations» Chapitre 4 Création de la base 4.1 Création d une table 4.2 Les types d attributs Les entiers Les flottants Les chaînes Date et heure 4.3 Propriétés des champs Un champ d un enregistrement 4.4 Saisir les données 2
3 Chapitre 5 Les index Structure et application des bases de données 5.1 Avantages 5.2 Inconvénients 5.3 L index sur plusieurs champs 5.4 L indexation d un champ Chapitre 6 Les formulaires 6.1 Interagir avec une base de données 6.2 Création d un formulaire simple 6.3 Composition et ergonomie des formulaires Choix et spécification des éléments Présentation générale Groupement et ordonnancement des champs Champs obligatoires / champs optionnels Rapidité d exécution Protection contre les erreurs Chapitre 7 Le langage MySQL et ses fonctions Exercices 7.1 Introduction à SQL 7.2 MySQL 7.3 Les fonctions MySQL Data retrieval Data manipulation language Les opérations ensemblistes Les états Gestion automatisée par des macros Data definition language Introduire des données via un fichier texte Audit des bases : explain Les procédures stockées Les vues 3
4 Chapitre 1 : Les bases de données relationnelles 1.1 Introduction Une base de données (bd) est un système d'organisation de l'information, conçu pour une localisation et une mise à jour rapide et facile des données. Une bd organise l'information qu'elle contient en tables, en champs (les colonnes) et en enregistrements (les lignes). Chaque enregistrement correspond à un item stocké dans la base de données. Réduire le plus possible la saisie d'informations redondantes est l'un des gros problèmes auquel se sont heurtés les gestionnaires de données. En pratique, on manipule souvent des données ayant la même structure (ex. : liste des membres du personnel : pour chaque personne, on enregistre le nom, le prénom, le sexe, la date de naissance, l'adresse, la fonction dans l'entreprise, etc.) Toutes ces données ont la même structure et peuvent être facilement gérées par des moyens informatiques. Dans le même ordre d'idée, l'encodage d'un achat doit automatiquement afficher dans le masque de saisie toutes les coordonnées du fournisseur dès que l'on a encodé son nom ou son identifiant unique. une base de données est un ensemble structuré de données, géré à l'aide de l'informatique Une collection de données qui supporte les définitions de données de la base Structure intégrée Lien sémantiques Contraintes d intégrité Contraintes de sécurité vues de la base Une collection de données qui supporte les manipulations de recherche de données Interactive Logiquement et physiquement performante insertion, Mise à jour, Suppression de données Cohérente Partagée Fiable En outre, il y a aussi les notions de : exhaustivité : la base contient toutes les informations requises unicité : la même information n'est présente qu'une seule fois Exemples d'utilisation : les fournisseurs les clients les contacts les commandes les factures les produits et services 4
5 le stock le personnel les salaires et les charges correspondantes le commerce électronique, etc. 1.2 Pourquoi une base de données? Intégration de données Moins de duplications Partage de données Fiabilité de données Transactions, reprises sur pannes, tolérance de pannes Sécurité de données Langages de requêtes SQL, QBE Interfaces conviviales Web 1.3 Différentes formes : BDs personnelles MsAccess etc. 10 KO 100 KO BDs professionnelles typiques 100 KO 100 GO BDs professionnelles très grandes Very Large Databases (VLDB) > 100 GO 1.4 Le stockage des données (les tables) Dans une base de données, le stockage se fait de manière organisée. On distingue plusieurs éléments constitutifs. Il y a tout d'abord des tables. Elles portent un nom qui généralement correspondra aux informations contenues. Pour un carnet de contacts, on aura une table appelée Contacts qui contiendra toutes les personnes que l'on connaît. Une table contient des enregistrements. En voyant la table comme un tableau, un enregistrement correspond à une ligne. On pourra dire dans notre exemple, que les différentes personnes constituent les enregistrements de la table Contacts. Un enregistrement est fait de plusieurs champs. Ces derniers correspondent aux informations contenues. Ce sont les enregistrements qui contiennent effectivement des données. Ils correspondront aux colonnes du tableau. Un champ est de plus défini par un type selon les données qui pourront y être enregistrées. Celui-ci indiquera par exemple que le contenu du champ pourra être de un ou plusieurs caractères, un ou plusieurs chiffres, une date,... Des données ayant une même structure peuvent être rangées dans un même tableau. Dans le cas ci-dessous, la première colonne (appelée aussi attribut) contiendra les noms, la seconde les prénoms, la troisième le sexe, la quatrième la date de naissance, etc. La caractéristique 5
6 d'un tel tableau est que toutes les données d'une même colonne sont du même type. Dans une base de données, un tel tableau s'appelle une table. Cette table, nommée "personnes" aura pour attributs (colonnes) : nom, prénom, sexe, adresse, ville et code postal. Les lignes que contiendra cette table seront appelées enregistrements ou tuples. Nom Prénom Sexe Adresse Ville Code postal Durand Pierre M 16, rue de Fer Namur 5000 Chose Stéphanie F 3, Bld d'avroy Liège 4000 Trombe Jean M 3, rue Neuve Bruxelles 1000 Dans une table, les termes ligne et enregistrement sont synonymes. Il en est de même pour les termes colonnes et champs.(row) et (column). 1.5 L'algèbre relationnel L algèbre relationnel regroupe toutes les opérations possibles sur les relations. Projection : on ne sélectionne qu un ou plusieurs attributs d une relation (on ignore les autres). Par exemple n afficher que les colonnes nom et prénom de la table Personnes. nom Martin Dupond Dupond Personnes prénom adresse Pierre 7 allée des vers Jean 32 allé Poivrot Marc 8 rue de l octet téléphone SELECT nom, prénom FROM Personnes nom Martin Dupond Dupond prénom Pierre Jean Marc Jointure : on fabrique une nouvelle relation à partir de 2 ou plusieurs autres en prenant comme pivot 1 ou plusieurs attributs. Par exemple, on concatène la table du carnet d adresse et celle des inscrits à la bibliothèque en fonction du nom de famille (c est typiquement du recoupement de fichiers). 6
7 Personnes Bibliothèque nom Martin Dupond prénom Pierre Jean adresse 7 allée des vers 32 allé Poivrot téléphone nom Dupond Jospin Martin Dernierlivre Robinson Faust Misère SELECT Personnes.prénom, dernierlivre FROM Personnes, Bibliothèque WHERE Personnes.nom = Bibliothèque.nom prénom Jean Pierre Dernierlivre Robinson Misère On joint les deux tables, grâce à la colonne nom. Et on combine cette jointure à une projection sur les attributs nom et dernierlivre. Attention à lever toute ambiguïté sur les noms d attribut dans le cas où deux tables possèdent des colonnes de même nom. Sélection : on sélectionne tous les tuples ou bien seulement une partie en fonction de critères de sélection qui portent sur les valeurs des attributs. Par exemple n afficher que les lignes de la table Personnes qui vérifient la condition suivante : le nom ne commence pas par la lettre C. nom Martin Dupond Dupond Personnes prénom adresse Pierre 7 allée des vers Jean 32 allé Poivrot Marc 8 rue de l octet téléphone SELECT * FROM Personnes WHERE nom = Dupond On ne sélectionne que les tuples dont l attribut nom est égale à Dupond. nom prénom adresse téléphone Dupond Jean 32 allé Poivrot Dupond Marc 8 rue de l octet Cette algèbre est facilement possible avec les commandes de MySQL (SELECT FROM WHERE ). 1.6 Le logiciel (SGBD) Système de Gestion de Base de Données (SGBD) Système logiciel gérant une BD Peut avoir des composants matériels Mono ou multiposte 7
8 En général, peut gérer plusieurs BDs Peut aussi accéder aux BDs d autres SGBDs Le logiciel qui gère une base de données s'appelle un système de gestion de base de données. (SGBD - DBMS pour Data Base Management System). Tous les SGBD présentent à peu près les mêmes fonctionnalités. Ils se distinguent par leur coût, par le volume de données qu'ils sont capables de gérer, par le nombre d'utilisateurs qui peuvent interroger la base simultanément, par la facilité avec laquelle ils s'interfacent avec d'autres logiciels, etc. Une BDD peut servir à une seule personne, ou être à la disposition de dizaines de milliers d'agents (systèmes de réservation des billets d'avion). Un SGBD est principalement constitué d'un moteur et d'une interface graphique. Le moteur assure les fonctions essentielles : saisir les données, les stocker, les manipuler, etc. L'interface graphique permet à l'utilisateur de communiquer avec le logiciel. Pour dialoguer avec les SGBD qui ne sont pas équipés d'une interface graphique, il faut utiliser le langage SQL (Structured Query Language), et introduire les instructions à l'aide d'un éditeur de lignes. Langage normalisé de manipulation des bases de données, SQL est utilisable avec pratiquement tous les SGBD du marché. Cependant, chaque éditeur ayant développé son propre "dialecte" il faut pouvoir disposer d'un "dictionnaire" pour transporter une BDD d'un SGBD à l'autre. Ce "dictionnaire" a été développé par Microsoft sous le nom ODBC (Open Data Base Connectivity). 1.7 Le matériel (serveur de BDD) Dépend du volume des données stockées dans la base et du nombre maximum d'utilisateurs simultanés. Lorsque le nombre d'enregistrements par table n'excède pas le million, et que le nombre d'utilisateurs varie de une à quelques personnes, un pc actuel de bonnes performances, un logiciel système pour poste de travail, et un SGBD "bureautique" suffisent. Exemple : Microsoft Access 2002, installé sur un PC récent, doté de 1 Go de mémoire vive et fonctionnant sous Windows XP. Si ces chiffres sont dépassés, il faut utiliser un serveur de BDD, dont les accès aux disques sont nettement plus rapides. Le système client doit être remplacé par un système serveur (multi-utilisateurs), et le SGBD bureautique par un SGBD prévu pour les grosses BDD multiclients. 1.8 Les différents modèles de bases de données Les bases de données du modèle "relationnel"* sont les plus répandues, car elles conviennent bien à la majorité des besoins des entreprises. Le SGBD qui gère une BDD relationnelle est appelé "SGBD relationnel" (SGBDR). * Base de données qui contient des tables et autres sujets, et dont l'information est organisée par différentes relations entre tables. 8
9 D'autres modèles de bases de données ont été proposés : hiérarchique, en réseau, orienté objet, relationnel objet. Aucun d'entre eux n'a pu détrôner le modèle relationnel (sauf le relationnel objet - Oracle). Malgré sa généralité, le modèle relationnel ne convient pas à toutes les BDD rencontrées en pratique. Il existe donc des SGBD spécialisés. Les deux exemples les plus connus concernent la gestion des BDD bibliographiques (ou documentaires), et celle des BDD géographiques gérées à l'aide d'un SIG (Système d'information Géographique). 1.9 Les identificateurs Les noms des bases, relations, attributs, index et alias sont constitués de caractères alphanumériques et des caractères _ et $. Un nom comporte au maximum 64 caractères Comme les bases de données et les relations sont codées directement dans le système de fichiers, la sensibilité à la casse de MySQL dépend de celle du système d exploitation sur lequel il repose. Sous Windows, la casse n a pas d importance ; alors que sous Unix, elle en a. Le point. est un caractère réservé utilisé comme séparateur entre le nom d une base et celui d une relation, entre le nom d une relation et celui d un attribut. Exemple : SELECT base1.table25.attribut5 FROM base1.table Notions de clé primaire L option PRIMARY KEY qui regroupe les contraintes NOT NULL (ne peut pas être vide) et UNIQUE (pas de doublon) va permettre d'identifier tous les enregistrements d'une table. nom Dupond Dupont Martin Martin Martin prénom Marc Pierre Marc Pierre Marc enregistrement interdit car le couple ( Martin, Marc ) est un doublon du couple (nom, prénom ) 9
10 Chapitre 2 : Le modèle entité / associations Le modèle Entité Association Cardinalité Ce modèle compte 4 concepts principaux : entité, attribut, association et cardinalité. Entité = classe générique d'individus ou d'objets ayant les mêmes caractéristiques. Ex: les entités "clients", "livres" ou "fournisseurs", dans une base de données de librairie. Association = classe générique de liens reconnus ou possibles entre individus ou objets. Ex: l'association "achète" lie les clients et les livres d'une librairie. Attribut = propriété distinctive d'une entité ou d'une association. Ex: le nom d'un client est un attribut de l'entité "clients". Cardinalité = caractérisation de l'implication de l'association (p.ex. l'expression (1,N), où 1 représente le minimum et N le maximum d'occurrences dans l'association), qui permet de dénombrer les éléments de l'entité d'arrivée en relation avec un élément de l'entité de départ Exemple d'entité : une base de livres qui sont caractérisés par un titre, un auteur principal, un ISBN, un éditeur, une année de parution et un nombre de pages. Ces différents éléments, (qui sont les attributs de l'entité) sont communs à tous les livres. Pour chaque livre, leur contenu est unique et ne changera pas. 2.1 Les entités et leurs attributs Les entités seront représentées de la manière suivante : Voici un système composé de 3 entités, chacune possède ses propres attributs 10
11 2.2 Les associations Ces entités sont liées par des associations à qui on peut donner un nom, afin de clarifier leur rôle : acheter, livrer, et qui reflètent les interactions présentes entre ces entités. 2.3 Les cardinalités Une cardinalité, dans une association, exprime le nombre de participations possibles d'une occurrence de chaque entité à l'association. Ce nombre étant variable, on note la cardinalité minimum et la cardinalité maximum. Comme il y a deux entités (au moins) associées, la cardinalité est précisée pour chaque entité. Il existe différents types de cardinalités: modèle "1-1": à une occurrence de l'entité E1 peut correspondre au maximum une occurrence de l'entité E2. Ex: l'association "vente" liant les entités "livres" et "fournisseurs" : un livre ne peut être vendu que par un seul fournisseur à la fois. modèle "1 - n": à une occurrence de l'entité E1 peuvent correspondre de une à plusieurs occurrences de l'entité E2, Ex: l'association "posséder" liant les entités "propriétaires" et "voitures" : un propriétaires peut posséder une ou plusieurs voiture. modèle "n - n": à plusieurs occurrences de l'entité E1 peuvent correspondre plusieurs occurrences de l'entité E2. Ex: l'association "achète" liant les entités "clients" et "produits" d'un supermarché modèles "0-1", "0 - N" 11
12 Exercice 01 : établir des modèles Entité Association Cardinalité 2.4 Traduction en mode relationnel Après avoir établi le modèle entité/association, il faut traduire le schéma en mode relationnel, c'est-à-dire dans un format réellement exploitable par la base de données qui va être créée. Cette traduction peut s'opérer selon 2 règles différentes, en fonction de la cardinalité présente sur l'association. Chaque association va être examinée afin de voir si on y trouve des cardinalités (1-1) ou (0-1) 1 ère règle : il n'y a PAS de cardinalité (1-1) ou (0-1) : L'association disparaît On crée une relation (une table) "achats" On crée une contrainte d'intégrité référentielle * entre clé primaire et secondaire * contraintes d'intégrité référentielle Une contrainte d'intégrité est une clause permettant de contraindre la modification de tables, faite par l'intermédiaire de requêtes d'utilisateurs, afin que les données saisies dans la base soient conformes aux données attendues. Ces contraintes doivent être exprimées dès la création de la table grâce aux mots clés suivants: * CONSTRAINT * DEFAULT * NOT NULL * UNIQUE * CHECK DEFAULT Le langage SQL permet de définir une valeur par défaut lorsqu'un champ de la base n'est pas renseigné grâce à la clause DEFAULT. Cela permet notamment de faciliter la création de tables, ainsi que de garantir qu'un champ ne sera pas vide. La clause DEFAULT doit être suivie par la valeur à affecter. Cette valeur peut être un des types suivants: 12
13 * constante numérique * constante alphanumérique (chaîne de caractères) * le mot clé USER (nom de l'utilisateur) * le mot clé NULL * le mot clé CURRENT_DATE (date de saisie) * le mot clé CURRENT_TIME (heure de saisie) * le mot clé CURRENT_TIMESTAMP (date et heure de saisie) NOT NULL vérifie que le contenu du champ n'est pas nul Unique Une table peut posséder une ou plusieurs contraintes d'unicité, chacune étant composée d'une ou plusieurs colonnes de la table. La clause UNIQUE permet de vérifier que la valeur saisie pour un champ n'existe pas déjà dans la table. Cela permet de garantir que toutes les valeurs d'une colonne d'une table seront différentes. CHECK définit une condition que chaque rang doit satisfaire Les index sont utilisés pour trouver des lignes de résultat avec une valeur spécifique, très rapidement. Sans index, MySQL doit lire successivement toutes les lignes, et à chaque fois, faire les comparaisons nécessaires pour extraire un résultat pertinent. Plus la table est grosse, plus c'est long. Si la table dispose d'un index pour les colonnes utilisées, MySQL peut alors trouver rapidement les positions des lignes dans le fichier de données, sans avoir à fouiller toute la table. Si une table à 1000 lignes, l'opération sera alors 100 fois plus rapide qu'une lecture séquentielle. Notez que si vous devez lire la presque totalité des 1000 lignes, la lecture séquentielle se révélera alors plus rapide, malgré tout. Les index de MySQL sopnt PRIMARY, UNIQUE et INDEX. En MySQL, il est possible de définir des clés, c'est-à-dire spécifier la (ou les) colonne(s) dont la connaissance permet de désigner précisément un et un seul tuple (ligne). Primary Key (clé primaire). un ou plusieurs champs qui définissent de manière unique un enregistrement.. Elle peut être composée d'une ou plusieurs colonnes (champs) de la table. Toutes les lignes (enregistrements) de la table doivent satisfaire aux conditions suivantes : Toutes les colonnes des clés primaires doivent ne pas être nulles. Toutes les lignes doivent posséder une valeur de clé primaire différente. Une et une seule clé primaire par table Foreign key (clé étrangère ou secondaire) Les systèmes de base de données utilisés sont le plus souvent de type relationnel. Par ce terme est exprimé le fait que des relations entre les tables vont exister. On aura alors la présence de clés étrangères. Une clé étrangère est une clé primaire pour une table qui est stockée dans une autre table afin d'établir un lien entre les deux. Une table dépendante peut disposer d'une ou plusieurs clés étrangères, chacune étant constituée d'une ou plusieurs colonnes de la table. Chaque clé étrangère fait référence à une (ou plusieurs) colonne(s) correspondante(s) d'une clé primaire dans la table parent. Pour chaque clé étrangère, toutes les lignes de la table dépendante doivent posséder une valeur correspondante dans la table parent ou avoir une ou plusieurs colonnes de la clé étrangère nulles. N'est supporté qu'à partir de MySQL 5.0 Trigger (gâchette): garantie de l'intégrité référentielle Les clés étrangères permettent de définir les colonnes d'une table garantissant la validité d'une autre table. Ainsi, il existe des éléments (appelés triggers, ou en français gâchettes ou déclencheurs) permettant de garantir l'ensemble de ces contraintes que l'on désigne par 13
14 le terme d'intégrité référentielle, c'est-à-dire notamment de s'assurer qu'un tuple utilisé à partir d'une autre table existe réellement. Ces triggers sont ON DELETE et ON UPDATE: * ON DELETE est suivi d'arguments entre accolades permettant de spécifier l'action à réaliser en cas d'effacement d'une ligne de la table faisant partie de la clé étrangère: o CASCADE indique la suppression en cascade des lignes de la table étrangère dont les clés étrangères correspondent aux clés primaires des lignes effacées o RESTRICT indique une erreur en cas d'effacement d'une valeur correspondant à la clé o SET NULL place la valeur NULL dans la ligne de la table étrangère en cas d'effacement d'une valeur correspondant à la clé o SET DEFAULT place la valeur par défaut (qui suit ce paramètre) dans la ligne de la table étrangère en cas d'effacement d'une valeur correspondant à la clé * ON UPDATE est suivi d'arguments entre accolades permettant de spécifier l'action à réaliser en cas de modification d'une ligne de la table faisant partie de la clé étrangère: o CASCADE indique la modification en cascade des lignes de la table étrangères dont les clé primaires correspondent aux clés étrangères des lignes modifiées o RESTRICT indique une erreur en cas de modification d'une valeur correspondant à la clé o SET NULL place la valeur NULL dans la ligne de la table étrangère en cas de modification d'une valeur correspondant à la clé o SET DEFAULT place la valeur par défaut (qui suit ce paramètre) dans la ligne de la table étrangère en cas de modification d'une valeur correspondant à la clé 2ème règle : il y a une ou des cardinalités (1-1) ou (0-1) : L'association disparaît On crée une contrainte d'intégrité référentielle entre clé primaire et secondaire One ne crée PAS de relation (table) supplémentaire Dans notre exemple : La relation clients-livres appartenant à la 1 ère règle : on crée une clé primaire dans la table "Clients" via un n unique nommé IDclient on crée une nouvelle table nommée "Achats" on crée une clé primaire dans la table "Achats" via un attribut à n unique nommé N Achat on crée une clé primaire dans la table "Livres" sur l'attribut ISBN car il est unique on crée une clé secondaire IDclient dans la table "Achats" liée à la clé primaire IDclient de la table "Clients" on crée une clé secondaire ISBN dans la table "Achats" liée à la clé primaire ISBN de la table "Livres" La relation fournisseurs-livres appartenant à la 2 ère règle : on crée une clé primaire dans la table "Fournisseurs" sur l'attribut TVA car il est unique on crée une clé secondaire TVA_fourn dans la table "Livres" liée à la clé primaire TVA_fourn de la table "Fournisseurs" 14
15 Les clés secondaires se placent en principe du côté de la cardinalité (1-1). Attention toutefois aux logiciels de design de DB qui placent les cardinalités "à l'envers". Une fois le schéma relationnel complété et validé, on peut commencer à créer la db. Plusieurs systèmes permettent de travailler sur des db. Nous allons utiliser le langage SQL, qui est de loin le plus utilisé aujourd'hui, au travers de l'interface EasyPHP qui offre un maximum de convivialité et qui est un produit Open Source. Exercice 02 : traduire en mode relationnel 2.5 La création d'une bd La première opération consiste à créer une base de données vide. Nous allons utiliser EasyPHP qui procure l'interface de phpmyadmin, version 2.6.1, qui tourne un serveur Apache et MySQL Cette version de MySQL ne reconnaît pas encore toutes les instructions SQL Ansi
16 Chapitre 3 : Présentation de l'interface Le menu déroulant permet de choisir la base sur laquelle on désire travailler. Les différentes tables de la base sont listées en dessous. Ce sont en fait des liens qui permettent d'y accéder directement. En suivant le lien "achats", on arrive à l'écran suivant : de haut en bas, on y trouve : 16
17 Indicateur de navigation : ici base "biblio", table "achats", onglet " structure" 9 onglets menant à différentes fonctions : afficher, (voir plus bas) description de la table composée de 3 attributs (3 champs) chaque attribut est défini selon son nom, son type, la fonction null. Les logos des actions signifient A/ modifier les caractéristiques de l'attribut B/ effacer l'attribut C/ créer une clé primaire sur l'attribut D/ créer un index sur l'attribut E/ crée un index unique F/ crée un index texte entier une commande d'ajout de champ et la possibilité de le positionner un résumé des clés associées aux champs et de l'espace utilisé une fenêtre d'exécution de requête SQL (sur la base courante) soit directement encodée ou issue d'un fichier existant (requêtes longues) 17
18 3.1 Les index Les index sont utilisés pour : * Trouver rapidement des lignes qui satisfont une clause WHERE. * Ecarter rapidement des lignes. S'il y a un choix à faire entre plusieurs index, MySQL utilise généralement celui qui retourne le plus petit nombre de lignes. * Lire des lignes dans d'autres tables lors des jointures. * Trouver les valeurs MAX() et MIN() pour une colonne indexée. * Trier ou grouper des lignes dans une table, si le tri ou le regroupement est fait avec un préfixe à gauche utilisable (par exemple, ORDER BY key_part_1,key_part_2 ). * Dans certains cas, la requête peut être optimisée pour lire des valeurs sans consulter le fichier de données. index "unique" Définit la colonne comme étant un identifiant unique. Permet d'avoir un index UNIQUE sur toute combinaison de colonnes de la table. Vous ne pourrez pas utiliser un index UNIQUE pour une recherche unique : une adresse pointe vers un enregistrement (ex : clé primaire) Index "fulltext" MySQL propose l'indexation et la recherche sur l'ensemble d'un champ "text" (full-text). Les index FULLTEXT peuvent être créés depuis des colonnes de types CHAR, VARCHAR, ou TEXT au moment de CREATE TABLE ou plus tard avec ALTER TABLE ou CREATE INDEX. La taille minimale des mots à indexer est de 4 caractères. Pour les enregistrements les plus grands, il sera plus rapide de charger les données dans une table qui n'a pas d'index FULLTEXT, et ensuite de créer l'index avec ALTER TABLE (ou CREATE INDEX ). L'enregistrement de données dans une table qui a déjà des index FULLTEXT sera plus lent. La recherche sur un texte en entier est effectuée par la fonction MATCH(). 18
19 3.2 l'onglet "Afficher" Structure et application des bases de données Cette page affiche essentiellement le contenu des enregistrements de la table. Chaque entrée peut être éditée, supprimée ou exportée (3 logos). En bas de page, on peut régler les paramètres d'affichage des entrées de la table, ensuite on trouve un lien pour insérer un nouvel enregistrement, un autre qui affiche une version imprimable, puis une version imprimable complète. Le dernier lien mène vers les paramètres d'exportation de la table. 3.3 l'onglet "SQL" 19
20 Offre une fenêtre d'encodage des requêtes SQL. Une requête minimaliste y est encodée, qui demande de montrer toutes les toutes les entrées de la rubrique achat. Après avoir cliqué le bouton "Exécuter", nous obtenons l'écran suivant : D'abord un rappel du code SQL demandé, Un réglage des paramètres d'affichage des entrées de la table Le contenu de la table, selon les paramètres définis l'onglet "Rechercher" 20
21 Comme son nom l'indique, permet d'effectuer des recherches dans les tables; on y trouve : Une liste des champs de la table qui seront affichés en fin de requête, il faut en choisir au moins un (ou plusieurs, ou tous) Un réglage du nombre de lignes qui seront affichées par page Un ordre d'affichage des champs Une zone d'encodage pour des requêtes SQL (critères de recherche) Une zone de recherche par valeur, par champ La requête encodée ci-dessus (afficher tous les enregistrements de la table dont la valeur est à "1" dans l'attribut IDclient) donne le résultat suivant : 3.4 l'onglet "Insérer" 21
22 Permet d'ajouter des enregistrements dans la table on peut choisir de faire des ajouts en boucle. Cliquer "Exécuter". Maintenant, la table "achat" compte 4 entrées 3.5 l'onglet "Exporter" Permet l'exportation de la base dans 5 formats. Pour chaque format, des options sont disponibles (qui varient selon le format choisi). Pour SQL, il est possible de choisir le mode de compatibilité notamment entre différentes versions de MySQL et Oracle. 22
23 3.6 l'onglet "Opérations" On peut y remettre la table en ordre (des champs), la renommer, la déplacer, la copier, y adjoindre des commentaires, changer le type et le set ISO de caractères. Le second menu permet de faire la maintenance de la table. Les types de tables MySQL fournit une base de données à géométrie variable, dont le moteur s'adapte aux besoins pour de meilleures performances. MySQL donne le choix entre plusieurs moteurs de base de données et permet de permuter facilement entre eux. Choisir son moteur Le nombre de moteurs de base de données disponibles dépend de la façon dont l'installation locale de MySQL a été compilée. Pour ajouter un nouveau moteur, MySQL doit être recompilé. 23
24 Par défaut, MySQL supporte 3 moteurs de base de données: ISAM, MyISAM et HEAP. La plupart du temps, 2 autres types, InnoDB et Berkley (BDB), sont également disponibles. ISAM Le moteur de tables originale était ISAM, qui gérait des tables non-transactionnelles. Ce moteur a été remplacé par le moteur MyISAM. Il est abandonné et ne doit plus être utilisé. Il sera supprimé en MySQL 5.0. Une transaction est un jeu de une ou plusieurs instructions qui sont exécutées ensembles de façon unitaire, donc toutes les instructions sont exécutées, ou aucune. Par exemple, la mise à jour de plusieurs tables, en cascade et automatiquement, dès qu'une valeur est modifiée dans une table MyISAM MyISAM est le format ISAM étendu de MySQL et son moteur de base de données par défaut. MyISAM utilise un mécanisme de verrouillage des tables pour optimiser plusieurs opérations de lecture et d'écriture simultanées. En échange, il faut exécuter la commande OPTIMIZE TABLE de temps en temps pour récupérer l'espace occupé inutilement par les algorithmes de mise à jour. MyISAM possède également quelques extensions utiles, comme l'utilitaire MyISAMChk pour réparer les fichiers de base de données et l'utilitaire MyISAMPack pour récupérer l'espace gaspillé. Il est focalisé sur les opérations de lecture rapide, principale raison qui explique la popularité de MySQL dans le développement web car la grande majorité des opérations effectuées sur les données sont des opérations de lecture. Par conséquent, la plupart des fournisseurs d'hébergement permettront d'utiliser le format MyISAM uniquement. HEAP HEAP prend en compte les tables temporaires qui résident uniquement en mémoire. Le maintien en mémoire rend HEAP plus rapide qu'isam ou MyISAM, mais les données qu'il gère sont volatiles et seront perdues si elles ne sont pas sauvegardées avant l'arrêt. De plus, HEAP ne gaspille pas autant d'espace lorsque des lignes sont supprimées. InnoDB et Berkley DB Les moteurs de base de données InnoDB et Berkley DB (BDB) sont des produits directs de la technologie qui rend MySQL si flexible, c'est-à-dire l'api MySQL++. Presque tous les obstacles à surmonter en utilisant MySQL découlent directement du fait que les moteurs de base de données ISAM et MyISAM ne sont pas transactionnels et ne supportent pas les clés étrangères. Bien qu'ils soient beaucoup plus lents que les moteurs ISAM et MyISAM, InnoDB et BDB incluent le support transactionnel et des clés étrangères qui font défaut aux deux autres. Utiliser les transactions pour préserver l'intégrité des données En plus de grouper les instructions ensembles pour être exécutées unitairement, les transactions peuvent aider à préserver l'intégrité des données dans une table. Par exemple, imaginons qu'un employé était supposé entrer les nouveaux prix du café dans la table CAFE, mais ne l'a pas fait depuis quelques jours. Pendant ce temps, les prix ont augmentés, et le propriétaire décide de mettre à jour les nouveaux prix dans la table. L'employé se décide finalement à entrer les prix n'étant plus à jour dans la base de données en même temps que le propriétaire met à jour la table. Après avoir inséré les prix non à jour, l'employé réalise qu'ils ne sont plus valides, et utilise la méthode rollback de l'objet Connexion afin d'annuler les effets de ses manipulations. (La méthode rollback met fin à une transaction et restaure les valeurs présentes avant qu'elles aient été mises à jour). Mais en même temps, le propriétaire exécute une instruction SELECT puis affiche les nouveaux prix. Dans cette situation, il est possible que les prix affichés par le propriétaire proviennent d'un rollback contenant les anciens prix, rendant l'affichage des prix incorrects. 24
25 Ce genre de situation peut être évité en utilisant les transactions. Si un SGBD supporte les transactions il fournira certains niveaux de protection contre les conflits qui peuvent survenir quand on accède à des données au même moment. Par exemple, un SGBD pourra verrouiller la ligne d'une table jusqu'à ce que les mises à jour aient été validées. La manière dont les verrous sont posés détermine le niveau d'isolation de la transaction, pouvant aller jusqu'à bloquer totalement les transactions. Quand appeler la méthode RollBack? Appeler la méthode rollback annule une transaction et remet les valeurs qui ont été modifiées à leurs valeurs originales. Si on essaye d'exécuter une ou plusieurs instructions dans une transaction et que on reçoit une SQLExeption, il faut utiliser la méthode rollback pour annuler la transaction et la recommencer depuis le début. C'est la seule façon d'être sur de ce qui a été pris en compte sur la base de données, et ce qui ne l'a pas été. Une SQLException indique que quelque chose ne fonctionne pas, mais elle n'indique pas ce qui à été pris en compte ou pas. Donc on ne peut pas compter sur le fait que rien n'a été mis à jour sur la BD, appeler la méthode rollback est la seule façon d'être sur. Les onglets "Vider" et "Supprimer" servent à vider la table de tous ses enregistrements mais en conservant sa structure et à la supprimer physiquement. Une alerte de confirmation est proposée dans les 2 cas. 25
26 Chapitre 4 : Création de la table La base d'exercice sera la db "biblio". Les "objets" de la base de données sont : les tables, pour stocker les données ; les requêtes, pour retrouver les données ; les formulaires, pour saisir les données ou les visualiser à l'écran ; les états, pour imprimer les données ; les macros, pour automatiser des opérations répétitives effectuées sur la base ; 4.1 La création d'une table A l'intérieur de la bd "biblio", je crée la table "livres". Cette table est composée de 7 champs, à savoir les 6 attributs choisis pour l'occurrence "livres" lors de l'analyse entités / association + le champ destiné à la clé. Ces champs peuvent avoir différents formats, à choisir selon le type de données à insérer : Ensuite, il faut créer les autres tables de la bd et créer les clefs primaires, toujours en se rapportant au schéma du mode relationnel. 26
27 4.2 Les types des attributs Les types des attributs peuvent être de types différents : Nombre entier (quantité commandée, âge) Nombre à virgule (prix) Chaîne de caractères (nom, adresse) Date et heure (date de naissance, heure de parution) Énumération (une couleur parmi une liste prédéfinie) Ensemble (une ou des monnaies parmi une liste prédéfinie) Il s agit de choisir le plus adapté. Ces types requièrent une plus ou moins grande quantité de données à stocker. Par exemple, ne pas choisir un LONGTEXT pour stocker un prénom mais plutôt un VACHAR(40) Les entiers nom borne inférieure borne supérieure TINYINT TINYINT UNSIGNED SMALLINT SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT* INT* UNSIGNED BIGINT BIGINT UNSIGNED (*) : INTEGER est un synonyme de INT UNSIGNED permet d avoir un type non signé ZEROFILL : remplissage des zéros non significatifs 27
28 4.2.2 Les flottants Structure et application des bases de données nom domaine négatif : borne inférieure borne supérieure FLOAT DOUBLE ou REAL E E E E-308 Domaine positif : borne inférieure borne supérieure E E E E Les chaînes nom CHAR(M) CHAR(M) BINARY VARCHAR(M) VARCHAR(M) BINARY TINYTEXT TEXT MEDIUMTEXT LONGTEXT DECIMAL(M,D) ou NUMERIC longueur Chaîne de taille fixée à M, où 1<M<255, complétée avec des espaces si nécessaire. Idem, mais insensible à la casse lors des tris et recherches. Chaîne de taille variable, de taille maximum M, où 1<M<255, complété avec des espaces si nécessaire. Idem, mais insensible à la casse lors des tris et recherches. Longueur maximale de 255 caractères. Longueur maximale de caractères. Longueur maximale de caractères. Longueur maximale de caractères. Simule un nombre flottant de D chiffres après la virgule et de M chiffres au maximum. Chaque chiffre ainsi que la virgule et le signe moins (pas le plus) occupe un caractère. Les types TINYTEXT, TEXT, MEDIUMTEXT et LONGTEXT peuvent être judicieusement remplacés respectivement par TINYBLOB, BLOB, MEDIUMBLOB et LONGBLOB. Ils ne diffèrent que par la sensibilité à la casse qui caractérise la famille des BLOB. Alors que la famille des TEXT sont insensibles à la casse lors des tris et recherches. Les BLOB peuvent être utilisés pour stocker des données binaires. Les VARCHAR, TEXT et BLOB sont de taille variable. Alors que les CHAR et DECIMAL sont de taille fixe. 28
29 4.2.4 Dates et heures nom description DATE Date au format anglophone AAAA-MM-JJ. DATETIME Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS. TIMESTAMP Affiche la date et l heure sans séparateur : AAAAMMJJHHMMSS. TIMESTAMP(M) Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers caractères de TIMESTAMP. TIME Heure au format HH:MM:SS. YEAR Année au format AAAA. nom description TIMESTAMP(2) AA TIMESTAMP(4) AAMM TIMESTAMP(6) AAMMJJ TIMESTAMP(8) AAAAMMJJ TIMESTAMP(10) AAMMJJHHMM TIMESTAMP(12) AAMMJJHHMMSS TIMESTAMP(14) AAAAMMJJHHMMSS Les formats DATETIME, DATE et TIMESTAMP DATETIME est utilisé pour indiquer la date et l'heure. MySQL affiche les valeurs DATETIME sous la forme 'YYYY-MM-DD HH:MM:SS'. Les limites en sont : ' :00:00' à ' :59:59'. DATE est utilisé pour indiquer la date, sans plus. MySQL affiche les valeurs DATE sous la forme 'YYYY-MM-DD' format. Les limites en sont ' ' à ' '. TIMESTAMP possède diverses propriétés, liées à la version de MySQL et au mode SQL utilisé par le serveur. Des valeurs hors limites dans les champs DATETIME, DATE ou TIMESTAMP seraient converties en ``zero'' (' :00:00', ' ', or ). 4.3 Les propriétés des champs Elles dépendent du type de données choisi, mais une propriété donnée peut exister pour des types de données différents. Exemple : la propriété "Taille du champ" apparaît pour les types de données "Texte", "Numérique"et "NuméroAuto". Taille du champ ; Format : définit la manière dont les informations s'affichent. Exemple : le format monétaire affiche deux chiffres après la virgule, puis un espace et le symbole de l'euro ; Masque de saisie : guide la saisie des données et exerce un contrôle. Exemple : un code postal est composé de 4 chiffres ; Légende : définit le nom de l'étiquette dans le formulaire associé à la table. Il est préférable d'implémenter cette propriété au niveau du formulaire lui-même ; 29
30 Valide si : condition de validité du champ. Exemple : une notation sur 20 doit être comprise entre 0 et 20 ; Message si erreur : ce message s'affiche si la condition de validité précédente n'est pas satisfaite ; Null interdit (Not Null) : le champ correspondant doit obligatoirement recevoir une valeur lors de la saisie d'un enregistrement ; dans ce cas, si malgré tout, aucune valeur n est fournie, la valeur par défaut si elle est déclarée à la création de la relation sera automatiquement affectée à cet attribut dans l enregistrement. Si aucune valeur par défaut n est déclarée : - la chaîne vide sera affectée à l attribut s il est de type chaîne de caractères - la valeur zéro 0 s il est de type nombre - la date nulle et/ou l heure nulle 00:00:00 s il est de type date, heure ou date et heure. Au contraire, on utilisera l option NULL si on autorise l absence de valeur. Chaîne vide autorisée : le champ peut contenir une chaîne ne comportant aucun caractère ; Indexé : un fichier index est associé au champ Compression unicode : un octet suffit pour saisir un caractère (pour les alphabets utilisés dans l'europe de l'ouest et dans le monde anglophone). Pour donner une valeur par défaut à un attribut, on utilise l option DEFAULT. Lors de l ajout d un enregistrement cette valeur par défaut sera affectée à l attribut si aucune autre valeur n est entrée. Elle s'affiche dans le champ avant la saisie par l'utilisateur. Exemple : téléphone DECIMAL(10,0) DEFAULT Les attributs de type chaîne de caractères de la famille TEXT et BLOB ne peuvent pas avoir de valeur par défaut. Attribut sans doublon : Pour interdire l apparition de doublon pour un attribut, on utilise l option UNIQUE. Syntaxe : UNIQUE [nomdelacontrainte](liste des attributs) Exemple, pour interdire tout doublon de l attribut nom : UNIQUE(nom) Pour interdire les doublons sur l attribut nom mais les interdire aussi sur prénom, tout en les laissant indépendants : UNIQUE(nom) UNIQUE( prénom ) nom Dupond Dupont Martin prénom Marc Pierre Marc enregistrement interdit car Marc est un doublon dans la colonne prénom Attribut sans doublon : Pour interdire tout doublon à un ensemble d attributs (tuple), on passe en paramètre à UNIQUE la liste des attributs concernés. Pour interdit tout doublon du couple (nom, prénom ) : 30
31 UNIQUE(nom, prénom ) nom Dupond Dupont Martin Martin Martin prénom Marc Pierre Marc Pierre Marc enregistrement interdit car le couple ( Martin, Marc ) est un doublon du couple (nom, prénom ) Un champ d'un enregistrement : possède la valeur Null si aucune information n'a été introduite, ou si l'information présente a été supprimée ; contient une chaîne vide si on a défini la valeur par défaut du champ à l'aide de deux guillemets contigus (""), et si aucune information n'a été introduite (ou si l'information introduite a été supprimée) ; contient une chaîne "blanche", si un ou plusieurs espaces ont été introduits et n'ont pas été supprimés. 4.4 Saisir les données 31
32 L'interface d'encodage des données présente un rappel du nom des champs, du type de données, du nombre de caractères admis, de la fonction et de l'hypothèse de valeur nulle. Après avoir rempli les champs, cliquer "exécuter" 9 livres ont été encodés dans la table "livres" 32
33 Chapitre 5 : Les index Structure et application des bases de données Lors de la recherche d informations dans une relation, MySQL parcours la table correspondante dans n importe quel ordre. Si il y a un grand nombre de lignes, cette recherche est très longue. Pour y remédier, une optimisation possible et recommandée, est d utiliser des index. La création d un index associé à un attribut ou à un ensemble ordonné d attributs va créer une liste ordonnée des valeurs de ces attributs et de l adresse de la ligne associée. C est sur les valeurs de cette liste que se feront les recherches et les tris. Les algorithmes de recherche et de tri sur des ensembles ordonnés sont beaucoup plus rapides. Un index offre toutefois l'inconvénient de ralentir les mises à jour (insertion, suppression, modification de clé). On choisira de créer des index sur les attributs qui seront les plus sollicités par les recherches ou utilisés comme critère de jointure. Par contre, on épargnera les attributs qui contiennent peu de valeurs différentes les unes des autres et ceux dont les valeurs sont très fréquemment modifiées. Un index peut porter sur 15 colonnes maximum. Une table peut posséder au maximum 16 index Un index peut avoir une taille maximale de 256 octets et ne doit porter que sur des attributs NOT NULL. Il faut suffixer l attribut (CHAR, VARCHAR) pour ne prendre que les M premiers caractères pour l indexation N Titre Auteur Éditeur Année ISBN etc. 1 Mon jardin J. Machin Eyrolles Access A. Chose Dunod Les écoles S. Truc Lattès etc. Un index est représenté par une table à une seule colonne. Dans le premier index (index sur le titre), le premier titre par ordre alphabétique correspond au livre n 2 (Access), suivi du livre n 3 (Les écoles) et du livre n 1 (Mon jardin). Les autres index s'interprètent de la même façon Index titre Index auteur Index éditeur Index année Index ISBN 5.1 Avantages : accélérer les recherches d'information, car l'index est une représentation de la table, triée sur un champ donné. On peut donc lui appliquer les méthodes de recherche rapide sur un ensemble ordonné (c'est le SGBD qui se charge de l'opération, transparente pour l'opérateur) ; 33
34 vu sa taille très inférieure à celle de la table : on peut le remettre à jour en temps réel à chaque modification de cette dernière ; empêcher la redondance de l'information. 5.2 Inconvénients : la création et la mise à jour d'un index devant être mis à jour immédiatement augmente la charge de travail, et par conséquent freine le système, surtout sur des bases de grande taille. un index occupe de la place sur le disque 5.3 L'index sur plusieurs champs Imaginons que nous ayons séparé le nom et le prénom dans le masque de saisie. Un index sur les deux champs nom et prénom correspond en fait à l'index créé sur un champ unique dans lequel seront concaténés le nom et le prénom. On appelle "doublon" une information qui apparaît au moins deux fois dans une table (erreur de saisie ou manipulation de l'information). La notion de doublons s'applique à une colonne donnée, ou à plusieurs colonnes, ou à la totalité des colonnes d'une même table. Dans ce dernier cas, nous avons affaire à deux enregistrements (ou plus) identiques. A B C 1 aa $ 2 bb % 3 cc + 1 dd - Doublon sur 1 colonne AB C 1 aa $ 2 bb % 3 cc + 1 aa - Doublon sur 2 colonnes AB C 1 aa $ 2 bb % 3 cc + 1 aa $ Enregistrement dupliqué Lorsque nous introduisons de l'information dans une table pourvue d'un index, le SGBD met ce dernier à jour en temps réel. Au cours de cette opération, il peut détecter facilement si cette nouvelle information constitue un doublon sur les champs concernés. Il est donc aisé de doter le SGBD d'une fonction permettant, si on le désire, d'empêcher la validation de la saisie d'un enregistrement constituant un doublon. 5.4 L'indexation d'un champ La "Propriété du champ" intitulée "Index" permet de gérer la redondance via l'indexation des données Non Oui - Avec doublons (en SQL, pas en MySQL) Oui - Sans doublons Pour créer un index sur le champ correspondant, il faut cliquer l'icône 'Index". La valeur "Non" est inscrite par défaut, aucun index n'est créé. 34
35 La valeur "Non" est préférable si : la table considérée contient peu d'enregistrements nous n'effectuons pas de recherche dans ce champ nous ne trions jamais la table sur ce champ il est normal que le champ contienne des doublons Si, par contre, la création d'un index présente de l'intérêt, il faut tolérer ou non les doublons si les doublons ne posent pas de problème (ex :homonymie),, choisir l'option "Avec doublons" dans le cas général, choisir l'option "Sans doublons", ce qui aura pour effet d'empêcher de créer des doublons par mégarde. Le système refusera de valider l'enregistrement fautif (lors du passage à la ligne suivante, ou lors de la fermeture de la table) Un champ doté d'une clé est toujours indexé sans doublons. Or, en MySQL, une table ne peut contenir qu'une seule clé, alors qu'elle peut être dotée de plusieurs index. Il faut donc réserver la clé pour la réalisation des relations, et ne pas l'utiliser comme index. Création d'un index multi-champs Dans une table contenant des données relatives à plusieurs milliers de personnes, le risque d'homonymie devient important. A fortiori dans une plus grande table, (annuaire téléphonique d'une ville). Pour accepter l'homonymie tout en rejetant les doublons dus à des erreurs de saisie, on utilise un index basé sur plusieurs champs. Si la probabilité de trouver 2 fois "Dupont" est importante, celle de trouver 2 fois "Dupont Jean" est déjà nettement plus faible, et celle de trouver 2 fois "Dupont Jean né le 12/06/1978" est pratiquement nulle. En créant un index sur 2 champs (Nom + Prénom) ou sur 3 champs (Nom + Prénom + Date de naissance), on peut rejeter les doublons dus à des erreurs de saisie tout en tolérant parfaitement l'homonymie. Pour créer un index multi champ, il faut se trouver en mode structure et remplir la zone de commande d'index ainsi (exemple pour 1 index sur 2 colonnes). La fenêtre suivante apparaît : y choisir les champs concernés dans les listes déroulantes et sauver. 35
36 Dans cet exemple, on crée un index composé des valeurs des attributs "code postal" et "localité". La zone de commande d'index devient : Le nom de l'index est cp, c'est-à-dire le nom du premier champ choisi, mais l'index représente bien la concaténation des contenus des 2 champs. 36
37 Chapitre 6 : Les formulaires 6.1 Interagir avec une base de données Le formulaire est souvent considéré comme le troisième objet des bases de données, par ordre d'importance décroissante, après la table et la requête. En fait, son importance réelle dépend de la manière dont on utilise le SGBD. Le formulaire est avant tout un outil de saisie d'information au clavier. A ce titre, il entre en concurrence avec : l'écriture directe dans les tables l'importation des données La facilité d'écriture directe dans les tables peut varier de très pratique à parfaitement impraticable suivant les cas. Un formulaire peut rendre la saisie de certaines informations plus facile, principalement dans les SGBD qui, au contraire d'access, n'affichent pas les sousfeuilles de données. Enfin, les formulaires permettent l'ajout de boutons, menus, etc. qui donnent à l'application un aspect très "fini". Si la base de données est principalement alimentée en données par importation, le formulaire ne sert alors plus à rien. C'est le cas de bases alimentées seulement par une personne ressource et qui utilise seulement l outil d importation directe, nettement plus performant. C'est aussi le cas des sites web qui déversent quotidiennement leur fichier journal dans la BDD qui sert au suivi du site et à la mesure d'audience. C'est encore le cas de tous ceux qui font de l'acquisition de données via des capteurs couplés à des ordinateurs, etc. Accessoirement, le formulaire sert aussi d'outil de visualisation, c'est à dire de consultation du contenu de la base à l'écran. On reproche parfois au formulaire de montrer les enregistrements un par un, alors qu'une table en montre un grand nombre à la fois, mais on peut concevoir le formulaire de telle sorte que sa présentation soit très proche de celle d'une table. En bref : lorsque la BDD est utilisée par des personnes très diverses sans expérience particulière en matière de SGBD, ou lorsque l'accès aux tables est interdit aux utilisateurs, ou lorsque la saisie directe dans les tables est malaisée, les formulaires constituent un passage obligé ; lorsque la BDD est utilisée par un petit groupe de professionnels formés à l'usage des SGBD, ou lorsque les données sont importées au lieu d'être saisies, les formulaires constituent un simple habillage de la BDD et n'ont guère d'utilité. 6.2 Création d'un formulaire simple Un formulaire est avant tout un outil permettant de saisir au clavier des données qui sont immédiatement introduites dans une ou plusieurs tables. Le formulaire est donc lié à une ou à plusieurs tables, et il hérite de leurs propriétés : types de données, propriétés des champs, listes de choix et protection contre les doublons via un index. A l'inverse, les propriétés du formulaire ne rejaillissent pas sur les tables sous-jacentes. Il arrive enfin que l'on puisse attribuer à un champ de formulaire une propriété qui modifie ou contredit celle du champ correspondant de la table. 37
38 Evidemment, la méthode de création des formulaires va varier en fonction du SGDB utilisé. Des applications comme Access ou FMPro présentant des fonctions de création de formulaires très élaborées tout en étant très facile à utiliser. MySQL, pour sa part, n offre rien et demande un langage tiers (comme PHP) pour générer des interfaces d encodage ou de visualisation des résultats. C est la raison pour laquelle nous allons l exploiter sous PHPMyAdmin (inclus dans EasyPHP) et sous Navicat qui présentent les interfaces graphiques nécessaires. EasyPHp - Navicat - PHPMyAdmin sous EasyPHP L interface de PHPMyAdmin propose automatiquement des formulaires d encodage complets (qui comprennent tous les champs d une table) de ce genre : 38
39 L interface de PHPMyAdmin est personnalisable via des layouts variés (divers couleurs, polices de caractères, spatialisation MAIS PAS de variation structurelle), disponibles sur : ou L accès à un nouvel enregistrement s obtient via le lien «Insérer» du menu table. Les valeurs du nouvel enregistrement se notent dans les cases «valeur». Ensuite, il est possible de choisir entre : 39
40 Navicat Navicat Lite est un client open source qui permet d effectuer sur des bases en MySQL des opérations comparables à ce que fait PHPMyAdmin. La fenêtre principale offre une vue des différentes bases présentes sur la machine Les différents types d objets peuvent être affichés séparément. L interface permet de sauver, appeler, exécuter et commencer. Voici ci-dessous la table «Cours» avec ses 4 arguments. Notez les boutons qui permettent de faire directement des opérations de tri ascendant ou descendant. 40
41 Voici une requête simple sur la table «classe» et son résultat 41
42 et le même sur PHPMyAdmin nettement plus spartiate. 6.3 Composition et ergonomie des formulaires Outre la base en elle-même, l utilisation d une BD implique la mise en œuvre d interfaces d encodage, de recherche et d affichage des résultats. La mise en place pratique de ces interfaces se réalise généralement à l aide de formulaires. Le respect de règles d ergonomie particulières à ces environnements ainsi qu un bon design de ces interfaces sont nécessaires pour une utilisation optimale. Même si les possibilités offertes autour de MySQL sont assez limitées, une interface web par exemple permet des les optimiser beaucoup. Dans un même ordre d idées, d autres SGDB vont présenter d excellentes possibilités de mise en page. Cet aspect n est dons pas à néglifger. Accessibilité physique Concerne la facilité d'accès d'une interface au niveau sensoriel : visuel, auditif, mais aussi tactile (notamment pour l'interface d'entrée de données : clavier, souris). Une interface doit être accessible par tous les utilisateurs, quelles que soient leurs caractéristiques et leurs moyens d'accès à l'information. Accessibilité technologique Concerne surtout le domaine du web. Il s'agit que l'application soit visible et utilisable sur un maximum de plateformes (ensemble constitué par le système d'exploitation, le navigateur, la résolution d'écran et les éventuels plug-in). 42
43 Design de la base Sans revenir sur la technique de création des bases de données, il faut se souvenir qu une interaction efficace avec une BD ne sera possible que si celle-ci possède un design technique réussi. Par design réussi, on entend que les choix suivants ont été faits judicieusement : nom de la base noms des tables noms des champs types de champs taille des champs placement des clés placement des index placement des propriétés (nul interdit, pas de doublon) Design des formulaires Encodage, recherche ou présentation des résultats, si le dialogue avec une base de données passe par des formulaires à l écran, il faut en soigner l aspect. 43
44 6.3.1 Le choix et la spécification des éléments de formulaire La première étape de conception d'un formulaire consiste à déterminer son utilité et les informations qu'il doit transmettre. Après avoir décidé des informations à recueillir via le formulaire, il faut trouver la manière optimale de les demander à l'utilisateur. Un formulaire se décompose en différents éléments de formulaire. Les caractéristiques de chaque élément permettent de récupérer des types d'informations particuliers. En outre, il faut apporter un soin certain à la rédaction des textes d accompagnement des formulaires, de manière à éviter toute confusion lors de l encodage ou de la lecture des résultats. La ligne L'élément "Ligne" permet d'obtenir un champ de formulaire d'une seule ligne. Les paramètres qui peuvent être spécifiés sont la longueur de la ligne et les données qui peuvent y être entrées. Exemple : les deux champs lignes " " et "ISBN" n'ont pas la même taille du fait de la différence des informations attendues. Si le formulaire est généré par le SGDB, la longueur du champ sera automatiquement déterminée. S il est composé de manière extérieure (PHP, ), il y a lieu de paramétrer sa longueur lors de sa création. Cette remarque s applique également aux points ci-dessous. Le champ texte L'élément "Champ texte" permet d'obtenir un champ de formulaire d'une ou plusieurs lignes. Les paramètres qui peuvent être spécifiés sont le nombre de lignes, la longueur de la ligne et les données qui peuvent y être entrées. Le bouton radio L'élément "Bouton radio" correspond à un élément de formulaire permettant une sélection unique. Les boutons radio sont une série de boutons exclusifs (caractère binaire), fonctionnant sur le mode "On - Off". Ils permettent de présenter des réponses alternatives à une question: 44
45 Avantage : toutes les options sont visibles sans nécessiter d'action de la part de l'utilisateur (contrairement à une liste déroulante par exemple). Désavantage : prend beaucoup de place à l'écran et peut compliquer la lecture du formulaire. Les boutons radio sont des éléments qui ne peuvent fonctionner qu'en groupe (au moins 2). Il ne peut donc pas exister d'interface avec un seul bouton radio. Le bouton radio doit être placé par défaut sur l'option la plus fréquemment choisie, ou que l'on suppose la plus appropriée en fonction d'une analyse de la tâche. S'il n'existe aucune option préférentielle, les boutons radio peuvent être laissés décochés. Cependant, cela oblige l'utilisateur à accomplir une action de sélection quelque soit la situation. La case à cocher L'élément "Case à cocher" permet d'obtenir une liste d'options au sein de laquelle la sélection multiple est possible. La case à cocher est aussi employée pour des choix binaires (cocher / décocher la case active ou désactive une fonction). Les cases à cocher peuvent être présentées seules ou en groupe. Lorsqu'elles fonctionnent en groupe, les choix qu'elles proposent sont non-exclusifs. Les cases à cocher comme les boutons radio fonctionnent sur le mode "On - Off" (on coche ou on décoche la case). Les avantages de la case à cocher sont identiques à ceux des boutons radio. Le menu déroulant L'élément "Menu déroulant" permet d'obtenir une liste d'options avec un libellé visible (soit l'intitulé du champ, soit la première option de la liste, soit une option sélectionnée par défaut). Ce type d'élément d'interface permet de proposer un grand nombre d'options sans prendre beaucoup de place à l'écran. L'utilisateur ne peut faire que des choix uniques. La liste L'élément "Liste" permet d'obtenir une liste d'options avec la liste des premières options visible à l'écran (en fonction de la longueur visible de la liste à l'écran). L'utilisateur peut en général effectuer des choix multiples, sauf si le concepteur a spécifié l'inverse. 45
46 La double liste L'élément "Double liste" permet d'obtenir deux listes d'options avec possibilité de passage d'éléments d'une liste à une autre Présentation générale du formulaire La conception d'un formulaire doit avoir pour objectif de permettre aux utilisateurs une utilisation rapide et efficace. Le type de présentation que l'on choisit doit être adapté aux caractéristiques de l'utilisateur et de la tâche : connaissance de l'outil informatique, des formulaires, la rapidité d'exécution estelle capitale, etc. Un formulaire peut être présenté sur une seule page, ou découpé en plusieurs pages : on guide l'utilisateur à travers plusieurs étapes successives, jusqu'à ce qu'il ait renseigné toutes les 46
47 informations utiles. Structure et application des bases de données Wizard» Avantages : - Simplicité de chacune des pages : puisque le formulaire est découpé en plusieurs parties, on ne présente à l'utilisateur qu'une partie des informations sur chaque page - permet de réduire la complexité. - Gestion des erreurs simplifiée : lorsque l'utilisateur renseigne mal une des pages (oubli d'informations obligatoires ou mauvais format de réponse), on lui affiche un message et on l'aide à corriger ses erreurs. Ce type d'informations est beaucoup plus "digestible" lorsque la page est de taille réduite que lorsque l'on a affaire à un long formulaire. - Gestion des dépendances entre champs : si la présence de certains champs ou leurs valeurs par défaut dépendent de champs précédents, il est plus facile de le gérer lorsque le formulaire est divisé en plusieurs étapes. Cela permet à l'utilisateur de ne pas se poser de questions sur ce qu'il a déjà renseigné pour pouvoir renseigner les champs suivants.» Défauts : - Lenteur d'exécution de la tâche : chaque étape demande à être validée avant de pouvoir passer à la suivante. De plus, la validation des champs doit se faire à chaque étape, alors 47
48 que dans un formulaire unique l'utilisateur peut corriger toutes ses erreurs dans la même session de travail, sans recharger la page. - Difficulté à juger de la durée de renseignement : l'utilisateur qui remplit la première page d'un wizard n'a pas a priori d'informations sur sa longueur totale. La parade consiste à fournir des numéros de page accompagnés du nombre total de pages composant le formulaire. Page unique» Avantages : - Rapidité d'exécution de la tâche. Le passage d'un champ au suivant peut toujours se faire au clavier et très rapidement, sans rechargement de la page.» Défauts : - Complexité de la page : puisqu'on doit demander toutes les informations sur la même page, on a nécessairement une interface qui visuellement est plus chargée que dans un wizard. - Gestion des dépendances entre champs : lorsque la présence de certains champs ou leurs valeurs par défaut dépendent de champs précédents, un formulaire unique n'est pas la solution la plus adaptée. Elle nécessite des actions du système ou de l'utilisateur: - Actions du système : le formulaire se recharge ou s'actualise en fonction des données entrées - Actions de l'utilisateur : l'utilisateur doit faire une sélection mentale des champs qui s'appliquent à sa situation Groupement et ordonnancement des champs Un travail très important lors de la conception d'un formulaire consiste à rendre l'interface claire et lisible. Cette tâche comprend notamment des actions de groupement et d'ordonnancement des champs. Il s'agit de choisir quels champs "vont ensemble", et dans quel ordre on affiche ces champs et les groupes de champs. On devra donner à chacun des groupes de champs un titre. On recommande en général dans la conception des formulaires de se baser sur les habitudes des utilisateurs du monde réel et ensuite adapter la conception du formulaire en fonction de l'objectif visé. Les groupes d items doivent être conçus en fonction des caractéristiques de la tâche : les champs doivent être regroupés dans des catégories basées sur la nature sémantique des éléments. En fonction des choix du concepteur, les groupes seront conçus: - selon la séquence d utilisation logique - selon la fréquence d utilisation - et / ou selon l importance relative 48
49 Les champs dont la probabilité de remplissage est moindre, qui sont optionnels, pourront être groupés dans une catégorie finale du dialogue, si cette règle ne contredit pas une autre règle de groupement plus importante (exemple : la séquence d'utilisation logique). Alignement des champs et des libellés Pour optimiser l'organisation visuelle d'un formulaire, on doit aussi se préoccuper des rapports libellés / champs. Il s'agit de jouer sur l'alignement pour que l'apparence du formulaire aide la lecture. En règle générale, il est appréciable que tous les champs soient alignés. On essaie plutôt de jouer sur l'alignement des libellés aux champs. Ceci permet que l'organisation visuelle du formulaire conserve une certaine cohérence et soit plus facile à appréhender. Alignement à gauche Les libellés sont dits alignés à gauche lorsque qu'ils débutent tous au même endroit sur un repère horizontal. On recommande d'aligner les libellés à gauche lorsque le nombre de caractères séparant le libellé le plus long de celui le plus court est faible. Ceci facilite en effet la lecture. Alignement à droite 49
50 Exemple : les libellés de ce formulaire sont alignés à droite. Cela permet de conserver une distance libellé - champ raisonnable malgré la longueur du libellé "Nombre de joueurs". Libellé dans l'élément de formulaire On peut placer le libellé dans le champ de formulaire afin de gagner de l'espace à l'écran Champs obligatoires versus champs optionnels La lisibilité d'un formulaire passe aussi par une détection rapide de ce qui est "obligatoire" et de ce qui ne l'est pas. Il est donc essentiel de penser à spécifier les champs obligatoires. Les champs obligatoires doivent être légendés. On utilise en général à côté du libellé du champ un élément coloré signifiant le caractère obligatoire (astérisque, point ou autre élément graphique). La légende de cet élément doit être placée avant ou après le formulaire. Il est plus adapté de la placer avant le formulaire, afin de respecter la logique de lecture de haut en bas. La légende peut être une phrase du type "Les informations marquées d'un * doivent être remplies / sont obligatoires", "* indique un champ obligatoire", etc Rapidité d'exécution La question de la rapidité d'exécution est une préoccupation valable sur la plupart des formulaires. Il s'agit que l'utilisateur puisse remplir le formulaire le plus rapidement possible, sans toutefois être induit en erreur. Il existe plusieurs manières de limiter le temps de remplissage d'un formulaire: Pré-sélection d'options Exemple : en fournissant des valeurs par défaut: On a spécifié pour chacun des champs une option par défaut, celle choisie la plus 50
51 fréquemment. Cette pratique ne doit être appliquée que lorsque ce choix par défaut est prédominant, au moins pour 75% des utilisateurs. Faciliter la sélection des options les plus fréquentes Exemple : Pour faciliter la sélection des options les plus fréquentes, on peut découper les listes (par exemple les options d'un menu déroulant) en sous-groupes, en affichant dans le premier groupe les options les plus fréquentes. Faciliter le passage d'un champ à un autre Exemple : On peut faciliter le passage au champ suivant en fournissant des raccourcis clavier. L'utilisation du clavier peut aussi permettre d'optimiser la sélection d'options (dans un menu déroulant par exemple).!! pour utilisateurs experts On peut aussi prévoir d insérer le pointeur dans le premier champ dès l ouverture du formulaire. Faciliter la vérification des données entrées Exemple : La longueur d'un champ (ligne ou texte) est un moyen de faciliter l'interaction des utilisateurs avec le formulaire, en limitant les actions à accomplir avec le clavier et la souris pour vérifier la validité des données entrées. En effet, lorsqu'un champ ligne est trop petit, les utilisateurs ne peuvent voir simultanément l'ensemble des données qu'ils ont renseignées. Exemple : la longueur de ce champ est trop réduite pour que les utilisateurs puissent vérifier d'un seul coup d'œil s ils ont bien renseigné leur adresse Protection contre les erreurs La gestion des erreurs dans un formulaire commence d'abord par ce que l'on appelle la protection contre les erreurs. Il s'agit de tout mettre en œuvre pour ne pas induire l'utilisateur en erreur, et pour limiter les erreurs qu'il pourrait commettre. La conception du formulaire est donc déjà un moyen de limiter en amont les erreurs potentielles. Mieux le formulaire est conçu, moins les utilisateurs risquent de commettre des erreurs. Plus on fournit d'éléments de sélection (liste, menu déroulant, case à cocher, bouton radio), plus on diminue le risque d'erreur. En effet, les éléments de formulaire qui présentent le plus de risque sont ceux qui acceptent la saisie de la part de l'utilisateur (champs ligne ou texte). On doit donc prévoir les erreurs classiques. On peut par exemple, prévoir le fait que les utilisateurs attendant patiemment l'envoi du formulaire cliquent plusieurs fois sur le bouton de validation afin d'être certain que le formulaire 51
52 soit envoyé. Si l'envoi du formulaire est long, on doit afficher une barre de progression. De plus, le système doit fournir un moyen de corriger le double envoi. On doit aussi limiter le risque de confusion entre un bouton "Annuler" et un bouton "Envoyer" en ne fournissant qu'un bouton à la fin du formulaire, celui de validation. La légende des champs (par exemple indiquer que le mot de passe doit comprendre 6 caractères au minimum) permet d'indiquer à l'utilisateur les pièges potentiels du formulaire. Dans l'exemple précédent, la légende évite à l'utilisateur d'être contraint à passer par une étape supplémentaire s'il avait en tête un mot de passe inférieur à 6 caractères. Protéger l'utilisateur contre les erreurs, c'est aussi lui donner la possibilité de confirmer les actions importantes (par exemple la validation finale d'une commande en ligne). Cela peut consister à récapituler les détails de ce que l'utilisateur va confirmer, et indiquer que le bouton de validation correspond à la validation finale, qu'il n'y a pas de possibilité de retour en arrière. La spécification des paramètres des éléments de formulaires peut aussi permettre d'optimiser la protection contre les erreurs. Les valeurs des paramètres (exemple : taille visible du champ, nombre de caractères maximum) doivent être adaptées au type de données afin de faciliter le renseignement du formulaire par les utilisateurs. La taille affichée d'un champ donne un indice aux utilisateurs sur quel type de donnée est attendu. Elle peut donc leur permettre d'aller plus rapidement dans la détection que l'information qu'ils pensaient renseigner n'est pas celle attendue, ou n'a pas le format attendu. Par exemple, une saisie de dates présentée sous forme de trois champs différents (adaptés au format de données attendu) peut faire comprendre rapidement à l'utilisateur que le format de l'année attendu est sous forme de 4 chiffres, et non de 2. On évite ainsi qu'il commette une erreur et soit obligé de la corriger. Enfin, la validation du type de données renseigné (caractère texte, chiffre, caractère spécial, etc.) peut permettre de détecter une erreur non remarquée par l'utilisateur, et évite que les données envoyées soient erronées. 52
53 Chapitre 7 : Le langage MySQL et ses fonctions 7.1 Introduction à SQL SQL est un langage (Data Definition Language) destiné à créer, manipuler, modifier et interroger les bases de données. Il a remplacé les anciens langages tels que DRC (Domain relational Calculer) ou TRC (Tuple relational calculer). Sa mission est de diminuer la complexité. SQL utilise un vocabulaire différent du mode relationnel : Mode relationnel Relation Tuple (instance) Attribut SQL table row, rang, ligne ou enregistrement colonne SQL n'est pas un bon langage (manque d'expressivité : on peut faire la même requête via différentes syntaxes MAIS avec des performances très variées), mais il est standardisé et est le plus répandu. En outre, ses limites sont floues; peut-on faire telle requête ou pas? 7.2 MySQL MySQL est une version libre de droits de SQL mais qui n'en comporte pas toutes les possibilités. Certaines instructions SQL ne sont pas comprises par MySQL. La version 5 de MySQL devrait combler une partie de cette différence. 7.3 Les fonctions MySQL Ces fonctions sont à ajouter aux requêtes dans un SELECT, WHERE, GROUP BY ou encore HAVING. Nous avons à notre disposition : les parenthèses ( ), les opérateurs arithmétiques (+, -, *, /, %), les opérateurs binaires (<, <<, >, >>,, &), les opérateurs logiques qui retournent 0 (faux) ou 1 (vrai) (AND, OR, NOT, BETWEEN, IN), les opérateurs relationnels (<, <=, =, >, >=, <>). Les opérateurs et les fonctions peuvent êtres composés entre eux pour donner des expressions très complexes. Les opérateurs ne sont pas case-sensitive On ne peut pas abréger les mots clé Les requêtes peuvent s'écrire sur une ou plusieurs lignes Les clauses sont habituellement écrites sur des lignes séparées (select, from, ) Les retraits augmentent la lisibilité 53
54 Quelques exemples : SELECT nom FROM produits WHERE prix <= Liste du nom des produits dont le prix est inférieur ou égal à EUR. SELECT nom,prénom Liste des noms et prénoms des élèves FROM élèves dont l âge est compris entre 12 et 16 ans. WHERE age BETWEEN 12 AND 16 SELECT modèle FROM voitures WHERE couleur IN ( rouge, blanc, noir ) Liste des modèles de voiture dont la couleur est dans la liste : rouge, blanc ou noir. SELECT modèle FROM voitures WHERE couleur NOT IN ( rose, violet ) Liste des modèles de voiture dont la couleur n est pas dans la liste : rose ou violet. Fonction de comparaison : Le mot clé LIKE permet de comparer deux chaînes. Le caractère % signifie : 0 ou plusieurs caractères. Le caractère _ signifie : 1 seul caractère, n importe lequel. L exemple suivant permet de rechercher tous les clients dont le prénom commence par Jean, cela peut être Jean-Pierre, etc : SELECT nom FROM clients WHERE prénom LIKE Jean% Pour utiliser les caractères spéciaux en leur enlevant leur fonction spéciale, il faut les faire précéder de l antislash : \. Exemple, pour lister les produit dont le code commence par la chaîne _XE : SELECT * FROM produit WHERE code LIKE \_XE% Fonctions mathématiques : Fonction Description ABS(x) Valeur absolue de X. SIGN(x) Signe de X, retourne -1, 0 ou 1. FLOOR(x) CEILING(x) ROUND(x) Arrondi à l entier inférieur. Arrondi à l entier supérieur. Arrondi à l entier le plus proche. 54
55 EXP(x), LOG(x), SIN(x), Fonctions de maths de base COS(x), TAN(x), PI() POW(x,y) Retourne X à la puissance Y. RAND(), RAND(x) Retourne un nombre aléatoire entre 0 et 1.0 Si x est spécifié, entre 0 et X TRUNCATE(x,y) Tronque le nombre X à la Yème décimale. Fonctions de chaîne Fonction TRIM(x) LOWER(x) UPPER(x) LONGUEUR(x) LOCATE(x,y) CONCAT(x,y, ) SUBSTRING(s,i,n) SOUNDEX(x) Description Supprime les espaces de début et de fin de chaîne. Converti en minuscules. Converti en majuscules. Retourne la taille de la chaîne. Retourne la position de la dernière occurrence de x dans y. Retourne 0 si x n est pas trouvé dans y. Concatène ses arguments. Retourne les n derniers caractères de s en commençant à partir de la position i. Retourne une représentation phonétique de x. SELECT UPPER(nom) FROM clients WHERE SOUNDEX(nom) = SOUNDEX( Dupond ) On affiche en majuscules le nom de tous les clients dont le nom ressemble à Dupond. Fonctions de date et heure : Fonction NOW() TO_DAYS(x) DAYOFWEEK(x) DAYOFMONTH(x) DAYOFYEAR(x) SECOND(x), MINUTE(x), HOUR(x), MONTH(x), YEAR(x), WEEK(x) Description Retourne la date et heure du jour. Conversion de la date X en nombre de jours depuis le 1er janvier Retourne le jour de la semaine de la date x sous la forme d un index qui commence à 1 (1=dimanche, 2=lundi ) Retourne le jour du mois (entre 1 et 31). Retourne le jour de l année (entre 1 et 366). Retournent respectivement les secondes, minutes, heures, mois, année et semaine de la date. 55
56 SELECT titre FROM article WHERE (TO_DAYS(NOW()) TO_DAYS(parution)) < 30 Cet exemple affiche le titre des articles parus il y a moins de 30 jours. Fonction COUNT([DISTINCT]x,y, ) MIN(x), MAX(x), AVG(x), SUM(x) SELECT DISTINCT model FROM voiture GROUP BY model HAVING COUNT(couleur) > 10 Description Décompte des tuples du résultat par projection sur le ou les attributs spécifiés (ou tous avec * ). L option DISTINCT élimine les doublons. Calculent respectivement le minimum, le maximum, la moyenne et la somme des valeurs de l attribut X. Ici on affiche le palmarès des models de voitures qui proposent un choix de plus de 10 couleurs. SELECT COUNT(*) FROM client Affichage de tous les clients. SELECT DISTINCT produit.nom, SUM(vente.qt * produit.prix) AS total FROM produit, vente WHERE produit.id = vente.produit_idx GROUP BY produit.nom ORDER BY total Classement des produits par la valeur totale vendue Data retrieval La commande SELECT détermine les colonnes cibles issues de tables cibles Sélection basique : SELECT * FROM clients Va afficher toutes les données (le *) de la table "clients" Sélection multiple SELECT `nom`,`cp` FROM `clients` Les guillemets ne sont pas obligatoires 56
57 Va afficher le nom et le code postal de tous les clients Faire un alias sur une colonne SELECT titre, adresse as ma_ville FROM clients Va afficher le titre et l'adresse de tous les clients mais la colonne "adresse" sera renommée "ma_ville". Faire plusieurs alias SELECT nom as "Qui je suis?", adresse as "Sweet home" FROM clients Il est nécessaire de mettre entre "" les expressions où l'on veut faire apparaître des espaces ou des blancs. Opérateur arithmétique SELECT titre, prix, (prix/100)*121 AS TVAC FROM livres Affiche le titre et le prix tvac des livres de la table "livres" en partant du prix de base htva 57
58 + addition - soustraction * multiplication / division Opérateur de distinction SELECT DISTINCT editeur FROM livres Distinct est une expression non paramétrable qui affiche toutes les occurrences d'une colonne, en supprimant donc les redondances. Introduction de la notion de condition sur les commandes avec WHERE SELECT titre, auteur_p, an_parution FROM livres WHERE an_parution=1991; 58
59 Affiche les champs titre, auteur et année de parution de tous les livres parus en 1991 SELECT titre, auteur_p, an_parution FROM livres WHERE an_parution>=1996; Affiche les champs titre, auteur et année de parution de tous les livres parus en 1996 ou après SELECT titre, auteur_p, an_parution FROM livres WHERE an_parution BETWEEN 1995 AND 1998; Affiche les champs titre, auteur et année de parution de tous les livres parus entre 1995 et 1998 SELECT titre, auteur_p, an_parution FROM livres WHERE an_parution IN (1991, 1993); Affiche les champs titre, auteur et année de parution de tous les livres parus en 1991 et en
60 SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE 'FAO'; Affiche les champs titre, auteur et éditeur de tous les livres dont l'éditeur est FAO SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE '%FAO'; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur contient "quelque chose + FAO" SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE 'E%'; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur commence par un "E". SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE '%e_'; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur se termine par un "e" suivi d'un autre caractère. % quelque chose _ un caractère 60
61 SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE '%e_' AND an_parution >= 2000; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur se termine par un "e" suivi d'un autre caractère ET dont l'année de parution est égale ou supérieure à Les conditions sont cumulatives, il faut que les deux critères soient rencontrés. Opérateur logique.. SELECT titre, auteur_p, editeur FROM livres WHERE editeur LIKE '%e_' OR an_parution >= 2000; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur se termine par un "e" suivi d'un autre caractère OU dont l'année de parution est égale ou supérieure à Les conditions ne sont plus cumulatives, il suffit que l'un des deux critères soit rencontré. Opérateur logique. SELECT titre, auteur_p, editeur FROM livres WHERE editeur NOT LIKE '%e_'; Affiche les champs titre, auteur et éditeur de tous les livres dont le champ éditeur ne se termine pas par un "e" suivi d'un autre caractère. Opérateur logique. 61
62 SELECT titre, auteur_p, editeur FROM livres ORDER BY auteur_p ASC; Affiche les champs titre, auteur et éditeur de tous les livres, classés par ordre alphabétique ascendant des noms d'auteurs (DESC provoque un ordre descendant). SELECT titre, auteur_p, editeur FROM livres ORDER BY editeur DESC, auteur_p ASC; Tri sur colonnes multiples. Affiche les champs titre, auteur et éditeur de tous les livres, classés par ordre alphabétique descendant des éditeurs et, si plusieurs livres ont le même éditeur, par ordre ascendant des auteurs. 62
63 . SELECT titre, auteur_p, editeur, an_parution, Prix FROM livres WHERE Prix > ANY ( SELECT Prix FROM livres WHERE an_parution=1993) AND an_parution=1993 Affiche les champs titre, auteur, éditeur, année de parution et prix du livre le plus cher de SELECT POSITION('i' IN 'La truite biologie et écologie') Cette fonction rend la position du premier caractère demandé (ici, un "i", à la 7è position le blanc compte pour 1) dans la chaîne proposée entre ''. Si le caractère n'existe pas, la réponse sera 0. Si la chaîne de recherche est vide (''), la réponse sera 1. 63
64 Chaînes de caractères Structure et application des bases de données Length rend le nombre de caractères ou d'octets. SELECT CHAR_LENGTH('La truite biologie et écologie') Cette fonction compte le nombre de caractères présents dans la chaîne proposée. Les blancs comptent pour 1 caractère. SELECT OCTET_LENGTH('La truite biologie et ecologie') Cette fonction compte le nombre d'octets nécessaires pour stocker la chaîne proposée. Les blancs comptent pour 1 caractère. Vu qu'un caractère = 1 octet, la réponse est logiquement la même, 30. Attention : SELECT OCTET_LENGTH('La truite biologie et écologie') rendra la valeur de 31 octets, vu le codage de l'accent. Fonctions numériques SELECT ABS('-10') Retourne la valeur absolue d'une expression SELECT MOD(27, 4) Retourne le modulo 4 sur 27 (modulo : reste de la division en nombre entier) 64
65 Fonctions string (chaîne de caractères) SELECT SUBSTRING('Australie' FROM 2 FOR 3) Retourne 3 caractères de 'Australie' à partir du 2è. SELECT SUBSTRING(editeur FROM 1 FOR 3) FROM livres Retourne les 3 premières lettres des entrées de la colonne 'Editeur' de la table achats. SELECT UPPER('Australie') Retourne 'Australie' tout en majuscules 65
66 SELECT LOWER('Australie') Retourne 'Australie' tout en minuscules SELECT LOWER(editeur) FROM livres Retourne le contenu de la colonne 'Editeur' tout en minuscule (peut aussi être en majuscules UPPER) Fonctions date et heure SELECT CURRENT_DATE retourne la date du jour SELECT CURRENT_TIME retourne l'heure courante SELECT CURRENT_TIMESTAMP (1) ou SELECT LOCALTIME (2) ou SELECT LOCALTIMESTAMP (2) retourne la date du jour et l'heure courante 66
67 Fonctions d'agrégation SELECT COUNT( DISTINCT titre ) FROM livres Retourne le nombre de lignes de la colonne : DISTINCT : qui contiennent des valeurs non nulles sans doublon (un champ blanc est une valeur nulle) ALL : qui contiennent des valeurs non nulles (par défaut accepte les doublons) * : toutes les lignes, même les champs nuls SELECT COUNT(* ) FROM livres MAX et MIN Retourne la valeur la plus élevée (ou la plus basse) dans une colonne spécifiée SELECT MAX( prix ) FROM livres Retourne le prix le plus élevé de la table livres SELECT MIN( prix ) FROM livres Retourne le prix le plus bas de la table livres SELECT MIN( prix + 10 ) FROM livres Retourne le prix le plus bas de la table livres augmenté de 10 SELECT MIN( prix * 1.21 ) FROM livres 67
68 Retourne le prix le plus bas de la table livres TVA comprise SELECT ( prix * 1.21 ) FROM livres Retourne le prix de toutes les entrées de la table livres TVA comprise SELECT titre, prix, ( prix * 1.21 ) AS TVAC FROM livres Retourne le titre et le prix de toutes les entrées de la table livres hors TVA et TVA comprise SELECT MAX( CHAR_LENGTH(titre) ) FROM livres Retourne le titre le plus long de la table livres 68
69 SELECT MIN( CHAR_LENGTH(titre) ) FROM livres Retourne le titre le plus court de la table livres SUM Retourne la somme des valeurs d'une colonne spécifiée SELECT SUM( prix ) FROM livres Retourne la somme des prix des entrées de la table livres SELECT SUM( prix ) / COUNT( prix ) FROM livres Retourne le prix moyen des livres de la table, c'est-à-dire la somme des prix divisée par le nombre d'entrées. La fonction AVG (moyenne) permet d'arriver au même résultat (résolution améliorée) SELECT AVG( prix ) FROM livres 69
70 Fonction GROUP BY Permet de réaliser des opérations sur des ensembles et de donner un résultat par groupe (AVG, COUNT, MAX, MIN) GROUP BY décrit la manière dont les rangs seront groupés dans la table 1/ en colonne simple Divise la table en sets de données GROUP BY ne supporte pas les formats TEXT, BYTE, CLOB et BLOB SELECT editeur, AVG( prix ) AS 'MOYENNE' FROM livres GROUP BY editeur Retourne pour chaque éditeur le prix moyen des livres 2/ en colonnes multiples SELECT editeur, an_parution, SUM( Prix_TVAC + Prix_trspt ) AS 'Total' FROM livres WHERE prix IN (40) GROUP BY editeur, an_parution Retourne l'éditeur, l'année de parution et le prix total (tvac + transport) des livres groupés par éditeur et par année de parution. Notez le niveau de résolution du total. 70
71 SELECT editeur, MAX( Prix_TVAC ) FROM livres GROUP BY editeur Retourne le prix le plus élevé pour chaque éditeur (calcule le prix pour chaque entrée puis sélectionne le score le plus haut pour chaque éditeur) La clause HAVING sert à restreindre un regroupement. Sur base de l'exemple précédent, l'affichage est restreint aux valeurs supérieures à 100. SELECT editeur, MAX( Prix_TVAC ) FROM livres GROUP BY editeur HAVING MAX( Prix_TVAC ) > 100 (les rangs sont groupés, la clause HAVING est déployée) Les jointures : opérations sur tables multiples L'opération basique sur 2 tables (jointure séparée par virgule) donne un produit cartésien des champs. Dans cet exemple avec 11 livres et 2 fournisseurs, MySQL retourne un résultat de 22 lignes. 71
72 SELECT livres.titre, fournisseurs.cpf FROM livres, fournisseurs Chaque livre est "vu" pour chaque fournisseur (via son cp). Cette manière de faire ne nous mène à rien. EQUI-JOIN La jointure est conditionnée par la clause WHERE Précise les noms des tables et colonnes utilisées Emploie éventuellement des alias pour clarifier la lecture SELECT livres.titre, livres.tva_fourn_id, fournisseurs.tva_fourn, fournisseurs.cpf FROM livres, fournisseurs WHERE livres.tva_fourn_id = fournisseurs.tva_fourn Renvoie un résultat issu de 2 tables : livres et fournisseurs; la liste des titres, des ID fournisseurs, du n TVA fournisseurs et du CP des fournisseurs, limité aux cas où le n TVA fournisseur existe bien dans la table fournisseurs. Le surlignage en vert indique la clef primaire. 72
73 SELF-JOIN Joint une table à elle-même Nécessité d'utiliser des alias SELECT T1.titre, T1.TVA_fourn_ID, T2.TVA_fourn FROM livres AS T1, fournisseurs AS T2 WHERE T1.TVA_fourn_ID = T2.TVA_fourn NONEQUI-JOIN Pour cet exercice, nous utilisons une table "student" qui contient seulement des noms et des résultats et une table "grades" qui contient un acronyme de grade et des limites inférieure et supérieure pour chaque grade. SELECT S.last_name, S.year_result, G.grade FROM grades G, student S WHERE S.year_result BETWEEN G.limite_sup AND G.limite_inf Renvoie comme résultat un tableau avec le nom de chaque étudiant, son résultat et le grade correspondent. 73
74 CROSS JOIN Cette jointure donne un produit cartésien des entrées, dans notre exemple : 3X8=24 lignes SELECT livres.titre, fournisseurs.nomf FROM livres CROSS JOIN fournisseurs 74
75 NATURAL JOIN Cette fonction permet d'éviter la redondance de colonnes que le CROSS JOIN provoque. SELECT * FROM livres NATURAL JOIN achat Renvoie toutes les colonnes des 2 tables SAUF celles dont les informations sont redondantes. 75
76 CONDITION JOIN EQUIJOIN de toutes les colonnes ayant le même nom La clause ON permet de spécifier les conditions du JOIN La clause WHERE doit être utilisée pour séparer des autres conditions de recherche SELECT * FROM livres JOIN achat ON livres.isbn=achat.isbn Renvoie la concaténation des tables "livres" et "achat" pour les lignes qui possèdent le même contenu dans les champs "isbn". INNER JOIN Autre forme de NATURAL JOIN SELECT * FROM livres INNER JOIN achat ON livres.isbn=achat.isbn OUTER JOIN : LEFT Préserve les rangs uniques de la table de gauche. SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.C2 = T2.C3 76
77 SELECT * FROM livres LEFT OUTER JOIN achat ON livres.isbn=achat.isbn Exemple entre tables "livres" et "achat". OUTER JOIN : RIGHT Préserve les rangs uniques de la table de droite. SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.C2 = T2.C3 L'opérateur UNION Combine ALL et DISTINCT Les tables doivent avoir un nombre de colonnes égal car leurs contenus sont affichés sur un même masque. Attention, comme dans l'exemple ci-dessous, les intitulés peuvent ne plus correspondre au contenu. SELECT * FROM fournisseurs UNION SELECT * FROM livres 77
78 Les sous requêtes Il s'agit d'une requête qui doit être évaluée avant le traitement de la requête principale. Exemple : quels sont les titres des livres plus chers que " In search of swampland"? SELECT titre FROM livres WHERE prix > (SELECT prix FROM livres WHERE titre='in search of swampland') La sous requête est en caractères gras On peut imbriquer autant de sous requêtes que l'on veut, MySQL lit d'abord la plus imbriquée puis remonte. WHERE, HAVING et FROM sont supportés Il y a 3 types de sous requêtes, il faut savoir ce que l'on cherche : sous requête atomic : rend une seule valeur (1 rang) sous requête row : rend toute la ligne sous requête table value : rend toute la table 78
79 SINGLE-ROW SUBQUERY Les opérateurs utilisables sont : = égal > plus grand que >= plus grand que ou égal à < plus petit que <= plus petit que ou égal à <> différent de SELECT titre, prix FROM livres WHERE prix > (SELECT AVG(prix) FROM livres) Rend le titre et le prix de tous les livres dont le prix est supérieur au prix moyen des livres de la table. SINGLE-ROW SUBQUERY HAVING clause SELECT section_id, AVG(year_result) AS Moyenne FROM student GROUP BY section_id HAVING AVG(year_result) > (SELECT AVG(year_result) FROM student) Retourne les numéros des sections dont la moyenne des points des étudiants est supérieure à la moyenne globale des résultats de l'année. 79
80 MULTIPLE-ROW SUBQUERY IN SELECT last_name, year_result FROM student WHERE year_result IN (SELECT MAX(year_result) FROM student GROUP BY section_id) Rend la cote la plus haute de chaque section MULTIPLE-ROW SUBQUERY ANY Rend la cote plus haute que n'importe quelle autre section SELECT last_name, year_result FROM student WHERE year_result > ANY (SELECT MAX(year_result) FROM student GROUP BY section_id) MULTIPLE-ROW SUBQUERY ALL SELECT last_name, year_result FROM student WHERE year_result >= ALL (SELECT MAX(year_result) FROM student GROUP BY section_id) Rend la cote plus haute que n'importe quel autre étudiant 80
81 Sous requêtes corrélées = requêtes imbriquées Utilisées pour le traitement rang par rang Chaque sous requête est exécutée pour chaque rang L'information retournée par la sous requête est conditionnée par la manière dont elle est traitée par la requête extérieure. SELECT last_name, section_id, year_result FROM student AS Cercle WHERE year_result > ( SELECT AVG(year_result) FROM student WHERE section_id = Cercle.section_id ) Rend les coordonnées de tous les étudiants ayant une cote meilleure que la moyenne de leur section.!!! traitement très long car les entrées sont examinées 1 à 1. A chaque fois qu'un rang de la requête extérieure est traité, la requête intérieure est évaluée. L'opérateur EXISTS Teste l'existence d'un rang dans une table SELECT section_id, section_name FROM sections AS s WHERE EXISTS ( SELECT * FROM student AS t WHERE t.section_id = s.section_id ) Renvoie uniquement les sections qui ont un intitulé. L'opérateur NON EXISTS le contraire 81
82 7.3.2 Data manipulation language Bien que l'interface de PHP MySQL nous offre un mode fenêtré pour la gestion des tables, il est nécessaire de connaître les commandes qui le permettent aussi. INSERT Insère un rang dans une table 1 rang à la fois Caractères et données seront entre ' ' Toute valeur omise dans l'encodage sera traitée comme "NULL" INSERT INTO sections VALUES ('5000', 'Marketing') Provoque l'insertion d'une ligne (2 valeurs) dans la table "sections" UPDATE Modifie la valeur d'une ou plusieurs colonnes dans un ou plusieurs rangs UPDATE student SET year_result = (year_result + 1) WHERE year_result < 6 Augmente de 1 point la cote de tous les étudiants qui ont eu un résultat inférieur à 6 UPDATE avec sous requête UPDATE student SET year_result = (year_result + 1) WHERE section_id = (SELECT section_id FROM sections WHERE section_name = 'Comptabilité' ) Augmente de 1 point la cote de tous les étudiants de la section comptabilité 82
83 DELETE Permet d'effacer des rangs d'une table DELETE FROM student WHERE section_id = 4000 Va effacer toutes les lignes dont le section_id est à 4000 Une alerte javascript va demander confirmation de la commande. FONCTION VIEW SELECT * FROM student WHERE section_id = 1000 Rend une vue de la table"student" selon le critère choisi : ceux qui font partie de la section Les opérations ensemblistes La théorie des relations mathématiques fournit un ensemble d opérations sur les relations (opérations ensemblistes) qui s appliquent naturellement aux tables. Les opérations ensemblistes applicables sont : La sélection (avec condition) La projection Le produit cartésien Le renommage d attributs (tables et colonnes) L union L intersection La différence La division et toutes les compositions de ces opérations. Chaque opération ensembliste prend un ou deux opérandes qui sont des tables et s évaluent en une table. La sélection consiste à ne conserver qu un ensemble de lignes * Elle prend en entrée une table et produit une table (opération unaire) * Elle précise une condition sur les valeurs que doivent prendre les colonnes des lignes retenues. 83
84 La condition doit être une expression booléenne, et implique presque toujours des valeurs de colonne. La projection consiste à ne conserver que certaines colonnes * Elle prend en entrée une table et produit une table (opération unaire) La composition des opérations consiste à effectuer dans une même requête plus d une opération. * Typiquement, on combine souvent la sélection et la projection. Le produit cartésien de deux tables est une feuille de données (ou une table) obtenue en associant tous les enregistrements de la seconde table à chacun des enregistrements de la première. Si chacune des deux tables contient un grand nombre d'enregistrements, le résultat du produit est gigantesque. De plus, il ne présente généralement pas d'intérêt. En général, le produit cartésien résulte d'une étourderie (oubli d'une relation dans une requête multi-table) (opération binaire). Le produit cartésien rend service quand il faut rassembler dans une même table (à une seule ligne) diverses tables ou feuilles de données comportant une seule ligne. Le produit cartésien fournit alors une table ne comportant qu'une seule ligne. Les tables à une seule ligne résultent généralement de calculs effectués verticalement, tels que comptage du nombre d'enregistrements ou opérations diverses (somme, moyenne, fonctions statistiques) sur les champs numériques ou monétaires. La jointure naturelle «joint» les lignes de deux tables selon leurs valeurs de colonnes communes (opération binaire). La jointure naturelle de A et B est : Le produit cartésien de A et B, suivi d une sélection où la condition ne retient que les lignes pour lesquelles les valeurs de l ensemble des attributs communs sont identiques dans chaque table. Les opérations ensemblistes en SQL sont celles définies dans l'algèbre relationnelle. Elles sont réalisées grâce aux opérateurs : * UNION (voir aussi page 73) * INTERSECT (ne fait pas partie de la norme SQL et n'est donc pas implémenté dans tous les SGBD) * EXCEPT (différence - ne fait pas partie de la norme SQL et n'est pas implémenté dans tous les SGBD) Ces opérateurs s'utilisent entre deux clauses SELECT. L'opérateur UNION Cet opérateur permet d'effectuer une UNION des tuples sélectionnés par deux clauses SELECT (les deux tables sur lesquelles on travaille devant avoir le même schéma). L'union de deux tables est une feuille de données (ou une table) contenant chaque ligne de la première table et chaque ligne de la seconde table. Les lignes communes aux deux tables ne sont conservées qu'en un seul exemplaire, c'est à dire que l'opération d'union élimine les doublons. Les champs que l'on fait correspondre dans les deux tables n'ont pas besoin de porter les mêmes noms ni de se présenter dans le même ordre -- ni même de posséder le même type de donnée si la transposition est possible (une date en texte, par exemple). SELECT ---- FROM ---- WHERE UNION SELECT ---- FROM ---- WHERE
85 Par défaut les doublons sont automatiquement éliminés. Pour conserver les doublons, il est possible d'utiliser une clause UNION ALL. Il existe deux types d union : L union avec suppression des doublons, notée UNION (version abrégée) ou UNION DISTINCT L union sans suppression des doublons, notée UNION ALL L union sans suppression de doublons (UNION ALL) est donc beaucoup plus rapide et doit être privilégiée chaque fois que cela est possible (quand on sait que l on n aura pas de doublons). Par défaut (UNION), l union supprime les doublons. Exemples : Supprime les doublons SELECT typeavion FROM AvionsdeAF UNION SELECT typeav FROM AvionsdeSING; L'opérateur INTERSECT Cet opérateur permet d'effectuer une INTERSECTION des tuples sélectionnés par deux clauses SELECT (les deux tables sur lesquelles on travaille devant avoir le même schéma). L'intersection de deux tables est une feuille de données (ou une table) contenant seulement les lignes communes aux deux tables. SELECT ---- FROM ---- WHERE INTERSECT SELECT ---- FROM ---- WHERE L'opérateur INTERSECT n'étant pas implémenté dans tous les SGBD, il est possible de le remplacer par des commandes usuelles ou un INNER JOIN : SELECT a,b FROM table1 WHERE EXISTS ( SELECT c,d FROM table2 WHERE a=c AND b=d ) L'opérateur EXCEPT Cet opérateur permet d'effectuer une DIFFERENCE entre les tuples sélectionnés par deux clauses SELECT, c'est-à-dire sélectionner les tuples de la première table n'appartenant pas à la seconde (les deux tables devant avoir le même schéma). La différence de deux tables est une feuille de données (ou une table) contenant les enregistrements de la première table qu'on ne retrouve pas dans la seconde. La différence s obtient grâce à l opérateur EXCEPT (aussi connu sous le nom de MINUS dans certains SGBD). Cet opérateur n est pas implémenté sous MySQL. Pour pallier à cette absence, de nombreux utilisateurs ont recours à l instruction WHERE NOT IN. Il est toutefois préférable d avoir recours à une jointure de type LEFT OUTER et de faire un test WHERE IS NULL. 85
86 SELECT DISTINCT typeavion FROM AvionsdeAF WHERE typeavion NOT IN (SELECT typeav FROM AvionsdeSING); Devient : SELECT DISTINCT typeavion FROM AvionsdeAF LEFT OUTER JOIN AvionsdeSING ON (AvionsdeAF.typeAvion = AvionsdeSING.typeAv) WHERE AvionsdeSING.typeAv IS NULL SELECT a,b FROM table1 WHERE EXCEPT SELECT c,d FROM table2 WHERE L'opérateur EXCEPT n'étant pas implémenté dans tous les SGBD, il est possible de le remplacer par des commandes usuelles : SELECT a,b FROM table1 WHERE NOT EXISTS ( SELECT c,d FROM table2 WHERE a=c AND b=d ) Attention! DIFFERENCE (R1, R2) ne donne pas le même résultat que DIFFERENCE (R2, R1) Les états Dans une base de données, l'objet état est utilisé pour mettre en forme les données destinées à être imprimées. Mais la création d'un état qui présente correctement les données imprimées est souvent une opération longue et quelque peu fastidieuse. C'est pourquoi l'état n'est pas toujours considéré comme indispensable, et il existe deux façons de s'en passer. Première solution. Nous pouvons imprimer directement une table ou une feuille de données, à condition de limiter considérablement nos ambitions en matière de présentation. Nous sommes maîtres de la largeur des colonnes (ne pas lésiner sur ce point, sinon l'information risque d'être tronquée), de la couleur de fond de cellule, de la taille et du type de la police, et c'est à peu près tout. Le SGBD pagine, affiche la date et le nom de la table (ou de la feuille de données), et met en page à sa façon - c'est à dire qu'il commence en haut et à gauche. Imprimer directement une table ou une feuille de données est une solution de dépannage, mais ce n'est pas vraiment le moyen de réaliser un document bien présenté. Deuxième solution. Une table peut facilement être exportée vers Excel, où a mise en page avant impression est facile et intuitive. Structuration des états Un état est pratiquement toujours construit sur le résultat d'une requête, et ce pour les raisons suivantes : 86
87 * les bases de données contiennent souvent des quantités considérables d'information, et il n'est pas question de tout imprimer. Il faut donc commencer par sélectionner l'information particulière que l'on veut imprimer ; * dans une BDD relationnelle, l'information est répartie dans des tables multiples, et il faut la rassembler avant de l'imprimer. On peut, cependant, introduire dans un même état des champs provenant de plusieurs tables, à condition que ces dernières soient liées par des relations ; * on peut désirer que l'information imprimée se présente dans un certain ordre. Il faut donc opérer un tri plus ou moins complexe avant d'imprimer. On peut également demander un tri complexe lors de la création de l'état. La finalité de l'état étant la réalisation d'une sortie imprimée, il est indispensable d'indiquer au SGBD l'imprimante utilisée; la taille de la zone imprimable, c'est à dire celle du papier, diminuée de celle des marges.!! L'état opère dans une zone imprimable, le formulaire dans une fenêtre à l'écran. Le SGBD construit l'état en fonction des caractéristiques de l'imprimante par défaut. Il en faut donc une. Ensuite, le SGBD tient compte des options choisies - ou, plus généralement, conservées par défaut - en ce qui concerne la taille du papier (A4, sauf exception) et les marges d'impression. Si vous manquez de place en largeur - ce qui est souvent le cas lorsqu'un état est présenté en colonnes - vous avez intérêt à réduire les marges à gauche et à droite. Mais attention, vous devez effectuer cette opération avant de commencer à construire l état. Une fois ce dernier créé, les changements de marge que vous effectuez sont sans effet sur lui. La présentation des données. Il existe deux modes de présentation d'un état : la présentation tabulaire : les données sont disposées dans des colonnes verticales, comme dans une table. Le nom des colonnes (l'étiquette) figure une seule fois par page. Cette présentation, qui convient particulièrement bien aux données numériques, économise de la place ; la présentation verticale : les données relatives à chaque champ sont imprimées les unes en dessous des autres, le nom du champ étant rappelé à chaque fois. Cette présentation est la seule possible lorsque le contenu de certains champs est volumineux. Elle peut faire l'objet d'un regroupement sur une colonne donnée, si cette dernière contient de nombreux doublons. Elle présente l'inconvénient de requérir beaucoup de place. Dans le cas de PHPMyAdmin, les tableaux automatiquement générés par les recherches sont les seuls types d états possibles. Si cette présentation ne convient pas, il faut se tourner vers une autre application d interrogation de la base (navicat, ) ou exporter les données vers Excel (le plus souvent) pour y faire ensuite une mise en page adéquate. 87
88 7.3.5 Gestion automatisée de la base par des macros Le terme "macro" est l'abréviation de "macro-instruction". Une instruction (ou commande) est un ordre donné à un ordinateur pour qu'il exécute une action. Cependant, les macros ne sont pas utilisées pour faire de la programmation à proprement parler, et ce pour les raisons suivantes : la notion de variable leur fait défaut. Exemple : si une macro ouvre un fichier, et si vous changez le nom du fichier, vous devez corriger la macro en conséquence ; le branchement conditionnel est soit absent, soit très sommaire. Les actions d'une macro s'exécutent séquentiellement. Tout au plus peut-on rendre une exécution conditionnelle ; le traitement des erreurs n'existe pas. Si une macro provoque une erreur d'exécution, elle affiche un message et s'arrête. Le véritable usage des macros, c'est l'automatisation des tâches répétitives, qui présente deux avantages importants, elle fait gagner du temps et elle diminue le risque d'erreurs. Bien entendu, il ne faut automatiser que des opérations qui ont été rodées manuellement, et qui sont bien au point. Les macros sont très spécifiques à un logiciel donné et ne sont pas recyclables d un SGDB à un autre. MySQL est pour sa part très avare en la matière. Néanmoins, il existe le moyen de suppléer à cette situation et de se simplifier beaucoup la vie lors de l utilisation des requêtes, même si ce ne sont pas d authentiques macros qui seront mises en œuvre. Une requête SQL est composée de texte formaté dont le contenu peut être sauvé sous forme de fichier.txt. On peut utiliser cette facilité de deux manières : 1/ créer un fichier.txt qui est une «compilation» de toutes les requêtes que l on a écrites (et qui fonctionnent) et dans lequel on va copier les fragments nécessaires à telle recherche (ou telle action). Le texte sera alors collé dans la fenêtre SQL de l interface. Attention à bien documenter les différents fragments. Le paramétrage local est possible après le collage. 2/ créer un fichier.txt par requête (et lui donner un nom évocateur), ensuite l appeler et l exécuter. Le paramétrage local n est pas possible. 88
89 Il est à noter qu il est possible de faire à partir d un fichier.txt n importe quelle opération faisable en SQL, création base, tables, champs avec paramétrages et remplissage des tables. Depuis l onglet importation, il est possible de choisir un fichier texte et de l exécuter. Le moteur de MySQL lira les expressions du fichier et les exécutera, créant base, tables, Sous certaines versions, il faut choisir le bouton SQL 89
90 Pour faire apparaître la fenêtre de dialogue permettant l importation : Cette fonction est à rapprocher de celle qui permet de nourrir une table via un fichier texte (voir 7.3.7). 90
91 7.3.6 Data definition language CREATE MySQL permet de créer des tables dans un db active, à condition de disposer des privilèges adéquats sur la base. La table sera définie par : Un nom Des noms de colonnes des types de données pour les colonnes des tailles de colonnes l'expression "default" signifie que la colonne aura les valeurs par défaut prévues dans MySQL CREATE TABLE section ( section_id smallint(4) DEFAULT NULL, section_name varchar(50), delegate_id varchar(50), PRIMARY KEY section_id ) Crée une table de 3 colonnes Table garnie de 4 entrées ALTER Cette instruction permet d'ajouter ou d'enlever des contraintes dans une table existante, mais sans en altérer la structure. ADD Permet d'ajouter des colonnes dans une table existante 91
92 ALTER TABLE section ADD (director_id INT) La colonne "director_id" a été ajoutée, elle possède le format INTEGER et les attributs par défaut. MODIFY Permet de modifier certains caractères de la colonne ALTER TABLE section MODIFY section_name char(30) Va ramener la taille du champ "section_name" à 30 caractères. DROP Permet d'effacer une colonne ALTER TABLE section DROP director_id Cette commande va effacer la colonne "director_id". Une alerte Java va demander confirmation de l'effacement. DROP TABLE DROP TABLE trash Va effacer la table "trash", créée juste pour la circonstance. La table sera détruite avec toutes ses données et sa structure!!!!!!!!! pas de ROLLBACK (undo) 92
93 Une alerte Java va demander confirmation de l'effacement. TRUNCATE Enlève toutes les entrées d'une table mais en conservant la table ainsi que toutes ses caractéristiques.!!!!!! pas de ROLLBACK (UNDO) TRUNCATE TABLE a_effacer ENUM Permet de créer une liste de valeurs établies entre lesquels l utilisateur doit choisir nécessairement, la fonction d écriture directe n existant pas. Une valeur par défaut (faisant partie de la liste) peut apparaître au lancement de l interface si on le spécifie. Une seule valeur peut être sélectionnée. enum('123', '124', '125') requête SQL: ALTER TABLE `columns_priv` ADD `liste de choix` ENUM( '123', '124', '125' ) NOT NULL DEFAULT '123'; SET Permet de créer une liste de valeurs établies entre lesquels l utilisateur doit choisir nécessairement, la fonction d écriture directe n existant pas. Les valeurs apparaissent dans l interface. Plusieurs valeurs peuvent être sélectionnées. set('select', 'Insert', 'Update', 'References') requête SQL: ALTER TABLE `columns_priv` ADD `test 2` SET( '123', '124', '125', '126' ) NOT NULL ; 93
94 Les FILTRES Structure et application des bases de données Présentés comme une fonction de base par d autres SGBD, les filtres en MySQL sont le résultat d une requête de tri sur critères. Le filtre est un outil simple - mais extrêmement rapide - d'analyse des données contenues dans une table. Le tri : nous pouvons facilement rechercher de l'information dans une colonne si elle est triée par ordre croissant. De plus, le tri croissant fait apparaître en tête de colonne la valeur la plus faible, alors que le tri décroissant fait apparaître en tête la valeur la plus forte. Les filtres : appliqués à une table, ils ne laissent apparaître que les enregistrements répondant à un - ou à quelques - critères simples. Il existe plusieurs sortes de filtre : le filtre par sélection, le filtre hors sélection (par exclusion, l'inverse du précédent). 94
95 7.3.7 Introduire des données dans une table à partir d'un fichier texte extérieur Au bas de l'écran «structure», on trouve ce lien Insérer des données provenant d'un fichier texte dans la table En le suivant, on arrive à cet écran qui permet de configurer l'importation Emplacement du fichier source doit être un fichier de type.txt Les données vont soit s'ajouter à celles déjà en place, soit les remplacer - choisir Les champs sont limités par tel caractère. Dans notre exemple, c'est une virgule Les champs sont entourés par tel caractère. Dans notre exemple, il n'y en a pas Définition du caractère qui annule l'effet des caractères spéciaux (%, ù, ). Dans notre exemple, il n'y en a pas Type de fin de ligne. Dans notre exemple, c'est un return Eventuelle limitation à certaines colonnes. Dans notre exemple, il n'y en a pas Local load Selon la version, cette fonction est aussi accessible via l onglet «importer». 95
96 7.3.8 L'outil d'audit des bases : explain Cette fonction permet d'analyser les différentes étapes d'une requête (qui fonctionne) afin de détecter la raison d'une éventuelle lenteur d'exécution. Suite à la requête : SELECT last_name, year_result FROM student WHERE year_result IN (SELECT MAX(year_result) FROM student GROUP BY section_id) Rend la cote la plus haute de chaque section 96
97 L'écran suivant apparaît : Lecture : les 2 tables sont ouvertes, tous les enregistrements sont parcourus une fois Les procédures stockées Une procédure stockée (stored procedure) est un ensemble d'instructions PL/SQL précompilées, stockées sur le serveur, directement dans la base de données. Elles peuvent être exécutées sur demande : lancées par un utilisateur, un administrateur ou encore de façon automatisée par un événement déclencheur ("trigger") Les vues Une vue est une table virtuelle dont le contenu est défini par une requête. Une vue ressemble à une table réelle, avec un ensemble de colonnes nommées et de lignes de données. À moins d'être indexée, elle n'existe pas en tant qu'ensemble de valeurs de données stocké dans une base de données. Les lignes et les colonnes de données proviennent de tables référencées dans la requête qui définit la vue et sont produites dynamiquement lorsque la vue est référencée. Une vue fait office de filtre sur les tables sous-jacentes qui y sont référencées. La requête qui définit la vue peut émaner d'une ou de plusieurs tables ou d'autres vues de la base de données en cours ou d'autres bases de données. Les requêtes distribuées peuvent également être employées pour définir des vues qui utilisent des données provenant de plusieurs sources hétérogènes. L'interrogation via des vues ne fait l'objet d'aucune restriction ; la modification de données via des vues est soumise à quelques restrictions seulement. L'illustration ci-dessous montre une vue basée sur deux tables. 97
98 Exercices Exercice 01 : établir des modèles Entité Association Cardinalité A/ Soient un ensemble de personnes et un ensemble de voitures. Une personne est caractérisée par un numéro qui l'identifie et par les voitures dont elle est l'unique propriétaire. Une voiture est caractérisée par un numéro de plaque, une marque et une date de mise en circulation. B/ Les différents départements d'une entreprise occupent des employés. Un employé est décrit par son numéro matricule (unique dans l'entreprise), son nom, son grade et le département dans lequel il travaille. Un département est décrit par son numéro dans l'entreprise et par son directeur qui doit être un de ses employés. C/ Un exploitant possède plusieurs salles de cinéma. Un film fait généralement l'objet de plusieurs séances par jour. Décrire un schéma qui permette à l'exploitant d'obtenir des renseignements sur le chiffre d'affaire d'un film, d'une salle, d'une séance où d'un jour déterminé (un seul film par salle à un même endroit) D/ Définir un schéma décrivant une nomenclature de type de pièces. Chaque type de pièce est caractérisé par son numéro, les types de pièces qui la composent et ceux dont il est le composant. E/ Définir un schéma décrivant les liens familiaux d'une population de personnes identifiables par un numéro. F/ Gestion de la production et des stocks Une société a décidé de concevoir une base de données pour l'assister dans la gestion de sa production et des ses stocks. Une unité de fabrication est identifiée par un numéro est caractérisée par un nom, une localisation et une capacité globale de production. Elle peut fabriquer plusieurs produits. A tout moment, on connaît, pour une unité de fabrication et pour un produit que cette unité fabrique, la quantité en cours de fabrication et les capacités minimum et maximum de fabrication. Un dépôt est également identifié par un numéro et possède un nom, une localisation et une capacité globale de stockage. Un dépôt peut stocker plusieurs produits. A chaque instant, on connaît, pour un dépôt et pour un produit qui y est stocké, la quantité due. Un produit peut-être fabriqué par plusieurs unités de fabrication et stocké dans plusieurs dépôts. A chaque produit est associé un numéro qui l'identifie. Un produit possède également 98
99 un nom, une unité de mesure et un prix. Une quantité unitaire de produit fini ou semi-fini est toujours fabriquée à partir de quantités déterminées d'autres produits semi-finis et/ou de matières premières qu'une unité de fabrication commande à ce dépôt. Une commande d'une unité de fabrication est adressée à un seul dépôt, est identifiée par un numéro, possède une date et concerne un ou plusieurs produits dont elle spécifie la quantité commandée. G/ Gestion d'employés, de locaux, de départements et de projets Une société a décidé de construire une base de données regroupant ses départements, ses bureaux (locaux), ses projets et ses employés. Un département est identifié par un numéro (unique dans la société). Il est dirigé par un chef de département - qui est un employé de ce département - et dispose d'un certain budget. Un département fait travailler des employés sur des projets dont il est responsable, et dispose d'un certains nombre de locaux. Un bureau, identifié par un numéro (unique dans la société) et caractérisé par une surface utile (exprimée en m2, est mis à disposition d'un département. Un ou plusieurs postes téléphoniques sont raccordés dans un bureau. Un poste téléphonique, placés dans un bureau, possède un seul numéro d'appel. Un projet est géré par un département et est identifié par un numéro (unique dans un département). Chaque projet possède un budget de fonctionnement propre. Un employé est identifié par un numéro matricule (unique dans la société). Un employé travaille pour un seul département; il ne peut dès lors être le chef que d'un seul département. Un employé est affecté à un projet, dispose d'un bureau et peut être accessible par un seul numéro d'appel. Par contre plusieurs employés d'un même bureau peuvent être appelés par le même numéro de téléphone. La société a établi un inventaire des fonctions (concepteur, analyste, programmeur,...) identifiées par un numéro et caractérisées par un salaire plancher et un salaire plafond. La société souhaite mémoriser l'historique des fonctions de chaque employé avec la date d'entrée en fonction et le salaire initial attribué. H/ Octroi d'un prêt dans un organisme bancaire. Les activités liées à l'octroi d'un prêt d'un prêt dans la banque X sont décrites dans ce qui suit. Le client se rend à une agence de la banque X et soumet sa demande de prêt à un employé en lui indiquant le montant qu'il souhaite emprunter, la durée, le motif du prêt ainsi que des renseignements généraux tels que son nom, son adresse, et son revenu mensuel. L'employé de l'agence constitue un dossier avec ses différents renseignements et les transmet au service crédit du siège de la banque. Un préposé de celui-ci parcourt le dossier et décide sur base du revenu mensuel et du motif du prêt de refuser la demande ou de l'étudier de façon plus approfondie. Dans ce cas, il émet une demande de renseignement auprès du service d'informations. 99
100 Ces renseignements portent d'une part sur le comportement du client vis-à-vis d'éventuels autres prêts qu'il aurait contracté antérieurement et d'autre part sur l'identité du client, son revenu mensuel,... Dans l'attente de ces informations, le préposé établit un premier plan de financement: le taux à appliquer, le montant et la durée du prêt puis, quand il a reçu le réponse du service d'informations, il peut formuler une ou plusieurs propositions à présenter au client ou refuser la demande de prêt. Les propositions sont adjointes à la demande qui retourne à l'agence. A la réception du dossier, le gérant de l'agence examine les propositions avec le client : soit le client accepte une des propositions, soit il n'en accepte aucune, il en accepte une sous réserve de modifications (rectification de la durée, diminution du montant emprunté,...). Dans ce dernier cas, le gérant établit, avec le client, une nouvelle proposition qui tient compte des changements demandés. Une proposition de prêt acceptée par le client doit encore être approuvée par la direction. Celle-ci 'occupe des dossiers de prêt en fin de semaine ou lorsqu'elle en a au moins vingt en attente. Ensuite les dossiers approuvés retournent en agence où ils donnent lieu à l'établissement du contrat de prêt. On connaît le nom, l'adresse, le salaire mensuel d'un client et les prêts qu'il a déjà éventuellement contractés auprès de la banque X ou d'une autre institution financière ainsi que pour chacun de ceux-ci, la façon dont il rembourse (régulier, tardif, mauvais). On connaît également les demandes de prêt qu'un client a déjà éventuellement émises auprès de la banque X et, si elles ont été acceptées, les différentes propositions auxquelles elles ont donnés lieu. Une demande de prêt comporte les renseignements suivants ; montant demandé, durée demandée, date d'introduction de la demande e motif du prêt. Pour une institution financière, on connaît son nom, son type (banque, organisme privé, organisme public) et les différents prêt contractés par les clients de la banque X auprès de cette institution. Pour un prêt, on connaît son numéro, son montant, sa durée, la personne qui l'a contracté, l'organisme auprès duquel il a été contracté, le type d'échéance,(mensuelle, trimestrielle, annuelle), les date de début et de fin de remboursement, le taux d'intérêt appliqué à l'emprunt et le montant à rembourser (montant prêté + intérêts). Une proposition de prêt est caractérisée par sa date, la durée et le montant du prêt proposé, le taux d'intérêt. Si elle a effectivement donné lieu à un prêt, on connaît le prêt correspondant. On enregistre quotidiennement le taux d'escompte qui permet à la banque X de calculer le taux d'intérêt applicable. En effet, le taux d'intérêt est déterminé par en fonction du motif, du montant, de la durée du prêt et du taux d'escompte. Les valeurs des différentes informations relatives à un prêt sont nécessairement identiques aux informations correspondantes de la proposition qui lui a donné lieu (si elle existe). 100
101 Exercice 02 : traduire en mode relationnel G/ Gestion d'employés, de locaux, de départements et de projets Exercice 03 : DB Northwind Passez sur la db Northwind et exécutez les requêtes suivantes : (1) Sélectionner le nom des employés, adresse, ville et région où ils habitent. (2) Sélectionner le nom des employés et le nom des clients pour les commandes qui sont envoyées par la société `Speedy Express' aux clients qui habitent à Bruxelles. select distinct FirstName, LastName, Customers.CompanyName from Employees, Orders, (4) Sélectionner le nom et titre des employés ainsi que le nom et titre des personnes à qui ils se reportent. 6) Sélectionner le nom des produits qu'ont été achetés ou vendus par des personnes qui habitent à Londres. (7) Spécifier les noms des employés qui sont plus âgés que: (a) un employé qui habite à Londres (b) n'importe quel employé qui habite à Londres. (8) Sélectionner le nom des employés que travaillent depuis plus longtemps que n'importe quel employé de Londres (9) Spécifier le nom des employés et la ville où ils habitent pour les employés qui ont vendu à des clients de la même ville. (12) Sélectionner le nom des produits vendus par tous les employés. (15) Trouver le prix moyen des produits par catégorie. (16) Spécifier le nom des catégories et le prix moyen des produits de chaque catégorie. 101
102 (17) Sélectionner l'identificateur et le nom des sociétés qui fournissent plus de 3 produits. (18) Spécifier pour chaque employé, l'identificateur, le nom ainsi que le total des ventes réalisées, ordonné par identificateur d'employé. (19) Spécifier l'identificateur et le nom des employés ainsi que le total des ventes réalisées ordonné par identificateur d'employé pour les employés qui ont vendu plus que 70 produits différents. (20) Sélectionner le nom des employés qui vendent les produits de plus de 7 fournisseurs. 102
103 Exercice 04 : création DB #1 1/ Existant Une organisation non gouvernementale d aide humanitaire aux pays du tiers-monde effectue des interventions d aide à l éducation (enseignements professionnels, alphabétisation, puériculture,...), au développement (agriculture, irrigation,...), à la prévention sanitaire (vaccinations, mise en service de dispensaires,...) dans divers pays. Ses interventions sont programmées pour une durée limitée (de quelques mois à deux ans). Chaque intervention possède un responsable sur place nommé en principe pour toute la durée de l intervention. Pour chaque intervention, sont également définis un site principal (base d intervention) et des sites secondaires, lieux géographiques dans lesquels l organisation est présente au titre de cette intervention. Des intervenants bénévoles ou rémunérés sont affectés aux différentes interventions pour des missions de quelques jours ou de quelques mois. Le siège européen de l organisation souhaite rassembler dans une base de données les informations relatives aux interventions, aux responsables, aux sites d intervention et aux intervenants (actuellement en mission ou disponibles pour une nouvelle affectation). Il pense ainsi pouvoir accéder facilement à des informations telles que : - la liste des interventions, avec les coordonnées de leurs responsables ; - la liste des intervenants possibles ; - la liste des personnes intervenant dans une mission donnée à une date donnée ; - des pages d information avec, pour chaque mission, la liste des personnes qui y interviennent ou y sont intervenus, etc. 2/ analyse et mise en place du modèle Entité - Attributs - Association Cardinalité 3/ traduction en mode relationnel 4/ création des tables 5/ Implémentation des tables dans MySQL 103
Le Langage De Description De Données(LDD)
Base de données Le Langage De Description De Données(LDD) Créer des tables Décrire les différents types de données utilisables pour les définitions de colonne Modifier la définition des tables Supprimer,
Créer une base de données
Access Créer une base de données SOMMAIRE Généralités sur les bases de données... 3 Création de la base de données... 4 A) Lancement d'access... 4 B) Enregistrement de la base de données vide... 4 Création
1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5
1. Qu'est-ce que SQL?... 2 2. La maintenance des bases de données... 2 2.1 La commande CREATE TABLE... 3 2.2 La commande ALTER TABLE... 4 2.3 La commande CREATE INDEX... 4 3. Les manipulations des bases
1. LA GESTION DES BASES DE DONNEES RELATIONNELLES
Dossier G11 - Interroger une base de données La base de données Facturation contient tout un ensemble d'informations concernant la facturation de la SAFPB (société anonyme de fabrication de produits de
PHP 5. La base de données MySql. A. Belaïd 1
PHP 5 La base de données MySql A. Belaïd 1 Base de données C est quoi une base de données? Une base de données contient une ou plusieurs tables, chaque table ayant un ou plusieurs enregistrements Exemple
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2
SQL Sommaire : COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2 COMMANDES DE MANIPULATION DE DONNEES... 2 COMMANDES DE CONTROLE TRANSACTIONNEL... 2 COMMANDES DE REQUETE DE DONNEES... 2 COMMANDES
Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.
Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite. Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs, relations,
1/ Présentation de SQL Server :
Chapitre II I Vue d ensemble de Microsoft SQL Server Chapitre I : Vue d ensemble de Microsoft SQL Server Module: SQL server Semestre 3 Année: 2010/2011 Sommaire 1/ Présentation de SQL Server 2/ Architerture
Création et Gestion des tables
Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5
DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin
DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin Objectifs : Apprendre à l apprenant à lancer un serveur local «Apache» Apprendre à l'apprenant à lancer un serveur MySQL
Optimisations des SGBDR. Étude de cas : MySQL
Optimisations des SGBDR Étude de cas : MySQL Introduction Pourquoi optimiser son application? Introduction Pourquoi optimiser son application? 1. Gestion de gros volumes de données 2. Application critique
Langage SQL : créer et interroger une base
Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX,
SOMMAIRE. Travailler avec les requêtes... 3
Access Les requêtes SOMMAIRE Travailler avec les requêtes... 3 A) Créer une requête sélection en mode QBE... 3 B) Exécuter une requête à partir du mode Modifier (QBE)... 3 C) Passer du mode Feuille de
MODE OPERATOIRE OPENOFFICE BASE
MODE OPERATOIRE OPENOFFICE BASE Openoffice Base est un SGBDR : Système de Gestion de Base de Données Relationnelle. L un des principaux atouts de ce logiciel est de pouvoir gérer de façon efficace et rapide
Bases de données relationnelles
Bases de données relationnelles Système de Gestion de Bases de Données Une base de données est un ensemble de données mémorisé par un ordinateur, organisé selon un modèle et accessible à de nombreuses
1 Introduction et installation
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
MEDIAplus elearning. version 6.6
MEDIAplus elearning version 6.6 L'interface d administration MEDIAplus Sommaire 1. L'interface d administration MEDIAplus... 5 2. Principes de l administration MEDIAplus... 8 2.1. Organisations et administrateurs...
Cours Base de données relationnelles. M. Boughanem, IUP STRI
Cours Base de données relationnelles 1 Plan 1. Notions de base 2. Modèle relationnel 3. SQL 2 Notions de base (1) Définition intuitive : une base de données est un ensemble d informations, (fichiers),
Pour les débutants. langage de définition des données
Pour les débutants SQL : langage de définition des données Les bases de données sont très utilisées dans les applications Web. La création, l interrogation et la manipulation des données de la base sont
Olivier Mondet http://unidentified-one.net
T-GSI Ch.4 Le Langage SQL LDD, LCD Cet exercice guidé reprend le plan suivis lors de l intervention de formation faite pour l académie de Versailles. L objectif principal visait en la présentation du langage
SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)
SGBDR Systèmes de Gestion de Bases de Données (Relationnelles) Plan Approches Les tâches du SGBD Les transactions Approche 1 Systèmes traditionnels basés sur des fichiers Application 1 Gestion clients
1. Introduction...2. 2. Création d'une requête...2
1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête
Utiliser une base de données
Access Utiliser une base de données SOMMAIRE Généralités sur les SGBD... 3 Démarrage d'access 2002... 4 Ouverture d'un fichier Access... 4 Les objets dans Access... 5 Les tables... 6 A) Ouvrir une table
Cours: Administration d'une Base de Données
Bases de Données Avancées Module A IUT Lumière, License CE-STAT 2006-2007 Pierre Parrend Cours: Administration d'une Base de Données Table of Contents Principes...1 Structure d'un Base de Données...1 Architecture...1
4. Utilisation d un SGBD : le langage SQL. 5. Normalisation
Base de données S. Lèbre [email protected] Université de Strasbourg, département d informatique. Présentation du module Contenu général Notion de bases de données Fondements / Conception Utilisation :
WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :
BES WEBDEVELOPER - SYSTEME DE GESTION DE BASES DE DONNEES - 5XBDR-1 1 WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable : dans le cadre de mise en situations simples et
Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes
Langage SQL (1) Sébastien Limet Denys Duchier IUT Orléans 4 septembre 2007 Notions de base qu est-ce qu une base de données? SGBD différents type de bases de données quelques systèmes existants Définition
Dossier I Découverte de Base d Open Office
ETUDE D UN SYSTEME DE GESTION DE BASE DE DONNEES RELATIONNELLES Définition : Un SGBD est un logiciel de gestion des données fournissant des méthodes d accès aux informations. Un SGBDR permet de décrire
Bases de Données. Plan
Université Mohammed V- Agdal Ecole Mohammadia d'ingénieurs Rabat Bases de Données Mr N.EL FADDOULI 2014-2015 Plan Généralités: Définition de Bases de Données Le modèle relationnel Algèbre relationnelle
Le Langage SQL version Oracle
Université de Manouba École Supérieure d Économie Numérique Département des Technologies des Systèmes d Information Le Langage SQL version Oracle Document version 1.1 Mohamed Anis BACH TOBJI [email protected]
1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5
1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en
Présentation du module Base de données spatio-temporelles
Présentation du module Base de données spatio-temporelles S. Lèbre [email protected] Université de Strasbourg, département d informatique. Partie 1 : Notion de bases de données (12,5h ) Enjeux et principes
Débuter avec OOo Base
Open Office.org Cyril Beaussier Débuter avec OOo Base Version 1.0.7 Novembre 2005 COPYRIGHT ET DROIT DE REPRODUCTION Ce support est libre de droit pour une utilisation dans un cadre privé ou non commercial.
Utiliser Access ou Excel pour gérer vos données
Page 1 of 5 Microsoft Office Access Utiliser Access ou Excel pour gérer vos données S'applique à : Microsoft Office Access 2007 Masquer tout Les programmes de feuilles de calcul automatisées, tels que
Cours Access 1) INTRODUCTION AU SGBD...4 2) LES TABLES...4
COURS MS ACCESS 1) INTRODUCTION AU SGBD...4 A) DÉFINITION...4 B) ENREGISTREMENTS ET CHAMPS....4 C) LES GRANDES FONCTIONS D'ACCESS... 4 i) Les tables...4 ii) Les requêtes...4 iii) Les formulaires... 4 iv)
Chapitre 1 : Introduction aux bases de données
Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données
Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)
Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL) Un modèle de données définit un mode de représentation de l information selon trois composantes : 1. Des structures de données. 2. Des contraintes qui permettent
Les bases de données Page 1 / 8
Les bases de données Page 1 / 8 Sommaire 1 Définitions... 1 2 Historique... 2 2.1 L'organisation en fichier... 2 2.2 L'apparition des SGBD... 2 2.3 Les SGBD relationnels... 3 2.4 Les bases de données objet...
Initiation aux bases de données (SGBD) Walter RUDAMETKIN
Initiation aux bases de données (SGBD) Walter RUDAMETKIN Bureau F011 [email protected] Moi Je suis étranger J'ai un accent Je me trompe beaucoup en français (et en info, et en math, et...)
Les bases de données
Les bases de données Introduction aux fonctions de tableur et logiciels ou langages spécialisés (MS-Access, Base, SQL ) Yves Roggeman Boulevard du Triomphe CP 212 B-1050 Bruxelles (Belgium) Idée intuitive
Cyberclasse L'interface web pas à pas
Cyberclasse L'interface web pas à pas Version 1.4.18 Janvier 2008 Remarque préliminaire : les fonctionnalités décrites dans ce guide sont celles testées dans les écoles pilotes du projet Cyberclasse; il
les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3
Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4
MySQL / SQL EXEMPLES
MySQL_exemples_janv04_mpT EXEMPLES 1 MySQL / SQL EXEMPLES Typologie du langage Il est possible d'inclure des requêtes SQL dans un programme écrit dans un autre langage (en langage C par exemple), ainsi
NFA 008. Introduction à NoSQL et MongoDB 25/05/2013
NFA 008 Introduction à NoSQL et MongoDB 25/05/2013 1 NoSQL, c'est à dire? Les bases de données NoSQL restent des bases de données mais on met l'accent sur L'aspect NON-relationnel L'architecture distribuée
PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées
PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.
Chapitre 10. Architectures des systèmes de gestion de bases de données
Chapitre 10 Architectures des systèmes de gestion de bases de données Introduction Les technologies des dernières années ont amené la notion d environnement distribué (dispersions des données). Pour reliér
Bases de Données relationnelles et leurs systèmes de Gestion
III.1- Définition de schémas Bases de Données relationnelles et leurs systèmes de Gestion RAPPELS Contraintes d intégrité sous Oracle Notion de vue Typage des attributs Contrainte d intégrité Intra-relation
Le langage SQL Rappels
Le langage SQL Rappels Description du thème : Présentation des principales notions nécessaires pour réaliser des requêtes SQL Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs,
Mémo d'utilisation de BD Dico1.6
Mémo d'utilisation de BD Dico1.6 L'application BDDico a été développée par la Section Cadastre et Géomatique de la RCJU. Son utilisation demeure réservée aux personnes autorisées. Les demandes d'utilisation
CONCEPTION Support de cours n 3 DE BASES DE DONNEES
CONCEPTION Support de cours n 3 DE BASES DE DONNEES Auteur: Raymonde RICHARD PRCE UBO PARTIE III. - LA DESCRIPTION LOGIQUE ET PHYSIQUE DES DONNEES... 2 A. Les concepts du modèle relationnel de données...
Faculté des sciences de gestion et sciences économiques BASE DE DONNEES
BASE DE DONNEES La plupart des entreprises possèdent des bases de données informatiques contenant des informations essentielles à leur fonctionnement. Ces informations concernent ses clients, ses produits,
CREATION WEB DYNAMIQUE
CREATION WEB DYNAMIQUE IV ) MySQL IV-1 ) Introduction MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requêtes vers les bases de données relationnelles. Le serveur de
Stockage du fichier dans une table mysql:
Stockage de fichiers dans des tables MYSQL avec PHP Rédacteur: Alain Messin CNRS UMS 2202 Admin06 30/06/2006 Le but de ce document est de donner les principes de manipulation de fichiers dans une table
Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions
Exemple accessible via une interface Web Une base de données consultable en ligne : Bases de données et systèmes de gestion de bases de données The Trans-atlantic slave trade database: http://www.slavevoyages.org/tast/index.faces
Cours Bases de données
Informations sur le cours Cours Bases de données 9 (10) séances de 3h Polycopié (Cours + TD/TP) 3 année (MISI) Antoine Cornuéjols www.lri.fr/~antoine [email protected] Transparents Disponibles
Bases de données élémentaires Maude Manouvrier
Licence MI2E- 1ère année Outils en Informatique Bases de données élémentaires Maude Manouvrier Définitions générales et positionnement du cours dans la formation Vocabulaire relatif aux bases de données
clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE
Cas Neptune hôtel Base de données et langage SQL Propriété Intitulé long Formation concernée Matière Notions Transversalité Présentation Description Neptune Hôtel. L interrogation d une base de données
Introduction aux SGBDR
1 Introduction aux SGBDR Pour optimiser une base Oracle, il est important d avoir une idée de la manière dont elle fonctionne. La connaissance des éléments sous-jacents à son fonctionnement permet de mieux
I. MySQL : Serveur et SGBD
Le Système de Gestion de Base de Données MySQL I. MySQL : Serveur et SGBD Menu I. MySQL : Serveur et SGBG II. Création d'une base de données avec MySQL MySQL est un système de gestion et conception de
1 Gestionnaire de Données WORD A4 F - USB / 2014-04-05 / 6020 Alco-Connect
1 Gestionnaire de Données WORD A4 F - USB / 2014-04-05 / 6020 Alco-Connect Introduction... 4 Comment décrire le logiciel Cosmos?... 4 Quelles sont les fonctions de ce logiciel PC?... 4 Est-il possible
Créer le schéma relationnel d une base de données ACCESS
Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...
Le langage SQL pour Oracle - partie 1 : SQL comme LDD
Le langage SQL pour Oracle - partie 1 : SQL comme LDD 1 SQL : Introduction SQL : Structured Query Langage langage de gestion de bases de donn ees relationnelles pour Définir les données (LDD) interroger
Introduction au Système de Gestion de Base de Données et aux Base de Données
Introduction au Système de Gestion de Base de Données et aux Base de Données Formation «Gestion des données scientifiques : stockage et consultation en utilisant des bases de données» 24 au 27 /06/08 Dernière
Création d'un site dynamique en PHP avec Dreamweaver et MySQL
Création d'un site dynamique en PHP avec Dreamweaver et MySQL 1. Création et configuration du site 1.1. Configuration de Dreamweaver Avant de commencer, il est nécessaire de connaître l'emplacement du
Compte-rendu de projet de Système de gestion de base de données
Compte-rendu de projet de Système de gestion de base de données Création et utilisation d'un index de jointure LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Thierry Grison
Le modèle de données
Le modèle de données Introduction : Une fois que l étude des besoins est complétée, deux points importants sont à retenir : Les données du système étudié Les traitements effectués par le système documentaire.
Manuel d'utilisation d'apimail V3
Manuel d'utilisation d'apimail V3 I Préambule Page 3 II Présentation Page 4 III Mise en route Configuration Page 5 Messagerie Serveur smtp Serveur pop Compte pop Mot de passe Adresse mail Laisser les messages
Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre
Bases de Données Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre Synthèse : conception de BD langage de modélisation famille de SGBD SGBD Analyse du
Application web de gestion de comptes en banques
Application web de gestion de comptes en banques Objectif Réaliser une application Web permettant à un client de gérer ses comptes en banque Diagramme de cas d'utilisation 1 Les cas d'utilisation Connexion
TeamViewer 7 Manuel Manager
TeamViewer 7 Manuel Manager TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen teamviewer.com Présentation Sommaire Sommaire... 2 1 Présentation... 4 1.1 À propos de TeamViewer Manager... 4 1.2 À propos
Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES
Antonin AILLET Remi DEVES Thibaut AZZOPARDI 2 ème année de DUT Informatique Cahier Technique «Développer une application intranet pour la gestion des stages des étudiants» Encadré par Didier BOULLE Année
Cours 1 : introduction
Cours 1 : introduction Modèle entité-association Exemple : Deux entités (produit et dépôt) sont mises en relation (stock). Une entité doit être constituée d un identifiant et peut être complétée par des
Access 2010 Entraînement 1 Garage Renault Dossier 24 MCD
Access 2010 Entraînement 1 Garage Renault Dossier 24 MCD Objectifs Concevoir une modèle conceptuel de données pour Access Durée 45 Support Papier Travail à faire : 1. Concevoir le dictionnaire des données.
14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.
Gaëlle PERRIN SID2 Grenoble Le 10/04/2014 Base de Données (BD) : une grande quantité de données, centralisées ou non, servant pour les besoins d'une ou plusieurs applications, interrogeables et modifiables
Sage CRM. 7.2 Guide de Portail Client
Sage CRM 7.2 Guide de Portail Client Copyright 2013 Sage Technologies Limited, éditeur de ce produit. Tous droits réservés. Il est interdit de copier, photocopier, reproduire, traduire, copier sur microfilm,
CONNECTEUR PRESTASHOP VTIGER CRM
CONNECTEUR PRESTASHOP VTIGER CRM Page 1 / 14 Vtiger CRM - Prestashop Connector Pour PRESTASHOP version 1.4.x et 1.5.x Pour vtiger CRM version 5.1, 5.2.0, 5.2.1, 5.3 et 5.4 Introduction En tant que gérant
CAP BOX Note utilisateurs
CAP BOX Note utilisateurs Sommaire ESPACE UTILISATEUR... Se connecter pour la ère fois sur son espace CAP BOX... Paramétrage du compte entreprise... Identité de l'entreprise.... Présentation des documents
Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs
Dans la série Les tutoriels libres présentés par le site FRAMASOFT Automatisation d'une Facture 4 Liste Déroulante Remises Case à cocher Calculs Logiciel: Version: Licence: Site: OpenOffice.org Calc :
TP Contraintes - Triggers
TP Contraintes - Triggers 1. Préambule Oracle est accessible sur le serveur Venus et vous êtes autorisés à accéder à une instance licence. Vous utiliserez l interface d accés SQL*Plus qui permet l exécution
1. Création d'un état... 2. 2. Création d'un état Instantané Colonnes... 3. 3. Création d'un état Instantané Tableau... 4
1. Création d'un état... 2 2. Création d'un état Instantané Colonnes... 3 3. Création d'un état Instantané Tableau... 4 4. Création d'un état avec plusieurs tables... 9 5. Modifier la structure d'un état...11
Auguria_PCM Product & Combination Manager
Auguria_PCM Product & Combination Manager Guide utilisateurs v1.5 Auguria 9, rue Alfred Kastler 44300 NANTES FRANCE +33251135012 [email protected] Plan 1 Description générale du module...3 2 Mise en
INTRODUCTION : Données structurées et accès simplifié
INTRODUCTION : Données structurées et accès simplifié À l'origine de l'informatique, le stockage d'information se faisait sur cartes perforées. Ces supports pauvres ne permettaient pas de définir la structuration
Premiers pas sur e-lyco
Premiers pas sur e-lyco A destination des parents, ce document présente les premiers éléments pour accéder aux services de l'ent e-lyco d'un lycée. Que signifient ENT et e-lyco? ENT = Espace ou Environnement
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de
Bases de données relationnelles & SQL
Bases de données relationnelles & SQL Objectifs Appréhender les concepts du modèle relationnel. Etre capable de concevoir un schéma relationnel. Etre capable de créer une base de données relationnelle
PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées
PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.
1. Cliquez sur dans le coin supérieur gauche de l'écran 2. Sélectionnez la Langue de l'interface désirée 3. Cliquez sur
NOTIFICATIONS GUIDE Le module Notifications permet de retrouver des notifications en utilisant les champs spécifiques de la base de données du Registre central des notifications (RCN). Il comporte une
UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE
UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE TP N 1 : Initiation à L Access I. Introduction Microsoft Access fait partie
CommandCenter Génération 4
Notes importantes: Lors de l'installation de cette version logicielle SE Génération 4 8.11.2456-13, la mise à jour peut rester jusqu'à 25 minutes au même pourcentage (p. ex., 82 %) dans la phase d'installation
Didacticiel de mise à jour Web
Didacticiel de mise à jour Web Copyright 1995-2012 Esri All rights reserved. Table of Contents Didacticiel : Création d'une application de mise à jour Web.................. 0 Copyright 1995-2012 Esri.
Intégrer des notices de MoCCAM-en-ligne dans BCDI abonnement
Intégrer des notices de MoCCAM-en-ligne dans BCDI abonnement MoCCAM-en-ligne (http://www.moccam-en-ligne.fr/) est un service libre et gratuit de récupération en ligne de notices UNIMARC. Le site Moccam
STATISTICA Version 12 : Instructions d'installation
STATISTICA Version 12 : Instructions d'installation STATISTICA Entreprise Server Remarques : 1. L'installation de STATISTICA Entreprise Server s'effectue en deux temps : a) l'installation du serveur et
Bases de données Cours 1 : Généralités sur les bases de données
Cours 1 : Généralités sur les bases de données POLYTECH Université d Aix-Marseille [email protected] http://odile.papini.perso.esil.univmed.fr/sources/bd.html Plan du cours 1 1 Qu est ce qu une
Edutab. gestion centralisée de tablettes Android
Edutab gestion centralisée de tablettes Android Résumé Ce document présente le logiciel Edutab : utilisation en mode enseignant (applications, documents) utilisation en mode administrateur (configuration,
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE
CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 3. ème partie : RAPPORTS MENU D'ACCUEIL - MIGRATION Table des matières 1. Les RAPPORTS...2 1.1 Création d'un rapport basé sur une Requête...3 1.2 Imprimer,
INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX
TABLE DES MATIERES Livret Utilisateur Excel 2007 Niveau 2 INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX... 4 Les tableaux croisés dynamiques... 4 Création d un tableau croisé... 5 Comparer des
Les BASES de DONNEES dans WampServer
Les BASES de DONNEES dans WampServer 1 Définitions Générales Une base de données (BDD) permet d'enregistrer, de stocker, de ranger des données de façon organisée et hiérarchisée. SQL est le langage qui
