Table des matières Avant-propos Table des matières 1 Introduction aux systèmes de gestion de bases de données 1.1 Donnée et type de données 1.2 Donnée et information 1.3 Donnée simple et complexe 1.4 Différentes facettes du terme base de données 1.5 Système de gestion de bases de données 1.6 Principales architectures de bases de données 1.7 Des systèmes de gestion de fichiers aux SGBD 1.8 Perspective historique 1.9 Exemple introductif d'utilisation d'un SGBD 1.10 Conception du schéma d'une base de données 1.11 Architecture à trois niveaux des schémas Exercices Notes bibliographiques Références v xi 1 2 2 3 4 4 9 14 20 22 36 38 40 40 41 2 Processus de conception de bases de données 2.1 Planification 2.2 Analyse : modèle conceptuel de données 2.3 Diagrammes de classes UML 2.4 Modèle entité-association : ERD de Oracle Designer Exercices Références 43 46 49 50 80 83 84 3 Introduction au modèle relationnel 3.1 Concepts de base 3.2 Contraintes d'intégrité fondamentales du modèle relationnel 3.3 Conception logique : traduction du modèle conceptuel de données en schéma conceptuel relationnel 3.4 Algèbre relationnelle Exercices Notes bibliographiques Références 85 86 90 94 122 138 140 140 4 Le langage SQL 4.1 Spécification du schéma relationnel avec SQL (LDD SQL) 4.2 Requêtes SQL (SELECT) 4.3 Opérations de mise à jour en SQL 4.4 Niveau externe du schéma en SQL 4.5 Schéma interne 4.6 Sommaire des SQL2, SQL:1999 et SQL:2003 Exercices Projets à réaliser Notes bibliographiques Références 141 144 156 193 196 215 215 217 218 218 219 xii Systèmes de gestion de bases de données par l'exemple 5 Interface entre SQL et un programme 5.1 SQL enchâssé 5.2 Introduction à l'extension procédurale PL/SQL d'Oracle 5.3 JDBC 5.4 SQLJ Exercices Projets à réaliser Notes bibliographiques Références 220 223 229 243 279 294 296 296 296 6 Gestion des contraintes d'intégrité en SQL 6.1 Contrainte de domaine (NOT NULL, CHECK, CREATE DOMAIN) 6.2 Contrainte de clé primaire (PRIMARY KEY) 6.3 Autres clés uniques (UNIQUE) 6.4 Contrainte d'intégrité référentielle (FOREIGN KEY REFERENCES) 6.5 Autres cas contraintes (CHECK complexe et ASSERTION) 6.6 Implémentation de la vérification des contraintes d'intégrité 6.7 Cohérence des contraintes d'intégrité 6.8 Nom de contrainte (clause CONSTRAINT) 6.9 Contraintes déférées (SET CONSTRAINTS DEFERRED) 6.10 Gâchettes (TRIGGER) Exercices Projets à réaliser Notes bibliographiques Références 297 299 301 301 302 307 309 310 310 310 312 324 324 325 325 7 Gestion des données en mémoire secondaire 7.1 Principales caractéristiques des disques 7.2 Fichiers et répertoires 7.3 Organisation par bloc 7.4 Concepts de base du traitement de fichiers en Java 7.5 Organisation par enregistrement 7.6 Allocation sérielle d'espace pour les enregistrements de taille fixe et l'adressage relatif 7.7 Allocation d'espace pour les enregistrements de taille variable 7.8 Allocation sérielle par grappe homogène 7.9 Fichiers séquentiels 7.10 Gestion d'enregistrements en Java Exercices Projets à réaliser Notes bibliographiques Références 326 328 335 338 353 373 383 386 394 398 400 415 416 416 416 8 Organisations unidimensionnelles : indexage et hachage 8.1 Organisations unidimensionnelles : indexage et hachage 8.2 Arbre digital 8.3 Hachage 8.4 Tableau comparatif des organisations Exercices Projets à réaliser Notes bibliographiques Références 418 420 448 449 464 466 468 469 469 Table des matières xiii 9 Méthodes multidimensionnelles et représentation d'associations 9.1 Méthodes multidimensionnelles 9.2 Représentation des associations Notes bibliographiques Références 471 472 489 497 498 10 Évaluation des requêtes relationnelles 10.1 Concepts de base 10.2 Décomposition 10.3 Estimation du coût des opérations physiques 10.4 Optimisation Exercices Notes bibliographiques Références 499 501 506 507 550 568 572 572 11 Théorie de la normalisation 11.1 Décomposition sans perte 11.2 Dépendance fonctionnelle 11.3 Normalisation Exercices Notes bibliographiques Références 573 576 577 586 605 609 609 12 Cas d'utilisation détaillés et processus d'élaboration du modèle conceptuel de données 12.1 Cas d'utilisation détaillés 12.2 Concepts avancés de diagrammes de classes UML 12.3 Processus d'élaboration du modèle conceptuel de données 12.4 Estimation des volumes de données Exercices Références 610 611 622 633 661 662 664 13 Conception dans un contexte relationnel 13.1 Mise en œuvre des contraintes d'intégrité en SQL 13.2 Conception du schéma relationnel au niveau externe 13.3 Niveau interne de schéma relationnel : conception physique 13.4 Paramètres du mécanisme d'allocation d'espace : cas de Oracle 13.5 Mise au point de la configuration du SGBD : cas de Oracle 13.6 Choix de l'architecture et bancs d'essais TPC Exercices Projets à réaliser Notes bibliographiques Références 665 668 695 697 723 729 731 732 734 734 734 14 Intégrité et gestion des transactions 14.1 Concept de transaction 14.2 Propriétés d'une transaction 14.3 État d'une transaction 14.4 Architecture générale pour la gestion des transactions 14.5 Contrôle de concurrence 14.6 Fiabilité et récupération 14.7 Modèles avancés de transaction 735 737 739 742 744 745 783 798 xiv Systèmes de gestion de bases de données par l'exemple Exercices Notes bibliographiques Références 802 810 810 15 Développement d'application de bases de données en Java 15.1 Application Java/JDBC client-serveur 15.2 Développement d'applications Web par servlet Java 15.3 Architecture pour la persistance transparente 15.4 Norme EJB de J2EE Projets à réaliser Notes bibliographiques Références 811 812 849 869 870 900 902 902 16 Bases de données objet et persistance transparente 16.1 Le langage de définition de données ODL 16.2 Mécanismes de gestion des objets persistants 16.3 Le langage de requête OQL 16.4 Le langage de manipulation de données OML 16.5 Persistance transparente avec la norme JDO Notes bibliographiques Références 903 906 918 920 929 940 948 948 17 Relationnel-Objet 17.1 Type défini par l'utilisateur (UDT) 17.2 Extensions au langage de manipulation de données SQL 17.3 Accès aux extensions objets en Java Notes bibliographiques Références 949 950 960 965 975 975 18 Bases de données parallèles et réparties 18.1 Base de données répartie 18.2 Base de données parallèle Notes bibliographiques Références 976 977 990 999 999 19 Entrepôts de données et analyse de données 19.1 Schéma en étoile pour le OLAP 19.2 Regroupements multidimensionnels (CUBE et ROLLUP SQL:1999) 19.3 Statistiques d'ordonnancement 19.4 Regroupements par fenêtrage 19.5 Implémentation OLAP 19.6 Fouille de données 19.7 Règles d'association 19.8 Algorithmes de regroupement 19.9 Classification Notes bibliographiques Références 1000 1003 1006 1012 1014 1018 1020 1021 1058 1064 1072 1075 20 Données semi-structurées et XML 20.1 Introduction à XML 20.2 Espace de nom XML (XML namespace) 20.3 Schéma XML 20.4 Langage de requête XPath 1079 1081 1088 1090 1098 Table des matières 20.5 XPointer 20.6 Contraintes de clé 20.7 Langage de requête XML Query (XQuery) 20.8 Traitement d'un document XML avec JAXP 20.9 Système de Gestion de XML 20.10 Oracle et XML Exercices Notes bibliographiques Références xv 1101 1101 1104 1105 1108 1109 1114 1115 1115 21 Repérage de l’information 21.1 Mesures d'évaluation (rappel et précision) 21.2 Indexation 21.3 Indexation automatique de documents textuels 21.4 Listes inversées 21.5 Recherche plein texte 21.6 Modèle booléen 21.7 Modèle vectoriel 21.8 Intégration du degré de pertinence au Booléen 21.9 Intégration d'un mécanisme d'apprentissage par rétroaction (feedback) 21.10 Méthodes avancées 21.11 Intégration à un SGBD : le cas d'Oracle Notes bibliographiques Références 1116 1119 1121 1123 1124 1124 1124 1126 1127 1128 1129 1132 1136 1136 22 Logique et bases de données 22.1 Calculs des prédicats du premier ordre 22.2 Calculs des prédicats en bases de données 22.3 Bases de données déductives : Datalog et sémantique du point fixe Notes bibliographiques Références 1138 1139 1140 1148 1154 1154 Annexe Utilisation du logiciel Access de Microsoft A.1 Création d'un schéma de base de données A.2 Manipulation de données sous Access A.3 Formulation de requêtes à la manière de QBE A.4 Création d'un formulaire Références 1155 1156 1167 1168 1176 1186 Index 1187 1 Introduction aux systèmes de gestion de bases de données L'art de douter est le meilleur secret pour apprendre. Marcel Prévost 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 Donnée et type de données Donnée et information Donnée simple et complexe Différentes facettes du terme base de données Système de gestion de bases de données (SGBD) Principales architectures de bases de données Des systèmes de gestion de fichiers aux SGBD 2 2 3 4 4 9 14 Redondance et incohérence des données Mécanismes d'organisation de données limités des SGF Intégrité sémantique Contrôle de concurrence Fiabilité Sécurité Gestion des transactions Indépendance des données 15 16 16 17 18 18 18 19 Perspective historique Exemple introductif d'utilisation d'un SGBD 20 22 Création du schéma avec l'outil SQL*plus d'Oracle Manipulation de données avec l'outil SQL*plus INSERT SQL Transaction (COMMIT SQL) Respect des contraintes d'intégrité SELECT SQL Exécution d'un SELECT dans une application client-serveur Java SELECT sur plusieurs tables UPDATE SQL DELETE SQL Organisation physique des données Dictionnaire de données 24 25 26 26 29 29 30 32 33 34 34 35 Conception du schéma d'une base de données Architecture à trois niveaux des schémas Exercices Notes bibliographiques Références 36 38 40 40 41 2 Systèmes de gestion de bases de données par l'exemple Les bases de données (BD) jouent un rôle fondamental dans la plupart des applications de l'informatique. Elles sont utilisées dans une grande variété de domaines tels que la gestion des organisations, l'ingénierie, la médecine, le contrôle de processus, etc. Le terme base de données prend des significations différentes selon les contextes et l'évolution du domaine de l'informatique. Cette instabilité au niveau de la terminologie est un phénomène inévitable des disciplines jeunes. Les prochaines sections tentent de clarifier les principaux usages de ce terme en faisant ressortir les facettes plus particulièrement traitées dans cet ouvrage. En même temps, plusieurs concepts de base sont introduits. Comme dans toute introduction, plusieurs concepts sont présentés de manière sommaire et seront étudiés de manière plus élaborée dans les chapitres subséquents. 1.1 DONNÉE ET TYPE DE DONNÉES Avant d'aborder les bases de données, il est utile d'éclaircir la notion de donnée telle qu'utilisée dans le contexte de cet ouvrage. Donnée (data) Une donnée au sens informatique est une représentation d'un fait à l'aide d'un code binaire stocké dans la mémoire de l'ordinateur. Le mécanisme de codage doit être connu par le programme qui traite la donnée. Type de données (data type ) Le type de données détermine la nature du codage utilisé pour représenter une donnée et les opérations applicables à la donnée. Exemple Une donnée de type entier est normalement représentée par un entier codé en binaire d'une longueur prédéterminée, par exemple, 32 bits. Un bit est réservé pour le signe dans le cas d'un entier signé. Une donnée de type réel utilise un codage plus complexe composé de la mantisse, de l'exposant et d'un bit de signe. Une donnée de type caractère est souvent représentée par le code ASCII ou Unicode du caractère. Une chaîne de caractères peut être représentée par un tableau de caractères. Pour chaque type de données, il y a un ensemble d'opérations applicables aux données de ce type. Exemple Il est possible d'effectuer des opérations arithmétiques sur les données de type entier. Normalement, il y a aussi des opérations permettant de lire ou d'afficher un entier sous forme d'une chaîne de caractères. 1.2 DONNÉE ET INFORMATION Il peut être important de distinguer entre une donnée et une information. Une donnée ne prend un sens que lorsqu'elle est interprétée. Pour un programme, cette interprétation est de nature plutôt rudimentaire et se borne à la connaissance des opérations sur le type de la donnée. Par exemple, dans une base de données, la note d'un étudiant pourrait être représentée par une donnée de type réel. Le programme ne comprend pas qu'il s'agit d'une note. Sa compréhension se limite à pouvoir effectuer certaines opérations sur le nombre réel telles que le calcul de la moyenne d'un ensemble de notes. Une interprétation plus raffinée sera effectuée habituellement par un humain. Le contexte permet à l'humain d'interpréter la donnée. Une donnée devient une information lorsqu'elle enrichit les connaissances de cet humain. Par exemple, le contexte de la donnée permettra à l'humain de savoir que la donnée de type réel représente sa note. Lorsque le contexte est connu, l'humain peut alors interpréter la donnée et en tirer une information au sens où ses connaissances seront enrichies suite à la réception de la donnée. En consultant sa note, l'étudiant devient plus informé. Pour lui, la donnée devient une information. 1 Introduction aux systèmes de gestion de bases de données 3 Shannon et Weaver (1959) ont proposé une théorie formelle de l'information dans le but de mesurer la quantité d'information pouvant être communiquée dans un canal de communication. Selon cette théorie, la quantité d'information d'un message d'une source à un destinataire se mesure comme une diminution de l'incertitude au niveau du destinataire du message. Cette vision des choses fait ressortir un point crucial de la notion d'information. Le fait qu'un message (ou donnée) soit perçu comme une information est relatif au destinataire du message. La donnée informe si elle change quelque chose au niveau de l'état du destinataire. L'information est le résultat de ce changement au niveau de l'état du destinataire. Comme le niveau d'interprétation d'une donnée par un programme est très rudimentaire, le terme donnée sera habituellement préféré au terme information dans le contexte informatique. Cependant, les deux termes sont souvent utilisés comme synonymes lorsque de telles nuances sémantiques deviennent une préoccupation secondaire. 1.3 DONNÉE SIMPLE ET COMPLEXE Donnée simple ou complexe Une donnée de type simple, ou donnée simple (entier, réel, caractère), est indécomposable du point de vue du système qui la manipule alors qu'une donnée de type complexe, ou donnée complexe, est composée de données simples ou complexes. Exemple Une note représentée par un entier sera vue comme une donnée de type simple et l'ensemble des données relatives à un étudiant, incluant son code permanent, son prénom, son nom et la liste de ses notes peut être vue comme une donnée de type complexe. Type de données complexe Un type de données complexe est défini en composant des types simples ou complexes à l'aide de constructeurs de types (enregistrement, ensemble, tableau, etc.). La distinction entre ce qui est simple et ce qui est complexe est relative au contexte. Il n'y a donc pas de notion absolue de simple et complexe. Exemple Une chaîne de caractères pourra être considérée comme un type simple ou complexe selon le contexte. Dans les premières applications des bases de données, les types simples étaient limités à des entiers, des réels et des chaînes de caractères d'une taille limitée. L'évolution technologique permet de considérer aujourd'hui le traitement de données beaucoup plus élaborées et volumineuses telles que les données multimédias. Donnée multimédia (multimedia data) Une donnée qui représente un texte, une image, un son ou une séquence vidéo est appelée donnée multimédia. Une donnée de type image peut avoir une taille de 1 M (mégaoctet), par exemple. Néanmoins, du point de vue de la base de données, cette donnée peut être considérée comme une donnée de type simple si le système qui manipule cette donnée la voit toujours comme un élément atomique non décomposable. Du point de vue des bases de données, l'important est de retenir qu'il y a des types de données simples supportés par le système et qu'il est possible de construire des types plus complexes, à partir des types simples, à l'aide de constructeurs de types. Ce qui est simple ou complexe peut varier d'un système à l'autre. 4 Systèmes de gestion de bases de données par l'exemple 1.4 DIFFÉRENTES FACETTES DU TERME BASE DE DONNÉES Le terme base de données est devenu très commun. Plusieurs sens parfois contradictoires sont attribués à ce terme dans le langage courant et même dans le jargon de l'informatique. Base de données (BD) (database ) Au sens large, une base de données est n’importe quelle collection de données. À une extrémité du spectre, par exemple, certains vont utiliser le terme base de données pour désigner un fichier de texte contenant une liste de noms et de numéros de téléphone dans un format plus ou moins arbitraire. C’est une base de données au sens minimaliste du terme. Le mode d’utilisation de cette base de données est très primitif et passe par un logiciel de traitement de texte qui peut être utilisé pour consulter le contenu du fichier. La structure des données est, dans ce cas, inconnue du logiciel et l’interprétation est totalement de la responsabilité de l’utilisateur humain. Le logiciel ne sait pas qu’il y a, dans la séquence de caractères du texte, des sous-séquences qui représentent des noms et des numéros de téléphone. Pour lui, il s’agit d’une séquence ennuyante de caractères quelconques. Un ensemble de fichiers de textes peut aussi être qualifié de base de données. On retrouve cette interprétation dans les applications de gestion documentaire, par exemple. Un ensemble de fichiers d’enregistrements supportant une application est aussi souvent appelé une base de données. Certains logiciels désignent par base de données un seul fichier d'enregistrements et, en conséquence, il faut définir plusieurs bases de données pour supporter une application. Pour d'autres logiciels, une base de données peut en fait contenir plusieurs sous-bases de données indépendantes les unes des autres. Quelle confusion ! À l’extrême limite, la Toile (World Wide Web WWW) peut aussi être vue comme une base de données lourde, de nature hétérogène et répartie. Un aspect qui ajoute à la confusion au niveau de la terminologie est la nuance entre une base de données et une collection de bases de données. Par exemple, dans une organisation, on pourrait parler de plusieurs bases de données, chacune étant consacrée à une fonction spécifique. Ainsi, il pourrait y avoir une base de données pour supporter les fonctions d’inventaire et de ventes, une autre pour la comptabilité et une autre pour les ressources humaines. Ce phénomène fréquent de multiplication de bases de données est dû au fait que différentes applications sont développées de façon indépendantes parfois sur des plates-formes technologiques différentes. Cependant, d’un point de vue plus abstrait, le tout peut être considéré comme une seule base de données logique qui est implantée par un ensemble de bases de données physiques. Selon le contexte du discours, ces deux interprétations pourront être utilisées. Dans la prochaine section, l'interprétation du terme base de données favorisée dans cet ouvrage sera précisée. 1.5 SYSTÈME DE GESTION DE BASES DE DONNÉES (SGBD) Base de données (BD) (database ) Dans un sens plus strict, une base de données est un ensemble de données, possédant les caractéristiques suivantes : 1. Elles sont fortement structurées. 2. Elles sont persistantes. 3. Leur structure est définie dans un schéma. 4. Elles sont gérées par un logiciel appelé système de gestion de bases de données qui en gère aussi le schéma. 1 Introduction aux systèmes de gestion de bases de données C’est cette interprétation du terme base de données qui est le sujet principal de cet ouvrage. Système de gestion de bases de données (SGBD) (database management system - DBMS) Un système de gestion de bases de données est un logiciel spécialisé pour la gestion de bases de données. Le premier point (1) implique que la structure des données est clairement identifiée et très élaborée. Programme source avec LMD enchâssé Programmeur Programme source incorporant des appels à une interface programmatique pré-compilateur Utilisateur expert Utilisateur Administrateur de base de données (ABD) Compilateur Utilitaire d'édition et d'interprétation de commandes du LMD Utilitaire d'édition du schéma Interprète du LDD Programme d'application Utilitaire convivial de manipulation de données Evaluateur de requête (LMD) Système de gestion de base de données (SGBD) Dictionnaire de données (contient le schéma ou méta-données) Base de données (contient les données) Mémoire secondaire permanente Figure 1 Composantes principales de l'environnement d'un SGBD du point de vue de l'utilisateur 5 6 Systèmes de gestion de bases de données par l'exemple Le deuxième point (2), concernant la persistance, signifie que les données doivent survivre aux programmes qui les manipulent. Les programmes ont une durée de vie limitée. Lorsqu'un programme d'application est interrompu, les données contenues en mémoire centrale sont perdues. Mémoire centrale (main memory, primary storage), principale, vive, primaire ou volatile La mémoire centrale est directement accessible par le processeur central (ou unité centrale de traitement). Elle contient les instructions et les données d'un programme en exécution. Cette mémoire est aussi appelée mémoire principale, vive, primaire ou volatile. Elle est caractérisée par sa rapidité et par sa non-permanence. Pour que les données puissent survivre aux programmes qui les manipulent, elles doivent être conservées en mémoire secondaire. Mémoire secondaire (secondary storage), permanente, externe, stable, non volatile ou persistante La mémoire secondaire est accessible indirectement via des opérations d'entrée/sortie. Cette mémoire est aussi appelée mémoire permanente, externe, stable, non volatile ou persistante. Elle est caractérisée par sa lenteur, relativement à la mémoire vive, et par son aspect permanent. Le médium le plus fréquemment utilisé comme mémoire secondaire est le disque magnétique. Un SGBD comprend des mécanismes sophistiqués pour assurer la persistance des données malgré les interruptions des programmes d'application. Non seulement faut-il pouvoir assurer la persistance des données malgré la fin normale d'un programme d'application, mais encore faut-il également pouvoir réagir à certains événements imprévus qui peuvent survenir (pannes matérielles, bogues, etc.). Cela implique, qu’ultimement, les données sont stockées en mémoire secondaire et qu'en plus, diverses formes de redondance de données sont exploitées pour améliorer la fiabilité de la BD. Souvent, les données redondantes sont conservées dans des mémoires plus lentes et moins coûteuses que le disque, comme la bande magnétique ou le disque optique parfois appelés mémoires tertiaires. Le SGBD contient aussi des mécanismes sophistiqués pour gérer d’autres aspects de l’intégrité des données tels que la sécurité, l’intégrité sémantique et l’accès concurrent. Troisièmement (3), la structure des données est définie formellement en utilisant un langage de définition des données (LDD). Langage de définition des données (LDD ) (data definition language – DDL ) Le langage de définition des données est un langage spécialisé qui permet de définir les types des données qui sont emmagasinées dans la base de données. Schéma de la base de données (database schema ) La structure des données définie à l'aide du langage de définition des données est appelée le schéma de la base de données. Une caractéristique importante d'un SGBD est la possibilité de définir des types complexes à partir de types simples afin de former des structures de données très riches et interreliées. Les SGBD actuels tendent à incorporer de plus en plus de fonctionnalités pour le traitement de types de données plus complexes en incorporant des types standards pour la représentation de données multimédias et en permettant de créer de nouveaux types de données non prédéfinis selon les besoins. En particulier, les SGBD objet et relationnel-objet permettent d'étendre les types du SGBD par la définition de nouvelles classes.