Cours

Les bases de données

Table des matières

Qu'est-ce qu'une donnée ?

Toute information caractéristique d'un objet ou d'une personne est une donnée.

Exemples pour les individus : un nom, une adresse, un code postal, une localité, un numéro de téléphone, une date de naissance, un lieu de naissance, une nationalité, ...

Exemples pour les objets : un poids, une largeur, une longueur, une hauteur, un numéro de série, un nom de fabricant, une année de fabrication, un prix, ...

En réalité, nous sommes entourés de personnes et d'objets.

Et, nous sommes amenés à gérer des objets. Le commerçant est obligé de savoir ce qu'il a vendu, ce qui lui reste.

Même un simple particulier gère les numéros de téléphone, les adresses postales, les adresses e-mails des personnes qu'il connaît.

En réalité, gérer des données n'est pas aussi simple que cela ...

Où stocker une donnée ?

Sur une feuille de papier

Exemple : Une simple liste d'adresses de personnes

La solution la plus simple : Sur une feuille de papier, on ajoute les adresses, l'une après l'autre.

Mais, très vite à l'usage, lorsque le nombre d'adresses augmente, on se rend compte que la liste doit être triée (sur le nom de la personne), faute de quoi, pour trouver l'adresse d'une personne, on est condamné à parcourir la liste chaque fois depuis le début !

Une fois triée, on se rend compte que l'insertion d'une nouvelle adresse pose problème. Si on l'ajoute en bas, la liste n'est plus triée. Et, si on veut qu'elle reste triée, il faut décaler d'autres adresses vers le bas. Bref, pour garder une liste lisible, propre et claire (sans petits caractères entre deux lignes, ni flèches), il faut recopier la liste à chaque insertion !

La solution : enregistrer les données dans un fichier.

Et qui dit fichier, dit logiciel ...

Les éditeurs de texte

Un éditeur de texte - comme le NotePad de Windows ou, mieux, le Notepad++ - est un petit programme qui permet de créer un fichier texte tel que adresses.txt. Il suffit d'aller à la fin de la ligne précédant celle qui doit être insérée et de taper sur la touche Enter pour créer une ligne vide et ainsi pouvoir insérer la nouvelle adresse à la bonne place. Facile !

Oui, mais ...

Les informations concernant une personne ne se limitent pas à son adresse ...

Si on veut aussi enregistrer la date d'anniversaire, que faire ?

Le retour de ligne

Remarquez que les lignes sont séparées par un caractère spécial, appelé " retour à la ligne ". Ce caractère - invisible à l'écran, mais présent dans le fichier - est introduit dans le fichier via la touche Enter.

Quoi ! Les éditeurs de texte n'affichent pas tout ce qu'il y a dans le fichier ?
Les éditeurs de texte n'affichent que les caractères affichables. Souvenez-vous de la table ASCII. Les 32 premiers " caractères " ne sont pas affichables. Ce sont des caractères spéciaux. En réalité, des instructions qui servent à dire au logiciel comment afficher les autres caractères. Ainsi, le caractère " retour à la ligne " donne comme instruction d'afficher le caractère suivant sur une nouvelle ligne.

Malheureusement, sur les systèmes d'exploitation Windows, Linux et Mac codent différemment le retour à la ligne. Un simple fichier texte n'est donc pas lisible (aussi confortablement) d'un système à l'autre !

Revenons à notre problème.

Pour séparer les informations qui sont sur une même ligne, il faut utiliser un autre caractère spécial (affichable ou non).

Lequel ?

Celui de son choix, à condition que ce caractère ne sera pas utilisé pour enregistrer une donnée. Par exemple, le point-virgule (;). En effet, le point-virgule est un caractère qui n'est pas utilisé dans un nom, un prénom, un nom de rue, un numéro de rue, un code postal, un nom de localité, une date anniversaire.

Cela pourrait aussi être le caractère " barre verticale " (|), situé sur la touche 1 du clavier. Cela pourrait être le caractère " tabulation ", caractère non-affichable, situé à gauche de la touche A du clavier. Mais, en pratique, le caractère " barre verticale " n'est pas facile à taper car il requiert l'appui sur deux touches. Quant à la tabulation, comme le caractère n'est pas visible, on risque d'en taper deux, ce qui placera la donnée dans la mauvaise colonne.

