Paris-Saclay University

Bases de données 2

Principes d'utilisation des systèmes de gestion de bases de données

D'après le cours d'Emmanuel Waller

Introduction

Quoi ? Qui ? Quand ? Pourquoi ? Comment ?

  • SGBD : Qu'est-ce que c'est ?
  • Utilisation :
    • Qui peut l'utiliser ? Dans quelles situations est-ce utile ?
    • Pourquoi ? (quels problèmes cela résout-il ?)
    • Comment l'utiliser ? Quels sont les modes d'utilisation disponibles ?
  • Principes : Approche raisonnée et méthodique
  • Indépendant d'un SGBD particulier : concepts généraux

Les problèmes de base de données

Pourquoi avons-nous besoin des SGBD ?

  • Contexte réel : les programmeurs écrivent des applications
  • Rencontrent des problèmes (algorithmique, réseau, persistance des données)
  • Exemple concret : Réservation de places SNCF
  • Problèmes à gérer : traitement des données, gestion des transactions, etc.

Exemple SNCF

Illustration : Gestion des réservations SNCF

  • Clients effectuent des réservations (client, date, train, etc.)
  • Employés gèrent les trains (horaires, départs, arrivées, etc.)
  • Comment un SGBD permet de gérer ces interactions ?

Persistance

  • Situation : Client réserve un billet, puis se déconnecte
  • Il faut :
    • Conserver sa réservation (stockage sécurisé)
    • Effacer les informations sensibles comme son numéro de carte bancaire

Que doit-on persister ? Que doit-on supprimer ?

Grandes quantités de données

  • Situation : Quantité d'informations supérieure à la mémoire vive
  • Accès disque : Lent et coûteux
  • Problème : Comment garantir un temps de réponse raisonnable ?
  • Optimisation : Techniques pour accélérer l'accès aux données

Imaginez des solutions d'optimisation pour améliorer l'accès disque.

Reprise sur panne

  • Situation : Client a réservé et payé mais panne avant stockage des données
  • Problème : La transaction doit être atomique (tout ou rien)
  • Il faut : Garantir que paiement et réservation soient liés

Comment garantir qu'une transaction ne soit pas partiellement exécutée ?

Concurrence

  • Situation : Deux clients réservent la dernière place dans un train
  • Problème : Gestion des accès concurrents
  • Il faut : Garantir que seule une réservation est validée pour cette place

Quels mécanismes utiliser pour gérer la concurrence ? (verrouillage, isolation)

Confidentialité

  • Situation : Accès non autorisé à des données sensibles
  • Problème : Protéger les données des utilisateurs et limiter les accès
  • Il faut : Garantir que seuls les utilisateurs autorisés puissent accéder aux données sensibles

Contraintes d'intégrité

  • Situation : Une erreur introduit un kilométrage négatif
  • Il faut : Imposer des règles d'intégrité sur les données (ex : kilométrage non négatif)
  • Exemple : Contraintes sur les réservations de sièges

Répartition des données

  • Situation : Réservation pour un trajet international (Paris-Venise)
  • Problème : Communication entre bases de données dans différents pays
  • Il faut : Coordonner les systèmes entre différentes bases de données

Indépendance des niveaux

  • Situation : Modification de l'organisation des données sur disque
  • Problème : Modularité entre niveaux physique et logique
  • Il faut : Éviter de devoir réécrire toute l'application à chaque changement de structure

Modèle, conception, mise à jour, interrogation

  • Représenter les données : Modèle de données
  • Organiser : Conception des bases de données
  • Manipuler : Création, modification, suppression des données
  • Interroger : Langage de requête (SQL)

Vocabulaire (1/3)

  • Information = Donnée (ex : Train Paris-Saint Tropez)
  • Informations = Base de données
  • 12 problèmes de base de données
  • Domaine des bases de données = Résolution de ces problèmes

Vocabulaire (2/3)

  • SGBD = Logiciel pour gérer les problèmes de base de données
  • SGBD fournit des outils conceptuels et pratiques pour résoudre ces problèmes

Vocabulaire (3/3)

  • SQL = Langage de base de données
  • Mode interactif : Ordres SQL tapés directement
  • Mode programme : Ordres SQL intégrés dans un programme

But du cours (1/2)

Objectif : Savoir utiliser le SGBD pour résoudre les 12 problèmes courants en bases de données

But du cours (2/2)

Objectif : Savoir utiliser le mode programme pour gérer les 9 problèmes spécifiques liés aux accès aux bases de données

