De nombreux logiciels utilisent de simples fichiers pour les sauvegardes. Une base de données s'impose lorsque le volume d'informations à sauvegarder et à gérer devient très important.
Une base de données est un ensemble hiérarchisé et structuré permettant de stocker un grand volume d'informations. Elle est représentée physiquement par un ensemble de fichiers stockés en mémoire, exploités et gérés (création, recherche, mise à jour) par un système de gestion de base de données (SGBD).
Il existe de nombreux types de bases de données :
Les formats de sauvegarde des bases de données sont propres à chaque logiciel. Les formats les plus classiques pour les fichiers d'échange sont :
Plusieurs solutions permettent d'optimiser les bases de données :
Le modèle de base de données le plus répandu est le modèle de base de données relationnelle. Dans ce modèle, les informations sont organisées dans des tables. Une base de données peut renfermer plusieurs tables reliées entre elles.
Une table est organisée en lignes et en colonnes. Chaque colonnes correspond à un champ et chaque ligne à un enregistrement.
Un champ est caractérisé par :
Exemples de types de champ sous MySQL :
Entiers | TINYINT, SMALLINT, MEDIUMINT, INT, ou BIGINT ayant respectivement des tailles de 1, 2, 3, 4 et 8 octets. |
---|---|
Réels | FLOAT, DOUBLE ayant respectivement des tailles de 4 et 8 octets. |
Dates | DATE (AAAA-MM-JJ), DATETIME (AAAA-MM-JJ HH:MM:SS), TIME (HH:MM:SS). |
Booléen | BOOL, BIT. |
Caractères | CHAR (M) (stocke M caractères), VARCHAR (M) (idem mais longueur variable par rapport à CHAR). |
Chaînes | TINYTEXT (255 caractères au maximum), MEDIUM (16 777 215 caractères au maximum), LONGTEXT (4 294 967 295 caractères au maximum). |
L'exemple suivant montre la structure d'une table "Recepteur" permettant de stocker des informations sur les différents récepteurs présents dans une installation de domotique. Chaque ligne représente un enregistrement, constitué de champs qui lui sont propres. Par exemple, le champ "nom" du deuxième enregistrement de la table "Recepteur" vaut "plafonnierch1".
Table Recepteur | ||||
---|---|---|---|---|
recepteur_id | type | nom | adresse | piece_id |
1 | convecteur | convecteurch1 | 16 | 1 |
2 | eclairage | plafonnierch1 | 24 | 1 |
3 | convecteur | convecteurch2 | 18 | 2 |
4 | volet | voletjardin | 33 | 3 |
5 | eclairage | veilleusech1 | 25 | 1 |
6 | volet | voletch2 | 32 | 2 |
Exemple d'implémentation de la table Recepteur sous MySQL :
La représentation UML peut se faire à l'aide du stéréotype "table" :
«table» Recepteur |
---|
-recepteur_id : int -type : varchar -nom : varchar -adresse : tinyint -piece_id : int |
Un champ peut être défini comme clé primaire. Une clé primaire sert à identifier un enregistrement de manière unique.
Une clé étrangère permet de gérer des relations entre plusieurs tables en garantissant la cohérence des données. La clé primaire d'une table est stockée dans une autre table. La clé primaire est appelée clé étrangère dans la deuxième table.
Il existe trois sortes de relations entre deux tables :
Dans l'exemple de schéma relationnel ci-dessous, plusieurs articles pouvant être publiés dans plusieurs journaux, on a introduit la table jonction_article_journaux pour gérer les relations entre les deux tables.
Un index sert à optimiser les recherches. Il peut être créé sur n'importe quel(s) champ(s) d'une table. Il permet d'accélérer la recherche d'une information particulière sans avoir à "balayer" l'ensemble des enregistrements, triés par ordre alphabétique ou numérique.
Généralement, chaque type d'objet modélisé a besoin de sa propre table. Une fois les tables constituées, il faut éviter d'avoir des colonnes (champs) redondantes d'une table à un autre (sauf pour une clé).
Cela permet de réduire les problèmes :
Il faut choisir des clés cohérentes (elles doivent être uniques) et éviter les tables multipliant les champs vides.
SQL signifie Structured Query Language. C'est un langage permettant d'accéder aux systèmes de gestion de bases de données. Il permet de récupérer, stocker, insérer, supprimer des champs et des enregistrements dans des tables.
Syntaxe simplifiée :
INSERT INTO table (champ1,champ2, ...) VALUES (valeur1,valeur2, ...);
Exemple :
INSERT INTO client (nom, prenom) VALUES ("Dupond", "Alain");
Syntaxe simplifiée :
SELECT champ1, champ2, ... FROM table1, table2, ... WHERE critères;
Exemple :
SELECT client.nom, client.prenom FROM client WHERE client.ville = "Paris" OR client.ville = "Marseille";
Les champs peuvent apparaître sous deux formes :
Les critères sont des expressions logiques utilisant des opérateurs :
Opérateur | Nom |
---|---|
AND | et |
OR | ou |
= | égalité |
> | supérieur |
< | inférieur |
>= | supérieur ou égal |
<= | inférieur ou égal |
!= ou <> | différent de |
IS NOT NULL | non nul |
BETWEEN | compris entre |
IN | contenu dans |
LIKE | comparaison de motif |
Syntaxe simplifiée :
UPDATE table SET champ1 = valeur1, champ2 = valeur2, ... WHERE critères;
Exemple :
UPDATE client SET client.numTelephone = "0123456789" WHERE client.nom = "Tairieur";
Syntaxe simplifiée :
DELETE FROM table WHERE critères;
Exemple :
DELETE FROM client WHERE client.ville = "Lyon";
Il est possible d’extraire des données de plusieurs tables liées entre elles par clé primaire / clé étrangère, en joignant les tables concernées dans la clause WHERE. Pour cela, il faut associer les lignes des différentes tables en ajoutant des conditions d’égalité entre les champs permettant cette jointure.
Exemple :
SELECT client.nom, facture.montant FROM client, facture WHERE client.numero = facture.numeroClient;
Syntaxe générale :
CREATE TABLE table ( champ1 type_données, champ2 type_données, champ3 type_données );
Le mot-clé "type_donnees" est à remplacer par le mot-clé définissant le type de données (INT, DATE...).
Il est également possible de définir d'autres options :
Exemple :
CREATE TABLE utilisateur ( id INT PRIMARY KEY NOT NULL, nom VARCHAR(100), prenom VARCHAR(100), date_naissance DATE, nombre_enfants INT );
Syntaxe :
DROP TABLE table;
Syntaxe :
DROP DATABASE base;