Skip to content

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

Quelques Définitions

Depuis le début de l'informatique, l'un des soucis majeurs des utilisateurs a été de pouvoir stocker massivement des données et de pouvoir en disposer régulièrement afin d'en extraire de nouvelles informations, de les consulter et de les modifier.

Très tôt (1970) il a fallu organiser le stockage de ces données afin de les rendre facilement accessibles et modifiables.

Les bases de données permettent cela.

  • Une base de données est un ensemble d'//enregistrements// capable de fournir une description de lui-même.

  • Un enregistrement est la représentation d'une donnée physique ou d'un objet conceptuel.

exemple : Dans une entreprise, un enregistrement peut représenter un client: nom, prénom, adresse, téléphone, etc. Ces derniers constituent les données.

Une base de donnée est constituée de données et de métadonnées. Une métadonnée est une donnée qui décrit la structure de la base dans la base de données. La base de donnée est donc autodescriptive ou encore intégrée: elle contient non seulement des données mais aussi la description des relations qui les unissent.

  • Un système de gestion de bases de données (SGBD) est un ensemble de programmes utilisés pour définir, administrer et traiter des bases de données et leurs applications associées.

La base de données "administrée" est une structure que vous créez pour contenir des données.

Un SGBD est l'outil que vous utilisez pour créer cette structure et traiter les données qui se trouvent dans la base de données.

Le SGDB masque physiquement les détails du stockage des données de sorte que l'application n'a à se préoccuper que de la manipulation des données et non de la manière de les extraire ou de les stocker.

Bases de données relationnelles

Le modèle de base de données le plus couramment utilisé est le modèle relationnelle ((il existe d'autres modèles: hiérarchique et en réseau que nous n'aborderons pas dans ce cours.)).

Le modèle relationnel a été découvert par E.F. Codd (IBM) au début des années 1970.

Une base de données relationnelle est une base de données qui possèdent une ou plusieurs relations.

Une relation est un tableau à deux dimensions de lignes et de colonnes. Chaque cellule du tableau peut contenir une et une seule valeur et deux lignes ne peuvent être identiques.

On parle indifféremment de relations ou de tables.

Les colonnes d'un tableau sont consistantes: une colonne a la même signification dans chaque ligne.

L'ordre dans lequel les lignes et les colonnes apparaissent dans le tableau n'a aucune signification. Le SGBD traite la table de la même manière, quel que soit l'ordre de ses colonnes. Il en va de même pour les lignes.

Chaque colonne de la table d'une base de données représente un atttribut de la table. La signification d'une colonne est la même pour toutes les lignes de la table.

On parle aussi de champ pour désigner une colonne et d'//enregistrement// (ou encore tuple) pour désigner une ligne. d'une table.

Avantages d'une base de données relationnelle

Dans une base de donnée relationnelle (BDR), il est possible de changer la structure de la BD sans pour autant avoir à modifier les applications qui utilisent les anciennes structures.

Par exemple, si on ajoute une ou plusieurs colonnes à une table, il n'y a pas besoin de changer les applications précedemment écrites pour traiter cette table.

De manière générale, les BDR sont plus flexibles. Les applications écrites pour fonctionner avec ce type de BD sont plus faciles à maintenir qu'avec les autres modèles de BD.

Un exemple de BDR

Les joueurs professionnels de l'Olympique Lyonnais (OL):