Le point-virgule est généralement un bon choix.

L'usage veut que les fichiers texte qui contiennent des données séparées par un caractère spécial ont pour extension : *.csv (au lieu de *.txt)

CSV = Comma-separated values. Autrement dit, par défaut le caractère qui sépare les données est la virgule. Cependant, on peut aussi utiliser le point-virgule. Mais, dans ce cas, il peut être utile de prévenir le programme qui lira ce fichier CSV.

Nous renommerons donc notre fichier " contacts.txt " en " contacts.csv ".

Un fichier CSV reste un fichier texte et peut donc être lu et modifié par un éditeur de texte.

Un fichier HTML est aussi un fichier texte et peut donc être lu et modifié par un éditeur de texte, mais il est destiné à être lu par un navigateur web

Finalement, on se rend compte que les informations sont stockées dans une grille. Chaque ligne représente un individu et chaque colonne un type d'information sur cet individu.

Félicitations !

Vous venez de découvrir où les données sont stockées. Dans une grille.

Dans notre exemple, une ligne représente un individu. Et, une colonne une caractéristique des individus.

Il ne faut pas taper des espaces pour que les point-virgules soient les uns sous des autres, car ces espaces feraient alors partie de la donnée. Si un nom est LEBRUN et que vous ajoutez des espaces, la taille du nom ne fera plus six caractères !

Les tableurs

Dans un fichier texte, il est facile d'insérer une ligne afin de maintenir une liste d'adresses triée sur le nom. La première colonne est donc le nom. On parcourra cette colonne de haut vers le bas. Une fois le nom trouvé, il ne reste plus qu'à suivre la ligne.

Mais, on pourrait vouloir utiliser ce fichier autrement. Par exemple, pour inviter à votre anniversaire que les contacts habitant notre localité. Dans ce cas, idéalement, le fichier devrait être trié sur la colonne localité ...

Retrouver une information => tri

Comment faire ?

Il faudrait utiliser un logiciel qui, non seulement lise votre fichier texte, mais aussi affiche vos données dans une grille et qui permet, via un clic, de déplacer les lignes de sorte que les données de la colonne choisie soient, de haut en bas, dans l'ordre. Un tel logiciel s'appelle un tableur. Les tableurs savent lire les fichiers CSV.

Éditeur de texte, tableur, navigateur-web, ... sont des noms de catégorie de logiciels.
Chaque logiciel a son extension de fichier favorite : *.txt | *.csv | *.htm
Un fichier texte peut avoir différentes extensions (*.txt | *.csv | *.htm) en fonction du contenu.
Souvent, un logiciel peut lire plusieurs types de fichier (texte ou non)

Les tableurs sont des logiciels remarquables car ils peuvent trier des milliers de lignes sur base de n'importe quelle colonne en un clic ! Grâce à leur puissance au niveau du tri, ils peuvent nous être d'une grande utilité pour rechercher une information.

Via le JavaScript, on peut trier des données avec un navigateur web (ici, via le framework AngularJS)

Mais, ... ces logiciels n'ont pas été conçus pour cela, mais pour additionner des nombres mis dans des colonnes. D'autre part, ils nous fournissent une aide mais pas une réponse.

Seuls les gestionnaires des bases de données peuvent nous donner la réponse.

Un gestionnaire de base de données est un type de logiciels qui gère les bases de données.

Qu'est-ce qu'une base de données ?

Une base de données est un ensemble de tables.

Résumons.

Une donnée est une caractéristique (d'une personne ou d'un objet).

Pour chaque caractéristique, dans une grille, on ajoute une colonne.

Les lignes représentent les personnes ou les objets qu'on enregistre.

Un ensemble de lignes et colonnes est appelée : table

Un ensemble de tables est appelée : base de données

Dans une base de données,

  • une grille s'appelle : table
  • une colonne s'appelle : champ
  • une ligne s'appelle : enregistrement

Structure d'une table

Donc, pour notre table, nous aurions tendance à faire comme sur une feuille de papier, c'est-à-dire créer 4 champs (colonnes) :

  1. Nom et Prénom
  2. Rue et n°
  3. Code postal et Localité
  4. Anniversaire

