Cours de bases de donnees s4 BCG
1. Résumé
Le document "Cours de bases de données" par Philippe Rigaux, daté du 13 juin 2001, offre une vue d'ensemble complète sur les bases de données et les systèmes de gestion de bases de données (SGBD). Il commence par une introduction générale aux données et aux SGBD, puis explore les éléments nécessaires pour utiliser un SGBD, comme la définition du schéma de données, les opérations sur les données, l'optimisation et la gestion de la concurrence d'accès. Le document est structuré en plusieurs parties, couvrant des sujets tels que le modèle Entité/Association, le modèle relationnel, l'algèbre relationnelle, et le langage SQL. Il traite également des schémas relationnels, des techniques de stockage, et de la programmation avec SQL, incluant des interfaces avec des langages de programmation comme C et Java.
Introduction
Les bases de données sont au cœur de la gestion de l'information moderne, permettant le stockage, la récupération et la manipulation efficace de vastes quantités de données. Comprendre les principes fondamentaux des bases de données et des systèmes de gestion de bases de données (SGBD) est essentiel pour quiconque souhaite travailler dans le domaine de l'informatique ou de la gestion de l'information. Dans cet article, nous explorerons les concepts clés abordés dans le "Cours de bases de données" de Philippe Rigaux, un document complet qui couvre tout, des modèles de données aux techniques de stockage avancées.
Présentation générale des bases de données et des SGBD
Les bases de données sont des collections organisées de données qui peuvent être facilement accessibles, gérées et mises à jour. Les systèmes de gestion de bases de données (SGBD) sont des logiciels qui interagissent avec les utilisateurs, les applications et la base de données elle-même pour capturer et analyser les données. Le SGBD gère les données, le moteur de la base de données et le schéma de la base de données, facilitant ainsi la gestion des grandes quantités d'informations.
Modèle Entité/Association (E/A)
Le modèle Entité/Association est un modèle conceptuel qui décrit les données de manière structurée. Ce modèle utilise des entités (objets ou choses dans le monde réel) et des associations (relations entre ces entités). Il permet de créer des schémas de données qui sont à la fois compréhensibles et extensibles. Parmi les avantages de ce modèle, on trouve la clarté dans la représentation des données et la facilitation de la conception de la base de données.
Le modèle relationnel
Le modèle relationnel, introduit par Edgar F. Codd en 1970, est basé sur l'idée que toutes les données sont représentées sous forme de tables (relations). Chaque table contient des lignes (enregistrements) et des colonnes (attributs). Ce modèle est la base des SGBD relationnels modernes comme MySQL, PostgreSQL et Oracle. La conversion des schémas E/A en schémas relationnels est une étape cruciale dans la conception de bases de données relationnelles.
L'algèbre relationnelle et le langage SQL
L'algèbre relationnelle est un ensemble d'opérations mathématiques utilisées pour manipuler les tables dans une base de données relationnelle. Elle comprend des opérations telles que la sélection, la projection, la jointure, l'union et la différence. Le langage SQL (Structured Query Language) est utilisé pour interagir avec une base de données relationnelle, permettant la définition, la manipulation et le contrôle des données.
Techniques de stockage et programmation avec SQL
Le stockage des données est un aspect essentiel de la gestion des bases de données. Les techniques de stockage incluent l'utilisation de disques durs, de la technologie RAID pour la redondance des données, et l'optimisation des accès aux données. En outre, la programmation avec SQL permet d'intégrer les bases de données dans des applications écrites en langages de programmation comme C et Java, facilitant ainsi le développement d'applications robustes et performantes.
Conclusion
Les bases de données et les SGBD sont des piliers de l'informatique moderne, permettant une gestion efficace et sécurisée des données. La compréhension des concepts de base, des modèles de données, des langages de requête et des techniques de stockage est essentielle pour tirer le meilleur parti de ces technologies. Le "Cours de bases de données" de Philippe Rigaux offre une ressource précieuse pour quiconque souhaite approfondir ses connaissances dans ce domaine. Pour aller plus loin, il est recommandé de pratiquer les exercices proposés et de se familiariser avec les outils et les langages utilisés dans la gestion des bases de données.
Table des matières
1 Introduction 7
2 Présentation générale 9
2.1 Données, Bases de données et SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Que doit-on savoir pour utiliser un SGBD ? . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Définition du schéma de données . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 Les opérations sur les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.3 Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.4 Concurrence d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Le plan du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I Modèles et langages 15
3 Le modèle Entité/Association 17
3.1 Principes généraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Bons et mauvais schémas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.2 La bonne méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 Le modèle E/A : Présentation informelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 Le modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.1 Entités, attributs et identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.2 Associations binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.3 Entités faibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.4 Associations généralisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Avantage et inconvénients du modèle E/A . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Le modèle relationnel 35
4.1 Définition d’un schéma relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2 Passage d’un schéma E/A à un schéma relationnel . . . . . . . . . . . . . . . . . . . . . . 37
4.2.1 Règles générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2.2 Retour sur le choix des identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.3 Dénormalisation du modèle logique . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3 Le langage de définition de données SQL2 . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.1 Types SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.2 Création des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.3 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.4 Modification du schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5 L’algèbre relationnelle 55
5.1 Les opérateurs de l’algèbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1.1 La sélection, . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.2 La projection, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.3 Le produit cartésien, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.1.4 L’union, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.1.5 La différence,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.6 Jointure, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2 Expression de requêtes avec l’algèbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2.1 Sélection généralisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2.2 Requêtes conjonctives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.2.3 Requêtes avec et
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6 Le langage SQL 67
6.1 Requêtes simples SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.1.1 Sélections simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.1.2 La clause WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.1.3 Valeurs nulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2 Requêtes sur plusieurs tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.2.1 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.2.2 Union, intersection et différence . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.3 Requêtes imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.3.1 Conditions portant sur des relations . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.3.2 Sous-requêtes correllées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.4 Agrégration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.4.1 Fonctions d’agrégation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.4.2 La clause GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.4.3 La clause HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5 Mises-à-jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5.1 Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5.2 Destruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5.3 Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7 Schémas relationnels 81
7.1 Schémas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.1.1 Définition d‘un schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.1.2 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.2 Contraintes et assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.3 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3.1 Création et interrogation d’une vue . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3.2 Mise à jour d’une vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.4 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.4.1 Principes des triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.4.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8 Programmation avec SQL 91
8.1 Interfaçage avec le langage C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.1.1 Un exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.1.2 Développement en C/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.1.3 Autres commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.2 L’interface Java/JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
TABLE DES MATIÈRES 5
8.2.1 Principes de JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.2.2 Le plus simple des programmes JDBC . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2.3 Exemple d’une applet avec JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . 100
II Aspects systèmes 105
9 Techniques de stockage 107
9.1 Stockage de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.1.1 Supports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.1.2 Fonctionnement d’un disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.1.3 Optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.1.4 Technologie RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
9.2 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.2.1 Enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.2.2 Blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
9.2.3 Organisation d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
9.3 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.3.1 Fichiers et blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.3.2 Les tablespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.3.3 Création des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
10 Indexation 133
10.1 Indexation de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
10.1.1 Index non-dense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.1.2 Index dense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.1.3 Index multi-niveaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
10.2 L’arbre-B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
10.2.1 Présentation intuitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
10.2.2 Recherches avec un arbre-B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
10.3 Hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
10.3.1 Principes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.3.2 Hachage extensible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.4 Les index bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.5 Indexation dans Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.5.1 Arbres B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.5.2 Arbres B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.5.3 Indexation de documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.5.4 Tables de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
10.5.5 Index bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
11 Introduction à la concurrence d’accès 155
11.1 Préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
11.1.1 Exécutions concurrentes: sérialisabilité . . . . . . . . . . . . . . . . . . . . . . . 156
11.1.2 Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
11.1.3 Exécutions concurrentes: recouvrabilité . . . . . . . . . . . . . . . . . . . . . . . 158
11.2 Contrôle de concurrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
11.2.1 Verrouillage à deux phases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
11.2.2 Contrôle par estampillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
11.3 Gestion des transactions en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
11.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
12 Travaux pratiques 167
12.1 Environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.1.1 Connexion au système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.1.2 Les commandes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
12.1.3 Utilisation de SQLPLUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
12.2 Requêtes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
12.2.1 Sélections simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
12.2.2 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
12.2.3 Négation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
12.2.4 Fonctions de groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
12.3 Concurrence d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
12.4 Normalisation d’un schéma relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176