Numero Prénom Nom Poste Date de Naissance Nationalité
1 Grégory Coupet Gardien 1972-12-31 Fra
30 Rémy Vercoutre Gardien 1980-06-26 Fra
25 Joan Hartock Gardien 1987-02-17 Fra
20 Eric Abidal Arrière gauche 1979-07-11 Fra
23 Jérémy Berthod Arrière gauche 1984-04-24 Fra
29 Sébastien Squillaci Défenseur central 1980-08-11 Fra
4 Patrick Müller Défenseur central 1976-12-17 Sui
3 Cristiano Marques Cris Défenseur central 1977-06-03 Bré
38 Mourad Benhamida Arrière droit 1986-01-18 Fra
2 François Clerc Arrière droit 1983-04-18 Fra
12 Anthony Réveillère Arrière droit 1979-11-10 Fra
5 Claudio Roberto Caçapa Défenseur central 1976-05-29 Bré
10 Florent Malouda Ailier gauche 1980-06-13 Fra
15 Alou Diarra Milieu défensif 1981-07-15 Fra
28 Jérémy Toulalan Milieu défensif 1983-09-10 Fra
36 Sylvain Idangar Milieu offensif 1984-03-08 Fra
31 Yacine Hima Milieu défensif 1984-03-25 Fra
6 Kim Källström Milieu offensif 1980-08-24 Sué
8 Pernambucano Juninho Milieu offensif 1975-01-30 Bré
21 Tiago Mendes Milieu défensif 1981-05-02 Por
14 Sidney Govou Ailier droit 1979-07-27 Fra
39 Grégory Bettiol Avant centre 1986-03-30 Fra
11 Frederico Chaves Guedes Fred Avant centre 1983-10-03 Bré
19 Karim Benzema Avant centre 1987-12-19 Fra
18 Hatem Ben Arfa Ailier gauche 1987-03-07 Fra
22 Sylvain Wiltord Avant centre 1974-05-10 Fra
9 John Carew Avant centre 1979-09-05 Nor

C'est une BDR ne comportant qu'une seule table.

Les vues

Une vue est un sous-ensemble d'une base de données qu'une application peut traiter. Elle peut contenir des parties d'une ou plusieurs tables.

Elles sont très utiles car elles permettent d'extraire et de formater des données sans altérer physiquement les données.

Par exemple, on peut choisir dans la table de l'OL une vue rassemblant les numéros et noms des joueurs:

Numero Nom
1 Coupet
30 Vercoutre
25 Hartock
20 Abidal
23 Berthod
29 Squillaci
4 Müller
3 Cris
38 Benhamida
2 Clerc
12 Réveillère
5 Caçapa
10 Malouda
15 Diarra
28 Toulalan
36 Idangar
31 Hima
6 Källström
8 Juninho
21 Mendes
14 Govou
39 Bettiol
11 Fred
19 Benzema
18 Ben Arfa
22 Wiltord
9 Carew

SGBDR

Un SGBDR est un Système de Gestion de Bases de Données Relationnelles.

En anglais: RDBMS (Relational Data Base Management System)

Quelques exemples de SGBDR

Le modèle client/serveur

La plupart des SGBDR sont construits sur un modèle client/serveur: un client (utilisateur/programme) effectue des requêtes (commandes) vers un serveur qui contient la base de données. Ce dernier effectue les requêtes et retourne les réponses au client. Le client peut être localisée sur la même machine que le serveur ou non. Plusieurs clients peuvent parallèlement effectuer des requêtes sur le serveur.

Ainsi le SGDBR est divisé en deux parties:

  • une partie client envoie les requêtes au serveur via le moyen de communication qui les relie;

  • une partie serveur interprête et exécute les requêtes puis renvoie les résultats au client.

Schémas, domaines et contraintes

Une base de données n'est pas seulement un ensemble de tables. De nombreuses structures supplémentaires, sur différents niveaux, permettent de maintenir l'intégrité des données.

Le schéma de la base de données détaille l'organisation générale des tables.

Le domaine d'une colonne d'une table indique quelles valeurs peuvent être stockées dans la colonne.

Des contraintes peuvent empêcher le stockage de données non valide dans la table.

Schémas

L'intégralité de la structure d'une base de données est stockée dans son schéma, ou vue conceptuelle. Cette structure est quelque fois aussi appelée vue logique complète de la base de données.

Le schéma est une métadonnée. Il décrit la structure de la base de données et est stocké dans des tables qui ressemblent en tout point aux tables qui contiennent des données classiques. Ainsi, une métadonnée n'est rien de plus qu'une donnée.

Domaines

Un attribut d'une relation (c'est à dire la colonne d'une table) peut prendre un nombre fini de valeurs. L'ensemble de ces valeurs constitue le domaine de l'attribut.

Contraintes

Une contrainte est une règle qui précise les valeurs que peuvent prendre un attribut d'une table.

En appliquant des contraintes à une colonne, on peut empêcher la saisie de données non valide par un utilisateur.

Interrogation d'une BDR

La transaction

La modification d'une BDR (client/serveur en général) s'effectue à travers une transaction. Cet ensemble d'opérations qui modifie la BDR est vue comme une unité logique (ou atomique), c'est-à-dire que soit toutes les opérations sont menées à bien (la transaction est alors validée), soit aucune opération n'est effectuée.

Le mécanisme transactionnel d'un SGBDR se charge ainsi d'annuler les opérations partielles d'une transaction lorsque celle-ci ne peut aboutir. La terminologie employée est celle de rollback en cas d'échec (on défait les opérations entamées) et de commit en cas de succès (on valide les opérations entreprises).

La gestion de la concurrence est habituellement effectuée à travers des mécanismes de vérouillage de la base. Elle permet de garder la cohérence de la BDR.

SQL

SQL (Structured Query Language) est un standard d'interrogation des BDR. C'est un langage qui permet d'interroger une base de donnée (création, modification et/ou lecture).

SQL est un langage de type "déclaratif". On spécifie ce que l'on veut obtenir ou faire et c'est la machine qui décide comment elle doit l'exécuter.

Ainsi, contrairement aux langages procéduraux comme C, Pascal ou Java pour lesquels on indique dans un programme l'ensemble des instructions nécessaires au traitement d'un problème, en SQL, on n'a pas la moindre idée de la manière dont la machine exécute une demande, ni dans quel ordre le traitement de la requête est décomposé en différentes tâches, ni de quelle façon elle les synchronise.

SQL est composé de 5 grandes parties:

  • la définition des éléments d'une base de données (tables, colonnes, clés, index, contraintes, etc.)

  • la manipulation des données (insertion, suppression, modification, extraction, etc.)

  • la gestion des droits d'accès aux données (acquisition et révocation des droits)

  • la gestion des transactions

  • la programmation dynamique

On parle ainsi de:

DDL

