Les bases de données relationnelles

Chapitre 1 : Introduction 1 – Préambule Les activités humainesgénèrent des données. Il en a toujours été ainsi et, plus notre civilisation sedéveloppe, plus le volume de ces données croît. Aujourd'hui, les données sontde plus en plus souvent gérées par des moyens informatiques. Le mot"informatique" lui-même résulte de la contraction de"information" et "automatique"… l'informatique est donc latechnique qui permet le traitement automatique de l'information.   Dans les entreprises, onmanipule souvent des données ayant la même structure. Prenons l'exemple de laliste des membres du personnel : pour chaque personne, on enregistre lenom, le prénom, le sexe, la date de naissance, l'adresse, la fonction dansl'entreprise, etc. Toutes ces données ont la même structure ; si ellessont gérées par des moyens informatiques, on dit qu'elles constituent une basede données. On utilise aussi le sigle BDD, et le terme anglais correspondantest Data Base.   Définition : une basede données est un ensemble structuré de données, géré à l'aide d'un ordinateur. On rajoute parfois deuxconditions supplémentaires à la définition précédente : ·         exhaustivité: la base contient toutes les informations requises pour le service que l'on enattend ; ·         unicité: la même information n'est présente qu'une seule fois (pas de doublons). Reprenons l'exemple de labase de données du personnel. Elle est utilisée pour la paye mensuelle, pourl'avancement, les mutations, les mises à la retraite, etc. L'exhaustivité estindispensable pour le personnel, car la personne qui est absente de la base...n'est pas payée. L'unicité est importante pour l'employeur, car la personne quiest enregistré deux fois... risque de toucher double paye ! Les bases dedonnées sont très utilisées dans les entreprises. Outre la liste des membres dupersonnel, on y trouve tout ce qui concerne : les fournisseurs les clients les prospects les contacts les commandes les factures les produits et services le stock le personnel les salaires et les charges correspondantes le commerce électronique, etc. Bien entendu, les bases dedonnées existaient avant l'introduction de l'informatique au milieu duvingtième siècle, mais elles ne portaient pas encore ce nom. Pour stockerl'information, on utilisait des fiches, regroupées dans des boites appeléesfichiers. Initialement, les fiches étaient triées manuellement. Avecl'introduction des perforations, le tri devint mécanique, puisélectromécanique. Le développement des bases de données gérées par des moyensinformatiques a rendu obsolètes ces anciennes techniques.     2 - Le stockage desdonnées (les tables) Des données ayant mêmestructure peuvent être rangées dans un même tableau. Dans le cas de la listedes membres du personnel, la première colonne contiendra les noms, la secondeles prénoms, la troisième le sexe, la quatrième la date de naissance, etc. Lacaractéristique d'un tel tableau est que toutes les données d'une même colonnesont du même type. Dans une base de données, un tel tableau s'appelle unetable. Ci-dessous se trouve un exemple simple de table : Nom Prénom Sexe Adresse Ville Code postal Durand Pierre M 31 rue des champs Uriage 38410 Chose Stéphanie F 2 place Stanislas Nancy 54000 Trombe Jean M 18 cours de la libération Grenoble 38001 etc.           Dans une table, les termesligne et enregistrement sont synonymes. Il en est de même pour les termescolonnes et champs. En anglais : row et column. La table d'une base de donnéesne doit pas être confondue avec la feuille de calcul d'un tableur. Cettedernière est également constituée d'un tableau, mais toutes les données d'unemême colonne ne sont pas forcément du même type. Dans le cas où elles le sont,la feuille de données peut facilement être transformée en table parimportation. Par contre, l'exportation d'une table de SGBD vers un tableur estthéoriquement toujours possible. En pratique il faut, dans les deux cas,disposer du filtre qui permet à l'un des logiciels de lire le format del'autre. A défaut, on peut exporter en mode texte (avec délimiteur) dans unlogiciel, puis réimporter dans l'autre. 3 - Le logiciel (SGBD) Le logiciel qui gère une basede données s'appelle un système de gestion de base de données. On le désignegénéralement pas son sigle SGBD (DBMS en anglais, pour Data Base ManagementSystem). En fait, il devrait s'appeler "logiciel de gestion de base dedonnées" car, en informatique, le mot "système" désignegénéralement l'ensemble matériel + logiciel. Mais l'expression SGBD estconsacrée par l'usage, et nous n'avons pas d'autre choix que l'adopter. Tous les SGBD présentent àpeu près les mêmes fonctionnalités. Ils se distinguent par leur coût, par levolume de données qu'ils sont capables de gérer, par le nombre d'utilisateursqui peuvent interroger la base simultanément, par la facilité avec laquelle ilss'interfacent avec les autres logiciels d'application utilisés parl'entreprise, etc. Il existe des bases dedonnées de toutes tailles, depuis les plus modestes (une liste des numéros detéléphone utilisée par une seule personne), jusqu'aux plus grandes (la base desdonnées commerciales d'un magasin à succursales multiples, contenant destéraoctets de données ou plus, et utilisée par le service marketing). Le nombre d'utilisateursutilisant une base de données est également extrêmement variable. Une BDD peutservir à une seule personne, laquelle l'utilise sur son poste de travail, ouêtre à la disposition de dizaines de milliers d'agents (comme dans les systèmesde réservation des billets d'avion par exemple).   Les éditeurs de SGBD separtagent un marché mondial enlente régression depuis deux ans : 8-9 milliards de dollars en 2000, 7-8milliards en 2001 et 6-7 milliards en 2002, les chiffres variant quelque peuselon les sources. Les principaux éditeurs (avec leurs parts de marché enl'an 2002, calculées sur le chiffre d'affaires) sont : IBM (36 %), éditeur des SGBD DB2 (développé en interne - mis sur le marché en 1984) et Informix (obtenu par rachat de l'entreprise correspondante en 2001 ; la société Informix avait été créée en 1981. Une version bridée de DB2 vient d'apparaître sur le marché, où elle concurrence SQL Server de Microsoft ; Oracle (34 %), éditeur du SGBD qui porte le même nom. Cette entreprise a été créée en 1977 ; Microsoft (18 %), éditeur de trois SGBD. SQL Server est destiné aux gros systèmes, Access est un produit de bureautique professionnelle, et Foxpro est destiné aux développeurs. L'arrivée de Microsoft sur le marché des SGBD date du début des années 90 ; Sybase ( lestables, pour stocker les données ; ·         lesrequêtes, pour retrouver les données ; ·         lesformulaires, pour saisir les données ou les visualiser à l'écran ; ·         lesétats, pour imprimer les données ; ·         lespages, pour communiquer avec la BDD via un navigateur (Internet Exploreruniquement) ; ·         lesmacros, pour automatiser des opérations répétitives effectuées sur labase ; ·         lesmodules, pour rajouter des fonctionnalités grâce à de la programmation en VBA(Visual Basic for Applications).  Sélectionner l'objet table, s'il ne l'est pasdéjà par défaut. Trois méthodes sont proposées pour créer une nouvelletable : ·         créerune table en mode création. C'est la méthode générale, la seule que nousrecommandions ; ·         créerune table à l'aide de l'assistant. Ce dernier vous offre un certain nombre detables toutes prêtes dont vous pouvez vous inspirer. Cependant, rien neremplace une bonne analyse du problème de stockage des données, suivie d'uneréalisation personnalisée et adaptée ; ·         créerune table en entrant des données. Une table toute prête vous est proposée, danslaquelle vous pouvez immédiatement saisir des données, le logiciel se chargeantde déterminer leur type et leur format. Cette façon de procéder est déplorable,et nous la déconseillons absolument, sauf pour des essais sans suite. En mode création, une fenêtres'ouvre qui permet de définir la table champ par champ, en précisant le nom duchamp et le type de données qu'il contient. 3 - Les types de données Tous les SGBD offrent lapossibilité de stocker du texte, de l'information numérique, et des dates (avecou sans les heures). Le type "monétaire" est un cas particulierd'information numérique, et le lien hypertexte un cas particulier de texte.Lorsque l'on utilise Access, une liste déroulante propose les types de donnéessuivants : ·         texte(type par défaut) ·         mémo(texte contenant plus de 255 caractères) ·         numérique ·         date/heure ·         monétaire(cas particulier du numérique) ·         numéroauto: numérotation automatique, séquentielle ou aléatoire ·         oui/non,c'est à dire booléen (deux valeurs possibles seulement) ·         objetOLE : pour le stockage des données numériques ·         autresque le texte, les nombres les dates ·         lienhypertexte : cas particulier du type texte Le tableau ci-dessous préciseles propriétés de ces différents types. Il est nécessaire, à ce stade, d'effectuerles bons choix. Si l'on modifie ultérieurement le type de données d'un champ,alors que la table contient déjà des informations, ces dernières risquentd'être tronquées ou perdues. Type Propriétés Taille Texte Le champ peut contenir n'importe quel caractère alphanumérique (chiffre, lettre, signe de ponctuation). Ce type de données est utilisé pour le texte, mais aussi pour les nombres sur lesquels on n'effectue pas de calculs (code postal, numéro de téléphone) < 256 caractères Mémo Le champ peut contenir n'importe quel caractère alphanumérique. Le type mémo est réservé aux champs de type texte susceptibles de contenir plus de 255 caractères < 65.536 caractères Numérique Données numériques (non monétaires) susceptibles d'être utilisées dans des opérations mathématiques 1 à 16 octets Date/heure Données de date et/ou d'heure (pour les années comprises entre 100 et 9999) 8 octets Monétaire Données monétaires, présentées avec deux chiffres après la virgule, et le symbole monétaire du pays (? pour la France) 8 octets NuméroAuto Numérotation automatique, séquentielle (commençant à 1) ou aléatoire. Souvent utilisée pour générer le code des enregistrements 4 octets (entier long) Oui/non Variable booléenne (deux valeurs possibles uniquement) 1 bit Objet OLE Pour lier un objet extérieur, ou incorporer un objet dans la base. Souvent utilisé pour les données multimédia. Peut servir pour tout fichier binaire (document Word, feuille de calcul Excel, etc.) < 1 Go Lien hypertexte Permet d'enregistrer des URL de sites web et des adresses de courrier électronique < 2049 caractères Pour sauvegarder votretravail, cliquez sur l'icône "Enregistrer" dans la barred'outils. Lorsque tous les champs sont définis, fermez la fenêtre, en répondant"non" à la question relative à la clé primaire, et en donnant un nomà la table. Ce nom apparaît désormais dans la fenêtre relative à la base dedonnées. Nous verrons, au chapitre 4, à quoi set la clé primaire. Pourmodifier une table, il faut la sélectionner (dans la fenêtre base de données),puis cliquer sur l'icône "Modifier". La fenêtre s'ouvre enmode création comme précédemment. Pour supprimer une table, il faut lasélectionner et utiliser la fonction "supprimer" (clic droit) ou latouche du même nom. 4 - Les propriétés deschamps La partie inférieure de lafenêtre du mode création est intitulée "Propriétés du champ". Cespropriétés se trouvent rassemblées dans l'onglet "Général". La listedes propriétés d'un champ dépend du type de données choisi, mais une propriétédonnée peut apparaître pour des types de données différents. Exemple : lapropriété "Taille du champ" apparaît pour les types de données"Texte", "Numérique"et "NuméroAuto". Lesprincipales propriétés sont : ·         Tailledu champ ; ·         Format: définit la manière dont les informations s'affichent. Exemple : leformat monétaire affiche deux chiffres après la virgule, puis un espace et lesymbole de l'euro ; ·         Masquede saisie : guide la saisie des données et exerce un contrôle. Exemple :un code postal français est composé de cinq chiffres ; ·         Légende: définit le nom de l'étiquette dans le formulaire associé à la table. Il estpréférable d'implémenter cette propriété au niveau du formulairelui-même ; ·         Valeurpar défaut : valeur qui s'affiche dans le champ avant saisie parl'utilisateur ; ·         Validesi : condition de validité du champ. Exemple : une notation sur 20 doitêtre comprise entre 0 et 20 ; ·         Messagesi erreur : ce message s'affiche si la condition de validité précédente n'estpas satisfaite ; ·         Nullinterdit : le champ correspondant ne peut rester vide lors de la saisie d'unenregistrement ; ·         Chaînevide autorisée : le champ peut contenir une chaîne ne comportant aucuncaractère ; ·         Indexé: un fichier index est associé au champ de telle sorte que les recherchesd'information s'effectuent plus rapidement. Le chapitre 3 explique cequ'est un index, et comment on le crée ; ·         Compressionunicode : un octet suffit pour saisir un caractère (pour les alphabets utilisésdans l'Europe de l'ouest et dans le monde anglophone). Remarque 1 : la propriété"mode IME" concerne l'usage d'Access en japonais, et ne nousintéresse donc pas ici. Pour faire fonctionnercorrectement certaines requêtes, il est important de bien comprendre ladifférence entre la valeur Null, une chaîne vide et une chaîne blanche. Unchamp d'un enregistrement : ·         possèdela valeur Null si aucune information n'a été introduite, ou si l'informationprésente a été supprimée ; ·         contientune chaîne vide si on a défini la valeur par défaut du champ à l'aide de deuxguillemets contigus (""), et si aucune information n'a été introduite(ou si l'information introduite a été supprimée) ; ·         contientune chaîne "blanche", si un ou plusieurs espaces ont été introduitset n'ont pas été supprimés. ·         Ladéfinition de certaines propriétés des champs soulève des problèmes de syntaxe.La touche F1 fournit une aide contextuelle, c'est à dire liée à la position ducurseur. 5 - Saisir les données  Pour introduire des données dans une table, ilfaut l'ouvrir en mode "feuille de données". Dans la fenêtre base dedonnées (l'objet table étant sélectionné), on peut  : ·         faireun double clic sur le nom de la table ; ·         sélectionnerla table, et cliquer sur l'icône "Ouvrir" ; ·         faireun clic droit sur la table et sélectionner "Ouvrir" dans la listedéroulante. Sur le plan pratique, pourpasser facilement du mode "création" au mode "feuille dedonnées" ou vice versa, il suffit de cliquer sur l'icône"affichage" représentée ci-contre. Cette icône est présente dès quel'on se trouve déjà dans l'un des deux modes précités. On peut ainsi vérifier le bonfonctionnement des listes, formats, masques de saisie, etc. On notera que lecontrôle des informations se fait lors du passage à l'enregistrement suivant.Par exemple, si une liste est obligatoire, une information qui ne fait paspartie de la liste ne sera rejetée qu'au passage à la ligne suivante. Avecl'affichage d'un message qui, selon les bonnes traditions de l'informatique,risque fort d'être sibyllin... 6 – Conclusion  Il est essentiel de bien réaliser que, dansles BDD, les tables se présentent sous un double aspect. C'est ainsi qu'il fautdistinguer : ·         l'aspectstructure : noms des champs, types de données, propriétés, listes -- en bref, toutce qui est défini dans le mode "création" de la table ; ·         l'aspectcontenu : les valeurs introduites dans les champs des divers enregistrements,en mode "feuille de données". Nous rencontrerons aussi cedouble aspect à propos des requêtes. Lors des opérations d'import/export, lesystème nous demandera si seule la structure est transportée, ou si les donnéesdoivent suivre. Chapitre 3 : Les index 1 - Introduction Les bases de données prennentsouvent des proportions importantes, voire considérables. Si une recherched'information dans une table s'effectue de manière simplement séquentielle(c'est à dire en examinant toute la table, ou du moins tous les champsconcernés, du début jusqu'à la fin), le temps d'attente peut devenir prohibitifpour l'opérateur. L'index est l'outil qui permet de résoudre ce problème. La notion d'index est trèsancienne. Elle semble remonter à la grande bibliothèque d'Alexandrie, célèbredans l'Antiquité, mais malheureusement détruite par un incendie lors de laconquête de l'Égypte par les arabes. Cette bibliothèque s'était dotée d'unindex par auteurs et d'un index par matières pour faciliter les recherches deses lecteurs parmi les nombreux ouvrages (en papyrus) qu'elle possédait. Imaginons une bibliothèquedans laquelle les livres sont rangés n'importe comment -- au fur et à mesure deleur acquisition, par exemple. Pour rechercher un livre dont on connaît letitre, il faut parcourir rayons dans l'ordre (recherche séquentielle). Ou l'onfinit par trouver (ouf !), ou l'on arrive bredouille au dernier rayonnageet on en conclut que la bibliothèque ne possède pas l'ouvrage. Bien entendu, personne nesera jamais assez sot pour organiser une bibliothèque de pareille façon. Leslivres seront rangés par ordre alphabétique du titre, par exemple. Si le titreque nous recherchons commence par un L, nous irons vers le rayon du milieuet nous examinerons un ouvrage. Si son titre commence par un P, nousconclurons que nous sommes allés trop loin. Nous reculerons quelque peu, etnous réitérerons notre démarche. Nous arriverons beaucoup plus vite queprécédemment à trouver le livre que nous recherchons, ou à conclure qu'il n'estpas dans la bibliothèque, parce que nous pratiquons une méthode dichotomique(quelque peu optimisée), qui nous permet d'arriver au résultat en n'examinantqu'une petite fraction des livres contenus dans la bibliothèque. Nous pouvonspratiquer une technique efficace de recherche parce que les livres constituentun ensemble ordonné. Dans un ensemble désordonné, on ne peut pratiquer qu'unerecherche séquentielle, beaucoup plus lente. Mais... comment ferons-nous sinous recherchons un livre dont nous connaissons l'auteur, mais pas letitre ? Les livres de la bibliothèque ne peuvent pas être triés à la foispar ordre alphabétique de leur titre, et celui de leur auteur. C'est iciqu'intervient la notion d'index. Pour chaque livre, nous créons une fiche surlaquelle nous inscrivons le nom de l'auteur et le titre du livre. Puis nousrangeons ces fiches par ordre alphabétique des noms d'auteur. Pour rechercherle livre d'un auteur donné, nous compulsons les fiches. Comme elles constituentun ensemble ordonné, l'opération est rapide ; ou nous obtenons le titre dulivre, ou nous concluons que le livre ne se trouve pas dans la bibliothèque.Dans le premier cas, nous nous rendons dans les rayons munis du titre, et commeles livres sont classés par ordre alphabétique de leur titre, notre trouvonsrapidement l'ouvrage en question. Imaginons maintenant que la bibliothèque soitgérée par ordinateur. Si la table qui contient les livres est triée par ordrealphabétique des titres, il faut que nous construisions un index informatiquesur le champ auteur pour que la recherche d'un livre dont on connaît l'auteurs'effectue rapidement. Car l'ordinateur est programmé à l'image de ce que fontles humains : dans un ensemble non trié il recherche séquentiellement,alors que dans un ensemble trié il recherche par dichotomie. Dans le secondcas, il va beaucoup plus vite. Comme pour l'ensemble de ce cours, nousutilisons le SGBD Access comme support pratique. 2 - Le fonctionnement del'index  Nous disposons maintenant d'un ordinateur pourgérer la bibliothèque. Au fur et à mesure que nous achetons des livres, nousles numérotons dans l'ordre. Puis nous saisissons dans la table d'une BDD lesdonnées qui les caractérisent (numéro, titre, auteur, éditeur, année d'édition,ISBN, etc.), et nous les rangeons sur les rayons dans l'ordre de leur numéro.La table se présente ainsi : N° Titre Auteur Éditeur Année ISBN etc. 1 Mon jardin J. Machin Eyrolles 1998 5-1234-4321-8 ... 2 Access A. Chose Dunod 2002 3-6789-9876-2 ... 3 Les écoles S. Truc Lattès 2001 4-1985-5891-3 ... 4 etc.           En informatique, un index estreprésenté par une table à une seule colonne, comme on le voit sur la figureci-dessous. Dans le premier index (index sur le titre), le premier titre parordre alphabétique correspond au livre n° 2 (Access), suivi du livren° 3 (Les écoles) et du livre n° 1 (Mon jardin). Les autres index s'interprètentde la même façon. 2 3 1 ..       2 1 3 ..       2 1 3 ..       1 3 2 ..       2 3 1 .. Index titre Index auteur Index éditeur Index année Index ISBN L'index présente desavantages : il accélère les recherches d'information. En effet, l'index est une représentation de la table, triée sur un champ donné. On peut donc lui appliquer les méthodes connues de recherche rapide sur un ensemble ordonné (c'est le SGBD qui se charge de l'opération, laquelle est transparente pour l'opérateur) ; il est de taille très inférieure à celle de la table : on peut le remettre à jour en temps réel à chaque modification de cette dernière ; il peut servir à empêcher l'opérateur de créer des enregistrements dupliquées en saisissant deux fois, par erreur, les mêmes données. Nous reviendrons sur ce point au paragraphe suivant. L'index ne possède pas quedes avantages. Voici pour ses inconvénients : chaque fois que nous demandons au système de créer (et de maintenir) un index, nous augmentons sa charge de travail, et par conséquent nous le freinons. Ainsi, les opérations de saisie et de maintenance sont ralenties par la présence d'index, car ces derniers doivent être mis à jour immédiatement ; un index occupe de la place en mémoire sur le disque. En fait, ce dernier argument a beaucoup perdu de sa valeur avec le temps, parce que la mémoire de masse des ordinateurs ne cesse de croître rapidement, et qu'elle est devenue si bon marché (son coût à l'octet est divisé par deux tous les deux ans environ) qu'on la gaspille allégrement. L'informatique permet decréer des index sur plusieurs champs. Imaginons que nous ayons séparé le nom etle prénom de l'auteur, par exemple. Un index sur les deux champs nom et prénomcorrespond en fait à l'index créé sur un champ unique dans lequel nous aurionsconcaténé le nom et le prénom. 3 - Les doublons  On appelle "doublon" une informationqui apparaît au moins deux fois dans une table. La notion de doublonss'applique à une colonne donnée, ou à plusieurs colonnes, ou à la totalité descolonnes d'une même table (figure ci-dessous). Dans ce dernier cas, nous avonsaffaire à deux enregistrements (ou plus) identiques, une situation qu'il fauttoujours considérer comme anormale. A B C  1   aa   $   2  bb  %  3  cc  +  1  dd   - A B C  1   aa   $   2  bb  %  3  cc  +  1  aa   - A B C  1   aa   $   2  bb  %  3  cc  +  1  aa  $ Doublon sur une colonne Doublon sur deux colonnes Enregistrement dupliqué Dans une BDD, lesenregistrements dupliqués peuvent provenir de deux sources : les erreurs de saisie. Le taux des erreurs humaines est de l'ordre de un à quelques pourcents. Il est inévitable que, de temps en temps, un opérateur tente d'introduire dans une BDD des informations qui s'y trouvent déjà. Il est normal de confier au SGBD le soin de l'en empêcher ; la manipulation des informations contenues dans la base. Considérons par exemple la table qui illustre ci-dessus le cas du doublon sur deux colonnes. Si, pour une raison quelconque, nous supprimons la troisième colonne, nous transformons ce doublon sur deux colonnes en un enregistrement dupliqué, dont la présence peut être souhaitée (comptage), inutile ou nuisible suivant les cas. Lorsque nous introduisons del'information dans une table pourvue d'un index, le SGBD met ce dernier à jouren temps réel. Au cours de cette opération, il peut détecter facilement sicette nouvelle information constitue un doublon sur les champs concernés. Ilest 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 undoublon. Nous reviendrons, dans les chapitres relatifs aux requêtes, sur leproblème de la création de doublons indésirables lors de la manipulation desinformations d'une BDD. 4 - L'indexation d'un champ Dans le chapitre consacré auxtables, nous avons rencontré la "Propriété du champ" intitulée"Indexé", pour tous les types de données sauf "Objet OLE".Quand nous cliquons dans la zone de texte correspondante, une liste déroulantenous est proposée, qui contient les trois choix suivants : Non Oui - Avec doublons Oui - Sans doublons Pour créer un index sur lechamp correspondant, il suffit de répondre "Oui", avec ou sansdoublon selon le cas. Si nous conservons la valeur "Non" par défaut,aucun index ne sera créé. Il est inutile de ralentir le fonctionnement dusystème lors de la saisie des données, si cela ne nous fait pas gagner du tempsultérieurement. Il est donc préférable de répondre "Non" dans les cassuivants : la table considérée contient peu d'enregistrements ; nous effectuons rarement (voire jamais) de recherche dans ce champ ; nous ne trions jamais la table sur ce champ ; il est normal que le champ contienne des doublons. Ainsi, il est totalement inutile d'indexer un champ booléen, bien que ce soit techniquement possible. Dans les cas contraires, lacréation d'un index présente de l'intérêt. Se pose alors le problème de savoirsi nous admettons ou non les doublons : si les doublons ne posent pas de problème (ex : homonymie), nous choisirons l'option "Avec doublons". Ceci dit, indexer dans le seul but de rendre les recherches plus rapides, sans chercher à empêcher les fautes de saisie, peut constituer dans certains cas une erreur ; dans le cas général, nous choisirons l'option "Sans doublons", ce qui aura pour effet de nous 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). Rappelons pour mémoire qu'unchamp doté d'une clé est toujours indexé sans doublons. Or une table ne peutcontenir qu'une seule clé, alors qu'elle peut être dotée de plusieurs index. Ilfaut donc réserver la clé pour la réalisation des relations, et ne pasl'utiliser comme index. 5 - La création d'un indexmulti-champ Dans une table contenant desdonnées relatives à plusieurs milliers de personnes, le risque d'homonymiedevient important. A fortiori dans une plus grande table, celle représentantl'annuaire téléphonique d'une grande ville par exemple. Pour accepterl'homonymie tout en rejetant les doublons dus à des erreurs de saisie, onutilise un index basé sur plusieurs champs. Si la probabilité de trouver deuxfois "Dupont" est importante, celle de trouver deux fois "DupontJean" est déjà nettement plus faible, et celle de trouver deux fois"Dupont Jean né le 12/06/1978" est pratiquement nulle. En créant unindex sur deux champs (Nom + Prénom) ou sur trois champs (Nom + Prénom + Datede naissance), on peut rejeter les doublons dus à des erreurs de saisie tout entolérant parfaitement l'homonymie. On notera que le SGBD Access permet degrouper dix champs au maximum dans un index multi-champ, mais qu'on ne dépassepratiquement jamais la valeur trois. Pour créer un index multi champ, il fautse trouver en mode création de la table, et cliquer sur l'icône  "Index". Une fenêtre s'ouvre, etl'on procède aux opérations suivantes : dans la colonne de gauche, on donne un nom à l'index multi-champ ; dans la colonne médiane, on écrit les uns sous les autres les noms des champs constitutifs de l'index ; dans la colonne de droite, on précise l'ordre de tri. Par défaut, on conserve "Croissant" ; on clique sur le nom de l'index puis, dans la moitié inférieure de la boite, intitulée "Propriétés de l'index", on fixe à "Oui" la propriété "Unique" si l'on désire interdire les doublons. La figure ci-dessousreprésente l'état de la boite de dialogue en fin de saisie, dans le cas simpleoù seulement deux champs ("Nom" et "Prénom") sontconcernés. Plusieurs index multi-champpeuvent coexister dans une même table. Ils peuvent également cohabiter avec uneclé. Tout ce petit monde se retrouve listé dans la fenêtre de définition desindex. L'index relatif à une clé se repère à l'icône correspondante dans lacolonne (grisée) la plus à gauche, à son nom "PrimaryKey", et par lefait que la propriété "Primaire" affiche "Oui", comme lemontre la figure ci-dessous. On notera pour terminer que,si un champ fait partie d'un index multi-champ, sa propriété "Indexé"vaut "Non". C'est normal, il ne faut rien y changer. 6 - Conclusion Les index jouent un rôlediscret mais important dans la gestion des BDD. La décision de créer un indexrésulte de l'examen des avantages et inconvénients de cette opération. L'indexralentit les saisies et consomme un peu de place, mais il rend les tris et lesrecherches d'information plus rapides. Bien entendu, il est inutile de créer unindex sur quelque champ que ce soit dans une table qui renferme très peud'enregistrements. L'index joue un rôle important dans l'élimination desdoublons résultant d'erreurs de saisie. Chapitre 4 : Les listes de choix 1 – Introduction  Considérons l'exemple d'une table (que nousappellerons "Personnes") constituée comme le montre l'exempleci-dessous. Nom Prénom Titre Adresse Commune Code postal Durand Pierre M. 31 rue des champs Uriage 38410 Chose Stéphanie Melle 2 place Stanislas Nancy 54000 Trombe Jean M. 18 cours de la libération Grenoble 38001 Machin Andrée Mme 10 cours Berriat Grenoble 38000 etc.           Il est tout à fait fastidieuxde saisir de nombreuses fois la même information, telle que celle du titre(Mme, Melle, M.). En outre, si la liste est assez longue, le même nom decommune sera saisi à plusieurs reprises -- avec le risque d'une faute defrappe, suivie d'une erreur si l'on effectue dans la table des recherchesbasées sur le nom de la commune. Enfin, on n'est pas à l'abri d'une erreur desaisie conduisant à associer à une commune un code postal erroné. Pour éviterde saisir plusieurs fois le titre ou le même nom de commune, nous pouvonsl'enregistrer dans une table séparée, et travailler ensuite par copier/coller.C'est encore mieux s'il nous suffit d'indiquer au système où se trouve l'informationcorrespondante pour l'enregistrement que nous sommes en train de renseigner.Pour ce faire, certains SGBD sont dotés d'un outil appelé liste de choix (ouplus simplement liste), que nous allons maintenant examiner. Comme dans lechapitre précédent de ce cours, nous utiliserons le SGBD Access comme supportpratique. 2 - La liste simple (listeinterne)  Dans un premier temps, nous créons une table"Personnes" contenant seulement les trois champs "Nom","Prénom" et "Titre", possédant tous le type de donnéestexte. Nous allons faire en sorte de faire écrire le titre par le système lorsdu remplissage de la table. nous choisissons l'option "Je taperai les valeurs souhaitées". Il ne serait pas raisonnable, en effet, de créer une table pour y introduire seulement trois abréviations ; nous conservons le nombre de colonnes égal à 1. Nous saisissons les trois valeurs (M., Mme, Melle) les unes sous les autres dans la colonne intitulée "Col1" (utiliser la tabulation ou les flèches pour passer d'une valeur à l'autre). Enfin, nous réglons la largeur de la colonne, en la saisissant par le haut de son bord droit ; nous laissons le choix au système du nom de la liste (l'étiquette), et l'opération est terminée. Dans la fenêtre de définitionde la table, aux "Propriétés du champ", onglet "Liste dechoix", nous trouvons les informations représentées sur la figuresuivante : Commentons ces propriétés : Afficher le contrôle : Zone de liste déroulante. Une liste non déroulante conviendrait tout aussi bien, puisque la liste est fort courte, et le système ne nous proposera pas de barre de défilement. Mais attention : choisir "zone de texte" conduit à supprimer la liste, et il faudra la recréer ; Origine source : Liste valeurs. Pour nous rappeler que nous avons saisi la liste directement dans l'assistant ; Contenu : "M.";"Mme";"Melle". Les trois termes saisis sont rassemblés ici, séparés par des points-virgules, et mis entre guillemets pour rappeler qu'il s'agit de chaînes de caractères ; Colonne liée : 1. La colonne liée (ici la première colonne) est celle qui contient l'information que le système copiera / collera pour nous ; Nbre colonnes : 1. Nous n'avons demandé qu'une seule colonne ; En-têtes colonnes : Non. Sans objet pour nous ; Largeurs colonnes : 1 cm (par exemple). C'est la valeur que nous avons fixée dans l'assistant ; Lignes affichées : 8. C'est la valeur par défaut, mais le système limitera aux seules trois lignes utiles ; Largeur liste : 1 cm. C'est la largeur de l'unique colonne. La valeur "auto" convient également ; Limiter à liste : Non. C'est la valeur proposée par défaut. Nous reviendrons sur ce choix au paragraphe suivant. Enregistrons et passons enmode "feuille de données" pour introduire du contenu dans la table.Quand nous cliquons dans le champ "Titre", l'icône de la liste apparaît. Si nous cliquonsdessus, la liste que nous avons saisie nous est proposée telle quelle par lesystème pour remplir le champ "Titre". Il suffit que nous cliquionssur la valeur désirée pour que le système l'inscrive à notre place, comme lemontre la figure ci-dessous. 3 - La liste obligatoire  En saisissant des données dans la table"Personnes", nous constatons que nous pouvons introduire la chaîne denotre choix dans la colonne titre. Or il serait plus judicieux que nous soyonslimités aux seules trois valeurs qui ont un sens. Pour ce faire, il nous fautrevenir en "mode création". Dans la ligne du champ "titre",nous cliquons dans la colonne "type de données". Dans l'onglet"liste de choix", nous réglons à "oui" la propriété"Limiter à liste". Puis nous revenons au"mode feuille dedonnées". Nous constatons alors que le système nous permet toujours desaisir dans le champ "Titre" une information qui n'est pas dans laliste, mais il refuse de l'enregistrer lorsque nous passons à la lignesuivante. Notre liste de titres est effectivement devenue obligatoire, lecontrôle s'effectuant lors du passage à l'enregistrement suivant, ou lors de lafermeture de la table. Rendre une liste obligatoire est une décision qui doitêtre prise au coup par coup, en fonction des besoins. Il est souvent utile derendre une liste obligatoire, mais ce n'est pas une règle absolue. Remarque : on ne peut rendrela liste obligatoire que si la propriété "Afficher le contrôle" est à"Zone de liste déroulante". Une "Zone de liste" ne lepermet pas... et seul l'éditeur Microsoft sait pourquoi. 4 - La liste issue d'unetable (liste externe) Lorsque le nombre d'élémentsde la liste est important, et / ou s'il est susceptible d'êtrecomplété de temps en temps, il est plus judicieux de placer les éléments de laliste dans une table plutôt que de les saisir dans l'assistant. C'est le cas,par exemple, de la liste des communes. La liste peut de nouveau être mise enplace avec l'aide de l'assistant, mais il faut au préalable créer la tablecorrespondante. Nous l'appelons "Communes", nous lui attribuons unseul champ (intitulé "commune"), doté du type de données "texte".Passons en mode "feuille de données

Ce document intitulé « Les bases de données relationnelles » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous