INTRODUCTION AUX BASES DE DONNEES

Introduction

Définition

De nombreux logiciels permettent de sauvegarder les données dans de simples fichiers. Une base de données est utilisée lorsque le volume de données à 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 sur une mémoire, exploités et gérés (création, recherche, mise à jour) par un système de gestion de base de données.

Modèles de bases de données

Il existe de nombreux types de bases de données, par exemple :

Les bases de données relationnelles

Définition

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.

Les tables

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_idtypenomadressepiece_id
1convecteurconvecteurch1161
2eclairageplafonnierch1241
3convecteurconvecteurch2182
4voletvoletjardin333
5eclairageveilleusech1251
6voletvoletch2322

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

Clé primaire, clé étrangère

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.

Index

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.

Règles générales de conception

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.

Le langage SQL

Introduction

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.

Enregistrement des données

Syntaxe simplifiée :

INSERT INTO table (champ1,champ2, ...) VALUES (valeur1,valeur2, ...)

Exemple :

INSERT INTO client (nom, prenom) VALUES ("Dupond", "Alain")

Visualisation des données

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érateurNom
ANDet
ORou
=égalité
>supérieur
<inférieur
>=supérieur ou égal
<=inférieur ou égal
!= ou <>différent de
IS NOT NULLnon nul
BETWEENcompris entre
INcontenu dans
LIKEcomparaison de motif

Modification des données

Syntaxe simplifiée :

UPDATE table SET champ1 = valeur1, champ2 = valeur2, ... WHERE critères

Exemple :

UPDATE client SET client.numTelephone = "0123456789"
WHERE client.nom = "Tairieur"

Suppression des enregistrements

Syntaxe simplifiée :

DELETE FROM table WHERE critères

Exemple :

DELETE FROM client WHERE client.ville = "Lyon"

Jointure naturelle

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

Création d'une table

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
)

Suppression d'une table

Syntaxe :

DROP TABLE table;

Suppression d'une base de données entière

Syntaxe :

DROP DATABASE base;