Le DDL (//Data Definition Language//) est la partie du SQL qui permet de créer des bases de données, des tables, des index, des contraintes, etc. Elle traite de la création des schémas de bases de données.

On y distingue les commandes de base suivantes: ''CREATE'', ''ALTER'' et ''DROP'' qui permettent respectivement de créer, de modifier, et de supprimer un élément de la base.

DML

Le DML (//Data Manipulation Language//) est la partie du SQL qui traite les données, c'est-à-dire qui extrait, ajoute, met à jour ou supprime des données dans les tables.

Elle comprend les commandes de base suivantes: ''INSERT'', ''UPDATE'', ''DELETE'', et ''SELECT'' qui permettent, respectivement, d'insérer, de modifier, de supprimet et d'extraire des données.

DCL

Le DCL (//Data Control Language//) est la partie du SQL qui gère les droits d'accès aux tables. Elle gère les droits d'accès aux différents objets de la base, c'est-à-dire les privilèges (lecture, écriture, insertion, suppression) accordés aux utilisateurs.

Elle comprend les commandes de base suivantes: ''GRANT'' et ''REVOKE'' qui permettent, respectivement, d'attribuer et de révoquer des droits.

TCL

le TCL (//Transaction Control Language//) est la partie du SQL chargée de piloter l'exécution des transactions et notamment de valider ou d'annuler un ensemble d'ordres SQL.

Elle comprend les commandes de base suivantes: ''SET TRANSACTION'', ''COMMIT'' et ''ROLLBACK'' qui permettent, respectivement, de définir, de valider ou d'annuler une transaction.

Les ordres SQL du TCL ''COMMIT'' et ''ROLLBACK'' permettent de gérer les propriétés ACID des SGBDR.

Le terme ACID fait référence aux termes suivants:

  • A : Atomicité. Une transaction s'effectue ou ne s'effectue pas, il n'y a pas de demi-mesure.

  • C : Cohérence. Le résultat ou les changements induits par une transaction doivent impérativementb préserver la cohérence de la base de données.

  • I : Isolation. Les transactions sont isolées les unes des autres. Il n'y a pas de vue partielle des données pendant toute la durée d'une transaction de mise à jour.

exemple: une mise à jour de prix d'article ne sera visible pour d'autres transactions que si ces dernieres ont démarré après la validation de la transaction de mise à jour des données.

  • D : Durabilité. Une fois validée, une transaction doit perdurer, c'est-à-dire que les données sont persistantes même s'il s'ensuit une défaillance dans le système.

Par exemple, dès lors qu'une transaction a été validée, comme la mise à jour des prix, les données modifiées doivent être physiquement stockées pour que, en cas de panne, ces données soient conservées dans l'état où elles ont été spécifiées à la fin de la transaction.

Pour assurer l'ensemble de ces fonctions ACID, les SGBDR utilisent le principe de la journalisation, selon lequel un fichier, dit "journal", historise toutes les transactions effectuées et surtout leur état (en cours, validée ou annulée). Une mise à jour n'est réellement effectuée que si la transaction aboutit. En cas de panne du système, une relecture du journal permet de resynchroniser la base de données pour assurer sa cohérence. De même, si un ''ROLLBACK'' a lieu, les instructions de la transaction sont lues "à l'envers" afin de rétablir les données telles qu'elles devaient être à l'origine de la transaction.

programmation SQL ou SQL dynamique

Outre le SQL de base purement déclaratif, il existe un sous-ensemble procédural, dénommé SQL dynamique, qui permet de "programmer" les bases de données. Il s'agit d'instructions utilisables au sein de programmes externes ou internes, donc réalisées soit dans un langage hôte (Java, C, Perl, Python, FORTRAN, etc.) par un appel d'interface (API), soit au sein d'un module SQL (procédure ou fonction).

Ils permettent une manipulation des données proches d'un langage procédural.

Le SQL dynamique possède de nombreuses instructions dont les plus connues sont : ''DECLARE'', ''SET'', ''FETCH'', ''PREPARE'', ''DESCRIBE'' et ''EXECUTE''.

Dans ce cours, nous nous intéresserons principalement qu'aux deux premières parties (DDL et DML).

Connexion à une BDR

On prendra comme SGBDR dans la suite du cours l'application MySQL.

MySQL est une SGBDR de type client/serveur. Ainsi, avant d'interroger une base de donnée sous MySQL, il faut d'abord effectuer une connexion sur le serveur. Cela permet de démarrer une session.

Lorsqu'une session est ouverte, on peut effectuer une suite de déclaration MySQL.

Ces déclarations se terminent toujours par un "'';''".

Début de session

Il suffit (en mode console) de taper la commande ''mysql'' qui initie le client.

<code bash|Démarrage d'une session MySQL> $ mysql -u utilisateur -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.0.22-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> </code>

Par défaut ici, la connexion s'effectue en local (le client et le serveur sont localisés sur la même machine).

Accès aux métadonnées

Le serveur de la BDR contient les informations relatives à elle-même. Ainsi il est possible de connaître quelles sont les BDR présentes sur le serveur (''show databases;''), de préciser quelle BDR on désire utiliser (''use ol;'') et de demander une description des tables existantes dans la BDR utilisée.

<code mysql| L'instruction SHOW DATABASES> mysql> show databases; +--------------------+ | Database | | -------- | +--------------------+ | information_schema | | ------------------ | | mysql | | ol | | test | | wikidb | +--------------------+ 5 rows in set (0.00 sec)

</code>

La BDR qui nous intéresse parmi celles existantes sur le serveur est ''ol''. <code mysql | Le changement de BDR : USE > mysql> use ol; Database changed </code>

Cette BDR est composée d'un certain nombre de tables: <code mysql|Connaître les tables composant une BDR : SHOW TABLES> mysql> SHOW TABLES; +--------------+ | Tables_in_ol | | ------------ | +--------------+ | joueurs | | ------- | +--------------+ 1 row in set (0.00 sec) </code>

On peut aussi avoir une description complète de chaque table: <code mysql|Connaître la description d'une table: DESCRIBE > mysql> describe joueurs; +-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | | ----- | ---- | ---- | --- | ------- | ----- | +-------------------+--------------+------+-----+---------+-------+ | Numero | int(11) | YES | | NULL | | | ------ | ------- | --- | | ---- | | | Prenom | varchar(100) | YES | | NULL | | | Nom | varchar(100) | YES | | NULL | | | Poste | varchar(100) | YES | | NULL | | | Date_de_naissance | date | YES | | NULL | | | Nationalite | char(3) | YES | | NULL | | +-------------------+--------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) </code>

Fin de session

Pour arrêter une session, il suffit de taper ''quit;'' <code mysql|Fin d'une session SQL> mysql> quit; Bye </code>