Vue d'ensemble et architecture (1/2)

  • Base de données : Contient les données
  • SGBD : Exécute des programmes qui gèrent la base de données
  • Serveur : Tourne en continu, unique
  • Clients : Se connectent et se déconnectent à volonté
Architecture client-serveur
Architecture client-serveur

Vue d'ensemble et architecture (2/2)

  • Mode interactif : Gestion manuelle des ordres SQL
  • Mode programme : Ordres SQL exécutés via un programme (Java, PHP, etc.)

Structure du cours

  • Étudier les problèmes de base de données un par un
  • Pour chaque problème : comprendre et utiliser les outils fournis par le SGBD

Compétences à acquérir

  • Comprendre les mécanismes des problèmes de base de données
  • Détecter les occurrences de ces problèmes dans une application donnée
  • Programmer la meilleure solution pour chacune des occurrences

Pourquoi il ne suffit pas de lire la documentation

  • Les concepts en bases de données sont souvent plus complexes qu'ils n'y paraissent
  • Exemple : Comme en programmation Java, il ne suffit pas de lire un manuel pour maîtriser les subtilités
  • Apprendre les bases de données nécessite une compréhension approfondie des concepts et des pratiques

Quelles sont les difficultés à apprendre seul un langage comme SQL ?

Construction d'un SGBD et théorie (1/4)

  • Pour chaque problème de base de données, un SGBD doit fournir des outils pour le résoudre
  • Étude théorique et systèmes d'implantation pour répondre aux besoins des programmeurs

Construction d'un SGBD et théorie (2/4)

  • Exemple : Modèle de données
    • Un bon modèle de données permet une représentation efficace des informations
    • Différents modèles : Hiérarchique, relationnel, orienté objet, XML

Construction d'un SGBD et théorie (3/4)

  • Exemple : Langage d'interrogation
    • Un bon SGBD doit fournir un langage performant pour formuler des requêtes
    • Exemples : SQL, algèbre relationnelle, datalog
    • Études théoriques : Propriétés des langages d'interrogation (monotonie, complexité, expressivité)

Construction d'un SGBD et théorie (4/4)

  • Exemple : Gestion de la concurrence
    • Le SGBD doit implémenter des mécanismes robustes de gestion des verrous pour gérer les accès concurrents

Autres SGBD célèbres

  • Oracle (propriétaire, très coûteux)
  • SQL Server (Microsoft), DB2 (IBM), Ingres
  • SGBD libres : MySQL, PostgreSQL
  • Microsoft Access (plus basique, pour petites applications)

Avantages et inconvénients des solutions libres versus propriétaires

Bibliographie

  • SQL pour Oracle, Christian Soutou, Eyrolles, 2010
  • Maîtriser MySQL 5, Yves Darmaillac et Philippe Rigaux, O'Reilly, 2005
  • Pratique de MySQL et PHP, Philippe Rigaux, O'Reilly, 2005
  • Comprendre XSLT, Bernd Amann et Philippe Rigaux, O'Reilly, 2002

Note : Voir page de Philippe Rigaux pour des chapitres disponibles gratuitement

But du cours

À la fin de ce cours, vous saurez :

  • Utiliser un SGBD pour gérer les 12 problèmes communs de bases de données
  • Intégrer le mode programme pour résoudre les 9 problèmes d'accès au serveur de base de données

Modèle de données

Rappel du problème

  • Ce rappel couvre des concepts essentiels pour la suite du cours.
  • Situation : Il y a des informations à manipuler par l'application (ex: billets de train).
  • Il faut les représenter, organiser, créer, modifier, détruire et interroger.

Analyse du problème et outils SGBD

Il faut un modèle de données.

Outil fourni par le SGBD : le modèle relationnel.

Principe

Les informations de l'application sont représentées par des « tables » :

  • Table = nom + colonnes
  • Colonne = nom + type (integer, varchar2(10), etc.)
  • Contenu de la table = lignes (ou tuples)
  • Base de données = ensemble de tables liées
  • Relation entre les tables : clé primaire et clé étrangère

Exemple

Trois billets : Jules va à St Tropez (850 km), Jim à Rio de Janeiro (6000 km), Jeanne à New York (5000 km).

Client Destination KM
Jules St Tropez 850
Jim Rio de Janeiro 6000
Jeanne New York 5000

Comment ajouter une nouvelle colonne 'Prix' pour chaque billet ?

Remarque

Paraît simple et évident ? Avant le relationnel : 20 ans de difficultés avec des modèles de « spaghettis »...

Ted Codd : prix Turing en 1986 (modèle + interrogation par algèbre et calcul).

Remarque (suite)

Ce problème ne se gère pas par des ordres de base de données par le programmeur.

C'est le constructeur du SGBD qui choisit le modèle. Cependant, le programmeur doit comprendre ce modèle pour l'utiliser efficacement lors de la conception.

Compétences à acquérir

Utilisation lors de la résolution du problème de la conception.

  • Comprendre le modèle relationnel
  • Concevoir une base de données en respectant les relations entre les tables

Mises à jour

Rappel du problème

  • Ce rappel couvre des concepts essentiels pour la gestion des données dans une base.
  • Situation : Il y a des informations à manipuler par l'application.
  • Elles sont représentées dans des tables.
  • Il faut pouvoir les créer, modifier et détruire selon les besoins de l'application.

Outils fournis par le SGBD

Le langage de mise à jour fait partie intégrante de SQL. Il permet de gérer les modifications des données dans une base.

Principaux ordres SQL pour les mises à jour :

  • INSERT : Ajouter de nouvelles lignes dans une table
  • UPDATE : Modifier les données existantes
  • DELETE : Supprimer des lignes
  • ALTER : Modifier la structure de la table (ajouter/supprimer des colonnes ou des contraintes)
  • DROP : Supprimer complètement une table

Principe

Les mises à jour permettent de manipuler non seulement les données mais aussi la structure des tables. Voici les principales actions :

  • Créer, renommer, supprimer une table
  • Ajouter, modifier, supprimer une colonne ou une contrainte
  • Insérer, modifier, supprimer des lignes (une ou plusieurs)
  • Attention : certaines opérations affectent seulement la structure, d'autres impactent le contenu

Pourquoi serait-il dangereux de supprimer une contrainte d'intégrité sur une colonne ?

Exemple

Voici quelques exemples d'ordres SQL pour manipuler une table :

create table piece (nom varchar2(10), prix real);
insert into piece values ('clou', 3.0);
update piece set prix = prix + 3.0 where nom = 'vis';
delete from piece where nom = 'vis';
insert into piece values ('ecrou', null);
alter table piece add (num integer);
rename piece to catalogue;
create table cheap(name, price) as 
    select nom, prix from piece where prix <= 4.0;
drop table piece;

Que se passe-t-il si une ligne avec un null est insérée dans une colonne sans contrainte ?

Explication détaillée des commandes

  • CREATE TABLE : Crée une nouvelle table avec les colonnes spécifiées.
  • INSERT INTO : Insère une nouvelle ligne dans la table.
  • UPDATE : Modifie les lignes existantes selon une condition.
  • DELETE : Supprime les lignes répondant à une condition.
  • ALTER TABLE : Modifie la structure de la table (ajout de colonne ici).
  • RENAME : Renomme la table.
  • CREATE TABLE AS SELECT : Crée une nouvelle table basée sur le résultat d'une requête SELECT.
  • DROP TABLE : Supprime la table de la base de données.

Dans quelles situations utiliseriez-vous CREATE TABLE AS SELECT ?

Compétences à acquérir

À la fin de cette section, vous devez être capable de :

  • Analyser : Savoir expliquer ce qu'une séquence d'ordres SQL fait sur une table donnée.
  • Construire : Savoir écrire des séquences d'ordres SQL pour résoudre des problèmes concrets dans une application.

Proposez une séquence d'ordres SQL pour ajouter une nouvelle colonne 'quantité' à la table catalogue et mettre à jour cette colonne avec des valeurs.

Persistance

Rappel du problème

  • La persistance des données est essentielle pour les applications en bases de données.
  • Situation : Un client effectue une réservation puis se déconnecte.
  • Problème : Il faut que certaines données (ex. la réservation) persistent même après la terminaison du processus client.

Outils fournis par le SGBD

Le SGBD garantit la persistance des données à la demande du programmeur.

  • Les données sont automatiquement stockées de manière persistante dans les tables.
  • Le programmeur n'a pas besoin de gérer manuellement la lecture et l'écriture dans des fichiers comme en Java.
  • Le SGBD se charge de conserver les données après la fin des sessions utilisateurs.

Principe

Le principe de base est simple : une donnée persiste en fin de session si, et seulement si, elle est dans une table.

Tout ordre SQL exécuté sur les données (insertion, modification, suppression) a un effet persistant sur la base de données.

Important : La persistance est assurée automatiquement par le SGBD, contrairement aux fichiers gérés manuellement en programmation classique.

Motivation

