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 (MCDMLDMPD) – – – – 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