Une table doit être bien pensée, dès sa création, car, une fois remplie, séparer les informations contenues dans une colonne pour les placer dans deux champs (colonnes) est très difficile. Par contre, il est toujours possible d'ajouter une colonne.

La structure d'une table concerne les champs (colonnes). Elle indique le nom des champs (colonnes), le type de données dans chaque champs (colonnes) (chaîne de caractères, nombre entier, nombre décimal, date, ...), les particularités de la colonne ( acceptation ou non d'une absence de donnée, données uniques ou non dans la colonne, ...) et, souvent, le lien entre deux colonnes de deux tables; sans oublier, le nom de la table, le type de table, ...

Nous expliquerons prochainement ces notions.

Ici, la structure est mauvaise. Avec la pratique, on se rend compte qu'il est préférable de ne mettre qu'un seul type d'information par champ (colonne).

Le champ (colonnes) " Nom et Prénom " contient deux informations : un nom et un prénom. Idem pour les champs " Rue et n° " et " Code postal et Localité "

La table suivante est mieux structurée.

  1. Nom
  2. Prénom
  3. Rue
  4. Code postal
  5. Localité
  6. Anniversaire

Il est facile de fusionner les informations contenues dans deux champs (colonnes) en une seule.
Mais, scinder un champ en deux est quasi impossible.

Si vous pensez que les données pourraient encore être utiles dans dix, vingt ou cinquante ans, faites en sorte qu'un champ (colonne) ne doive pas être divisée en deux durant les dix, vingt ou cinquante prochaines années.

Donc, si on est certain que, jamais, on aura besoin de scinder deux informations, on peut les laisser ensemble. Mais, si, après coup, à l'usage, il apparaît qu'il faudrait scinder les informations et si la table contient des milliers de lignes, allez chercher vos mouchoirs et surtout un (très) gros portefeuille pour payer le programmeur qui réparera votre " petite " erreur !

Vous avez été prévenu. Réfléchissez. Réfléchissez bien !

Aujourd'hui, aucune entreprise ou administration ne peut se passer de bases de données. Vous ne serez peut être jamais DB administrator, mais même si la base de données ne contient que vos données personnelles ne traitez jamais une structure de table d'une base de données à la légère.

Même si votre table ne contient que 10 lignes. Certes, l'erreur sera vite corrigée, mais ne prenez pas jamais de mauvaises habitudes.

Luttez contre les doublons

A partir de maintenant, les noms de tables et de champs, doivent être composés uniquement des lettres (non-accentuées), minuscules ou majuscules, et des chiffres (0 à 9) avec comme premier caractère une lettre (minuscule). Donc, pas d'espace, pas de caractères spéciaux, même si certains moteurs de bases de données les autorisent. Ce serait prendre une mauvaise habitude. En programmation, pensez " C " ...

Réécrivons le nom des champs (colonnes) de la table "contacts" en respectant les règles du C.

  1. nom
  2. prenom
  3. rue
  4. numeroRue
  5. codePostal
  6. localite
  7. dateAnniversaire

Vous remarquerez probablement que des contacts habitent la même localité - surtout si vous habitez une grande ville.

Donc, la colonne "localite" risque de contenir beaucoup de fois la même information - le même nom de localité -, c'est-à-dire des doublons.

Exemple. Contenu de la table "contacts" :

...
BOUCQ Simone    rue du paradis, 98      1039 BRUXELLES   27 septembre 1968
...
LESCOT Éloi     rue des collines, 27    1029 Bruxelles   2 août 1992
...

De plus, vous pourriez vouloir sélectionner les contacts non plus en fonction de leur nom, mais de leur localité ou de leur date d'anniversaire. En réalité, chaque colonne peut servir au tri.

Sauf si vous êtes facteur, il est probable que jamais vous n'effectuerez de tri sur la colonne "numeroRue". Les colonnes " rue " et " numeroRue " peuvent alors fusionner. Un bon critère pour déterminer une colonne est de savoir si, un jour, elle fera l'objet d'un tri ou non.

Vous devez savoir une chose importante : le moteur de la base de données trie plus vite une colonne contenant des nombres qu'un colonne contenant des chaînes de caractères. Donc, idéalement, les champs susceptibles d'être sélectionnées pour faire un tri ne devraient contenir que des nombres.

Les tables secondaires

