Bases de données - smis

Transcription

Bases de données - smis
Systèmes de fichiers
Bases de données
•  Conception de bases de données
•  Modèle Relationnel
•  SQL
•  Méthodologie SQL
•  PL/SQL, JDBC
•  XML, Xpath, Xquery
•  Panorama des BD, BD Flash
Comptabilité
2
Caractéristiques
Chirurgie
Problèmes
Consultations
Psychiatrie
Luc Bouganim : [email protected]
http://www-smis.inria.fr/~bouganim/afti
2
1
Plusieurs applications
3
Caractéristiques
Redondance (données) Caractéristiques
4
Plusieurs applications
Dupont
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Dupond
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Plusieurs applications
  plusieurs formats
Dupont
  plusieurs langages
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Turlututudhjsd
Analyses :xx
Duhpon
Duipont
Symptomes : yy
Analyses : xxxx
Symptomyyyy
Analysesxxxx
Symptomes : yy
Turlututudhjsd
Dupond
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Turlututudhjsd
Analyses :xx
  plusieurs formats
  plusieurs langages
Redondance de données
Problèmes
Problèmes
  Difficultés de gestion
  Difficultés de gestion
  Incohérence des données
Duhpon
Duipont
Symptomes : yy
Analyses : xxxx
Symptomyyyy
Analysesxxxx
Symptomes : yy
Turlututudhjsd
Turlututu : sq
Turlututu : sq
3
4
Interrogations
5
Caractéristiques
Pannes ???
Plusieurs applications
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Turlututudhjsd
Analyses :xx
  plusieurs langages
Redondance de données
Dupont
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Dupond
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Turlututudhjsd
Analyses :xx
  plusieurs formats
ChiruSoft
Dupond
ChiruSoft
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Plusieurs applications
  plusieurs formats
ComptaSoft
ComptaSoft
Dupont
6
Caractéristiques
  plusieurs langages
Redondance de données
Pas de facilité d’interrogation
Pas de facilité d’interrogation
  Question ⇒développement
  Question ⇒développement
Redondance de code
Symptomes : yy
Turlututudhjsd
Turlututu : sq
  Difficultés de gestion
  Incohérence des données
  Coûts élevés
  Maintenance difficile
  Gestion de pannes ???
Duhpon
Duipont
Symptomes : yy
Analyses : xxxx
Symptomyyyy
Analysesxxxx
Symptomes : yy
Turlututudhjsd
Turlututu : sq
PsychiaSoft
Symptomyyyy
Analysesxxxx
  Difficultés de gestion
  Incohérence des données
  Coûts élevés
  Maintenance difficile
PsychiaSoft
Duipont
Symptomes : yy
Analyses : xxxx
Problèmes
ConsultSoft
ConsultSoft
Duhpon
Problèmes
5
Partage de données
7
Caractéristiques
6
Confidentialité
Plusieurs applications
Duipont
Symptomes : yy
Analyses : xxxx
Symptomyyyy
Analysesxxxx
Symptomes : yy
Turlututudhjsd
Turlututu : sq
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Dupond
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Turlututudhjsd
Analyses :xx
  plusieurs formats
  plusieurs langages
Redondance de données
Pas de facilité d’interrogation
Pas de facilité d’interrogation
  Question ⇒développement
  Question ⇒développement
Redondance de code
Redondance de code
Problèmes
Problèmes
  Difficultés de gestion
  Incohérence des données
  Coûts élevés
  Maintenance difficile
  Gestion de pannes ???
  Partage des données ???
  Difficultés de gestion
  Incohérence des données
  Coûts élevés
  Maintenance difficile
  Gestion de pannes ???
  Partage des données ???
  Confidentialité ???
ConsultSoft
ConsultSoft
Duhpon
Redondance de données
Dupont
ChiruSoft
Turlututudhjsd
Analyses :xx
  plusieurs langages
7
Duhpon
Duipont
Symptomes : yy
Analyses : xxxx
Symptomyyyy
Analysesxxxx
Symptomes : yy
Turlututudhjsd
Turlututu : sq
PsychiaSoft
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
ChiruSoft
Dupond
PsychiaSoft
Symptomes : y
Turlututu : sqj
Symptomes : y
Turlututu : sdd
Analyses : xxx
Plusieurs applications
  plusieurs formats
ComptaSoft
ComptaSoft
Dupont
8
Caractéristiques
8
9
L’approche ‘‘Bases de données’’ (1)
L’approche ‘‘Bases de données’’ (2)
10
•  Modélisation des données
I- Indépendance
Physique
 Eliminer la redondance de données
  Centraliser et organiser correctement les données
  Plusieurs niveaux de modélisation
  Outils de conception
X - Standards
II- Indépendance
Logique
IX - Gestion de la
confidentialité
III – Langage de
manipulation
BD
VIII - Concurrence
d’accès
•  Logiciel «Système de Gestion de Bases de Données»
IV - Gestion des
vues
V - Optimisation des
questions
VII - Gestion des
pannes
 Factorisation des modules de contrôle des applications
- Interrogation, cohérence, partage, gestion de pannes, etc…
VI - Gestion de la
cohérence
 Administration facilitées des données
9
10
12
Modélisation du réel
Réel
Conception de bases de données
11
Modèle
conceptuel
• Indépendant du
modèle de données
Modèle
logique
• Dépendant du
modèle de données
Modèle
Physique
• Dépendant du
modèle de données
•  Organisation physique des données
• Dépendant du
SGBD
•  Structures accélératrices (index)
• Indépendant du
SGBD
• Indépendant du
SGBD
Médecin
Codasyl
effectue
Visite
Relationnel Objet
XML
•  Structures de stockage des données
12
13
Méthode de conception ?
•  Plusieurs façons d’aborder la conception d’une BD
•  Entité/Association (E/A) ou Entity/Relationship (E/R)
•  Merise
•  UML
Nom
Bar
Dean
Ben
Bar
Prénom
Joe
Pascal
Zoe
Joe
Ville
Paris
Vence
Lyon
Paris
Pays
France
France
France
France
Immatriculation
125PP75
453LL06
526UU69
257LPM75
Marque
Renault
Peugeot
Renault
Renault
Couleur
Rouge
Vert
Rouge
Jaune
•  Redondance des données et incohérence potentielle
•  Suivre son intuition peut conduire à des erreurs
–  Personne répétée pour chaque voiture : ex. Si Joe Bar change
de ville et qu’une seule ligne est mise à jour…
–  Redondance Ville/Pays : impact d’une erreur de saisie
Redondances
Valeurs nulles
Difficulté de gestion
Impossibilité de répondre à certaines questions
•  Anomalies de mises à jour et besoin de valeurs nulles.
–  Comment insérer une personne sans voiture ?
–  Sémantique de calculs avec des valeurs nulles…
–  Comment supprimer la dernière voiture d'une personne ?
•  Une fois la base de données crée, difficile à modifier… (cf. TP)
•  Les outils de conception sont une aide précieuse
13
14
15
16
Exemple de mauvaise conception (2)
N°
1
2
3
4
Exemple de mauvaise conception (1)
N°
1
2
3
4
–  Intuition + création directe de la BD 
–  Suivre une méthode de conception (MCDMLDMPD) 
– 
– 
– 
– 
14
Méthodes de conception : Exemple Merise
Nom Prénom Ville
Pays Enfant 1 Enfant2 Enfant3 NbEnfants
Bar
Joe
Paris France Paul
Zoe
2
Dean Pascal Vence France
Lili
1
Ben
Zoe
Lyon France Sam
Tor
Tur
3
Cat
Tom
Lens France
0
Réel
DONNEES
MCD
Quelles données ?
Quelle organisation ?
MCT
Quels traitements ?
Modèle
logique
MLD
Modèle logique (e.g, relationnel)
MLT
Structuration en procédure
Modèle
Physique
MPD
Création de la base de donnée
Modèle
conceptuel
•  Redondance cachée :
–  Nombre d’enfants vs enfants
•  Difficulté de gestion
–  Comment gérer les personnes ayant plus de 3 enfants !
–  Comment afficher la liste des enfants ?
TRAITEMENT
MPT
Description de l’architecture des
traitements, algorithmes
Objectif du cours : E/A, Merise, UML ?  E/A light, Merise ultra-light
15
16
17
Déf° (1) : entité / type d’entité
Approche proposée : orientée données
18
•  Entité : représentation d’un objet du monde réel …
1/ Définir l’application (~MCT)
… par rapport au problème à modéliser. Une entité peut donc être …
… concrète : ex. un docteur, un médicament, un client
… abstraite : ex. une visite médicale, une commande
–  Que veut-on faire exactement, définir les sorties (états)
2/ Définir les données (~MCD)
–  quelles sont les données nécessaires ? Comment les organiser ?
3/ Définir les questions nécessaires pour l’application (~MLT)
•  Type d'entité : représentation d'un ensemble d'entités perçues
4/ Validation : Est ce que la structure choisie permet de répondre aux
questions ? Sinon, retour en 1/ ou 2/
comme similaires et ayant les mêmes caractéristiques
–  Ex. docteurs, patients, médicaments, clients, visites, commandes
5/ Passer du MCD au MLD
Profs
Bouganim
6/ Définir les requêtes nécessaires pour l’application (~MPT).
Normalement, le MLD doit permettre de répondre aux requêtes ?
7/ Passer du MLD au MPD
GENERATION AUTOMATIQUE PARTIELLE POSSIBLE !
Profs
Luc
Profs
Crenn
.....
Isabelle
Prénom
....
Adresse
Entités
Nom
Type d'entité
17
18
19
20
Déf° (2) : Propriétés / Identifiants
Déf° (3) : association / type d’association
•  Association : représentation d'un lien non orienté entre plusieurs entités (qui
•  Propriété : donnée élémentaire permettant de décrire une
jouent un rôle déterminé).
–  Ex. Un prof enseigne un cours
–  lien non orienté : un prof enseigne un cours  un cours est enseigné par un prof.
entité ou une association
–  Le nom du patient, la date de la visite
•  Type d'association : représentation d'un ensemble d'associations ayant la même
•  Identifiant d’entité : Une entité est identifiée de manière
sémantique et les mêmes caractéristiques
–  Ex. enseigner
unique par au moins une propriété (généralement une)
–  Ex. n° de sécurité sociale du patient, référence d’un produit
•  Identifiant d’association : il n’existe pas
–  On peut identifier une association par l’ensemble des identifiants des entités
associées
–  Ex. pour enseigne : Code du prof, Code du cours
•  Question : quid de visite : entité ou association ???
–  Un docteur visite un patient  association
–  Un docteur effectue une visite concernant un patient
19
20
Déf°(4) : Cardinalités
21
Exemple : Profs et cours...
Profs
•  Cardinalité : Exprime le nombre minimum et maximum
Cours
enseigne
CodeProf
d’association(s) par entité. Il est Indiqué sur chaque arc,
entre le type d’entité et le type d’association concernées
CodeCours
NomCours
…
NbreHeures
Nom
Prénom
Adresse
Cours
Profs
1
Crenn
enseigne
....
Lewis
enseigne
Cours
16
2
Infos
...
Jerry
....
Profs
2
Bouganim
•  Pour un prof donné, combien d’enseignements ?
1
Maths
.....
–  Au minimum : Min=0
Profs
–  Au maximum : Max=n
 Un prof enseigne de 0 à n cours
55
Isabelle
Profs
3
enseigne
Luc
.....
21
23
Comment produire le MCD ? (1/3)
•  ‘‘Énoncer le réel’’ à modéliser avec des phrases
–  Les patients ont des rendez vous avec des médecins
•  Un patient peut avoir plusieurs RDV (voire aucun)  0,n
•  Un médecin reçoit plusieurs patients (voire aucun)  0,n
0,n
Cours
enseigne
•  Pour un cours donné, combien d’enseignements ?
24
•  Exemple pour la gestion de rendez vous
22
–  Au minimum : 0
Profs
–  Au maximum : 1
–  Un cours est enseigné par 0 à 1 prof
enseigne
0,1
Cours
22
Comment produire le MCD ? (2/3)
24
•  On obtient :
Patient
Patient
0,n
0,n
a un rdv
0,n
Médecin
1,1
Exerce
1,n
Salle
•  Pour connaître la salle, pour un rendez vous, on passe par le médecin
à un RDV
 Ce MCD est bon
0,n
Médecin
•  Et si maintenant le médecin peut exercer dans plusieurs salles ?
Médecin
–  Un médecin exerce dans une salle
•  Un médecin n’exerce que dans une seule salle 
1,1
•  Une salle peut être partagée par plusieurs médecins 1,n
Patient
1,1
exerce
a un rdv
0,n
Médecin
1,n
Exerce
1,n
Salle
•  Comment connaître la salle d’un rendez vous ?
1,n
Salles
0,n
23
 Ce MCD n’est pas bon !
24
25
Comment produire le MCD ? (3/3)
Patient
0,n
a un rdv
0,n
Médecin
1,n
Exerce
Cas pratique : Gérer les notes des étudiants
Salle
1,n
•  Détailler le problème : Que veut dire gérer les notes
–  Que veut on faire ?
(A)
Patient
0,n a un rdv
0,n Médecin
Patient
a un rdv
0,n
0,n
• 
• 
• 
• 
• 
Médecin
1,n
Exerce
(B)
1,n
(C)
1,n
Salle
(A)
(B)
(C)
Connaître la salle pour 1 RDV donné
Pré-allouer des salles aux médecins
Non
Oui
Oui
Non
Non
Oui
établir les bulletins semestriels ?
établir des bulletins provisoires ?
établir des moyennes ?
Faire des statistiques sur plusieurs années ?
Evaluer les notes en fonction des profs...
•  Premier brouillon des données à gérer...
1,n
Salle
Différences fonctionnelles
26
–  Notes, étudiants, Cours...
25
26
27
28
Où s'arrêter dans la modélisation?
Règles (1) Respect des règles de gestion
•  Il faut vérifier que le MCD correspond bien au ‘réel’,
c’est à dire aux règles fixées (celles que l’application
doit respecter)
•  ‘‘Énoncer le réel’’ à modéliser avec des phrases
–  Un étudiant obtient des notes à des cours
–  Un étudiant habite dans une ville
–  Un étudiant a eu un bac d’un certain type
–  Les étudiants sont regroupés en sous groupes
–  Les sous groupes sont regroupés en groupes
–  Les groupes sont regroupés en promotions
•  par exemple:
–  un prof enseigne plusieurs cours
–  une matière est enseignée par plusieurs profs (info/anglais)
–  les notes peuvent être données par n’importe quel prof ou
par plusieurs profs enseignant une matière... (info par
exemple)
–  On peut redoubler une fois....
–  etc...
•  Ne faire des entités que si elles ont une utilité
 C’est le réel à modéliser !!!!
•  Dépend de l’objectif de l’application
27
28
Règles (2) : Propriétés élémentaires,
calculées, constantes
29
Règles (3) Propriétés répétitives
•  Pour une entité, il ne peut y avoir qu’une instance de chaque
propriété de l’entité
•  Toute propriété doit être élémentaire
– 
– 
– 
– 
sinon, complexité de traitement
Ex. de propriétés élémentaires : Age, Salaire, N° de rue
Ex. de propriétés non-élémentaires : Adresse (complète), N°SS
la notion d’élémentaire dépend de l’application. L’adresse peut devenir
élémentaire si elle est toujours manipulé dans son intégralité
(on ne cherchera jamais a faire, par exemple, un tri par ville)
«Il n’est pas gênant d’éclater des propriétés qui devrait être groupés, mais
on ne peut grouper des propriétés qui devrait être éclatées»
–  exemple: Cours ne peut être une propriété de Prof, puisqu’un prof
enseigne plusieurs cours...
–  Remarque : Si un prof ne peut enseigner qu’un seul cours, cours peut
être une propriété de prof
•  Attention aux propriétés n’ayant pas le même nom mais la même
sémantique
–  Ex. : Enfant1, Enfant2, Enfant3 (cf. Slide 16)
–  Ex. : différents types de notes d’un étudiant
•  Une propriété calculée n’est pas à stocker ! (rejoint la règle 8)
•  Remarque : pour éviter d’éventuelles erreurs, on nommera
différemment des propriétés de différentes entités :
–  Sinon, c’est redondant  source d’incohérence
–  Ex. NomPatient, NomDocteur, etc.
–  Du coup une propriété n’apparaît que dans une seule entité ou
association.
•  Une propriété constante n’est pas à stocker (rejoint la règle 8)
–  Sinon, c’est redondant  source d’incohérence
–  On utilisera une table de constantes ...
30
29
30
31
32
Règles (5) : Identifiants d’entités
Règles (4) : Propriétés sans signification
•  Toute entité doit être identifiée !
•  Une propriété ne peut être sans signification pour une
partie des entités ou associations
•  Un identifiant doit être pérenne. Ex. nom et prénom peut
être l’identifiant de l’étudiant, mais ça peut être
insuffisant.
–  exemple : si un prof ne peut enseigner qu’un seul cours, mais
qu’on a choisi de créer une entité ‘personnel’ et non ‘prof’,
on ne stockera pas le cours dans l’entité ‘personnel’ car il
serait sans signification pour une secrétaire...
–  contre exemple : Téléphone et Fax pour un étudiant...
–  il ne faut pas concevoir le MCD en observant les données telles
qu’elles sont (ex. l’école tel qu’elle est). Il faut le concevoir
pour le cas à modéliser (ex. l’école telle qu’elle peut être.... et
telle que l’on se propose de la gérer.... )
•  Plusieurs identifiants peuvent co-exister. En choisir un…
•  Si vous ne trouvez aucun identifiant, votre « entité » est
sans doute une association …
31
32
33
34
Règles (6) : Dépendance pleine des entités
Règles (7): entités et associations
•  Les propriétés d’une association doivent dépendre de
la totalité des entités associées. Si certaines propriétés
ne dépendent que d’un sous ensemble des entités, on
devra
•  2 entités ne peuvent être directement liées : Il faut une
association ! Cependant
–  les rattacher à une des entités
–  créer une nouvelle association
associant ce sous ensemble
–  Une association peut ne pas avoir de « nom »
•  Il est des fois difficile à trouver…
–  Une association peut ne pas avoir de propriété
Prof
enseigne
Heure
Salle
•  C’est un cas très fréquent
Groupe
•  Exemple:
1/ Un prof enseigne toujours
Cours
dans la même salle  dans prof
2/ La salle dépend du prof et
du cours  Nouvelle association entre prof et cours
Heure
Groupe
?
Salle
Cours
33
34
35
36
Règles (8) : pas de dépendance transitive
Première modélisation ‘restreinte’
•  Gérer les notes des étudiants veut dire:
•  Une propriété ne peut dépendre d’une autre propriété qui ne soit
pas l’identifiant
–  Hypothèses :
–  Permet d’éliminer des sous-entités incluses dans une entité
•  une base de données pour chaque promo et pour chaque semestre
–  Données :
•  Exemple :
•  Etudiants (nom, prénom, groupe)
•  Cours (nom, pôle, coefficient)
•  Notes (pour un étudiant et un cours: DS1, DS2, Participation, Examen)
–  Etudiant(nom, adresse, ville, pays)
–  Le pays dépend de la ville or l’identifiant d’étudiant est le nom.
Nom
Jim
Jack
Joe
Jerry
Enseigne
Prof
Adresse
....
....
....
....
Ville
Paris
Paris
Mantes
Paris
–  Traitements :
Pays
France
France
France
France
• 
• 
• 
• 
35
Moyenne par cours pour chaque étudiant
Moyenne par pôle pour chaque étudiant
Moyenne générale pour chaque étudiant
Moyenne par groupe, par cours.
36
37
Modèle entité-association
Etudiant
N°
Nom
Prénom
Groupe
0,n
a obtenu
38
Modèle entité-association
TypeNote
Cours
0,n NomCours
DS1
DS2
Pôle
Participation
Coefficient
Examen
Type
Coefficient
1,n
Etudiant
1,n
N°
Commentaires
a obtenu
Note
Nom
Cours
1,n
NomCours
Pôle
Coefficient
Prénom
 Le schéma est simple, il répond au problème
 On a un minimum de données
Commentaires
 On ne peut pas faire de suivi sur une promo
 On ne peut pas faire de suivi par prof
 Le schéma est simple, il répond au problème
 Pas de statistiques sur plusieurs années
 On a un minimum de données
 Problème de gestion: on aura 4 fois les mêmes programmes
37
38
39
40
Modélisation ‘complète’
Modèle entité-association
•  Gérer les notes des étudiants veut dire:
TypeNote
Type
Coefficient
–  Hypothèses :
•  Une base de données pour l’Université (pour plusieurs années)
•  On veut gérer les profs pour faire des stats par profs, par promos,
etc...
1,n
Etudiant
a obtenu
Note
Nom
–  Problèmes :
• 
• 
• 
• 
1,n
N°
Prénom
Gestion des redoublement, de la situation (actuelle) d’un étudiant
Cohabitation de notes sur plusieurs années, des profs, des étudiants ??
Les matières sont enseignés par plusieurs profs, qui met les notes ??
Comment modéliser qu’un prof enseigne à un groupe de TP ?
Cours
1,n
NomCours
Pôle
Coefficient
1,n
1,n
Période
Est dans
1,n
1,n
1,n
Code
Année
Semestre
Enseigne
Nb heures
–  Données :
1,n
1,n
•  Etudiants, Matières, Notes
•  TypeDeNotes, Periodes, Profs, Groupes, etc...
Groupe
Code
39
1,n
Profs
Nom
Prénom
Adresse
1,n
40
41
42
Le modèle relationnel
Domaine
•  ENSEMBLE DE VALEURS
•  En 1970, Codd, mathématicien, chercheur chez IBM,
propose le Modèle Relationnel, basé sur le concept de
Relation de la théorie des ensembles
•  Exemples:
– 
– 
– 
– 
– 
– 
A Relational Model of Data for Large Shared Data Banks,
CACM 13, No. 6, June 1970
ENTIER
REEL
CHAINES DE CARACTERES
EUROS
SALAIRE = {4 000..100 000}
COULEUR= {BLEU, BLANC, ROUGE}
•  Il définit l’ Algèbre Relationnelle sur laquelle est basé
SQL (Structured Query Language), le langage standard
de manipulation (LMD) et de description des données
(LDD) de tous les SGBD Relationnels actuels
41
42
43
44
Produit cartésien
Relation, attribut
•  SOUS-ENSEMBLE DU PRODUIT CARTESIEN D'UNE
LISTE DE DOMAINES
•  LE PRODUIT CARTESIEN D1x D2x ... x Dn EST
L'ENSEMBLE DES TUPLES (N-UPLETS)
<V1,V2,....Vn> TELS QUE Vi∈Di
–  Une relation est caractérisée par un nom
–  Exemple:
•  D1 = COULEUR
•  D2 = BOOLEEN
•  Exemple:
–  D1 = {Bleu,Blanc,Rouge}
–  D2 = {Vrai, Faux}
•  Plus simplement …
CoulVins
Coul
Choix
Bleu
Faux
Blanc Vrai
Rouge Vrai
–  Une relation est une table à deux dimensions
–  Une ligne est un tuple
–  Un nom est associé à chaque colonne afin de la repérer
indépendamment de son numéro d'ordre
Bleu Vrai
Bleu Faux
Blanc Vrai
Blanc Faux
Rouge Vrai
Rouge Faux
•  ATTRIBUT
–  nom donné à une colonne d'une relation
–  prend ses valeurs dans un domaine
43
44
Exemple de relation
45
Clé
•  GROUPE D'ATTRIBUTS MINIMUM QUI
DETERMINE UN TUPLE UNIQUE DANS UNE
RELATION
Champs, attributs,
colonnes
Relation ou table
46
•  Exemples:
Id-D
Nom
Prénom
1
Dupont
Pierre
2
Durand
Paul
3
Masse
Jean
….
……..
……
–  {CRU,MILLESIME} DANS VINS ==> NV
–  NSS DANS PERSONNE
•  CONTRAINTE D'ENTITE
–  Toute relation doit posséder au moins une clé documentée
Tuples, lignes ou
n-uplets
45
46
47
48
Modélisation Relationnelle (2)
Clé Etrangère
Docteurs
•  GROUPE D'ATTRIBUTS DEVANT APPARAITRE
COMME CLE DANS UNE AUTRE RELATION
•  Les clés étrangères définissent les contraintes
d'intégrité référentielles
Prescriptions
Id-D
Nom
Prénom
Id-V
Ligne
Id-M
1
Dupont
Pierre
1
1
12
1 par jour
2
Durand
Paul
2
5
10 gouttes
3
Masse
Jean
….
……..
……
Visites
Id-D
Id-P
Id-V
Date
Prix
1
1
2
1
15 juin
250
2
1
8
2 par jour
1
1
2
12 août
180
2
2
12
1 par jour
350
2
3
3
2 gouttes
250
….
….
….
…………
2
–  Lors d'une insertion, la valeur des attributs doit exister dans
la relation référencée
–  Lors d'une suppression dans la relation référencée les tuples
référençant doivent disparaître
–  Elles correspondent aux liens entité-association obligatoires
2
2
3
3
4
13 juillet
1 mars
Patients
47
Posologie
Médicaments
Id-P
Nom
Prénom
Ville
1
Lebeau
Jacques
Paris
Id-M
Nom
Description
2
Troger
Zoe
Evry
1
Aspegic 1000
……………………………..
3
Doe
John
Paris
2
Fluisédal
……………………………..
4
Perry
Paule
Valenton
3
Mucomyst
……………………………..
….
…….
…….
…….
….
……..
……………………………..
48
49
Clés primaires
Docteurs
50
Clés étrangères
Docteurs
Prescriptions
Prescriptions
Id-D
Nom
Prénom
Id-V
Ligne
Id-M
Posologie
Id-D
Nom
Prénom
Id-V
Ligne
Id-M
1
Dupont
Pierre
1
1
12
1 par jour
1
Dupont
Pierre
1
1
12
1 par jour
2
Durand
Paul
2
5
10 gouttes
2
Durand
Paul
2
5
10 gouttes
3
Masse
Jean
….
……..
……
Visites
Id-D
Id-P
Id-V
Date
Prix
1
1
2
1
15 juin
250
2
1
8
2 par jour
3
Masse
Jean
1
1
2
12 août
180
2
2
12
1 par jour
….
……..
……
350
2
3
3
2 gouttes
250
….
….
….
…………
2
2
2
3
3
4
13 juillet
1 mars
Patients
Nom
Prénom
Ville
1
Lebeau
Jacques
Paris
Id-M
Nom
2
Troger
Zoe
Evry
1
Id-D
Id-P
Id-V
Date
Prix
1
1
2
1
15 juin
250
2
1
8
2 par jour
1
1
2
12 août
180
2
2
12
1 par jour
350
2
3
3
2 gouttes
250
….
….
….
…………
2
2
2
3
3
4
13 juillet
1 mars
Patients
Médicaments
Id-P
Visites
Posologie
Médicaments
Id-P
Nom
Prénom
Ville
Description
1
Lebeau
Jacques
Paris
Id-M
Nom
Description
Aspegic 1000
……………………………..
2
Troger
Zoe
Evry
1
Aspegic 1000
……………………………..
3
Doe
John
Paris
2
Fluisédal
……………………………..
3
Doe
John
Paris
2
Fluisédal
……………………………..
4
Perry
Paule
Valenton
3
Mucomyst
……………………………..
4
Perry
Paule
Valenton
3
Mucomyst
……………………………..
….
…….
…….
…….
….
……..
……………………………..
….
…….
…….
…….
….
……..
……………………………..
49
50
51
52
Schéma relationnel
Métabase
DICTIONNAIRE DE DONNEES, ORGANISE SOUS
FORME RELATIONNELLE, CONTENANT LA
DESCRIPTION DES RELATIONS, ATTRIBUTS,
DOMAINES, CLES, etc.
Docteurs(Id-D, Nom, Prénom)
Visites(Id-D, Id-P, Id-V, Date, Prix)
Prescriptions (Id-V, Ligne, Id-M, Posologie)
Patients(Id-P, Nom, Prénom, Ville)
Médicaments(Id-M, Nom, Description)
RELATIONS!
NUM!
12!
!14!
!1!
!
•  En souligné : clés primaires
BASE!
PERSO!
!PERSO!
!SYS!
NOM!
EMPLOYE!
!DEPARTEMENT!
!RELATIONS!
NBATT!
4!
!5!
!4!
!
•  En italiques : clés étrangères
ATTRIBUTS!
•  Il faudrait indiquer les types (domaines) de chaque attribut
NUM!
1!
2!
3!
51
TYPE!
ENTIER!
!TEXTE!
!TEXTE!
NOM!
NUM!
!NOM!
!PNOM!
NUMREL!
12!
!12!
!12!
52
53
54
Passage au niveau logique
Propriétés, Entités
•  Le modèle conceptuel est un compromis entre la
flexibilité de la langue courante et la rigueur nécessaire
d’un traitement informatisé.
•  Régle 1 : Chaque propriété devient un attribut.
•  Le niveau logique est une étape de plus vers cette
informatisation
•  Règle 2 : Chaque entité devient une table et son
identifiant devient sa clef primaire
–  Utilisation du formalisme du modèle relationnel :
• 
• 
• 
• 
• 
Tables (ou relations)
attributs
domaine
clefs
contrainte d’intégrité référentielles (relations entre tables)
•  Règle 3 : Une association peut :
–  être ‘‘absorbé ’’ par l’une ou l’autre des entité
–  devenir une table.
–  Simplification du schéma de la base
•  Des règles trop strictes entraîne des schémas trop complexes
•  On ‘‘tolère’’ un peu de redondance ou quelques valeurs nulles....
53
54
55
56
Exemple 1
Profs
1,1
Nom
Prénom
Enseigne
NbreHeures
1,1
•  Un prof enseigne un et un seul
cours
Cours
NomCours
Description
Nom
Bouganim
Crenn
Rousseau
Prénom
Luc
Isabelle
Martine
Adresse
Paris
Paris
Versailles
Nom
Bouganim
Crenn
Rousseau
Solution 2
Nom
Bouganim
Crenn
Rousseau
Prénom
Luc
Isabelle
Martine
Adresse
Paris
Paris
Versailles
Profs
Nom
NomCours
Info
Math
Droit
NomCours
Info
Math
Droit
Description
Informatique
Mathématiques
Droit
1,1
Prénom
•  Un cours est enseigné par un et
un seul prof
Adresse
Solution 1
Exemple 2
Enseigne
NbreHeures
0,1
Cours
NomCours
Description
Adresse
NbreHeures
44
78
26
Solution 1
Nbreheures
44
78
26
Nom
Bouganim
Crenn
Prénom
Luc
Isabelle
Adresse
Paris
Paris
•  Un prof enseigne un et un seul
cours
•  Un cours est enseigné par un
prof ou n’est pas enseigné
NomCours
Info
Math
Droit
Description
Informatique
Mathématiques
Droit
NbreHeures
44
78
Solution 2
NomCours
Info
Math
Droit
Description
Informatique
Mathématiques
Droit
Nom
Bouganim
Crenn
55
Prénom
Luc
Isabelle
Adresse
Paris
Paris
NomCours
Info
Math
NbreHeures
44
78
NomCours
Info
Math
Droit
Description
Informatique
Mathématiques
Droit
56
Passage au modèle relationnel Conclusion
57
Exemple 3
Profs
Nom
1,n
Prénom
Enseigne
NbreHeures
1,1
•  Objectifs
•  Un prof enseigne un ou
plusieurs cours
Cours
NomCours
Description
–  Ne pas créer de tables inutiles
–  Ne pas dégrader le modèle conceptuel (pas de propriété
répétitive ni sans signification)
•  Un cours est enseigné par un et
un seul prof
Adresse
58
•  Méthode
Solution 1
Nom
Bouganim
Crenn
Crenn
Prénom
Luc
Isabelle
Isabelle
Adresse
Paris
Paris
Paris
NomCours
Info
Math
Droit
Description
Informatique
Mathématique
Droit
NbreHeures
20
48
26
–  Si possible, passer les propriétés de l’association dans l’une ou
l’autre des entités mais:
•  Si la cardinalité minimum est 0, on ne peut le faire car, pour certaines
entités, il y aurait des valeurs nulles (ex. un prof ne donnant pas de cours)
•  Si la cardinalité maximum est n, on ne peut le faire car il y aurait des
attributs répétitif (ex. un prof donnant plusieurs cours)
Solution 2
Nom
Bouganim
Crenn
Prénom
Luc
Isabelle
Adresse
Paris
Paris
Nom
Bouganim
Crenn
Crenn
NomCours
Info
Math
Droit
Description
Informatique
Mathématique
Droit
NbreHeures
20
48
26
Vue d’ensemble des SGBD
–  Sinon, créer une table pour l’association contenant
•  les clefs des entités associées
•  les propriétés de l’association
57
58
59
60
Modélisation Relationnelle (2)
Docteurs
I- Indépendance
Physique
X - Standards
II- Indépendance
Logique
IX - Gestion de la
confidentialité
VIII - Concurrence
d’accès
Prescriptions
Id-D
Nom
Prénom
Id-V
Ligne
Id-M
1
Dupont
Pierre
1
1
12
1 par jour
2
Durand
Paul
2
5
10 gouttes
3
Masse
Jean
….
……..
……
III – Langage de
manipulation
BD
Id-D
Id-P
Id-V
Date
Prix
1
1
2
1
15 juin
250
2
1
8
2 par jour
1
1
2
12 août
180
2
2
12
1 par jour
350
2
3
3
2 gouttes
250
….
….
….
…………
2
2
IV - Gestion des
vues
2
3
3
4
13 juillet
1 mars
Patients
V - Optimisation des
questions
VII - Gestion des
pannes
Visites
VI - Gestion de la
cohérence
59
Posologie
Médicaments
Id-P
Nom
Prénom
Ville
1
Lebeau
Jacques
Paris
Id-M
Nom
Description
2
Troger
Zoe
Evry
1
Aspegic 1000
……………………………..
3
Doe
John
Paris
2
Fluisédal
……………………………..
4
Perry
Paule
Valenton
3
Mucomyst
……………………………..
….
…….
…….
…….
….
……..
……………………………..
60
61
62
I - Indépendance Physique
II - Indépendance Logique
Les applications peuvent définir des vues logiques de la BD
•  Indépendance des programmes d'applications
vis à vis du modèle physique :
Gestion des médicaments
Cabinet du Dr. Masse
Nombre_Médicaments
–  Possibilité de modifier les structures de stockage
(fichiers, index, chemins d'accès, …) sans modifier les
programmes;
Id-M
1
Nom
Aspegic 1000
Prescription
Description
Visites
Nombre
……………………………..
30
2
Fluisédal
……………………………..
20
3
Mucomyst
……………………………..
230
….
……..
……………………………..
…..
Id - D
Id - P
Id - V
Date
Prix
1
2
1
15 juin
250
2
3
4
1 mars
250
Patients
Id - V
Ligne
Id - M
1
1
12
1 par jour
1
2
5
10 gouttes
Posologie
….
….
….
…………
Médicament
Id - P
Nom
Prénom
1
Lebeau
Jacques
Id - M
2
Troger
Zoe
1
Aspegic 1000
……………………………..
….
…….
…….
2
Fluisédal
……………………………..
3
Mucomyst
……………………………..
….
……..
……………………………..
Nom
Description
–  Ecriture des applications par des non-spécialistes des
fichiers et des structures de stockage;
–  Meilleure portabilité des applications et
indépendance vis à vis du matériel.
Docteur
Prescription
Id-D
Nom
Prénom
1
Dupont
Pierre
2
Durand
3
Masse
Jean
….
……..
……
Paul
Id-V
1
Visites
Id-D
1
Id-P
2
Id-V
1
Date
2
250
1
2
12 août
180
2
3
13 juillet
350
2
3
4
1 mars
250
Patients
61
1
Prix
15 juin
1
2
2
Ligne
1
Id-M
1 par jour
5
10 gouttes
1
2
3
….
Posologie
12
2
2
….
8
12
2 par jour
1 par jour
3
2 gouttes
….
…………
Médicament
Id-P
Nom
Prénom
1
Lebeau
Jacques
Id-M
Nom
Description
2
Troger
Zoe
1
Aspegic 1000
……………………………..
3
Doe
John
2
Fluisédal
……………………………..
4
Perry
Paule
3
Mucomyst
……………………………..
….
…….
…….
….
……..
……………………………..
63
Avantages de l’indépendance logique
62
64
III - Manipulation aisée
•  La manipulation se fait via un langage déclaratif
•  Possibilité d'évolution de la base de données sans
réécriture des applications :
–  La question déclare l’objectif sans décrire la méthode
–  Le langage suit une norme commune à tous les SGBD
–  SQL : Structured Query Langage
–  ajout de champs, ajout de relation, renommage de champs.
•  Possibilité d'intégrer des applications existantes sans
modifier les autres.
•  Syntaxe (aperçu !)
Select
From
Where
Group By
Order By
•  Possibilité de limiter les conséquences du partage :
Données confidentielles.
63
<Liste de champs ou de calculs à afficher>
<Liste de relations mises en jeu>
<Liste de prédicats à satisfaire>
<Groupement éventuel sur un ou plusieurs champs>
<Tri éventuel sur un ou plusieurs champs>
64
65
66
Exemple de question SQL (1)
Exemple de question SQL (2)
•  Nom et description des médicaments de type aspirine
•  Patients parisiens ayant effectués une visite le 15 juin
Select Nom, Description
Select Patients.Nom, Patients.Prénom
From Médicaments
From
Where Type = ‘Aspirine’
Where Patients.Id-P = Visites.Id-P
Patients, Visites
and
Patients.Ville = ’Paris’
and
Visites.Date = ’15 juin’
65
66
67
68
Exemple de question SQL (3)
IV – Gestion des vues
•  Les vues permettent d’implémenter l’indépendance
logique en permettant de créer des objets virtuels
•  Dépenses effectuées par patient trié par ordre décroissant
•  Vue = Question SQL stockée
Select
Patients.Id-P, Patients.Nom, sum(Prix)
•  Le SGBD stocke la définition et non le résultat
From
Patients, Visites
•  Exemple : la vue des patients parisiens
Where
Patients.Id-P = Visites.Id-P
Create View Parisiens as (
GroupBy Patients.Id-P, Patients.Nom
Select
*
OrderBy sum(Prix) desc
From
Patients
Where
Patients.Ville = ’Paris’ )
67
(tous les attributs)
68
69
Les vues : des relations virtuelles !
70
Les vues : Mise à jour
Le SGBD transforme la question sur les vues en
question sur les relations de base
•  Non définie si la répercussion de la mise à jour vers la base
de données est ambiguë
–  ajouter un tuple à la vue calculant le nombre de médicaments ?
Question Q
sur des vues
•  Restrictions SQL (norme):
–  Pas de distinct, d’agrégats, ni d’expression
–  La vue contient les clés et les attributs « non nulls »
–  Il y a une seule table dans le from
–  Requêtes imbriquées possibles
–  Certains SGBDs supportent plus de mises à jour
Gestionnaire
de Vues
Définition des
vues
Question Q’
sur les relations
de base
•  Clause « With check option »
–  Le SGBD vérifie que les tuples insérés ou mis à jour correspondent
à la définition de la vue
69
70
71
72
Les vues : Les instantanés (snapshot)
•  Instantané, Snapshot, vue concrète, vue matérialisée
V –Exécution et Optimisation
•  Traduction automatique des questions déclaratives en
programmes procéduraux :
–  matérialisée sur le disque
–  accessible seulement en lecture
–  peut être réactualisé
 Utilisation de l’algèbre relationnelle
•  Exemple
•  Optimisation automatique des questions
–  create snapshot Nombre_Médicaments as
Select Id-M, Nom, Description, count(*)
From Médicaments M, Prescriptions P
Where M.Id-M = P.Id-M
refresh every day
  Utilisation de l’aspect déclaratif de SQL
  Gestion centralisée des chemins d'accès (index, hachages, …)
  Techniques d’optimisation poussées
•  Economie de l'astuce des programmeurs
•  Objectif principal : la performance
–  milliers d'heures d'écriture et de maintenance de logiciels.
71
72
Exemple de plan d’exécution
Select
Patients.Nom, Patients.Prénom
From
Patients, Visites
Where Patients.Id-P = Visites.Id-P
and
Patients.Ville = ’Paris’
and
Visites.Date = ’15 juin’
73
Plan d’exécution optimisé
π
π
π
σ
σ
Patients
Visites
74
Patients
Visites
π
π
σ
σ
Patients
Visites
73
74
75
76
VI - Intégrité Logique
Contraintes d’intégrité
•  Avantages :
•  Objectif : Détecter les mises à jour erronées
–  simplification du code des applications
–  sécurité renforcée par l'automatisation
–  mise en commun des contraintes, cohérence
•  Contrôle sur les données élémentaires
–  Contrôle de types: ex: Nom alphabétique
–  Contrôle de valeurs: ex: Salaire mensuel entre 5 et 50kf
•  Nécessite :
–  un langage de définition de contraintes d'intégrité
–  la vérification automatique de ces contraintes
•  Contrôle sur les relations entre les données
–  Relations entre données élémentaires:
•  Prix de vente > Prix d'achat
–  Relations entre objets:
•  Un électeur doit être inscrit sur une seule liste électorale
BD
75
BD
76
77
78
Contraintes d’intégrité : Syntaxe
Exemples de contrainte
create table <nom de table> (
•  Contraintes d’intégrité référentielles
<attribut> <domaine> [<contrainte d'attribut>], (mono-attribut)
<attribut> <domaine> [<contrainte d'attribut>], …
Docteurs
[<contrainte de relation>]) (mono ou multi-attributs)
•  Différent types de contraintes :
– 
– 
– 
– 
– 
Non nullité : not null
Unicité : unique
Vérification : check <formule>
Clé primaire : primary key
Contrainte d’intégrité référentielle : references <relation> (<attribut>)
Id-V
Ligne
Id-M
1
Dupont
Pierre
1
1
12
1 par jour
2
Durand
Paul
2
5
10 gouttes
3
Masse
Jean
….
……..
……
Visites
Posologie
Id-D
Id-P
Id-V
Date
Prix
1
1
2
1
15 juin
250
2
1
8
2 par jour
1
1
2
12 août
180
2
2
12
1 par jour
350
2
3
3
2 gouttes
250
….
….
….
…………
2
3
3
4
13 juillet
1 mars
•  Vérification lors de l’insertion, la suppression, la modification
•  Propagation des suppression, modification en cascade possible
(on delete cascade)
77
78
79
80
VII - Intégrité Physique
•  Motivations : Tolérance aux fautes
•  Contraintes supportées (exemple d’Oracle)
–  Transaction Failure : Contraintes d'intégrité, Annulation
–  System Failure : Panne de courant, Crash serveur ...
–  Media Failure : Perte du disque
–  Communication Failure : Défaillance du réseau
–  Les contraintes faisant intervenir un ou plusieurs attributs
d’une seule table et d’un seul tuple
–  Contraintes d’intégrité référentielles avec cascade
•  Objectifs :
•  Mécanisme puissant :
–  Assurer l'atomicité des transactions
–  Garantir la durabilité des effets des transactions commises
–  Exemple : supprimer les patients ayant consulté depuis plus
de 2 ans
Visites
Prénom
2
•  On peut nommer les contraintes
Docteurs
Nom
2
•  on delete / on update  cascade, set null, set default
Contraintes d’intégrité : Remarques finales
Prescriptions
Id-D
•  Moyens :
Prescriptions
–  Journalisation : Mémorisation des états successifs des données
–  Mécanismes de reprise
Patients
Médicaments
79
80
81
82
Transaction
Incohérence possible...
Etat cohérent
Atomicité et Durabilité
ATOMICITE!
!!
Begin!
Etat cohérent
Begin
Commit
Transaction
DURABILITE!
Panne
CEpargne = CEpargne - 3000!
CCourant = CCourant + 3000!
!!
Begin!
CEpargne = CEpargne - 3000!
CCourant = CCourant + 3000!
Commit T1!
Commit T1!
!
!
 Annuler le débit !!!
!
Begin!
CEpargne = CEpargne - 3000!
CCourant = CCourant + 3000!
Commit T1!
Crash disque
!
!
S’assurer que le
!virement a été
fait !!
 
81
82
83
84
VIII - Partage des données
VIII - Partage des données
BD
BD
•  Le SGBD gère les accès concurrents
  Chacun à l’impression d’être seul (Isolation)
•  Accès concurrent aux mêmes données
  Cohérence conservée (Verrouillage)
 Conflits d’accès !!
83
84
85
86
IX – Confidentialité
Puissance des droits SGBD
•  Objectif : Protéger les données de la BD contre des
accès non autorisés
Service des
ressources
humaines
•  Deux niveaux :
Public
(internet)
Employés
(intranet)
–  Connexion restreinte aux usagers répertoriés (mot de passe)
–  Privilèges d'accès aux objets de la base
Id-E
1
Nom
Ricks
Prénom
Jim
Poste
5485
2
Trock
Jack
1254
3
Lerich
Zoe
5489
4
Doe
Joe
4049
Nom
Ricks
Prénom
Jim
Poste
5485
Adresse
……….
Ville
Paris
Salaire
230
2
Trock
Jack
1254
……….
Versailles
120
3
Lerich
Zoe
5489
……….
Chartres
380
4
Doe
Joe
4049
……….
Paris
160
•  Usagers : Usager ou groupe d’usagers
Nombre
Masse
d’employés Salariale
4
890
•  Objets : Relation, Vue, autres objets (procédures, etc.)
Id-E
1
85
87
X - Standardisation
Architecture Client-Multiserveurs
86
88
•  L’approche bases de données est basée sur plusieurs
standards
–  Langage SQL (SQL1, SQL2, SQL3)
–  Communication SQL CLI (ODBC / JDBC)
–  Transactions (X/Open DTP, OSI-TP)
Appli 1
SQL
ODBC
SQL
ODBC
•  Force des standards
–  Portabilité
–  Interopérabilté
–  Applications multisources…
SQL
SQL
SGBD 1
code
87
données
SGBD 2
code
données
88
Architecture hétérogène
Appli 1
Appli 2
89
Applications traditionnelles
des SGBD
90
•  OLTP (On Line Transaction Processing)
Appli n
–  Cible des SGBD depuis leur existence
–  Banques, réservation en ligne ...
–  Très grand nombre de transactions en parallèle
–  Transactions simples
Médiateur
•  OLAP (On Line Analytical Processing)
Source 1 :
SGBD
code
données
–  Entrepôts de données, DataCube, Data Mining …
–  Faible nombre de transactions
–  Transactions très complexes
Source 2 :
serveur Web
code
données
89
90
91
92
Applications des SGBD (1)
Applications des SGBD (2)
•  BD personnelles ou PME
–  Comptabilité
–  Agenda, comptes bancaires, carnet d’adresses, dossiers portables
–  BD embarquées sur calculateurs ultra-légers (PDA, téléphones
cellulaires, cartes à puce …)
•  BD et WEB
–  Serveurs Web dynamiques, sites marchands ...
–  Plusieurs profils (OLTP, publication d’informations en ligne,
hébergement de données …)
•  Challenges majeurs
•  Challenges majeurs
–  Gérer la mobilité
–  S’adapter aux contraintes matérielles du calculateur hôte
–  Assurer la durabilité des données
–  Assurer la confidentialité des données
–  Gestion de données XML
–  Fédération de sources de données hétérogènes
–  Grilles de données
–  Sécurité des données en ligne
91
92
94
Le standard SQL
Le langage SQL – Partie 1
LANGAGE DE DEFINITION DE DONNEES
CREATE TABLE
Création, modification du schéma.
LANGAGE DE CONTROLE
CREATE VIEW
ALTER ….
GRANT
...
REVOKE
COMMIT WORK
LANGAGE DE MANIPULATION DE DONNEES
ROLLBACK WORK
SELECT
INSERT
UPDATE
DELETE
INTEGRATION AUX LANGAGES DE PROGRAMMATION
EXEC SQL
MODULE
PROCEDURE ...
93
94
95
96
Création de table
EXEMPLE DE BASE DE DONNEES
CREATE TABLE <nom_table>
(<def_colonne> * [<def_contrainte_table>*]) ;
< def_colonne > ::= <nom_colonne> < type > [CONSTRAINT nom_contrainte <
NOT NULL |
UNIQUE |
PRIMARY KEY |
CHECK (condition) |
REFERENCES nom_table (colonne) > ]
< def_contrainte_table > ::= CONSTRAINT nom_contrainte <
UNIQUE (liste_colonnes) |
PRIMARY KEY (liste_colonnes) |
CHECK (condition) |
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes)>
95
96
97
Exemple de création de table
Index, modification du schéma
• 
Création d’index
• 
Suppression
–  CREATE [UNIQUE] INDEX [nom_index] ON nom_table (<nom_colonne> * );
CREATE TABLE RDV(
NumRdv Integer,
–  DROP TABLE <nom_table>
–  DROP INDEX <nom_index>
DateRDV Date,
NumDoc Integer,
• 
Modification
– 
– 
– 
– 
– 
NumPat Integer,
Motif Varchar(200),
CONSTRAINT Clé_Primaire_RDV PRIMARY KEY (NumRdv),
CONSTRAINT Référence_DOC FOREIGN KEY (NumDoc) REFERENCES DOC,
• 
CONSTRAINT Référence_PAT FOREIGN KEY (NumPat) REFERENCES PAT);
• 
Exercice 1
ALTER TABLE <nom_table> ADD COLUMN <def_colonne>
ALTER TABLE <nom_table> ADD CONSTRAINT <def_contrainte_table >
ALTER TABLE <nom_table> ALTER <def_colonne>
ALTER TABLE <nom_table> DROP COLUMN <nom_colonne>
ALTER TABLE <nom_table> DROP CONSTRAINT <nom_contrainte >
Exemples
– 
– 
– 
– 
L'association d'un nom à une contrainte est optionnelle. Ce nom peut être utilisé pour
référencer la contrainte (ex: messages d'erreurs).
• 
98
CREATE INDEX Index_date_RDV ON RDV (DateRDV) ;
ALTER TABLE RDV ADD COLUMN Commentaires varchar(300);
ALTER TABLE RDV ADD CONSTRAINT PK PrimaryKey(NumRdv);
ALTER TABLE RDV ALTER Motif CONSTRAINT MotifNN NOT NULL;
Exercices 2
–  Créez un index sur le nom du docteur
–  Supprimez l’attribut Motif de la table RDV
–  Ajoutez une contrainte de clé primaire à la table MED (sur NumMed)
–  Donnez l’expression SQL de la création des tables DOC et DET
97
98
99
100
Insertion de données
Suppression (basique): DELETE
SYNTAXE :
INSERT INTO < nom_table >
DELETE FROM <relation_name>
[( attribute [,attribute] … )]
[WHERE <search_condition>]
{VALUES (<value spec.> [, <value spec.>] … ) |
EXEMPLES :
<query specification>} ;
Supprimer les docteurs quand VilleDoc n’est pas renseignée
DELETE FROM DOC WHERE VilleDoc is NULL
•  Exemples :
–  INSERT INTO DOC VALUES (1, ‘Dupont’, ‘Paris’);
–  INSERT INTO DOC (NumDoc, NomDoc) VALUES (2, ‘Toto’);
–  INSERT INTO PAT (NumPat, NomPat, VillePat)
SELECT NumDoc, NomDoc, VilleDoc FROM DOC;
Supprimer le docteur numéro 20
DELETE FROM DOC WHERE NumDoc = 20
Supprimer tous les docteur
•  Exercices 3
DELETE FROM DOC
–  Insérez un ensemble cohérent de tuples dans chaque table (1 par table)
99
100
101
SQL (Partie 2) :
Interrogation, mise à jour,
suppression de données
SELECT : forme générale
102
SELECT [DISTINCT| ALL] { * | <value exp.> [, <value exp.>]...}
FROM relation [variable], relation [ variable]…
[WHERE <search condition>]
[GROUP BY <attribute> [,<attribute>]...]
[HAVING <search condition>]
[ORDER BY <attribute> [{ASC | DESC}] [,<attribute>[{ASC |
DESC}] ]...]
* EXPRESSION DE VALEURS
* CONDITION DE RECHERCHE
- Calculs arithmétiques
- Sélection, projection, jointure
- Fonctions agrégats<
- Recherche textuelle
- Recherche par intervalle
- Recherche sur valeur nulle
101
102
103
104
Forme générale de la condition de recherche
Projections et restrictions simples
<search condition> ::= [NOT]
<nom_colonne> θ constante & <nom_colonne>
<nom_colonne> LIKE <modèle_de_chaîne>
<nom_colonne> IN <liste_de_valeurs>
<nom_colonne> θ (ALL & ANY & SOME) <liste_de_valeurs>
EXISTS <liste_de_valeurs>
UNIQUE <liste_de_valeurs>
<tuple> MATCH [UNIQUE] <liste_de_tuples>
<nom_colonne> BETWEEN constante AND constante
<search condition> AND & OR <search condition>
Liste des médicaments de plus de 500 FF  NomMed
SELECT NomMed FROM MED WHERE Prix> 500 ;
Liste des médicaments de plus de 100 €  NomMed (prix stocké en FF)
SELECT NomMed FROM MED WHERE Prix/6,55957 > 100 ;
Nom des docteurs de LAON  NomDoc
SELECT NomDoc FROM DOC WHERE VilleDoc = “Laon”
Quelles ont été les motifs de consultations de 25/12/2006 Motif
SELECT DISTINCT Motif FROM RDV WHERE DateRDV = #25/12/2006#
EXERCICES 4
• 
Liste des patients de plus de 40 ans  NumPat, NomPat
• 
Age des patients en mois (il est stocké en année)  NomPat, AgeMois
• 
Numéro des docteurs ayant consulté entre le 1/9 et le 31/12/06  NumDoc
• 
Nom des patients niçois de plus de 36 ans NumPat, NomPat
avec
θ ::= < & = & > & ≥ &≤ & <>)
)
Remarque: <liste_de_valeurs> peut être déterminée par une requête
103
104
105
Restrictions complexes et jointures
106
Requêtes imbriquées : IN et EXIST
Liste des patients ayant un RDV avec le docteur "Dupont"  NomPat
SELECT
WHERE
DISTINCT PAT.NomPat FROM PAT, RDV, DOC
PAT.NumPat = RDV.NumPat and RDV.NumDoc = DOC.NumDoc
and DOC.NomDoc like “dupont”;
Liste des patients ayant eu un RDV le 25/12/2006  NomPat
SELECT DISTINCT P.NomPat FROM PAT P, RDV R
WHERE P.NumPat = R.NumPat and DateRDV = #25/12/2006#;
Médicaments commençant par « ASPI » prescrits le 25/12/2006  NomMed
SELECT
WHERE
DISTINCT M.NomMed FROM MED M, DET D, ORD O
M.NumMed = D.NumMed and D.NumOrd = O.NumOrd
and O.Date = #25/12/2006# and NomMed like “ASPI%”;
SELECT P.NomPat FROM PAT P WHERE P.NumPat in
(SELECT R.NumPat FROM RDV R WHERE DateRDV = #25/12/2006#);
Docteurs ayant le même nom qu’un patient  NomDoc
SELECT
D.NomDoc FROM PAT P, DOC D WHERE P.NomPat = D.NomDoc;
EXERCICES 5
•  Docteurs ayant le même nom que leur patient  NomDoc
•  Nom des médicaments prescrits le 25/12/2006  NomMed
•  Nom des docteurs ayant un RDV pour un motif commençant par ‘grippe’NomDoc
•  Liste des quantité distinctes prescrites du médicament Bubol  Qté
SELECT P.NomPat FROM PAT P WHERE EXISTS
(SELECT * FROM RDV R WHERE P.NumPat = R.NumPat and
DateRDV = #25/12/2006#);
105
106
107
108
Mise à jour : UPDATE
Requêtes imbriquées : IN et EXIST
SYNTAXE :
UPDATE
<relation_name>
SET <attribute> = value_expression
[WHERE
<search condition> ];
Liste des patients ayant un RDV avec le docteur "Dupont"  NomPat
SELECT DISTINCT P.NomPat FROM PAT P, RDV R, DOC D
WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc and D.NomDoc = “Dupont”;
SELECT P.NomPat FROM PAT P WHERE P.NumPat in
(SELECT R.NumPat FROM RDV R WHERE R.NumDoc in
(SELECT D.NumDoc FROM DOC WHERE D.NomDoc = “Dupont”));
EXEMPLES :
SELECT P.NomPat FROM PAT P WHERE EXISTS
(SELECT * FROM RDV R WHERE P.NumPat = R.NumPat and EXISTS
(SELECT * FROM DOC D WHERE R.NumDoc=D.NumDoc and D.NomDoc = “Dupont”));
• 
Nom des patients qui n'ont jamais eu de rendez-vous  NomPAT
UPDATE DOC SET VilleDoc = “Inconnue” WHERE VilleDoc is NULL
UPDATE DOC SET NomDoc = UPPER(NomDoc) WHERE NumDoc NOT IN
(SELECT NumDoc FROM ORD)
ATTENTION AUX CONTRAINTES D’INTEGRITE REFERENTIELLES !!!
EXERCICES 6 (avec IN ou EXIST)
Nom des docteurs ayant au moins un RDV pour une grippe  NomDoc
Mettre “Inconnue” quand VilleDoc n’est pas renseignée
Mettre en majuscule le nom des docteurs qui n’ont jamais prescrit
SELECT P.NomPat FROM PAT P WHERE EXISTS
(SELECT * FROM RDV R WHERE EXISTS
(SELECT * FROM DOC D WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc
and D.NomDoc = “Dupont”));
• 
[, <attribute> = value_expression ] …
EXERCICES 7 :
•  Augmenter le prix des aspirines de 10%
•  Fixer le prix des médicaments non prescrits à 100 euros
107
108
109
110
Suppression : DELETE
SQL (Partie 3) :
Agrégation, Unions, Intersection, Différence
SYNTAXE : DELETE FROM <relation_name> [WHERE <search_condition>]
EXEMPLES :
Supprimer les docteurs quand VilleDoc n’est pas renseignée
DELETE FROM DOC WHERE VilleDoc is NULL
Supprimer le docteur numéro 20 : DELETE FROM DOC WHERE NumDoc = 20
Supprimer tous les docteur : DELETE FROM DOC
Supprimer les docteurs qui n’ont jamais prescrit
DELETE FROM DOC WHERE NumDoc NOT IN
(SELECT NumDoc FROM ORD)
ATTENTION AUX CONTRAINTES D’INTEGRITE REFERENTIELLES !!!
EXERCICES 8
•  Supprimer les patients de moins de 10 ans
•  Supprimer les médicaments non prescrits
109
110
111
112
Calculs d'agrégats
Agrégats : autres exemples et exercices
Les fonctions d’agrégation (Count, Sum, Avg, Min, Max) permettent de
réaliser des calculs sur des ensembles de données
•  Nom du(des) médicament(s) le(s) moins cher(s)
SELECT NomMed FROM MED
WHERE Prix = SELECT MIN(Prix) FROM MED
•  Calcul de statistiques globaux
–  Nombre de patients : SELECT count(*) FROM PAT
–  Prix moyen des médicaments : SELECT avg(Prix) FROM MED
•  Total des prix des médicaments prescrits par patient
SELECT P.NomPat, sum(M.prix * O.Qté) PrixTotal
FROM PAT P, ORD O, DET D, MED M
WHERE M.NumMed = D.NumMed and D.NumOrd = O.NumOrd and O.NumPat =
P.NumPat
GROUP BY P.NomPat
•  Calcul de statistiques par groupe
–  Nombre de patients par ville :
SELECT VillePat, count(*) NbPatient FROM PAT GROUP BY VillePat
–  Nombre de patients par ville ayant consulté pour un mal de tête
SELECT VillePat, count(DISTINCT(NumPat)) NbPatient FROM PAT, RDV
WHERE PAT.NumPat = RDV.NumPat and Motif = ‘mal de tête’ GROUP BY VillePat
–  Ville où plus de 10 patients ont consulté pour un mal de tête
SELECT VillePat FROM PAT, RDV
WHERE PAT.NumPat = RDV.NumPat and Motif = ‘mal de tête’
GROUP BY VillePat
HAVING count(DISTINCT(NumPat)) > 10
EXERCICES 9
• 
• 
• 
• 
111
Nombre total d’ordonnances
Nombre d’ordonnances par docteur
Age du plus jeune patient
Nom du plus jeune patient
112
113
Évaluation « sémantique » d’une
requête SQL
114
Union/Intersection/Différence
<requêteSQL_A>
UNION [ALL]
1.  FROM
Réalise le produit cartésien des relations
INTERSECT
EXCEPT
2.  WHERE
Réalise restriction et jointures
<requêteSQL_B>
3.  GROUP BY
Constitue les partitions
(e.g., tri sur l’intitulé du groupe)
XXX
XXX
YYY
4.  HAVING
Restreint aux partitions désirées
5.  SELECT
Réaliser les projections/calculs finaux
6.  ORDER BY
Trier les tuples résultat
[ALL] permet de conserver les doublons dans le résultat d'une union
ZZZ
XXX
XXX
AGG1
YYY
AGG2
ZZZ
AGG3
AGG1
XXX
AGG3
ZZZ
AGG1
ZZZ
AGG3
XXX
113
114
115
116
Union/Inter°/Diff. : exemples et exercices
Des différences selon le SGBD…
•  Ensemble des personnes de la base médicale
SELECT NomMed NomPers FROM MED UNION SELECT NomPat NomPers FROM PAT
•  Patients qui sont aussi médecins
SELECT NomPat PatMed FROM PAT INTERSECT SELECT NomMed PatMed FROM MED
•  Patients qui ne sont pas médecins
SELECT NomPat Patient FROM PAT EXCEPT SELECT NomMed Patient FROM MED
EXERCICES 10
• 
• 
• 
• 
Numéro des médicaments jamais prescrits
Villes mentionnées dans la base
Villes où il y a au moins un docteur mais aucun patient
Villes où il y a au moins un docteur et au moins un patient
115
Access
SQL Server 2000
Oracle8
GROUP BY
Y
Y
Y
HAVING
Y
Y
Y
UNION
Y
Y
Y
INTERSECT
N
N
Y
EXCEPT
N
N
Y (MINUS)
116
117
Erreurs dans l écriture de requêtes
Jointure Interne / Externe
Évite d’écrire la condition de jointure
(clause d’égalité sur les colonnes de même nom…)
<Join_expression> ::=
•  Mauvaise compréhension du schéma de la base
•  Mauvaise compréhension de la question
<table-ref> [NATURAL] [<join_type>] JOIN <table-ref>
[ON <condition> & USING <nom_colonne> *]
<table-ref> CROSS JOIN <table-ref>
•  Instances de la même table
USING precise le sous-ensemble des colonnes
communes à considérer dans la jointure
(NB: remplace le ON…)
•  Oubli de clauses dans les prédicats
Produit cartésien
(INNER JOIN avec clause toujours vrai)
<join_type> ::=
INNER
•  Doublons
OUTER est optionnel dans la syntaxe (même fonctionnalité)
•  Utilisation d instruction ou de structures SQL
incorrectes
LEFT [OUTER]
RIGHT [OUTER] )
118
OUTER produit certains tuples ne joignant pas…
FULL [OUTER]
…LEFT… UNION…RIGHT…
117
•  Erreurs de syntaxe
119
Schéma et question
118
120
Reformulation d une question (1)
•  Avant de se lancer dans l écriture d une requête, il faut bien
comprendre le schéma des tables sur lequel on va s appuyer.
•  Paraphrasage :
•  Si le schéma est complexe, il faut le dessiner, c.a.d. dessiner les tables
et les relations entre ces tables.
–  En exprimant de manière plus détaillée une requête, elle devient plus
claire... (ou plus facilement exprimable)
•  En lisant la question, on repère sur le schéma dans quelle(s) relation(s)
se trouve chaque donnée. On a alors une idée des tables mises en jeu.
•  Exemple : Qui est dans la base ?
•  Si la question est complexe, il faut la reformuler et/ou la décomposer.
Nom des médecins et nom des patients
•  Une fois ce travail effectué, on peut commencer a écrire du SQL.
Union des noms des médecins et des noms des patients
 Ensemble des personnes de la base médicale
SELECT NomMed NomPers FROM MED
UNION
SELECT NomPat NomPers FROM PAT
119
120
121
Reformulation (2) : Négation
122
Reformulation (3) : Décomposition
En décomposant, on simplifie la compréhension et on
diminue les risques d erreurs :
Souvent l inverse de la requête est plus facile à exprimer.
Cela est particulièrement vrai lorsque la requête contient :
•  que
–  Dans quelle ville n y a-t-il que des patients de plus de 40 ans?
–  L ensemble des villes moins celles où il y a au moins un patient de 40 ans ou moins
•  aucun
–  Dans quelle ville n y a-t-il aucun patients de plus de 40 ans?
–  L ensemble des villes moins celles où il y a au moins un patient de plus de 40 ans
•  Paraphrasage :
•  tous
–  Quels sont les patients dont tous les motifs de rendez vous sont « mal de tête »
–  L ensemble des patients qui ont un RDV pour un mal de tête moins les patients qui
ont un RDV pour un motif différent
–  Quels sont les patients qui ont RDV avec tous les médecins
–  Les patients pour lesquels il n existe pas de docteur avec qui ils n ont pas eu de
RDV
122
123
124
Oubli de clauses
•  Il est assez facile d oublier une clause dans les prédicats
de sélection, surtout lorsque l on joint plusieurs tables.
Pour le vérifier, une règle simple pour les requêtes plates
(nécessaire mais non suffisante) :
•  Il faut parfois utiliser plusieurs instances de la même table. Comment
savoir?
•  Lorsqu une même table est utilisée pour obtenir deux informations de
sémantiques différentes , il faut prendre plusieurs instances de cette
table.
Exemple : Nom des patients ayant eu des RDV avec les docteurs "Dupont" et
"Durand"
•  Une requête impliquant n tables doit posséder au
moins (n-1) prédicats de jointure (outre les prédicats
de sélection).
SELECT DISTINCT P.NomPat
FROM PAT P, RDV R1, DOC D1 , RDV R2, DOC D2
WHERE P.NumPat = R1.NumPat and R1.NumDoc = D1.NumDoc and
D1.NomDoc = Dupont and P.NumPat = R2.NumPat and
R2.NumDoc = D2.NumDoc and D2.NomDoc = Durand );
DOC (D1)  Dupont
RDV (R2)
DOC (D2)  Durand
•  Décomposition
121
Instance de tables
RDV (R1)
–  L ensemble des patients qui ont un RDV pour un mal de tête moins
les patients qui ont un RDV pour un motif différent
–  Create view SQ1 AS …. (patients qui ont un RDV pour un mal de tête)
–  Create view SQ2 AS …. (patients qui ont un RDV pour un motif ≠ de
mal de tête)
–  SELECT NomPat FROM SQ1 EXCEPT SELECT NomPat FROM SQ2
•  Tous
• 
•  Quels sont les patients dont tous les motifs de rendez
vous sont « mal de tête »
PAT (P)
123
124
125
Doublons
126
Base de tests
•  Quand une requête est vraiment complexe, on peut,
malgré tout, avoir un doute sur la solution trouvée.
Dans ce cas, il faut créer l extension d une base de
test afin de vérifier la validité de la requête.
•  Deux types de doublons peuvent apparaître.
–  plusieurs réponses sont identiques
–  plusieurs réponses sont sémantiquement équivalents
•  Les premiers s éliminent en utilisant la clause
distinct. Attention toutefois à son utilisation...
•  Preuve par l exemple :
•  Le deuxième cas se produit lorsque l on demande
des combinaisons (couples de personnes, ensemble
de 3 pièces etc...). Le résultat (A,B) est
sémantiquement équivalent à (B,A).
•  Comment trouver l extension la plus sensible possible ?
–  un résultat positif ne prouve rien (c est probablement juste...)
–  un résultat négatif prouve que la requête est fausse.
–  c est à dire, l extension de taille minimum comportant tous les cas et
garantissant la validité de la requête.
–  Le problème est presque aussi complexe que la résolution de la
requête elle même. Parcontre, le fait d aborder la requête de cette
manière permet souvent de mieux la comprendre.
•  Dans ce cas, il suffit d utiliser un prédicat > entre
chaque composantes afin de n obtenir qu une seule
des combinaisons equivalentes.
125
126
127
Base de tests (2)
•  Exemple 1 : Quels couples de parents ont au moins deux
enfants?
–  Dans la base de test il faut avoir :
•  des couples de parents qui ont 1, 2 et 3 enfants
•  des parents seuls ayant 2 et 3 enfants
Programmation SGBD
PL/SQL Oracle
•  Exemple 2 : Quels producteurs ne voient que les films
qu ils produisent ?
–  Dans la base de test il faut avoir :
•  un producteur qui ne voit aucun film
•  un producteur qui ne voit que des films qu il produit
•  un producteur qui voit des films qu il produit et d autres
CFA - AFTI
•  Attention, cette base n est pas suffisante....
127
Nicolas Anciaux
128
Programmation SGBD (1)
Programmation SGBD (2)
•  Comment passer une commande dans la base telle que :
•  Langage procédural propriétaire fournis par l éditeur du SGBD
PROCEDURE COMM
Si le client n est pas encore dans la base
 Insérer les informations du client dans la table client
Si l article est disponible dans la quantité commandée
ET le livreur disponible à la date de livraison désirée
 Insérer sa commande dans la base
Sinon abandonner la commande
–  Ex: PL/SQL (Oracle), PL/pgSQL (PostgreSQL), T-SQL (SQLServer, Sybase), …
–  Extension de SQL à des éléments de programmation procédurale
•  instructions conditionnelles, itérations, variables, etc.
•  API Propriétaires fournies par l éditeur de SGBD
–  Ex: OCI (Oracle), DB-Lib (Sybase), …
–  Programme écrit dans un langage classique (C, C++, Cobol, etc.)
… avec des appels à ces API non standards fournies par l éditeur du SGBD
*cette procédure peut être déclenchée par un trigger !
•  Impossible en SQL pur (SQL n est pas un langage complet)
•  Embedded SQL (générateur de code + API propriétaires)
–  Pas de structure de contrôle : itérations, tests …
–  Besoin d un langage complet pour programmer des actions sur les BD
•  Avec un langage traditionnel (C, C++, Java, Cobol, …)
–  Qui puisse parler avec la BD (avec SQL grâce à SQL CLI, JDBC, ODBC, …)
•  Avec un langage dédié au SGBD (PL/SQL pour Oracle, TSQL pour
SQLServer, …)
–  Ex: Pro*C (Oracle), ECPG (Postgres), Pro*Cobol (Oracle), etc…
–  Programme écrit dans un langage classique (C, C++, Cobol, etc.)
… avec des instructions SQL directement dans le programme
–  Précompilation : le source (ex: C+SQL) …
… est transformé en code compilable (ex: C pur)
–  Suivi d une compilation classique (ex: C pur)
•  API indépendantes du SGBD
–  Types identiques aux types SQL
–  Facilités de récupération/lecture des résultats de requêtes
–  Adapté aux types de données BD
–  SQL-CLI (Call Level Interface) popularisé par les médiateurs ODBC, JDBC
129
130
Langages procéduraux propriétaires (1)
Langages procéduraux propriétaires (2)
•  Exécution client (envoie de SQL par ODBC, JDBC,…)
•  Stockage de procédures sur le serveur
–  Chargement et compilation de la procédure sur le serveur
–  Lancement à distance par appel de procédure (EXECUTE)
Client
Serveur
SQL
Moteur
JDBC
BD
…
COMM
Java
Serveur Oracle
Client
Résultat exécution
•  Exécution serveur (envoie de procédure anonyme)
Client
Execute COMM
Moteur Serveur
SQL
PL/SQL
COMM
PL/SQL
BD
Serveur Oracle
–  Stocké comme un objet base de données
COMM
PL/SQL
Moteur Serveur
PL/SQL
SQL
•  Le créateur à les droits d exécuter, modifier, re-compiler la
procédure
•  Partage les droits avec d autres (GRANT/REVOKE EXECUTE)
BD
Résultat exécution
Serveur Oracle
131
132
API indépendantes du SGBD
133
(standardisées)
•  SQL-CLI (Call Level Interface)
–  Permet de se connecter et d’envoyer des requêtes SQL à tout serveur SQL, quel
que soit son type, sa localisation, le mode de connexion ...
–  API standardisée par X/Open depuis 1994
–  Intégrée dans le standard SQL (SQL 1992, SQL 2003)
Oracle PL/SQL
•  ODBC (Open DataBase Connectivity)
–  Créée par Microsoft
–  Interface C de connection à un SGBD, administration via une interface Microsoft
–  Pour chaque SGBD, un pilote ODBC est necessaire (Microsoft  Access,
SQLServer)
–  Basée sur le standard SQL-CLI
–  Disponible sur plateformes autres que Windows : http://www.unixodbc.org/
•  JDBC (Java DataBase Connectivity)
– 
– 
– 
– 
Créé par SUN (racheté par Oracle)
Interface JAVA de connection à un SGBD
Pour chaque SGBD, un pilote JDBC est nécessaire
Basé sur le standard SQL-CLI
Procedural Language / Structured Query
Language
(Langage propriétaire Oracle)
133
Bloc PL/SQL
134
Types des variables PL/SQL (1)
•  Bloc de déclaration de variables:
•  Types de base
DECLARE
<liste des variables utiles au programme>
–  Types Oracle (CHAR, NUMBER, DATE...)
–  Type Booléen : boolean
–  Types référençant le dictionnaire de données : table.col%TYPE
•  Suivi d un bloc d instructions et exceptions:
•  Types complexes
–  Record
BEGIN
<liste d’instructions du programme PL/SQL>
[ EXCEPTION
<instructions exceptionnelles> ]
END;
/
•  TYPE monType IS RECORD (champ1 NUMBER, champ2
VARCHAR2);
–  Table
•  TYPE maListe IS TABLE OF NUMBER ;
–  Curseurs (cf. plus loin)
135
136
Types et variables PL/SQL (2)
Structures de contrôle PL/SQL
•  Déclaration des variables dans le bloc declare
DECLARE
maVar
maVar
maVar
maVar
•  Traitement conditionnel
VARCHAR2 DEFAULT ‘ROUGE’;
Personne.nom%TYPE; -- type de l’attribut concerné
Personne%ROWTYPE;
-- type RECORD
MonCurseur%ROWTYPE; -- type RECORD
IF condition THEN traitement1
[ELSIF condition THEN traitement2]
[ELSE traitement3]
END IF;
•  Affectation de valeur
•  Itérations
–  Dans toutes les sections avec l opérateur :=
WHILE condition LOOP
traitement
END LOOP;
maVar := 2;
–  Dans la section begin end avec l opérateur into
Select max(table.col) into maVar from table;
FOR i IN 1..n LOOP
traitement
END LOOP;
•  Appel de variables extérieures dans le bloc begin end
–  Variables SQL*FORMS préfixées par :
–  Variables SQL*PLUS préfixées par &
LOOP
traitement
EXIT WHEN condition END LOOP;
137
Curseurs PL/SQL : déclaration
138
Curseurs PL/SQL : manipulation (1)
•  Résultat d une requête SQL géré comme un fichier
séquentiel
•  Déclaration
•  Attributs de curseur
–  %NOTFOUND, %FOUND, %ISOPEN, %ROWCOUNT
–  S évaluent à true, false, null, ou au numéro de tuple
•  commandes classiques d ouverture, lecture,
fermeture
DECLARE
CURSOR monCurseur IS requête_SQL;
•  Curseurs avec paramètres
•  OPEN,
FETCH, CLOSE
DECLARE
–  Paramètre fixés à l ouverture du curseur
DECLARE
CURSOR monCurseur (nomRecherche IN VARCHAR2) IS
SELECT nom, adresse FROM Personne
WHERE nom = nomRecherche;
139
CURSOR dept_10 IS SELECT Nom, Salaire
FROM employes WHERE NumDept = 10;
tuple dept_10%ROWTYPE;
BEGIN
OPEN dept_10;
LOOP
FETCH dept_10 INTO tuple;
.........
EXIT WHEN(dept_10%NOTFOUND) END LOOP;
CLOSE dept_10;
END;
140
Curseurs PL/SQL : manipulation (2)
•  Manipulation simplifiée
Curseurs PL/SQL : manipulation (3)
•  Clause for update of
GO TO CONCLUSION
–  réservation des lignes lors de la déclaration du curseur par un verrou
d intention indispensable à la modification
–  Permet d ensuite modifier les lignes du curseur
–  Pas de déclaration de l enregistrement récepteur
–  Ouverture et fermeture du curseur implicites
–  Ordre de lecture pas à pas fetch implicite
•  Clause current of
–  Accès direct en modification à la ligne ramenée par fetch
–  Utilisable seulement avec update of
DECLARE
CURSOR dept_10 IS SELECT Nom, Salaire
FROM employes WHERE NumDept = 10;
BEGIN
FOR tuple IN dept_10 LOOP
.........
END LOOP;
END;
141
Curseurs PL/SQL : exemple
DECLARE
CURSOR c1 IS SELECT Nom, Salaire FROM employes
FOR UPDATE OF Salaire;
BEGIN
FOR c1_enr IN c1
LOOP
IF c1_enr.Salaire > 1500 THEN
UPDATE employes SET Salaire = Salaire*1.3
WHERE CURRENT OF c1;
END IF;
END LOOP;
END;
142
Exceptions prédéfinies (1)
•  Levées automatiquement par le moteur PL/SQL
•  Augmente de 5% le salaire des employés du service
compta…
DECLARE
CURSOR Compta IS
SELECT nom, salaire FROM Employe WHERE service = comptabilité ;
Emp Compta%ROWTYPE;
BEGIN
OPEN Compta;
FETCH Compta INTO Emp;
WHILE Compta%FOUND LOOP
IF Emp.salaire IS NOT NULL AND Emp.Salaire < 30.000 THEN
UPDATE Employe SET salaire = salaire*1,05 WHERE nom = Emp.nom;
END IF;
FETCH Compta INTO Emp;
END LOOP;
CLOSE Compta;
END;
143
–  CURSOR_ALREADY_OPEN, INVALID_CURSOR
–  NO_DATA_FOUND, LOGIN_DENIED,
PROGRAM_ERROR
–  ZERO_DIVIDE, DUP_VAL_ON_INDEX…
•  Traitées par la procédure PL/SQL section begin
end
BEGIN
…
EXCEPTION
WHEN CURSOR_ALREADY_OPEN THEN
BEGIN Affiche_Err (-20000,
END;
problème… ) ; END;
144
Exceptions prédéfinies (2)
Exceptions définies par l utilisateur (1)
•  Déclaration dans la section declare
•  Levée dans la section begin end par l instruction raise
•  Traitement de l exception dans la section begin end
•  Exemple de traitement lors de la levée de
l exception oracle DUP_VAL_ON_INDEX
–  Détecte les doublons sur la clé primaire dans la table
–  Dans la sous section exception
–  Lors de la détection dans la clause when
BEGIN
INSERT INTO employes VALUES (num, nom,
salaire);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO doublons VALUES (num, nom);
END;
•  La clause when others traite les exceptions non traitées
DECLARE
sal_nul EXCEPTION;
…
BEGIN
…
IF … THEN RAISE sal_nul;
END IF;
EXCEPTION
WHEN sal_nul THEN …
WHEN OTHERS THEN …
END;
145
Exceptions définies par l utilisateur (2)
146
Procédures et fonctions PL/SQL (1)
•  Stockées sous forme compilée dans la base de données,
de la même façon qu un objet de la base
•  Exemple
–  Lève une exception quand la température du four dépasse 1000°
…
–  soumise aux mécanismes de sécurité ou de confidentialité
•  Partagées par plusieurs applications et utilisateurs
DECLARE
Err_Temp EXCEPTION;
MaxTemp NUMBER;
BEGIN
SELECT Max(temp) INTO MaxTemp FROM Four;
IF MaxTemp > 1000 THEN RAISE Err_Temp END IF;
EXCEPTION
WHEN Err_Temp THEN
BEGIN Affiche_Err (-200, le four va exploser ) ; END;
END;
–  à condition d avoir le privilège EXECUTE
•  Procédure
–  unité de traitement qui peut contenir des instructions
•  SQL (sauf DDL), PL/SQL, variables, constantes, curseurs et
gestionnaire d erreurs
•  Fonction
–  procédure qui retourne une valeur
147
148
Procédures et fonctions PL/SQL (2)
Procédures et fonctions PL/SQL (3)
•  Exemple de procédure
•  Création de procédure
CREATE [OR REPLACE] PROCEDURE nom_procédure [(liste_arguments)]
<IS|AS> declaration_variables
bloc_PLSQL
liste_arguments ::=
nom_argument_1 {IN | OUT | IN OUT} type,
nom_argument_2 {IN | OUT | IN OUT} type,
…...
nom_argument_n {IN | OUT | IN OUT} type
–  Modifie le prix d un article d un certain taux
CREATE PROCEDURE modif_prix (id IN NUMBER, taux IN NUMBER)
IS
BEGIN
UPDATE article a
SET a.prix_unitaire = a.prix_unitaire*(1+taux)
WHERE a.id_article = id;
END;
•  Création de fonction
•  Exemple de fonction
CREATE [OR REPLACE] FUNCTION nom_fonction [(liste_arguments)]
RETURN type {IS | AS} declaration_variables
bloc_PLSQL
–  Calcule le chiffre d affaire
•  Re-compilation de procédure et fonction en cas de
modification du schéma de la BD
ALTER <PROCEDURE | FUNCTION> nom COMPILE;
•  Suppression de procédure et fonction
DROP {PROCEDURE | FUNCTION} nom;
149
Package PL/SQL
CREATE PACKAGE traitements_vendeurs IS
FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER;
PROCEDURE modif_com (id IN NUMBER, tx IN NUMBER);
END traitements_vendeurs;
–  regroupement de programmes dans un objet de la BD
CREATE [OR REPLACE] PACKAGE BODY nom_Package
<IS|AS>
déclaration_variables_globales
corps_procédures
corps_fonctions
END nom_Package
150
Package PL/SQL : exemple
•  Package
CREATE [OR REPLACE] PACKAGE nom_Package
<IS|AS>
déclaration_variables
déclaration_exceptions
déclaration_procédures
déclaration_fonctions
END nom_Package;
CREATE FUNCTION chiffre_affaire (id IN NUMBER) RETURN NUMBER
IS
ca NUMBER;
BEGIN
SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;
RETURN ca;
END;
Visible par
l application
(public)
Interne au
package
(privé)
151
CREATE PACKAGE BODY traitements_vendeurs IS
FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER
IS
ca NUMBER;
BEGIN
SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;
RETURN ca;
END;
PROCEDURE modif_com (id IN NUMBER, taux IN NUMBER)
IS
BEGIN
UPDATE vendeur v
SET v.com = v.com*(1+taux)
WHERE v.id_vendeur = id;
END;
END traitements_vendeurs;
152
Conclusion langages dédiés
•  Les langages de type PL/SQL constituent le mode
d'utilisation le plus courant des bases de données
relationnelles
API de communication SGBD
–  Utilisé pour programmer des procédures stockées
–  Utilisé pour programmer des triggers
–  Bonnes performance (réduit le transfert réseau)
–  Bien adapté aux clients légers (ex: smart phones…) car
déporte des traitements sur le serveur
Exemple de JDBC
(Java DataBase Connectivity)
•  Utilisé par les outils de développement de plus
haut niveau (SQLforms)
153
API de communication à un SGBD
154
L API JDBC (Java DataBase Connectivity)
•  SQL-CLI (Call Level Interface)
–  API standardisée par X/Open depuis 1994, intégrée dans
SQL3
–  Permet de se connecter et d’envoyer des requêtes SQL à
tout serveur SQL, quel que soit son type, sa localisation, le
mode de connexion ...
•  Permet de simplifier l accès à une BD depuis
Java (évite l utilisation de code natif)
•  JDBC fournit un ensemble de classes et
d interfaces pour l utilisation d un ou plusieurs
SGBD à partir d un programme Java
•  Intérêts de JDBC
•  Popularisé par des médiateurs tels que
–  ODBC (Open DataBase Connectivity)
•  API assez complexe
•  interface C (nécessite l’utilisation de code natif)
–  interface uniforme pour accéder à un SGBD
–  indépendant du SGBD cible
–  simplicité de mise en oeuvre
–  supportant les fonctionnalités de base de SQL
–  JDBC (Java DataBase Connectivity)
•  vue “objet” des mêmes concepts que ODBC
•  un pont JDBC-ODBC existe
155
156
Architecture logicielle de JDBC
Exemples d utilisations de JDBC
•  Chaque source de données utilise un pilote (driver) qui
lui est propre et qui convertit les requêtes JDBC dans
le langage natif du SGBD
•  Dans un client léger classique
API
JDBC
Applet
Java Appli/Applet
JDBC
API
JDBC
Clients
JDBC DriverManager
driver
ODBC
protocole Propriétaire
Oracle
Sybase
driver
JDBC
pour
Oracle
Driver
JDBC
pour
Sybase
API Web
(TCP/IP)
Fichier
Sybase
Différentes
implémentations
de JDBC
Applet
Clients
L’API JDBC
// gestion des connexions
• 
• 
• 
–  Statement
// exécution de requêtes classiques
–  PreparedStatement // préparation de requêtes
dynamiques
–  CallableStatement // appel de procédures stockées
• 
• 
• 
// manipulation du résultat
–  ResultSetMetaData // description du résultat
–  DatabaseMetaData // description de la base
–  Driver
Servlet
JDBC
Driver
JDBC
API
Driver
JDBC
BD
Serveur BD
158
Utilisation de JDBC : Etapes à suivre
•  API fournie par le package java.sql (le noyau)
•  Interfaces (principales) du package
–  ResultSet
Serveur
API
JDBC
Serveur Web
157
–  Connection
BD
driver
SGF local
protocole Propriétaire
Oracle
Driver
JDBC
•  Dans une architecture J2EE
API du
Driver
JDBC
Driver(pont)
JDBC-ODBC
API
Driver
JDBC
(Importer le package java.sql)
Charger le driver JDBC
Établir une connexion à la base de données
Créer une instruction (requête/batch/
procédure…)
Exécuter l instruction
Traiter le résultat
Fermer les différents éléments
// gestion des pilotes
•  Les extensions dans javax.sql
159
160
Les fonctions de JDBC
•  Fonctions de bases
–  Charger le/les pilotes
–  Se connecter à la base de
données
–  Créer une instruction
•  SQL statique,
•  appel à procédure stockée,
•  précompilée et paramétrée
–  Traiter le résultat
•  Gestion de l objet ResultSet
•  Par invocation de la méthode Class.forName
•  Paramètre = chemin de la classe du driver
•  Fonctions avancées
–  Exceptions JDBC
–  Accès aux méta-données
–  (fournit dans la doc. du driver)
•  Du résultat
•  De la base de données
–  Exécution de
•  Exemple utilisant le pont (driver) JDBC-ODBC
•  requêtes précompilées
•  requêtes paramétrées
•  procédures stockées
–  Exécuter l instruction
•  LMD de consultation,
•  LDD et LMD de mise à jour,
•  procédures stockées
Chargement du pilote JDBC
– 
– 
– 
– 
import java.sql.*;
Exécution par lots (batch)
Utilisation de curseurs
Transactions
Extension standard (javax.sql)
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
catch (Exception E) {System.err.println(« Chemin du driver incorrect!");}
// ... Etapes suivantes ...
}
}
–  Fermer les différents éléments
161
162
Connecter la base de données
Créer une instruction
•  DriverManager permet d établir la connexion avec le SGBD
•  Grâce à la méthode getConnection de cette classe
•  Une instruction est représentée par une instance de la classe
–  Statement, (instruction SQL statique)
–  CallableStatement, (appeler une procédure stockée)
–  ou PreparedStatement (instruction SQL précompilée et paramétrée)
–  le driver adéquat est retrouvé parmi les drivers chargés
–  un objet Connection est retourné
•  Paramètres de la méthode
–  Url fournit les informations nécessaires à la connexion
•  débute par jdbc:, suivi du sous-protocole (par ex. odbc), suivi par des
informations propres au driver (par ex: le nom de la source de données dans
le cas du pont JDBC-ODBC)
–  Nom et mot de passe de l utilisateur sur le SGBD
•  Exemple
•  La création se fait à partir de l objet Connexion en utilisant
(l objet Connexion est obtenu à la connexion)
–  createStatement (SQL statique)
–  prepareCall (procédure stockée)
–  prepareStatement (SQL précompilé/paramétré)
•  Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
Connection con = DriverManager.getConnection(jdbc:odbc:Oracle, "scott", "tiger");
}
}
163
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
Statement req1 = con.createStatement();
CallableStatement req2 = con.prepareCall(str);
PreparedStatement req3 = con.prepareStatement(str);
}
}
164
Exécuter l instruction
Traiter le résultat
•  Méthodes (principales) pour exécuter une instruction
•  La méthode executeQuery retourne un objet de type
ResultSet
–  executeQuery pour les requêtes de type SELECT ...
(LMD de consultation)
–  executeUpdate pour les CREATE ou INSERT/DELETE/UDATE...
(LDD et LMD de mise à jour)
–  execute pour les procédures stockées (entre autre)
–  représente un curseur sur le résultat de la requête
–  Exemple
•  Les méthodes de l interface Statement (exécution de requêtes
SQL statiques) prennent en paramètre une chaîne de
caractères représentant la requête à exécuter
•  Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
req1.executeUpdate("CREATE TABLE contact (nom VARCHAR(50), tel CHAR(10))");
req1.executeUpdate("INSERT INTO contact VALUES (’dupond’, ’0102030405’)");
}
}
// ... Etapes précedentes...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
•  La méthode executeUpdate retourne le nombre
–  de tuples affectés dans le cas d un LMD (INSERT/DELETE/
IPDATE…)
–  0 dans le cas d un LDD (CREATE…)
–  Exemple
// ... Etapes précedentes...
int nbTuples = req1.executeUpdate("UPDATE contact " +
"SET nom = ’dupont’ " +
"WHERE nom = ’dupond’");
165
166
Accès aux résultats
(conversion et valeur nulles)
Accès aux résultats (curseur)
•  Conversion de type
•  Un curseur permet de parcourir les tuples résultats d une
requête
–  Les méthodes getXXX convertissent de SQL vers JAVA
–  Représenté dans JDBC par l interface ResultSet
•  Fonctionnement
–  Le curseur d un objet ResultSet est positionné avant le premier tuple
–  La méthode next permet de faire avancer ce curseur sur le tuple suivant
•  retour = false  il n y a plus de tuples à traiter
•  Valeurs nulles (NULL de SQL)
•  Les valeurs des attributs sont obtenues grâce aux méthodes
getXXX( )
Java
String
String
VARCHAR
NUMERIC
TINYINT
SMALLINT
INTEGER
–  Testé grâce à la méthode wasNull de ResultSet
–  Paramètre = numéro/nom de colonne dans le résultat
•  Exemple
SQL
CHAR
VARCHAR
LONG
String
Boolean
Byte
Short
Etc…
// ...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
while(rs.next()) {
String nom = rs.getString("nom"); // ou String nom = rs.getString(1);
String tel = rs.getString("tel"); // ou String nom = rs.getString(2);
// ...
}
167
•  wasNull est appelée après la lecture de la valeur
(après l utilisation d une méthode getXXX)
–  Les méthodes getXXX convertissent les valeurs NULL de
SQL en une valeur acceptable pour le type Java cible
168
Fermer les différents éléments
Les fonctions de JDBC
•  Fonctions de bases
•  (préférable pour libérer la mémoire)
•  Les éléments concernés
–  Charger le/les pilotes
–  Se connecter à la base de
données
–  Créer une instruction
–  Curseurs
–  Instructions
–  Connexions
–  Etc.
•  Exemple
•  SQL statique,
•  appel à procédure stockée,
•  précompilée et paramétrée
•  Fonctions avancées
–  Exceptions JDBC SKIP
–  Accès aux méta-données
•  Du résultat
•  De la base de données
–  Exécution de
•  requêtes précompilées
•  requêtes paramétrées
•  procédures stockées
–  Exécuter l instruction
•  LMD de consultation,
•  LDD et LMD de mise à jour,
•  procédures stockées
// ... Etapes précedentes...
rs.close();
req1.close();
c.close();
// ...
–  Traiter le résultat
•  Gestion de l objet ResultSet
– 
– 
– 
– 
Exécution par lots (batch)
Utilisation de curseurs
Transactions
Extension standard (javax.sql)
–  Fermer les différents éléments
169
Exceptions
170
Accès aux méta-données
•  Procurent des informations (méta-données) sur
•  L exception SQLException peut être lancée par les méthodes
de JDBC
–  le SGBD et le driver JDBC (DatabaseMetaData),
–  ou sur le résultat d une requête (ResultSetMetaData)
•  Exemples de méthodes de l interface DatabaseMetaData
•  Elle permet d obtenir des informations sur l erreur qui s est
produite
–  getSchemas pour la liste des schémas disponibles
–  getTables pour la liste des tables
–  une chaîne décrivant l erreur (méthode getMessage)
–  un code d erreur spécifique au SGBD (méthode getErrorCode)
–  une chaîne d état SQL (méthode getSQLState)
•  Exemples d utilisation de ResultSetMetaData
•  Les avertissements du SGBD peuvent aussi être capturés par
la classe d exception SQLWarning
// ...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
ResultSetMetaData rsmd = rs.getMetaData();
int nbColonnes = rsmd.getColumnCount();
// ...
–  Un avertissement ne stoppe pas l exécution du programme
–  On utilise la méthode getWarnings de Statement pour les récupérer
171
172
Requête précompilée : (création)
Requête précompilée : (paramétrage)
•  Une requête qui doit être exécutée peut être précompilée en
utilisant PreparedStatement
•  Avant d exécuter la requête  fixer les paramètres
(remplacent les ? par une valeur dans la chaîne)
–  Dans un objectif de performance (temps d exécution)
–  La requête est transmise au SGBD (qui la précompile)
–  Grâce aux méthodes setXXX
(où XXX représente un type de données Java)
–  NB: setNull fixe le paramètre à la valeur NULL de SQL
–  Premier argument = numéro d ordre du ? à remplacer
–  Deuxième argument = valeur de remplacement
•  Le plan d exécution est préparé
–  Des variables peuvent être utilisées pour paramétrer la requête
•  Création d une requête précompilée
–  A partir de l objet Connection
–  Grâce à méthode prepareStatement
•  Exemple
•  La requête est passée en paramètre sous forme de chaîne de caractères
•  Les paramètres sont représentés par des ? dans la chaîne
// ...
String req = "UPDATE contact SET tel = ? WHERE nom = ?";
PreparedStatement UpdateTel = con.prepareStatement(req);
UpdateTel.setString(1, "0908070605");
UpdateTel.setString(2, "durand");
// ...
–  Le retour est un objet PreparedStatement prêt à être exécuté
•  Exemple
// ...
String req = "UPDATE contact SET tel = ? WHERE nom = ?";
PreparedStatement UpdateTel = con.prepareStatement(req);
// ...
173
Requête précompilée : (exécution)
174
Procédures stockées
•  L interface CallableStatement permet d invoquer une
procédure stockée
•  Grâce aux mêmes méthodes que pour des
requêtes fixes, mais sans argument
–  NB: la procédure est stockée au niveau du SGBD…
–  … la création se faisant avec la méthode prepareCall de Connection
–  ExcuteQuery/executeUpdate
–  NB: l instruction contient déjà la requête à exécuter…
// ...
CallableStatement cs = c.prepareCall("{call nom_procedure_stockee}");
// ...
•  Exemple
•  La syntaxe de l appel de procédure (call ...) est traduit par le
driver JDBC dans la syntaxe native du SGBD
•  L exécution de l instruction se fait de façon classique en
fonction de ce que retourne la procédure
•  L interface CallableStatement est sous-interface de
PreparedStatement et accepte donc des paramètres
// ...
String req = "UPDATE repertoire SET tel = ? WHERE nom = ?";
PreparedStatement updateTel = con.prepareStatement(req);
updateTel.setString(1, "0908070605");
updateTel.setString(2, "durand");
updateTel.executeUpdate();
updateTel.setString(1, "0900000000");
updateTel.executeUpdate();
// ...
175
176
Transactions (portée)
Transactions (concurrence)
•  Rappel = une transaction permet d exécuter un ensemble de
requêtes sur une BD, la faisant passer d un état cohérent à un
autre état cohérant, respectant les propriétés transactionnelles
(ACID)
•  Par défaut, la connexion JDBC est en mode chaîné
–  chaque requête est suivie d un ordre SQL « commit » implicite
–  Connection.TRANSACTION_READ_UNCOMMITTED
•  lectures sales, non reproductibles et fantômes peuvent se produire
–  Connection.TRANSACTION_READ_COMMITTED
•  On peut désactiver ce mode
–  soit lors de la création de la connexion
–  soit grâce à la méthode setAutoCommit
•  Le niveau d isolation permet de déterminer les incohérences
que peut subir une transaction (lecture sales, fantômes, . . .)
•  Les différents niveaux d isolation (normalisés) sont
•  les lectures sales sont évitées
–  Connection.TRANSACTION_REPEATABLE_READ
// ...
c.setAutoCommit(false);
// ...
•  les lectures sales et non reproductibles sont évitées
–  Connection.TRANSACTION_SERIALIZABLE
–  La validation doit alors se faire
explicitement par la méthode commit…
–  … et l annulation se fait grâce à
la méthode rollback
•  la transaction est complètement sérialisable
–  Connection.TRANSACTION_NONE
// ...
c.commit();
// ...
c.rollback();
// ...
•  indique que les transactions ne sont pas supportées
177
Apports de JDBC 2.0 et 3.0 (1/2)
Apports de JDBC 2.0 et 3.0 (2/2)
•  Amélioration des curseurs
•  Envoyer plusieurs instructions à la BD en une fois
–  Parcours dans les 2 sens, positionnement sur un tuple donné,…
–  Méthodes nouvelles:
–  Exécution par batch
–  Avec la méthode addBatch de Statement ajouter une
requête dans la liste à exécuter
•  previous, first, beforeFirst, last, afterLast, absolute, relative, …
•  Mise à jour de la BD au travers des méthodes de Java
–  Notamment, au travers de curseurs
–  UPDATE
•  NB: La liste peut être effacées avec la méthode clearBatch
•  Méthode updateString de ResultSet,
•  puis updateRow pour reporter les changements dans la BD
(avant de déplacer le curseur sur un autre tuple)
–  L exécution des requêtes est ensuite réalisée par la
méthode executeBatch
–  INSERT
•  Méthode moveToInsertRow pour déplacer le curseur vers une zone particulière
d insertion,
•  puis méthodes updateXXX pour fixer les valeurs des attributs du tuple,
•  puis méthode insertRow pour insérer le tuple dans le ResultSet et dans la BD
•  NB: la méthode moveToCurrentRow permet de revenir sur le tuple courant (sur lequel
le curseur se trouvait avant l appel de moveToInsertRow)
–  DELETE
–  Positionner le curseur sur le tuple à supprimer,
–  puis appel à la méthode deleteRow pour effectuer la suppression
•  Les méthodes getTransactionIsolation et
setTransactionIsolation de Connection permettent de connaître
178
et fixer le niveau d isolation
•  Cette méthode retourne un tableau d entiers représentant le nombre
de tuples modifiés par chaque instruction
•  L exception BatchUpdateException peut être lancée si une erreur se
produit lors des mises à jour
•  Support des types SQL3
–  Blob, Clob, Array, etc. et ajout des méthodes getXXX et
setXXX correspondantes
179
180
XML et la gestion de données
•  XML s’impose
Bases de données XML
•  Standard d’échange de données universel
•  Intégration des données et des méta-données
•  XML permet de standardiser la manière dont l'information est
Documents XML
• 
• 
• 
• 
•  Extensible Markup Language (XML)
•  Document Type Definition (DTD)
•  XML Schema Definition (XSD)
Modèle de données et langages de requêtes XML
échangée
présentée
retrouvée
sécurisée
XML, Namespaces,
XSL,
XPath, XQuery,
XML Encryption, XML Signature
•  Besoin de supporter XML dans les BD
•  Modèle de données XML
•  Stockage de données XML
•  Interrogation : XPath, XQuery, XMLSQL
•  nécessité de stocker les documents XML variés
•  nécessité de pouvoir interroger ces documents
 Quel modèle de données, de stockage, d’indexation ?
 Quel langage de requête ?
 Quelle intégration avec l'existant ?
SGBD XML
•  Support de XML dans les SGBD relationnels
•  SGBD natifs
182
181
Document Type Definition (DTD)
XML Schema Definition (XSD)
Exemple de document et représentation
Restos
<?xml version="1.0"?>
region: Normandie
<Restos region="Normandie" >
Attribut
Élément
<Resto cat="***">
<Nom>Le Grand Hôtel</Nom>
<Adresse>
Resto
<Rue>Prom. Proust</Rue>
cat : ***
Élément
<Ville>Cabourg</Ville>
</Adresse>
<Manager>Dupont</Manager>
<Menu>Plat du jour</Menu>
Nom
Adresse
Manager
Menu
</Resto>
Le Grand Hôtel
Dupont
Plat du jour
<Resto cat="*">
<Nom>L'Absinthe</Nom>
<Adresse>
<N°>10</No>
Rue
Ville
<Rue>quai Quarantaine</Rue>
Prom. Proust
Cabourg
<Ville>Honfleur</Ville>
</Adresse>
<Tel>0231893900 </Tel>
<Manager>Dupont</Manager>
<Manager>Durand</Manager>
<Menu Prix="12"> Fruits de Mer </Menu>
</Resto>
</Restos>
183
<?xml version="1.0"?>
<Restos region="Normandie" >
<Resto cat="***">
<Nom>Le Grand Hôtel</Nom>
<Adresse>
<Rue>Prom. Proust</Rue>
<Ville>Cabourg</Ville>
</Adresse>
<Manager>Dupont</Manager>
<Menu>Plat du jour</Menu>
</Resto>
<Resto cat="*">
<Nom>L'Absinthe</Nom>
<Adresse>
<N°>10</No>
<Rue>quai Quarantaine</Rue>
<Ville>Honfleur</Ville>
</Adresse>
<Tel>0231893900 </Tel>
<Manager>Dupont</Manager>
<Manager>Durand</Manager>
<Menu Prix="12"> Fruits de Mer </Menu>
</Resto>
</Restos>
…
<!ELEMENT
Menu+)>
<!ATTLIST
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ATTLIST
…
Resto (Nom, Adresse, Tel?, Manager*,
Resto cat
CDATA #REQUIRED>
Nom
(#PCDATA)>
Adresse (N°?, Rue, Ville)>
Rue
(#PCDATA)>
Ville
(#PCDATA)>
Tel
(#PCDATA)>
Manager
(#PCDATA)>
Menu
(#PCDATA)>
Menu Prix CDATA #IMPLIED>
DTD
…
<xsd:element name="Adresse" >
<xsd:complexType name="Addresse">
<xsd:sequence>
<xsd:element name="Rue" type="xsd:string"/>
<xsd:element name="Ville" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name ="N°" type="xsd:short"/>
</xsd:complexType>
</xsd:element>
…
XSD
184
DTD vs Schema
Modèle de données et langages
de requêtes XML
•  DTD
• 
• 
• 
• 
Défini le «vocabulaire» et la structure utilisés dans le document XML
DTD externe : appelée dans le document XML
Pas de types de données
Pas en XML  langage spécifique
•  Modèle de données XML
•  Stockage de données XML
•  Interrogation
•  XML Schéma
•  Un schéma d'un document définit:
•  les éléments possibles dans le document et attributs associés
•  la structure du document (Sequence / Choice / All)
•  les types de données
•  Le schéma est spécifié en XML  pas de nouveau langage
•  Présente de nombreux avantages
•  structures de données avec types de données
•  extensibilité par héritage et ouverture
•  analysable à partir d'un parseur XML standard
•  XPath,
•  XQuery,
•  XMLSQL
185
Modèle de données XML
• 
• 
• 
• 
• 
186
Stockage de données XML
Un document est un arbre à nœud étiqueté
Chaque nœud possède une identité
Exprimé en XML, souvent représenté graphiquement
Une forêt est une collection de documents de même schéma
Une source de données est soit un document, soit une forêt
Relationnel
Table
Tuple (ligne)
Attribut (colonne)
Domaine
Clé
Référence
XML
Forêt (Collection)
Arbre
Elément ou Attribut
Type
ID
IDREF
Décomposé en relationnel
•  XML Shredding (DB2)
•  Structured storage (Oracle)
•  SQLXML Mapping (SQL Server)
187
Stockage comme un attribut
•  Pure XML (XML Stuffing - DB2)
•  Binary/Unstructured (Oracle)
•  XML datatype (SQL Server)
188
Stockage décomposé en relationnel
Stockage attribut, chaine de caractères
•  Comment ?
•  Comment ?
•  Le document XML est éventuellement compressé et
stocké dans un « CLOB » (Character Large OBject)
•  CLOB (DB2, SQL Server), Unstructured XML (Oracle)
•  Schéma XML annotés avec infos de mapping
•  Assistants, découverte automatique de la structure
•  Avantages
•  Meilleure gestion de la consommation de mémoire et
du stockage
•  Indexation aisée (par B-Tree)
•  Interrogation efficace (multi-documents)
•  Inconvénients
• 
• 
• 
• 
•  Avantages
•  Flexibilité, simplicité
•  Rendu d’un document « à l’identique » et efficace
CLOB
Flexibilité réduite
Coût d’insertion et de rendu d’un document
Complexité du maintien des infos de mapping
Complexité du schéma relationnel
•  Inconvénients
•  Surcout de stockage (taille)
•  Surcout mémoire/performance lors de l’interrogation
(taille, parsing)
•  Pas d’indexation (ou recherche plein texte)
•  Mise à jour couteuse ou intégrale
•  Adapté à
•  Documents utilisés individuellement, besoin de rendu
« à l’identique »
•  Adapté à
•  Documents fortement structurés et peu complexes
189
Stockage attribut, propriétaire
190
Conclusion sur le stockage XML
•  Comment ?
Peu structurés
•  Le document XML est parsé, validé, éventuellement
compressé et stocké dans un champ
« binaire » (BLOB : Binary Large OBject)
•  PureXML (DB2), Binary XML type (Oracle),
XML datatype (SQL Server)
•  Stockage
Approche
orientée
données
•  Avantages
BLOB
• 
• 
• 
• 
Flexibilité
Indexation possible
Parsing et validation faite lors de l’insertion
Stockage compact possible
•  Index:
•  Stockage
•  Décomposé
•  Index
•  B-Tree
•  B-Tree
•  spécifiques à XML
•  plein texte
•  Stockage
•  Inconvénients
• 
• 
• 
• 
•  Hybride (décomposé
+ CLOB)
Structurés
Approche
orientée
documents
Rendu « presque » identique
Stockage propriétaire
Léger surcout de traitement lors du stockage
Mise à jour couteuse
•  Adapté à
•  Attribut propriétaire (BLOB)
•  Attribut CLOB
•  Index:
•  spécifiques à XML
•  plein texte
•  Documents utilisés individuellement
191
192
XPath
Exemple de document et représentation
Restos
<?xml version="1.0"?>
region: Normandie
<Restos region="Normandie" >
Attribut
Élément
<Resto cat="***">
<Nom>Le Grand Hôtel</Nom>
<Adresse>
Resto
<Rue>Prom. Proust</Rue>
cat : ***
Élément
<Ville>Cabourg</Ville>
</Adresse>
<Manager>Dupont</Manager>
<Menu>Plat du jour</Menu>
Nom
Adresse
Manager
Menu
</Resto>
Le Grand Hôtel
Dupont
Plat du jour
<Resto cat="*">
<Nom>L'Absinthe</Nom>
<Adresse>
<N°>10</No>
Rue
Ville
<Rue>quai Quarantaine</Rue>
Prom. Proust
Cabourg
<Ville>Honfleur</Ville>
</Adresse>
<Tel>0231893900 </Tel>
<Manager>Dupont</Manager>
<Manager>Durand</Manager>
<Menu Prix="12"> Fruits de Mer </Menu>
</Resto>
</Restos>
•  Syntaxe pour la navigation en arbre
•  La navigation est définie par des chemins
•  Utilisé par d'autres standards: XSLT, XLink, XPointer, ...
•  Les chemins sont composés d'étapes
• 
• 
• 
• 
• 
/ racine ou séparateur entre étapes
* joker pour n'importe quel nom
@ désigne un attribut
// joker pour n'importe quel sous chemin
.. étape précédente
•  [ ] permet la spécification d'un filtre (prédicat) sur les
nœuds courants (peut contenir des chemins)
•  [n] sélectionne le N-ème élément d'une séquence
193
Exemples 1,2,3 : XPath
194
XQuery
•  Noms de tous les Restos :
•  Langage de requête du W3C, inspiré de SQL
•  document(“Restos.xml”)/Restos/Resto/Nom/text()
•  document(“Restos.xml”)//Resto/Nom
•  Proposé par IBM et les auteurs de XML/QL, soutenu par Microsoft
•  sélection, projection, jointure, imbrication, agrégat, tri, etc.
•  Expression régulière
•  Tout XPath est une requête valide
•  Forme de requête FLWR dans des forêts
•  Menu de tous les Restos
•  document(“Restos.xml”)//Menu
FOR $<var> in <forest> [, $<var> in <forest>]… // itération
LET $<var> := <subtree>
// assignation
WHERE <condition>
// élagage
RETURN <result>
// construction
•  Accès via prédicat à attribut
•  Nom des menus du Resto "Maxims"
•  document(“Restos.xml”)//Resto [Nom/text()="Maxims"] /Menu/
@Nom
•  une forêt est soit une collection, soit sélectionnée par un
document et une expression XPath
•  Le résultat est une forêt
195
196
Exemple 4, 5 : Sélection (Xpath, XQuery)
Exemple 6 : Jointure
•  Lister le nom des Restos de Cabourg:
•  Lister le nom des Restos avec téléphone qui se trouvent
dans la rue de l'Hôtel Lutecia:
•  document(“Restos.xml”)//Resto[Adresse/Ville= “Cabourg"] /Nom
FOR
<resultat>
FOR
$R IN document(“Restos.xml”)//Resto
WHERE $R/Adresse/Ville = “Cabourg”
RETURN {$R/Nom}
</resultat>
WHERE
AND
RETURN
$R IN document(“Restos.xml”)//Resto,
$H IN document("Hotels.xml")//Hotel
$H//Rue = $R//Rue
$H//Nom = "Le Lutecia"
<Result>
{$R/Nom}
{$R/Tel}
</Result>
197
198
Exemple 7 : Restructuration d'arbres
Exemple 8 : Agrégat simple
•  Construire une liste de Restos par Ville
•  Combien de Restos y-a-t-il dans la base ?
FOR $C IN distinct(document(“Restos.xml”)//Resto//Ville)
RETURN
<Ville>{$C}</Ville>
<Restos>
FOR $R IN document(“Restos.xml”)//Resto
WHERE $R//Ville = $C
RETURN {$R}
</Restos>
LET
RETURN
199
$R := document(“Restos.xml”)//Resto
<NombreResto > count ($R) </NombreResto>
200
Exemple 9 : Agrégat partitionné
XQuery Update Facility
•  Lister le nom de chaque Resto avec le prix moyens des
menus proposés
•  Extension de XQuery pour la mise à jour de documents XML
•  Norme publiée par le W3C le 17 Mars 2011
• 
• 
• 
• 
• 
FOR $R IN document(“Restos.xml”)//Resto
LET $A := avg(document(“Restos.xml”)//[Resto = $R]//Menu/@Prix)
RETURN
<resultat>
{$R/Nom}
<avgPrix>{$A}</avgPrix>
</resultat>
Insertion d’un nœud (Insert)
Suppression d’un nœud (Delete)
Modification d’un nœud (Replace / Rename)
Modification d’une copie d’un nœud (Copy) (pour affichage)
Intégration dans les expressions FLWR
•  Attention : les effets des mises à jour ne sont appliquées
que lorsque la requête sélectionnant les nœuds à mettre à
jour est exécutée.
201
202
SQL/XML
Différentes propositions
•  Intégration de fonctionnalités XPath à SQL
•  Publication de tables en XML
•  Pas de standard pour le CA actuellement
•  Différentes politiques en ce qui concerne le chemin
d accès aux données autorisées (e.g., a/b dans
l exemple précédent)
•  Fonctions de construction de XML (pont relationnel)
•  Support à la SQL3 (objet XML – BLOB ou CLOB XML)
•  Type de donnée natif XML Type (colonnes XML)
•  Fonctions d’extraction XPath
•  Insertion et Maj de XML en colonne(s)
•  Interdire l accès si le chemin n est pas autorisé
•  Forcer le chemin
•  Forcer le chemin en le rendant anonyme
•  Exemple de requête
•  Besoin d un modèle plus fin et plus précis
SELECT XMLElement("Emp",
XMLForest ( e.hire, e.dept AS "department") ) AS "result“
FROM EMPLOYEE e
WHERE ExtractValue(e.XMLemp, /emp/@id) > 200;
•  Droits sur les liens
•  Intégré à Oracle, DB2, SQLServer
203
204
SGBD relationnel XML
SGBD XML
•  Composants logiciels intégrés à un SGBD relationnel
assurant:
• 
• 
• 
• 
•  Support de XML dans les SGBD relationnels
•  SGBD natifs
le stockage et l'interrogation de documents XML
en transformant le XML en tables
et les tables en XML (vues XML)
avec des attributs de type XML
•  Langage de requêtes
• 
• 
• 
• 
XPath
XQuery
XMLSQL
SQL étendu avec fonctionnalités XML
206
205
Oracle
Microsoft SQL Server
•  Stockage
•  SQL Server 2000
• 
• 
• 
• 
• 
• 
•  SELECT … FOR XML : Retourne du XML à partir de requêtes
relationnelles et permet de définir le format du XML retourné.
•  OpenXML : Manipulation de documents XML comme des tables
avec T-SQL et des procédures stockées.
Mapping de XML plat sur une table
Mapping de XML imbriqué en tables imbriquées
Stockage de XML en colonne (XML Type)
Compression de XML en table ou colonne
Indexation du XML par tags et mots clés
Schéma XML optionnel avec validation
•  SQL Server 2005
• 
• 
• 
• 
• 
•  Manipulation
• 
• 
• 
• 
• 
Support de SQL/XML (V9)
Support de XQuery (V10)
Réécriture de requêtes XQuery, XMLSQL vers SQL
Vues XML de tables relationnelles
Vues relationnelles de document XML
Stockage natif comme "XML data type"
Validation par rapport à un schéma XML
Indexation de données XML
Support basique de XQuery
Possibilité de définir des vues XML et de les interroger
•  SQL Server 2008
•  Validation « souple »
•  Support de la clause « let » (variables) dans XQuery
•  Mise à jour : Insert / Delete / Replace value of ….
207
208
SGBD Natif XML
Conclusion sur XML
•  Stockage des documents entiers
sans les décomposer en
éléments
•  Similaire à PureXML de DB2,
Binary d’Oracle,
et XML Datatype de SQL Server
•  Techniques d'indexation
spécifiques
•  Index de structure (arbres)
•  Index de contenu (mots clés)
XML
Stockage
XML
XQuery
•  Points forts Relationnel
XML
• 
• 
• 
• 
• 
Recherche
XML
•  Points forts Natif (et types XML propriétaire des SGBD
relationnels)
Noyau SGBD
Concurrence, Fiabilité
• 
• 
• 
• 
•  Support de XQuery
•  Optimisation, exécution
Arbres
XML
pas de nouveau SGBD
possibilité de normaliser les données (structuré)
possibilité de stocker comme valeur d’attribut
une certaine portabilité multi-SGBD
performance pour accès grain fin
Index
pas de mapping à définir et à maintenir
intégrité du document (mode chaine de caractères)
recherche plein texte
performance pour accès gros grain
209
210
Panorama des SGBD … !!!
Panorama des SGBD
• 
• 
• 
• 
• 
?
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
211
4D (4th Dimension)
MariaDB
ADABAS
Adaptive Server Enterprise
Advantage Database Server
(ADS)
Altibase
Apache Derby
Datacom
CUBRID
DB2
Drizzle
Empress Embedded
Database
FileMaker
Firebird
FrontBase
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
Linter SQL RDBMS
LucidDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server
Compact (Embedded
Database)
MonetDB
mSQL
MySQL
Nexusdb
HP NonStop SQL
Omnis Studio
OpenBase SQL
Oracle
Oracle Rdb
OpenEdge
OpenLink Virtuoso
Paradox
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
Pervasive PSQL
Polyhedra DBMS
PostgreSQL
Postgres Plus Standard
Server
Postgres Plus Advanced
Server
R:Base
RDM Embedded
RDM Server
ScimoreDB
SmallSQL
SQL Anywhere
SQLBase
SQLite
Superbase
Teradata
UniVerse
Valentina
212
Parts de marché (2008 – Source : IDC)
Panorama des SGBD
Autres
(< 1.2%)
Sybase (3.0%)
Teradata (3.2%)
Principaux SGBD :
•  Marché des SGBDR, comparaison synthétique
Serveurs de bases de données
•  Licences propriétaires : Oracle, DB2, SQL Server
•  Licences Open Source : MySQL, PosgreSQL
Oracle
(43.5%)
Microsoft
SQL Server
(19.5%)
Quelques SGBD orientés « colonne »
Autres systèmes
IBM (DB2)
(21.7%)
•  SQLite (composant)
•  Microsoft Access (SGBD « personnel » - L4G)
Conclusion: Généalogie
http://idcdocserv.com/219232E
214
213
Classes de SGBD : Serveurs, L4G, composants
Nom
Oracle
SQL Server
DB2
Teradata
Adaptive Server Ent.
Informix
MySQL
PostgreSQL
Ingres
MariaDB
L4G
Access
4ème Dimension
OpenOffice.org Base
Composant SQLite
Berkeley DB
Derby
HyperFile
Serveurs
Création Version
Editeur
1979
11g R2 Oracle Corporation
1989
2012 (v11) Microsoft
1983
9.7
IBM
1979
13.1
Teradata Corporation
1980
15.7
Sybase
1981
11.7
IBM
1995
5.5 / 7.2 Oracle (Sun)
1985
9.1
Michael Stonebraker
1974
10
Computer Associates
2009
5.5
Monty Program Ab
1992
2010
Microsoft
1985
12.2
4ème Dimension
2002
3.4
Oracle (Sun)
2000
3.7
D. Richard Hipp
1986
5.3
Oracle (Sleepycat)
1996
10.8
Apache Software
1993
16
PC Soft (WinDev)
Comparaison (1) : systèmes supportés
License
Propriétaire
Propriétaire
Propriétaire
Propriétaire
Propriétaire
Propriétaire
GPL
BDS
GPL
GPL
Propriétaire
Propriétaire
LGPL
Dom. Public
BDSD
Apache
Propriétaire
215
Revenus des SGBDR par OS
(2008-2013)
http://idcdocserv.com/219232E
Nom
Windows
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
✔
✔
✔
✔
✔
✔
✔
UNIX-LinuxBSD
✔
✖
✔
✔
✔
✖
✔
MacOS
Symbian
✔
✖
✔
✔
✔
✖
✔
✖
✖
✖
✔
✖
✖
✔
OS supporté
216
Comparaison (2) : Fonctionnalités
Nom
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
Nom
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
ACID
✔
✔
✔
✔
✔
✖
✔
Support du
parallélisme
✔
✔
✔
✔
✔
✖
✖
Intégrité
référentielle
✔
✔
✔
≈
✔
✔
✔
Partitionnement
✔
✔
✔
✔
✔
✖
✖
Vues
matérialisées
✔
✔
✔
✖
✖
✖
✖
Indexs
spatiaux
✔
✔
✔
≈
✔
✖
✔
Comparaison (3) : Sécurité
Domaines
Déclencheurs
✔
✔
✔
✔
✔
✔
✔
✖
✔
≈
✖
✔
✔
✖
Indexs
Bitmap
✔
✔
✔
✖
✔
✖
✖
Indexs
partiels
✔
✔
✖
✖
✔
✖
✖
Nom
Communications
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
Nom
Indexs sur
expressions
✔
✔
✔
✖
✔
✖
✖
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
✔
✔
✔
✔
✔
✖
✖
Chiffrement des
fichiers
✔
✔
✔
✔
✔
✖
✔
Limitation de
ressources
✔
✔
✔
✖
✔
✖
✖
Complexité des mots
de passes
✔
✔
✔
✖
✖
✖
✖
Audit
✔
✔
✔
✖
✖
✔
✔
Séparation des rôles
Certification EALx
✔
✔
✔
✖
✖
✖
✖
✔
✔
✔
✖
✖
✖
✖
217
218
Oracle
Serveurs (licences propriétaires)
•  Historique :
•  Initialement SDL fondée en 1977 par Larry Ellison & co
•  Devient RSI en 1979 puis Oracle Corporation en 1983
•  Depuis, plus de 50 acquisitions dont
•  InnoBase (2005) – moteur transactionnel de MySQL
•  TimesTen (2005) – BD mémoire très performante
•  SleepyCat (2006) – moteur de BD embarqué BerkeleyDB
•  Sun (2010) – incluant MySQL
•  Oracle
•  DB2
•  SQL Server
•  Oracle est le leader mondial des systèmes de bases de
données
•  Oracle inclut de nombreux outils, progiciels, applications et
fonctionne sur toutes plate-formes
•  UNIX, Windows, Linux, MVS, etc.
219
220
Les versions d’Oracle
Développement
1979 – V2
: Version initiale, écrite en PDP-11
1980 – V3
: Réécrit en C, support des transactions
•  JAVA :
1984 – V4
: Support multi-plate-formes, protocoles multi-versions
1986 – V5
: Client/server, distribution
1989 – V6
: OLTP opt°, PL/SQL, sauvegarde online, verrouillage tuple
1993 – V7
: Déclencheurs, procédures, exécution parallèle, intégrité
référentielle, réplication
1997 – V8
: Objet, architecture 3-tier, support OLAP (partitionnement)
1999 – V8i
: Support Java, XML, LDAP, portage Linux
2001 – V9i
: Cluster (passage à l’échelle), Data Guard, securité
•  Support de Java (compilation), JDBC, Java Server Pages, SQLJ
•  PL/SQL
•  Support de PL/SQL (compilation), déclencheurs, procédures, PL/SQL
Server Pages
•  Cache de fonctions PL/SQL
•  XML
• 
• 
• 
• 
Support XML binaire
…
Index XML
XML repository
Support de XQuery
•  Objets :
•  Support des objets, Extensibilité
2003 – V10g : Automatisation de l’administration, Flashback, Data grid
•  Outils de développement
•  SQL Developer,
•  JDeveloper,
•  Application Express
2007 – V11g : Compression, ASM (gestion auto. du stockage), Real
Application Testing, Active Data Guard …
Application Express
221
Haute disponibilité
222
Performance/passage à l’échelle
• Options
Active Data Guard
• Options
•  Active Data Guard
•  déporte certaines activités sur
une base répliquée (standby DB)
•  Advanced compression
•  trafic réseau
•  sauvegardes
•  Total Recall
•  Conserve un historique complet
des modifications de la BD
•  In-Memory Database Cache
•  Utilisation du moteur TimesTen
•  Real Application Cluster (RAC)
•  Gestion automatique de la charge
• Fonctionnalités
IMDC
• Fonctionnalités
•  Flashback : SELECT … AS OF …
•  Sauvegarde en ligne, parallèle,
incrémentale
•  …
Total Recall
•  Automated Storage Management
(ASM)
• Oracle Database Machine
•  Avec Exadata Storage Server
223
Temps de
réponse moyen
TimesTen
224
Performance : GRID
Gestion de VLDB (DW, BI)
•  Globalisation et virtualisation des
ressources
•  Equilibrage de charge
•  Haute disponibilité
• Options
•  Partitioning
•  OLAP
•  Data Mining
•  Compression
• Fonctionnalités
•  Complexe / cher
•  Sous utilisation
•  configuré pour les pics d’activité
•  Pas de partage de ressources
•  Peu disponible
•  Index Bitmap
•  Parallélisme
•  inter-transaction : n instances Oracle,
verrous distribués et cohérence de cache
•  intra-requête : partitionnement des données,
parallélisme pipeline et indépendant
•  Création d’index, imports, exports, …
Serveurs
d'applications
Serveurs
de données
Disques
partagés
225
« Manageability »
226
Sécurité
•  Options
• Options
•  Change Management Pack
•  Configuration Management Pack
•  Diagnostic Pack
•  Tuning Pack
•  Provisioning and Patch Autom° Pack
•  Advanced Security
•  Chiffrement transparent (TDE)
•  Sécurisation des
communications
•  Label Security
•  Data Masking Pack
•  Database Vault
•  Fonctionnalités
•  Oracle Enterprise Manager
•  Automatisation
•  Gestion mémoire (AMM)
•  Stockage (ASM)
•  Statistiques
Identification des requêtes coûteuses
•  Sauvegardes / restaurations
Database Vault
• Fonctionnalités
•  Encryption toolkit
•  FGA : Fine Grain Auditing
Label Security
227
228
Données complexes / fichiers
OLTP / DW Oracle Database Machine
• Options
•  Oracle Spatial
•  Compression
•  Partitioning
•  Security
• Fonctionnalités
•  Images médicales (DICOM)
•  Secure files
•  Chiffrement, déduplication,
compression
•  Oracle Text
•  Multimedia
•  Serveurs Sun X4170 : 8 x (2 Intel Nehalem / 72 Go RAM)
 64 cœurs et 576 Go de RAM
•  Exadata Storage Servers 14 x (12 HDD de 2 To + 4 FlashFire 96GB)
 168 HDD / 336 To + 53 To de Flash
•  Prix ~ 2.6 M$
229
230
Oracle database Appliance (9/2011)
DB2 d'IBM
•  Objectif : permettre à une entreprise de consolider
l'ensemble de ses petites bases.
•  Matériel: Regroupe de 2 à 24 coeurs (avec un
maximum de 192 Go de mémoire) et 12 To de stockage.
•  Prix: démarre à 50 000 dollars, avec un processeur
deux coeurs (contre 330 000 dollars pour le plus petit
modèle d'Exadata)
•  Issu de prototypes de recherche (Almaden Research Lab.)
•  System R: le pionnier des SGBDR, à l’origine de SQL
•  StarBurst: SGBDRO à l’origine de SQL3
•  Deux version différentes
•  DB2 mainframe (issu de System R)
•  MVS, VSE, VM.
•  DB2 Universal Database
•  AIX, HP-UX, Solaris, Linux, Windows, NUMA-Q, 0S/2, OS/390, OS/
400.
•  Challenger d’Oracle sur le marché
•  Nombreux partenariats avec éditeurs d’outils et de progiciels
indépendants
•  Acquisition d’Informix en 2001
•  Collaboration avec PostgreSQL en 2009 (compatibilité Oracle)
231
232
DB2 : langages, supports
DB2 : Distribution des données
•  SQL3 très complet
•  Accès à BD distantes
• 
• 
• 
• 
objets
contraintes et triggers
requêtes récursives
langage de procédures stockées PSM
•  Information Integrator: SGBD distribué très optimisé
•  sécurité et cohérence globales; fédération avec XML
•  transactions distribuées 2PC
•  Réplication:
•  Langages objet
•  (a) symétrique, (b) synchrone avec DataPropagator
•  Parallélisme / Cluster : DB2 pureScale
•  Java, C++, SmallTalk
•  parallélisme inter- et intra-transaction
•  parallélisme pipeline et indépendant
•  Accès direct à la mémoire (RDMA)
•  XML
•  stockage dans tables par éclatement
•  stockage en colonnes comme valeur objet
•  Interrogation en SQL/XML et XQuery
•  DB2 Database Partitioning Feature
•  DB2 Everywhere:
•  Extensibilité grâce aux DB2 relational extenders
•  version légère pour PDA, Palm, etc. avec synchronisation
•  extenders IBM: texte, XML, image, son, video, spatial
•  extenders tiers: séries temporelles, etc.
•  DB2 Express-C :
•  Version gratuite
233
Microsoft SQL Server
234
SQL Server 2012 : Top nouveautés
•  Issu du moteur Sybase (accord 1987-94), intégré à Windows
•  Transac SQL (TSQL): langage de procédures stockées
•  Support SQL3 limité: BLOB, CLOB, types utilisateurs, fonctions en
TSQL
•  Outil de développement Visual Studio
•  VB, C++, C#, J#, …
•  Interface par ADO
•  Techniques
•  avancées sur XML, Web, OLAP, DM
•  Distribution
•  transactions distribuées, réplication avec Access
•  parallélisme SMP, support cluster
•  Sécurité avancée
•  Authentification, autorisation, encryptage
235
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
Meilleure protection des données
Cryptage, clé de sécurité, audit
Amélioration de la fiabilité
Optimisation des performances
Compression des données
Analyse et reporting des perf.
Performance prévisible
Support données semi-structurées
Interrogation de textes et XQuery
Amélioration BI et data mining
Synchronisation avec bases mobiles
Intégration avec Office
2012: Haute disponibilité (AlwaysOn)
2012: Performances accrues
2012: Efforts sur la sécurité
Services
Reporting Integration
Analysis
Query
FILE
RDBMS OLAP
XML
Mobile and
Desktop
Server
Synch
Search
Cloud
236
MySQL (1)
SGBD Open source …
•  Serait le serveur de base de données open source le plus
utilisée dans le monde (> 100 Millions de copies
téléchargées ou distribuées depuis sa création)
•  MySQL fait partie du quatuor LAMP : Linux, Apache, MySQL,
PHP, WAMP (Windows) et MAMP (Mac)
•  Historique :
•  MySQL
•  PostgreSQL
• 
• 
• 
• 
• 
• 
1995
2003
2005
2008
9/08
2009
:
:
:
:
:
:
Première version (issu de mSQL)
Accord entre MySQL et SAP  MaxDB (inclusion de SAP DB)
Achat d’InnoDB (stockage transactionnel) par Oracle
Achat de MySQL par Sun (1 Md de $)
Départ de Monty Widenius – création de Maria DB
Achat de Sun par Oracle autorisé en janvier 2010 par la
Commission Européenne – Inquiétude de la communauté …
238
237
MySQL (2) : Architecture
MySQL (3) : Modules de stockage
•  MyISAM :
•  moteur par défaut, simple, pas de transactions ni de clefs étrangères.
•  InnoDB :
•  support des transactions et des clefs étrangères
•  CLUSTER :
•  support du stockage en cluster (MySQL 7)
•  FALCON :
•  nouveau moteur pour MySQL 6 (remplacerait InnoDB)
•  ARCHIVE :
•  moteur adapté à l'archivage de données (compression)
•  FEDERATED :
•  moteur permettant d'accéder à des tables d'une base de données
distantes plutôt que dans les fichiers locaux.
•  MERGE :
•  moteur fait pour fusionner plusieurs tables
•  MEMORY :
•  moteur manipulant uniquement des données en mémoire
Source : http://mysqlschool.com/?p=12 239
240
MySQL (5): Réplication vs Cluster
MySQL (4) : Produits et Nouveautés
•  Produits
•  MySQL Enterprise : Version PME (basic à platinium) avec différents niveaux de services
•  Inclut MySQL Enterprise Monitor et MySQL Query Analyzer
•  MySQL Cluster : Version parallèle (Shared Nothing) hautement disponible
•  MySQL Embarqué : Composant logiciel intégrable
•  MySQL Data Warehouse : Support du DW – moteur de stockage InfoBright (orienté
colonnes, compressé)
•  Sauvegarde et restauration MySQL : Utilitaire edité par Zmanda
•  MySQL Workbench (GUI Tool) : Conception de BD
•  Nouveautés de la 5.1
• 
• 
• 
• 
• 
• 
• 
• 
•  Réplication (> V3.23)
Partitionnement de tables et d’index
Amélioration de la recherche en texte intégral
Support de XML/XPath
Moteur de stockage CSV
Améliorations du moteur Archive
Haute disponibilité
Plus grande simplicité de gestion
Amélioration des performances (e.g., imports //, cache)
•  Sens unique : maitre  Esclave
•  Si panne, besoin de reconfiguration
•  Cluster (> V4.1)
•  Pas de point unique de défaillance
•  Equilibrage de charge dynamique
•  Partitionnement des données
241
PostgreSQL (1)
242
PostgreSQL (2)
•  Supporte
•  Basé sur INGRES
• 
• 
• 
• 
• 
• 
• 
•  Initié par M. Stonebreaker et E. Wong en 1974 (U. Berkeley)
•  Refonte totale en 1985 : Post-Ingres, puis Postgres95 et
finalement PostgreSQL
•  C’est un logiciel Open source (Licence : BSD)
•  Très utilisé dans la recherche académique pour expérimenter de
nouvelles techniques et algorithmes
Système de bases de données relationnelles open source le plus
pointu
une grande partie des standards SQL
requêtes complexes ; clés étrangères ; triggers ; vues ;
intégrité transactionnelle ; contrôle de concurrence multi-versions;
fonctions externes;
indexation étendue (bitmap, spatial, partiels, etc…); recherche plein-texte
support de XML
nombreux langages de procédure (e.g., PL/pgSQL)
•  PostgreSQL peut être étendu avec :
• 
• 
• 
• 
• 
• 
•  Est à la base d’Informix (racheté par IBM – actuellement
Informix Dynamic Server IDS 11)
243
de
de
de
de
de
de
nouveaux types de données ;
nouvelles fonctions ;
nouveaux opérateurs ;
nouvelles fonctions d'agrégat ;
nouvelles méthodes d'indexation ;
nouveaux langages de procédure.
244
PostgreSQL (3)
Quelques SGBD orientés
« colonne »
•  Versions :
•  Postgres Plus – Version packagé qui s'installe en un clic
•  EnterpriseDB - Version destinée aux entreprises incluant un contrat de
maintenance et une compatibilité améliorée avec Oracle DB.
 EnterpriseDB intégré dans DB2 9.7 (Cobra – Juin 2010)
• 
• 
• 
• 
•  PostgreSQL s'exécute nativement sous Windows depuis la version 8.x.
•  Environ 250 outils annexes : migration, administration, réplication, etc.
•  Forces :
•  couverture fonctionnelle,
•  compatibilité Oracle, MySQL
•  moteurs avancés (spatial et objet)
MonetDB (open source)
VectorWise (version commerciale)
C-Store (open source)
Vertica (version commerciale)
•  Faiblesses :
•  outil touffu,
•  moins répandu que MySQL
•  Site : www.postgresql.org
•  Fonctionnalités détaillées sur http://www.postgresql.org/about/featurematrix
245
Stockage de données : lignes / colonnes
Stockage en ligne
+ Ajout/suppression simple
– Lecture de données inutiles
246
Stockage en colonnes : compression (1)
Stockage en colonnes
+ Accès aux données utiles
– Insertion d’un tuple  plusieurs accès
•  Le stockage en colonne est adapté à des charges
Run-Length Encoding (RLE)
•  Lecture intensive (voire lecture seule)
•  Grand volume de données
•  OLAP, pas OLTP !
247
248
Stockage en colonnes : compression (2)
Stockage en colonnes : compression (3)
Vecteurs de bits
Exécution sur les données compressées
249
250
MonetDB
VectorWise
•  Origine
•  Origine
• 
• 
• 
• 
Prototype de recherche très utilisé dans la communauté
Développé par le CWI (Amsterdam)
Premières idées en 1993 (BAT, MI)
Open source en 2004, 10 year Best Paper Award en 2009
•  MonetDB 
•  Premiers contact avec INGRES (ACTIAN) en 2007
•  Officialisé en juillet 2009
•  Support
•  Support
•  BD décisionnelles (analyses de grand volumes de données)
•  Premiere place pour le Benchmark TPC-H
•  x 3,4 (SQL Server 2008)
•  Support relationnel (SQL)
•  Support XML/Xquery
•  Extensions SIG
•  Futur
•  Particularités
•  Machine BD (Database Appliance) pour l’analyse de données
•  Optimisé pour Lenovo Think Server
•  Efficacité (Colonnes, compression, maximisation caches CPU,
traitements par « lots de tuples », …)
•  Base du produit VectorWise…
251
252
C-Store / Vertica
Autres systèmes
•  Origine
•  Travaux de recherche publiés en 2005 (VLDB) (Stonebraker et al)
•  Développé par MIT, Yale, Brandeis University, Brown University,
et UMass Boston
•  Le prototype n’est plus maintenu – les efforts ont été porté vers la
version commerciale : Vertica racheté par HP récemment.
•  SQLite : Composant logiciel (domaine public)
•  Microsoft Access : L4G, licence propriétaire
•  Support (C-Store):
•  Relationnel (SQL) + propositions pour XML/RDF
•  Particularités
• 
• 
• 
• 
Optimisé pour la lecture (deux « store »)
Parallélisme (shared nothing)
Compression
Haute disponibilité
253
SQLite (1)
254
SQLite (2)
•  Composant logiciel dans le domaine public (pas de copyright)
•  Pour les éditeurs de logiciels souhaitant embarquer du SQL transactionnel.
•  Éditeur : SQLite Consortium (adhésion : minimum 75 K$/an)
•  Mozilla, Adobe, Symbian et Bloomberg en font partie
•  Systèmes d'exploitation : Linux, Mac OS X, Windows, …
•  Quelques extensions (avec License) :
•  SQLite Encryption Extension (SEE) : chiffrement des données (AES)
•  Compressed and Encrypted Read-Only DB (CEROD): compression+chiffrement
•  Forces :
• 
• 
• 
• 
légèreté,
performance,
pérennité,
Licence
•  Considéré comme le moteur SQL le plus déployé au
monde (> 500 Millions) :
http://www.sqlite.org/mostdeployed.html
•  Site : www.sqlite.org
•  Faiblesses :
•  Couverture fonctionnelle (contexte « composant logiciel »)
« SQLite is not designed to replace Oracle. It is designed to replace fopen() »
255
256
SQLite (3)
Microsoft Access
L’Architecture de SQLite est très simple :
•  1ère version (Access 1.0) en 1992 – Version 2010 en juin/juillet
•  Comprends
•  Interface
•  API d’accès à SQLite, tout est préfixé par sqlite3_
•  Un moteur de base de données relationnelles
•  Un environnement de développement d’applications
•  Tables, requêtes, formulaires, états, pages, macros, modules
•  Des assistants à foison, interface QBE…
•  SQL Command Processor
•  Reconnaît les mots clés SQL, transmis au parseur puis au
générateur de code
•  Code Generator
•  Produit un code optimisé, implantant la requête à
exécuter, en instruction utilisées par la machine virtuelle
•  « Popularisation » des bases de données par Microsoft
•  Forces
•  Virtual Machine
•  La machine virtuelle implante les opérateurs de de bases
de données, appelés en fonction du code généré
•  B-Tree
•  Interface graphique  Souvent utilisé comme front-end
•  Possibilités d’attacher des tables externes
•  Intégration avec la suite Office
•  Gestion des données indexées par un B-Tree
•  Page Cache
•  Gestion des accès au disque et du cache en mémoire
•  OS Interface
•  Faiblesses
•  Permet la portabilité sur plusieurs systèmes
d’exploitation.
•  Transactions limitées
•  Passage à l’échelle (nombre d’utilisateurs, complexité, volume)
•  Couverture fonctionnelle
•  Utilities
•  Contient quelques routines utiles pour SQLite.
•  Test Code
•  Procédures de tests, incluant des simulations de pannes
pour tester les mécanismes de reprise.
•  Représentent plus de la moitié du code source de SQLite
257
258
Généalogie des SGBDs (depuis Codd 1970)
Ingres
(1974 – 1985)
Conclusion : Généalogie
PostGres
(1985 – 1996)
PostgreSQL
(1996 – …)
Illustra (1992 – 97)
Informix (1980 – 2001)
SystemR
≈1975
SQL/DS
≈1980
IBM – DB2
(1982 – …)
MySQL (1994 – 2009)
BerkeleyDB (1991 – 2006)
InnoDB (1995 – 2005)
TimesTen (1996 – 2005)
Oracle
(1982 – …)
SDL RSI
1977 1979
Sybase
(1984 – 1996)
ASE
(1996 – …)
Microsoft SQLServer
(1988 – …)
SQLite
(2000 – …)
259
1975
1980
1985
1990
1995
2000
2005
260
Impact des mémoires Flash
Bases de données et mémoires
Flash
•  Des mémoire Flash pour le stockage de bases de données?
261
Evolution des mémoires secondaires
Disques
magnétiques
Flash
PCM
Capacité
Go/$
IOPS
Capacité
Go/$
IOPS
Capacité
IOPS
200 Go
0,05
200
x10
x600
x1
14 Go (2001)
0, 0003
1000 (SCSI)
x20
x1000
x1000
ioDrive Octal, 10,24 To – PCIe
Lecture : 1 300 000 IOPS – 6,7 Go/s
Ecriture : 1 240 000 IOPS – 3,9 Go/s
96 « package » de Flash
• 
• 
• 
• 
• 
OCZ Vertex 4 - 2.5" SATA III
Capacité : 512 Go - Prix : env. 600 euros
Lecture : 35 000 IOPS - 535 Mo/s
Ecriture : 75 000 IOPS - 475 Mo/s
Compression, chiffrement, …
• 
• 
• 
• 
• 
Cartes Micro SD, SD et clés USB
Capacité : 1 – 32 Go (2 To annoncés en SD)
Prix : 1 à 2 euros le Go
Lecture : env. 1000 IOPS - env. 20 Mo/s
Ecriture : max. 200 IOPS - env. 10 Mo/s
262
Flash chips
2010
2000
• 
• 
• 
• 
2 To
30
200
BY
256 Go
0,5
> 1 M (PCIe)
>5000 (SATA)
200 000 cells, 4 bits/cell
> 1 M (1 chip)
A bit of electronic to
understand flash chip
constraints and trends
Consommation électrique
•  Plus faible que les disques
magnétiques
•  Proportionnel à l’usage !
263
Bonnet, Bouganim, Koltsidas, Viglas, VLDB 2011
264
Flash cells
Flash cells: NOR vs NAND
NOR
•  Flash cell: resembles a semiconductor transistor
 
 
 
 
•  2 gates instead of 1
•  Floating gate insulated all around by an oxide layer
•  Electrons placed on the floating gate are trapped
•  The floating gate will not discharge for many years
Oxide
Layer
NAND
Control Gate
• 
• 
• 
• 
Floating Gate
N+
P substrate
Quick read (Byte)
Slow prog. (Byte)
Slow erase
XIP  Code
N+
Flash cell: a floating
gate transistor
Slower read (Page)
Quicker prog. (Page)
Quicker erase (Block)
Files, data
265
NAND Flash cells mode of operation
NAND Architecture & timings
•  Programming: Apply a high voltage to the control gate
 electrons get trapped in the floating gate
•  Erasing: Apply a high voltage to the substrate
 electrons are removed from the floating gate
•  Reading: the charge changes the threshold voltage of the cell
 
 
•  Based upon independent
blocks (4 Mio cells here)
•  Block: smallest erasable unit
•  Page: smallest
programmable unit
Single level cell (SLC) store one bit per cell: charged = 0, not charged = 1
Multi level cell (MLC) store 2 bits per cell (4 levels)
Geometry & Timings
•  After a number of program/erase cycle, electrons are getting trapped in
the oxyde layer  End of life of the cell
20 V
0V
Programming
20 V
20 V
Erasing
1 page
256
pages/
block
Floating
gate
MLC
Page Size
4 KB
Block Size
1 MB
Chip Size
16 GB
Read Page ( s)
150
NAND flash MICRON MLC: MT29F128G08CJABB
Program Page ( s) 1000
Erase Block ( s)
3000
0V
0V
266
Wear out cell
267
1 flash
cell
Control
gate
34560 bits/page (4 KB + 224 B)
268
Program Disturb
Impact on flash chip IOs
•  Flash cell technology
•  Some cells not being
programmed receive
elevated voltage stress
(near the cells being
programmed)
•  Stressed cells can
appear weakly programmed
 Limited lifetime for entire blocks (when a cell wear
out, the entire block is marked as failed).
•  NAND Layout and structure
Block is the smallest erase granularity
•  Program Disturb
 Page is the smallest program granularity (¼ for SLC)
 Pages must me programmed sequentially within a
block
 Use of ECC is mandatory  ECC unit is the smallest
read unit (generally 1 or ¼ page)
Reducing program disturb:
• Use Error Correction Code to recover errors
• Program page sequentially within a block
Cooke (FMS 2007)
269
270
Flash chips: trends
Caractéristiques des mémoires Flash
•  Density increases (price decreases)
•  Les bonnes nouvelles :
•  NAND process migration: faster than Moore’s Law (today 20 nm)
•  More bits/cell:
•  SLC (1), MLC (2), TLC (3)
•  Un seul chip de Flash : 40 Mo/s (lecture) et 10 Mo/s (écriture) !
•  Il consomme très peu d’énergie
•  Et dans un SSD, il y a plusieurs dizaines (voire centaines) de chips.
•  Flash chip layout and structure: larger, parallel
•  Les mauvaises nouvelles
•  Larger blocks (32  256 Pages)
•  Larger pages: 512 B (old SLC)  16KB (future TLC)
•  Dual plane Flash  parallelism within the flash chip
• 
• 
• 
• 
•  Lifetime decreases
•  Conséquences
•  100 000 (SLC), 10 000 (MLC), 5000 (TLC)
•  Un SSD (comme une clé USB ou une carte SD) nécessite une FTL
(Flash Translation Layer) pour cacher ces contraintes au prix d’une
baisse de performance….
•  ECC size increases
•  Basic performance decreases
•  Compensated by parallelism
Abraham (FMS 2011), StorageSearch.com
Granularité d’accès : La page (2 Ko – 8 Ko)
Granularité d’effacement : Le block (128 Ko – 512 Ko)
Pages programmées séquentiellement dans le bloc
Nombre limité de cycles d’effacement (104 à 106)
271
272
Flash Translation Layer (FTL)
« Pièges » des mémoires Flash (1)
•  Au moins 3 composants :
•  Mapping : Correspondance entre adresse
logique et physique
•  Garbage Collection : Récupération des
espaces obsolètes
•  Wear Leveling : Distribution équilibrée
des effacements
•  Mais aussi
• 
• 
• 
• 
• 
• 
• 
Gestion du parallélisme (entre les chips)
Gestion du TRIM
Adaptabilité
Compression /Déduplication
Chiffrement
Cache
…
Random Writes – Samsung SSD
Out of the box
Performance instables avec le taux de remplissage du SSD
273
« Pièges » des mémoires Flash (2)
T (s)
Random Writes – Samsung SSD
After filling the device
274
Mémoire Flash comme mémoire secondaire
t (s)
RAM$
Taille (Ko)
Performance SSD Memoright
Taille (Ko)
Performance SSD X25
Performances et comportements différents
•  Memoright : Ecriture aléatoire très coûteuse (indép. taille)
•  Intel X25 : Lecture aléatoire coûteuse (mais dépends de la taille)
SSD
Comment concevoir et optimiser un SGBD pour Flash ?
275
276
Stockage Hybdride (magnétique / Flash)
Mémoire Flash comme mémoire cache
RAM$
RAM$
SSD
SSD cache
Disque magnétique
Disque magnétique
277
Stockage hybride + Flash cache
278
Conclusion : Hiérarchie mémoire (avant)
Ratio Prix (approx)
10
SSD cache
RAM$
1
0.01
0.001
SSD
Accès (ns)
Débit
Cache processeur
1
10 Go/s
RAM
10
1 Go/s
(x10-1)
Disques
107
10ms
100 Mo/s
(x10-2)
Bandes / Disques optiques
1010
qq sec
10 Mo/s
(x10-3)
Disque magnétique
279
280
Conclusion : Hiérarchie mémoire (après)
Ratio Prix (approx)
10
Accès (ns)
Débit
Cache processeur
1
10 Go/s
RAM
10
1 Go/s
(x10-1)
107
10 ms
10 Mo/s
(x10-2)
1
Flash
0.01
Disques
Bandes / Disques optiques
Tape is Dead,
Disk is Tape,
Flash is Disk,
RAM Locality is King
Jim Gray (Turing Award 1998)
281