Comparaison avec Java :

  • En Java, la persistance des données nécessite des opérations explicites telles que l'écriture dans des fichiers, la gestion des flux d'entrée/sortie, des boucles, etc.
  • Avec un SGBD, la persistance est automatique, car il est dédié à cette tâche.
  • Cela simplifie grandement la gestion des données par rapport à la programmation traditionnelle.

Quelles seraient les étapes en Java pour persister une réservation ? Comparez avec l'utilisation d'un SGBD.

Exemple

Démonstration pratique :

  • Insérez une réservation dans une table et déconnectez-vous.
  • Après la reconnexion, les données de réservation sont toujours présentes dans la base.

Comment savoir si une donnée a bien été persistée après une déconnexion ?

Compétences à acquérir

  • Analyse : Savoir déterminer quelles données persistent après l'exécution d'une séquence d'ordres SQL donnée.
  • Construction : Savoir écrire les ordres SQL nécessaires pour assurer la persistance des données dans une application.
  • Cas général : Introduction aux transactions (abordé plus tard), qui permettent de garantir la persistance et la cohérence des données même en cas de défaillance.

Interrogation

Rappel du problème

  • L'application a besoin d'extraire des informations spécifiques des données.
  • Situation : Les données sont stockées dans des tables, mais il faut pouvoir les interroger pour les exploiter efficacement.
  • Problème : Comment récupérer les informations nécessaires en fonction de critères précis ?

Analyse du problème et outils SGBD

  • Pour interroger les données, il faut utiliser des « programmes » sous forme de requêtes SQL.
  • Le SGBD fournit un outil clé : le langage d'interrogation, qui fait partie de SQL.
  • Vocabulaire : une interrogation dans SQL est appelée une « requête ».
  • Une requête permet de sélectionner des informations selon des critères spécifiques.

Principe

Une requête SQL permet d'extraire des informations sous certaines conditions :

  • On sélectionne certains champs (colonnes).
  • On filtre les lignes d'une table qui satisfont une condition.
  • Le résultat est un ensemble de lignes correspondant aux critères donnés.

Quels champs et conditions utiliseriez-vous pour récupérer les clients ayant une réservation supérieure à 5000 km ?

Exemple

Donner les clients ayant un billet pour une destination située à plus de 3000 km :

select client
from billet
where km > 3000;

Résultat :

  • Jim
  • Jeanne

Que se passerait-il si aucune ligne ne satisfait la condition ?

Une vision très simple

Interaction avec la base de données :

  • Le client envoie une requête SQL au serveur (ex: SELECT, INSERT, UPDATE).
  • Le serveur exécute la requête et retourne les résultats au client.

Les requêtes SQL permettent d'extraire les données ou de les manipuler facilement.

Exemple

Donner tous les billets dans la table :

select *
from billet;

Donner toutes les destinations distinctes :

select distinct destination
from billet;

Pourquoi utiliser distinct dans cette requête ?

Motivation : langage de haut niveau

  • SQL est un langage proche de la pensée humaine, plus abstrait que l'assembleur ou les langages de bas niveau.
  • Les requêtes sont concises mais très puissantes : un seul ordre SQL peut accomplir beaucoup de choses.
  • Exemple : Comparez la taille d'une requête SQL pour extraire des données avec le nombre de lignes de code nécessaires en Java pour faire la même chose.
  • Simplicité : écrire une requête est généralement plus simple que d'écrire un programme complet.
  • Optimisation : Les SGBD sont capables d'optimiser l'exécution des requêtes pour améliorer les performances.

Imaginez écrire en Java une fonction pour récupérer tous les clients avec une destination unique. Comparez-la à l'équivalent SQL.

Remarque

Les fondements théoriques de SQL reposent sur des langages mathématiques :

  • Algèbre relationnelle : utilisée pour décrire les opérations sur les relations (tables).
  • Calcul des prédicats : utilisé pour exprimer des conditions logiques sur les données.
  • Fixpoint et PL/SQL : utilisés pour des opérations récursives et des procédures complexes.

Pourquoi est-il important que SQL ait des fondements théoriques solides ?

Compétences à acquérir

  • Analyse : Savoir expliquer ce que fait une requête SQL donnée.
  • Construction : Savoir écrire des requêtes SQL pour extraire ou manipuler des données. Exemples : jointures, différences, regroupements.
  • Introduire la notion de jointure et comment combiner les données de plusieurs tables pour obtenir des résultats complexes.

Écrivez une requête SQL qui combine deux tables (billet et client) pour afficher les clients et leur destination pour un trajet de plus de 3000 km.

Pour imprimer ou exporter ces slides, cliquez ici.
Puis imprimez la page dans votre navigateur.