Donc, si votre contact habite à " BRUXELLES ", dans la colonne " localite ", tapez un nombre (et non le nom de la localité !).

???

Quel nombre ?

Celui indiqué dans la table " localites ".

Quelle table "localites" ?

Celle que vous allez créer !

Et, pourquoi créer une telle table ?

Pour éviter les erreurs. En effet, sans une telle table, vous pourriez insérer - dans le champ " localite " de la table " contacts " - " Bruxelles " au lieu " BRUXELLES " ...

Et alors ? N'est-ce pas la même chose ?

Pour le facteur peut-être, mais pas pour un programme informatique. Une majuscule n'est pas une minuscule !

Si vous demandez à la base de données la liste de vos contacts à " BRUXELLES ", vous n'obtiendrez pas celle de ceux qui habitent à " Bruxelles " ! Et, je ne vous parle pas de ceux qui habitent à BRUSSELS, à Brussels ou à BrUxelLes, ...

Nous verrons plus tard comment demander quelque chose à une base de données.

Demander la liste de vos contacts dont le numéro de la localité est, par exemple, 17, est plus précis. Et, la réponse sera donc plus sûre !

Il ne vous reste donc plus qu'à créer une table " localites ". Cette table aura donc deux colonnes : id_localite et nomLocalite

Le nom de la colonne débutant par id rappelle celui de l'attribut id utilisé pour identifier de manière unique une balise. La colonne id_localite ne pourra pas contenir deux fois le même nombre. Dans la colonne nomLocalite, seront inscrits les noms de localités. (En principe, ces noms seront aussi uniques)

Contenu de la table " localites " :

16 ...
17 BRUXELLES
18 ...

Pour tenir compte de cette nouvelle table, mettons à jour notre table principale :

...
BOUCQ     Simone   rue du paradis      98      1039    17   27 septembre 1968
...
LESCOT    Éloi     rue des collines    27      1029    17   2 août 1992
...

Et modifions le nom du champ en num_localite, pour refléter le changement de contenu. En effet, cette colonne ne contiendra que des numbers.

Nous aurons donc deux tables : " contacts " et " localites ". L'une est principale (contacts) et l'autre est " secondaire ", car elle ne sert qu'à " l'alimenter " en choses compréhensibles, à permettre le remplacement des nombres entiers par des noms.

Dans une base de données, il peut exister plusieurs tables principales. Une table principale peut même être vue comme secondaire par rapport à une table plus importante. Lorsqu'on représente sur une feuille toutes les tables d'une base de données. Les tables principales sont généralement situées au centre de la feuille. Les tables secondaires - qui "alimentent" les principales - sont situées à la périphérie, sur les bords de la feuille.

Ainsi, le champ " num_localite " de la table " contacts " est lié au champ " id_localite " de la table " localites ". Une colonne num_xxx est toujours liée à une colonne id_xxx.

Il s'agit d'une convention personnelle, pour bien marquer que deux colonnes sont liées. A un champ num_xxx doit correspondre un champ id_xxx. A un champ id_xxx peut correspondre un champ num_xxx. Nous en reparlerons lorsque nous aborderons la notion de foreign key.

Maintenant que vous avez pris conscience de l'importance des tables secondaires, vous connaissez le principe fondamental lié à la création des tables.

Il ne vous reste plus qu'à créer des tables, insérer des données et, pour recevoir la réponse, savoir poser une question.

Le SQL

Le Structured Query Language - en abrégé, SQL - est un langage qui sert à donner des instructions à tout gestionnaire de bases de données et qui, surtout, permet d'obtenir les réponses via des " demandes structurées ". Essentiellement, l'étude du SQL est l'étude de la façon de poser des questions à une base de données.

Language signifie en français langage

Le SQL sert à :

Grosso modo, le SQL ne contient que 7 instructions majeures. Il est donc très facile à étudier.

Les bases de données ne servent pas qu'à gérer un petit carnet d'adresses. Elles sont capables de gérer des millions de lignes. Par exemple, toutes les adresses des habitants d'un pays.

L'étude nécessaire du SQL pour gérer un millier ou un million de lignes est la même (et facile).

Stop. Pour aujourd'hui, vous en avez appris assez !
Dormez et revenez demain.

Demain, on passe à la pratique, à l'étude de SQLite.