Vous êtes sur la page 1sur 19

Cours de bases de donnes relationnelles

1. Introduction 1. Dfinitions 2. Fonctionnalits 3. Architecture logique d'un SGBD 1. Architecture Ansi/Sparc 2. Indpendance donnes - programmes 2. Le modle relationnel de donnes 1. Dfinition formelle 2. Caractristiques des relations 3. Contraintes d'intgrit 3. Les langages relationnels 1. L'algbre relationnelle 2. Les langages prdicatifs (nuplet et domaine) 1. Spcification formelle du calcul relationnel variable nuplet 2. Spcification formelle du calcul relationnel variable domaine 3. Exemple de la base des invitations 4. Le langage SQL 1. Introduction 2. Prsentation de la base exemple Cooprative 3. Le langage de dfinition des donnes 4. Le langage d'interrogation 1. Syntaxe gnrale 2. Requetes mono-relation 3. Expression de jointure 4. Oprateurs ensemblistes 5. Fonctions - Agrgats 6. Partitionnement 7. Quantificateurs 8. Synthse 5. Le langage de mise jour 6. Normalisation de SQL 7. Complments sur intgrit, vues et droits 1. Contraintes d'intgrit 1. Dfinition 2. Exemples 3. Vrification 2. Vues relationnelles 1. Principes 2. Vue relationnelle 3. Evaluation d'une vue 3. Gestion des droits 5. Conception Entit-Association 1. Introduction 2. Les concepts 3. Comparaison modles E/A et relationnel 4. Rgles de passage E/A vers relationnel 5. Des exemples pour illustrer 1. La base de gestion du personnel 2. La base cooprative 6. Avantages - Inconvnients 6. Dpendances fonctionnelles et normalisation 1. Dpendance fonctionnelle sur une relation (DF) 2. Proprits des dpendances fonctionnelles 3. Dcomposition binaire d'une relation 4. Dfinitions : 5. Normalisation des relations (formes normales) 6. Dpendances fonctionnelles et conception de schmas

7. Architecture logicielle d'un SGBD 8. Evaluation et Optimisation de requtes 1. Optimisations algbriques 1. Rgles de transformation de l'algbre relationnelle 2. Algorithme gnral d'optimisation heuristique 2. Optimisation par une fonction de cot 9. Contrle des accs concurrents et reprise 1. Introduction 2. Problmes lis aux accs concurrents 3. Mcanismes pour assurer la concurrence et la reprise 1. Transactions et journalisation 2. Concurrence par verrouillage 3. Granularit de contrle de concurrence 4. Principes gnraux de la reprise 10. Performances des systmes relationnels : benchmarks TPC 11. BIBLIOGRAPHIE

BD et SGBD : Table des Matires


Introduction Les limites l'utilisation des fichiers Objectifs des systmes de gestion de bases de donnes Concepts de base Composants des systmes de gestion de bases de donnes Un peu d'histoire Le modle relationnel Dfinitions Oprateurs relationnels Formes normales Langages de manipulation de donnes relationnelles Remarques L'optimiseur de requtes Rcriture des requtes Choix des chemins d'accs Requte portant sur une seule table Jointures sans index Jointures avec index ORDER BY Cohrence des interrogations et accs concurrents Interrogation Mise jour Contrle des accs la base et scurit des donnes Droits d'accs aux tables Stockage des donnes Les index Les clusters Bibliographie Index

Introduction
Les bases de donnes sont actuellement au cur du systme d'information des entreprises. Les systmes de gestion de bases de donnes, initialement disponibles uniquement sur des "mainframes", peuvent maintenant tre installs sur tous les types d'ordinateurs y compris les ordinateurs personnels. Mais attention, souvent on dsigne, par abus de langage, sous le nom "bases de donnes" des ensembles de donnes qui n'en sont pas. Qu'est-ce donc qu'une base de donnes? Que peut-on attendre d'un systme de gestion de bases de donnes? C'est ces questions, entre autres, que cet ouvrage essaie d'apporter des rponses. Dans un premier temps, et de faon informelle, on peut considrer une Base de Donnes (BD) comme une grande quantit de donnes, centralises ou non, servant pour les besoins d'une ou plusieurs applications, interrogeables et modifiables par un groupe d'utilisateurs travaillant en parallle. Quant au Systme de Gestion de Bases de Donnes (SGBD), il peut tre vu comme le logiciel qui prend en charge la structuration, le stockage, la mise jour et la maintenance des donnes ; c'est, en fait, l'interface entre la base de donnes et les utilisateurs ou leurs programmes. Les limites l'utilisation des fichiers Objectifs des systmes de gestion de bases de donnes Concepts de base Composants des systmes de gestion de bases de donnes Un peu d'histoire

Les limites l'utilisation des fichiers


L' utilisation de fichiers impose d'une part, l'utilisateur de connatre l'organisation (squentielle, indexe, ...) des fichiers qu'il utilise afin de pouvoir accder aux informations dont il a besoin et, d'autre part, d'crire des programmes pour pouvoir effectivement manipuler ces informations. Pour des applications nouvelles, l'utilisateur devra obligatoirement crire de nouveaux programmes et il pourra tre amen crer de nouveaux fichiers qui contiendront peut-tre des informations dj prsentes dans d'autres fichiers. De telles applications sont : rigides, contraignantes, longues et coteuses mettre en uvre. Les donnes associes sont : mal dfinies et mal dsignes, redondantes, peu accessibles de manire ponctuelle, peu fiables. La prise de dcision est une part importante de la vie d'une socit. Mais elle ncessite d'tre bien inform sur la situation et donc d'avoir des informations jour et disponibles immdiatement. Les utilisateurs, quant eux, ne veulent plus de systmes d'information constitus d'un ensemble de programmes inflexibles et de donnes inaccessibles tout non spcialiste ; ils souhaitent des systmes d'informations globaux, cohrents, directement accessibles (sans qu'ils aient besoin soit d'crire des programmes soit de demander un programmeur de les crire pour eux) et des rponses immdiates aux questions qu'ils posent. On a donc recherch des solutions tenant compte la fois des dsirs des utilisateurs et des progrs techniques. Cette recherche a abouti au concept de base de donnes. Dfinition (base de donnes) : Une base de donnes est un ensemble d'informations sur un sujet qui est : exhaustif, non redondant, structur, persistant. Dfinition (systme de gestion de base de donnes) : Un systme de gestion de base de donnes est un logiciel qui permet de : dcrire, modifier, interroger, administrer, les donnes d'une base de donnes.

Objectifs des systmes de gestion de bases de donnes


Les bases de donnes et les systmes de gestion de bases de donnes ont t crs pour rpondre un certain nombre de besoins et pour rsoudre un certain nombre de problmes. Des objectifs principaux ont t fixs aux systmes de gestion de bases de donnes ds l'origine de ceux-ci et ce, afin de rsoudre les problmes causs par la dmarche classique. Ces objectifs sont les suivants :

Il faut pouvoir accder aux donnes sans savoir programmer ce qui signifie des langages "quasi naturels". Efficacit des accs aux donnes Ces langages doivent permettre d'obtenir des rponses aux interrogations en un temps "raisonnable". Ils doivent donc tre optimiss et, entre autres, il faut un mcanisme permettant de minimiser le nombre d'accs disques. Tout ceci, bien sur, de faon compltement transparente pour l'utilisateur. Administration centralise des donnes Des visions diffrentes des donnes (entre autres) se rsolvent plus facilement si les donnes sont administres de faon centralise. Non-redondance des donnes Afin d'viter les problmes lors des mises jour, chaque donne ne doit tre prsente qu'une seule fois dans la base. Cohrence des donnes Les donnes sont soumises un certain nombre de contraintes d'intgrit qui dfinissent un tat cohrent de la base. Elles doivent pouvoir tre exprimes simplement et vrifies automatiquement chaque insertion, modification ou suppression des donnes. Partageabilit des donnes Il s'agit de permettre plusieurs utilisateurs d'accder aux mmes donnes au mme moment. Si ce problme est simple rsoudre quand il s'agit uniquement d'interrogations et quand on est dans un contexte mono-utilisateur, cela n'est plus le cas quand il s'agit de modifications dans un contexte multi-utilisateurs. Il s'agit alors de pouvoir : permettre deux (ou plus) utilisateurs de modifier la mme donne "en mme temps" ; assurer un rsultat d'interrogation cohrent pour un utilisateur consultant une table pendant qu'un autre la modifie.

Scurit des donnes Les donnes doivent pouvoir tre protges contre les accs non autoriss. Pour cela, il faut pouvoir associer chaque utilisateur des droits d'accs aux donnes. Rsistance aux pannes Que se passe-t-il si une panne survient au milieu d'une modification, si certains fichiers contenant les donnes deviennent illisibles? Les pannes, bien qu'tant assez rares, se produisent quand mme de temps en temps. Il faut pouvoir, lorsque l'une d'elles arrive, rcuprer une base dans un tat "sain". Ainsi, aprs une panne intervenant au milieu d'une modification deux solutions sont possibles : soit rcuprer les donnes dans l'tat dans lequel elles taient avant la modification, soit terminer l'opration interrompue.
Malheureusement, ces objectifs ne sont pas toujours atteints.

Concepts de base
Pour assurer ces objectifs (surtout les deux premiers), trois niveaux de description des donnes ont t dfinis par la norme ANSI/SPARC.

Niveau interne Description du stockage des donnes au niveau des units de stockage, des fichiers, ... On appelle cette description le schma interne. Niveau conceptuel Description de la structure de toutes les donnes qui existent dans la base, description de leurs proprits (relations qui existent entre elles) c'est--dire de leur smantique inhrente, sans soucis d'implmentation physique ni de la faon dont chaque groupe de travail voudra s'en servir. On appelle cette description le schma conceptuel. Niveau externe Description pour chaque utilisateur de sa perception des donnes. On appelle cette description le schma externe ou vue.
Le rsultat de la conception d'une base de donnes sera une description des donnes. Par description on entend dfinir les proprits d'ensembles d'objets modliss dans la base de donnes et non pas d'objets particuliers. Les objets particuliers sont dfinis par les programmes d'applications lors des insertions et des mises jour des donnes. Ils doivent alors vrifier les proprits des ensembles auxquels ils appartiennent. Cette description des donnes sera effectue en utilisant un modle de donnes. Ce dernier est un outil intellectuel utilis pour comprendre l'organisation logique des donnes. C'est un ensemble de concepts et de rgles pour les utiliser, permettant de construire avec des types de donnes une reprsentation de la ralit. Un systme de gestion de bases de donnes est caractris par le modle de description des donnes qu'il supporte. Les donnes sont dcrites sous la forme de ce modle, grce un langage de description des donnes. Cette description est appele schma. Les modles utiliss sont : rseau, relationnel, objet, ... Une fois la base de donnes spcifie, on peut y insrer des donnes, les rcuprer, les modifier et les dtruire. C'est ce qu'on appelle manipuler les donnes. Les donnes peuvent tre manipules non seulement par un langage spcifique de manipulation des donnes mais aussi par des langages de programmation "classiques".

Composants des systmes de gestion de bases de donnes


Un systme de gestion de bases de donnes va donc possder un certain nombre de composants logiciels et ce, quel que soit le modle de donnes qu'il supporte. On trouve donc des composants chargs de :

La description des donnes Cette partie sera constitue des outils (en gros des langages) permettant de dcrire la vision des donnes de chaque utilisateur et l'intgration dans une vision globale. On y trouve aussi les outils permettant de dcrire le stockage physique des donnes. La rcupration des donnes Cette partie prend en charge l'interrogation et la modification des donnes et ce, de faon optimise. Elle est compose de langages de manipulation de donnes spcifiques et d'extensions de langages "classiques". Elle gre aussi les problmes de scurit. La sauvegarde et la rcupration aprs pannes Cette partie comporte des outils permettant de sauvegarder et de restaurer de faon explicite une base de donnes. Elle comporte aussi des mcanismes permettant, tant qu'une modification n'est pas finie, de pouvoir revenir l'tat de la base avant le dbut de

cette modification. Les accs concurrents aux donnes C'est la partie charge du contrle de la concurrence des accs aux donnes. Elle doit tre telle que chaque utilisateur attende le moins possible ses donnes tout en tant certain d'obtenir des donnes cohrentes en cas de mises jour simultanes de la base.
Chacun de ces composants est dcrit de faon plus dtaille par la suite.

Un peu d'histoire
1960 Uniquement des systmes de gestion de fichiers plus ou moins sophistiqus. 1970 Dbut des systmes de gestion de bases de donnes rseaux et hirarchiques proches des systmes de gestion de fichiers. Ces systmes de gestion de bases de donnes avaient rempli certains des objectifs prcdents mais on ne pouvait pas interroger une base sans savoir o tait l'information recherche (on "naviguait") et sans crire de programmes. Sortie du papier de CODD sur la thorie des relations, fondement de la thorie des bases de donnes relationnelles. 1980 Les systmes de gestion de bases de donnes relationnels apparaissent sur le march. 1990 Les systmes de gestion de bases de donnes relationnels dominent le march. Dbut des systmes de gestion de bases de donnes orients objet.

Le modle relationnel
Le modle relationnel a t formalis par CODD en 1970. Quelques exemples de ralisation en sont : DB2(IBM), INFORMIX, INGRES, ORACLE. Dans ce modle, les donnes sont stockes dans des tables, sans prjuger de la faon dont les informations sont stockes dans la machine. Un ensemble de donnes sera donc modlis par un ensemble de tables. Le succs du modle relationnel auprs des chercheurs, concepteurs et utilisateurs est d la puissance et la simplicit de ses concepts. En outre, contrairement certains autres modles, il repose sur des bases thoriques solides, notamment la thorie des ensembles et la logique mathmatique( thorie des prdicats d'ordre 1). Les objectifs du modle relationnel : proposer des schmas de donnes faciles utiliser, amliorer l'indpendance logique et physique, mettre la disposition des utilisateurs des langages de haut niveau pouvant ventuellement tre utiliss par des non informaticiens, optimiser les accs la base de donnes, amliorer l'intgrit et la confidentialit, fournir une approche mthodologique dans la construction des schmas.

De faon informelle, on peut dfinir le modle relationnel de la manire suivante : Les donnes sont organises sous forme de tables deux dimensions, encore appeles relations et chaque ligne n-uplet ou tuple, les donnes sont manipules par des oprateurs de l'algbre relationnelle, l'tat cohrent de la base est dfini par un ensemble de contraintes d'intgrit. Au modle relationnel est associe la thorie de la normalisation des relations qui permet de se dbarrasser des incohrences au moment de la conception d'une base de donnes. Dfinitions Oprateurs relationnels Formes normales Dpendance fonctionnelle Notion de cl Formes normales Langages de manipulation de donnes relationnelles Remarques

Dfinitions
Dfinition (Domaine) : Ensemble de valeurs. Dfinition (Relation) : Sous-ensemble du produit cartsien d'une liste de domaines caractris par un nom. En d'autres termes, une relation n'est ni plus ni moins qu'une table dans laquelle chaque colonne correspond un domaine et porte un nom ce qui rend leur ordre sans aucune importance. Dfinition (Attribut) : Colonne d'une relation caractrise par un nom. Dfinition (Schma de relation) : Nom de la relation, suivi de la liste des attributs avec leurs domaines. Dfinition (Base de donnes relationnelles) : Base de donnes dont le schma est un ensemble de schmas de relations et dont les occurrences sont les tuples de ces relations. Dfinition (Systme de gestion de bases de donnes relationnel) : C'est un logiciel supportant le modle relationnel, et qui peut manipuler les donnes avec des oprateurs relationnels.

Oprateurs relationnels
Dfinition (Projection) : Opration qui consiste supprimer des attributs d'une relation et liminer les tuples en double apparaissant dans la nouvelle relation. Cette opration est note Π. Dfinition (Restriction) : Opration qui consiste supprimer les tuples d'une relation ne satisfaisant pas la condition prcise. Dfinition (Jointure) : Opration qui consiste faire le produit cartsien de deux relations, puis supprimer les tuples ne satisfaisant pas une condition portant sur un attribut de la premire relation et sur un attribut de la seconde. Dfinition (Union) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation constitue des tuples appartenant chaque relation. Les tuples en double sont limins. Dfinition (Diffrence relationnelle) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation dont les tuples sont constitus de ceux ne se trouvant que dans une seule relation. Dfinition (Intersection) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation dont les tuples sont constitus de ceux appartenant aux deux relations.

Formes normales
Dpendance fonctionnelle
Dfinition (dpendance fonctionnelle) : Soit R(A1,A2,...An) un schma de relation, et X et Y des sousensembles de {A1,A2,...An}. On dit que X dtermine Y ou que Y dpend fonctionnellement de X si, et seulement si, des valeurs identiques de X impliquent des valeurs identiques de Y. On le note : X -> Y Dfinition (dpendance fonctionnelle lmentaire) : C'est une dpendance fonctionnelle de la forme X -> Y, o A est un attribut unique n'appartenant pas X et o il n'existe pas X' inclus dans X tel que X -> Y.

Notion de cl
Dfinition (cl de relation) : Soit R(A1, A2, ..., An) un schma de relation, et X un sous-ensemble de (A1, A2, ..., An), X est une cl si, et seulement si, : X -> (A1, A2, ..., An) X est minimal

Formes normales
Dfinition (Premire forme normale) : Une relation est en premire forme normale si et seulement si tout attribut contient une valeur atomique. Dfinition (Deuxime forme normale) : Une relation est en deuxime forme normale si et seulement si : elle est en premire forme normale ; tout attribut n'appartenant pas une cl ne dpend pas que d'une partie de cette cl. Dfinition (Troisime forme normale) : Une relation est en troisime forme normale si et seulement si : elle est en deuxime forme normale ; tout attribut n'appartenant pas une cl ne dpend pas d'un attribut non-cl. Dfinition (Forme normale de BOYCE-CODD) : Une relation est en Forme normale de BOYCE-CODD (BCNF) si, et seulement si, les seules dpendances fonctionnelles lmentaires sont celles dans lesquelles une cl dtermine un attribut.

Langages de manipulation de donnes relationnelles


Ces langages, dits assertionnels, sont bass sur la logique des prdicats d'ordre 1 et permettent de spcifier les donnes que l'on souhaite obtenir, sans dire comment y accder. On doit y trouver des oprations permettant de : [la modification]

la recherche retrouver des tuples vrifiant certains critres, l'insertion ajouter des tuples, la suppression enlever des tuples vrifiant certains critres, la modification modifier des tuples vrifiant certains critres.
Un langage de manipulation de donnes n'est pas utilisable lui seul, il doit aussi pouvoir tre incorporable dans un langage de programmation classique. On peut distinguer trois grandes classes de langages : Les langages algbriques bass sur l'algbre relationnelle de CODD dans lesquels les requtes sont exprimes comme l'application des oprateurs relationnels sur des relations. C'est dans cette catgorie que l'on trouve le langage sql(structured query language), standard pour l'interrogation de bases de donnes. Les langages bass sur le calcul relationnel de tuples construits partir de la logique des prdicats dans lesquels les variables manipules sont des tuples. Les langages bass sur le calcul relationnel de domaines, construit aussi partir de la logique des prdicats mais en faisant varier les variables sur les domaines des relations. Le langage sql (Structured Query Language) comprend lui seul l'ensemble des instructions ncessaires la spcification et l'utilisation d'une base de donnes relationnelle. C'est un langage de type dclaratif c'est--dire que l'on spcifie les proprits des donnes que l'on recherche et pas, comme dans un langage impratif, comment les retrouver.

Le langage sql est un langage normalis, la dernire version de la norme date de 92 et, souvent, on y fait rfrence en parlant de sql-92. La prochaine version de la norme est en cours de rdaction afin d'intgrer, entre autres, la notion de types abstraits algbriques, on la dsigne sous le nom de sql3. C'est la fois : un langage d'interrogation de donnes (LID) : SELECT ; un langage de manipulation de donnes (LMD) : UPDATE, INSERT, DELETE ; un langage de dfinition des donnes (LDD) : ALTER, CREATE, DROP; un langage de contrle des donnes et des utilisateurs (LCD) : GRANT, REVOKE.

Remarques
Beaucoup de systmes de gestion de donnes (et non pas de gestion de bases de donnes ) sont vendus comme tant relationnels, souvent parce qu'ils prsentent les donnes sous forme de tables. Un systme est dit minimalement relationnel s'il satisfait aux conditions suivantes : toute information dans la base est reprsente par des valeurs dans des tables, il n'y a pas de pointeurs visibles par l'utilisateur entre les tables, le systme doit supporter au moins les oprateurs relationnels de restriction, projection, jointure naturelle. Un systme est dit compltement relationnel s'il satisfait, en plus, aux conditions suivantes : il supporte tous les oprateurs de l'algbre relationnelle, il supporte la contrainte d'unicit de cl d'une relation, il supporte les contraintes rfrentielles qui permettent de s'assurer que la valeur d'une donne d'une relation existe dans une autre relation (notion de foreign key). En dpit de sa simplicit et de son lgance le modle relationnel n'apporte pas une rponse satisfaisante tous les problmes des applications. Il faut : Pouvoir prendre en compte des "objets" structurs ainsi que les oprations qui leur sont associes (bases de donnes orientes objet). Prendre en compte des donnes peu structures : textes, sons, images, graphiques (bases de donnes multimdia). Faire le pont avec l'intelligence artificielle afin de pouvoir dduire de nouvelles donnes partir de celles existant dj (bases de donnes dductives)

L'optimiseur de requtes
Avec des langages tels que sql, l'utilisateur prcise les proprits des donnes qui l'intressent sans fournir d'algorithme d'accs. Les optimiseurs de requte sont l pour cela, leurs objectifs sont de : vrifier la correction syntaxique de la question, rechercher des questions quivalentes plus simples, dterminer l'ordre des oprations lmentaires d'accs en vue de : rduire le nombre d'entres/sorties, rduire le temps cpu, rduire la taille des ressources mmoires ncessaires, optimiser en premier les questions les plus frquentes. Chaque sgbd contient un optimiseur de requtes qui peut tre lgrement diffrent d'un sgbd l'autre. Les algorithmes utiliss sont rarement connus en dtail mais les grandes tapes de l'optimisation sont en gnral : 1. Reprsenter la requte sous une forme interne et la dcomposer en une squence d'oprations lmentaires. 2. Transformer la requte par : simplification : remplacement d'une question par une question quivalente plus simple, ordonnancement des oprations lmentaires. 3. Construire un ensemble de plans d'excution candidats. 4. Calculer le cot de chaque plan et choisir le meilleur. 5. Excuter la requte.

Rcriture des requtes Choix des chemins d'accs Requte portant sur une seule table Jointures sans index Jointures avec index ORDER BY

Rcriture des requtes


La reformulation de la requte par l'optimiseur a pour but de minimiser le nombre de calculs effectus. Voici quelques exemples de transformations possibles : Les expressions et conditions faisant intervenir des constantes sont, si c'est possible, values. Ainsi, ge > 60 - 10 sera transform en ge > 50 mais ge + 10 > 60 ne sera pas rcrit en ge > 50. un BETWEEN sera remplac par une expression contenant les symboles >= et <= spars par AND. Une expression logique complexe prface par NOT sera rcrite afin que celui-ci soit mis devant chacune de ses sous-expressions. Le NOT devant une expression simple sera, si c'est possible, supprim. Ainsi NOT ge > 50 deviendra ge <= 50. Les requtes comportant des OR sont rcrites en utilisant des UNION. Les sous-requtes sont remplaces par des jointures.

Choix des chemins d'accs


L'optimiseur d'interrogation d'oracle est charg de dterminer le chemin d'accs optimal pour excuter un SELECT. Le choix porte essentiellement sur l'utilisation des index portant sur les colonnes mentionnes dans la clause WHERE, sachant qu'en l'absence d'index utilisable une interrogation portant sur une table ncessitera le balayage total de la table.

Requte portant sur une seule table


L'optimiseur d'interrogation classe les diffrents types de prdicats en fonction de leur syntaxe dans l'ordre suivant ; du plus slectif au moins slectif : WHERE rowid = constante WHERE cl de cluster = constante WHERE colonne de CONNECT BY indexe = constante WHERE colonne indexe (unique) = constante WHERE colonne indexe ( non unique) = constante WHERE colonne indexe = constante WHERE colonne indexe BETWEEN val1 AND val2 ou WHERE colonne indexe LIKE 'c%' WHERE colonne indexe > ou < constante WHERE MAX ou MIN de colonne indexe WHERE colonne non indexe = constante WHERE colonne is null ou is not null WHERE colonne ! = constante WHERE colonne indexe LIKE '%c' o WHERE colonne indexe LIKE '_c' oracle peut dans certains cas utiliser plusieurs index sur une mme table (5 au max), y compris pour valuer des prdicats lies par OR. Un SELECT avec plusieurs prdicats indexs lis par AND sera excut comme une intersection du rsultat de plusieurs SELECT bnficiant chacun d'un index, si les prdicats sont des galits.

Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' AND n_dept = 20; De mme un SELECT avec plusieurs prdicats lis par OR sera excut comme une union du rsultat de plusieurs SELECT bnficiant chacun d'un index. Dans ce cas, il faut que tous les prdicats bnficient d'un index. Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' OR n_dept = 20 ; Dans ces cas il se peut que l'utilisation de l'un des index soit pnalisante. Ce peut tre le cas d'un index peu slectif, alors que les autres index utilisables sont trs slectifs. Dans ce cas l'on peut empcher oracle d'utiliser les index inadquats, en formulant les conditions de telle faon que le critre de recherche soit une fonction de la colonne indexe et non pas la colonne indexe elle-mme (dans ce cas oracle n'utilise pas l'index). Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' AND n_dept + 0 = 20; o les champs nom et n_dept sont indexs. Le fait d'ajouter 0 la colonne n_dept empche d'utiliser l'index sur n_dept, qui ne ferait que ralentir la requte car il est peu slectif. L'index sur nom, qui est trs slectif, suffit. De la mme faon, l'on peut concatner une chane vide une colonne de type caractre pour empcher oracle d'utiliser l'index sur cette colonne : SELECT * FROM emp WHERE nom = 'MARTIN' AND fonction ||''= 'directeur' ;

Jointures sans index


Dans le cas de jointure sans index, oracle classe au pralable chaque table selon le critre de jointure. L'algorithme est symtrique et l'ordre dans lequel les tables sont mentionnes n'a donc pas d'influence sur les performances.

Jointures avec index


Dans le cas o le critre de jointure est index au moins dans l'une des tables, oracle choisit une table directrice : c'est cette table qui sera lue en premier et qui pilotera la jointure. Si le critre de jointure est index dans une seule des tables, oracle choisit l'autre table comme table directrice. Si le critre de jointure est index dans les deux tables, la table directrice est celle sur laquelle portent les prdicats les moins slectifs(compte tenu de la classification des prdicats ci-dessus). Si les prdicats portant sur chaque table sont quivalents, la table directrice sera la dernire table mentionne dans la clause FROM. Ainsi, dans l'exemple suivant, l'optimiseur considre que les restrictions portant sur chacune des tables sont quivalentes, et la table directrice sera la table dept qui est cite en dernier dans la clause FROM. SELECT * FROM emp, dept WHERE emp.n_dept = dept.n_dept AND dept.nom = 'vente' AND fonction ='directeur' ;

ORDER BY L'optimiseur d'interrogation d'oracle dcidera dans certains cas de passer par l'index pour slectionner les lignes d'une table selon un certain ordre. Pour cela il faut que : le critre de classement soit le contenu d'une colonne indexe cette colonne ait l'attribut not null (obligatoire) la slection porte sur toute la table (pas de WHERE) Exemple : Le SELECT suivant utilisera l'index sur la colonne salaire si cette colonne ne contient pas de valeurs NULL. SELECT nom, salaire FROM emp ORDER BY salaire ;

Cohrence des interrogations et accs concurrents


Ce chapitre tudie les conditions de bon fonctionnement d'un systme de gestion de bases de donnes travaillant dans un contexte multi-utilisateurs multi-tches. Comme un systme d'exploitation classique gre, partage les ressources et synchronise les processus, un systme de gestion de bases de donnes doit assurer (entre autres) le partage des donnes. On retrouve, ici, les problmes classiques de gestion de ressources partages. Les problmes viter se classent, en gros, en deux catgories : les pertes d'oprations et la rcupration d'une bases de donnes incohrente. De faon plus dtaille on peut avoir des : lectures inconsistantes lectures non reproductibles des lectures de donnes fantmes des modifications perdues des donnes incohrentes des accs des donnes inexistantes Il est facile de raliser un systme de gestion de bases de donnes avec un contrle de concurrence simple et efficace consistant, par exemple, verrouiller la base entire pendant l'excution de chaque transaction. Les performances d'un tel systme se dgraderaient rapidement avec l'augmentation du nombre d'usagers et il deviendrait trs rapidement inutilisable. Un systme raliste doit assurer que : lectures et critures ne mettant pas en jeu les mmes donnes peuvent s'excuter en parallle ; les lectures ne sont pas en attente de fin d'criture ou de fin de lecture des mmes donnes ; les critures ne sont pas en attente de fin de lecture des mmes donnes ; les critures attendent uniquement la fin d'criture des mmes donnes. Il faut trouver une solution qui prserve l'intgrit des donnes sans pnaliser les performances. Cette solution repose sur les notions de : fichier image avant, "before image" ou "rollback segment", tous ces mots dsignant un, ou plusieurs, fichiers contenant la valeur des donnes avant la modification ainsi que celle-ci. base cohrente et de transaction (ces deux notions sont dfinies ci-dessous). Dfinition (contrainte d'intgrit) : assertion(proprit, prdicat) qui doit tre vrifie par certaines donnes des instants dtermins. Dfinition (bases de donnes cohrente) : bases de donnes dont toutes les contraintes d'intgrit sont respectes. Les contraintes d'intgrit peuvent non seulement porter sur une donne unique : contrainte de domaine de variation, contrainte de plage de valeurs, mais aussi sur des donnes rfrenant d'autres donnes . Dfinition (transaction) : unit de traitement squentiel excute pour le compte d'un usager qui, applique une base cohrente restitue une base cohrente. Interrogation Cohrence d'une interrogation Cohrence de plusieurs interrogations successives Mise jour

Interrogation
Cohrence d'une interrogation
Un utilisateur qui interroge une table (mme trs grande) est garanti de voir toutes les donnes telles qu'elles taient au moment du dbut de l'interrogation, mme si d'autres utilisateurs modifient la table et valident leurs modifications pendant ce temps. Les sgbd dont oracle utilisent alors le fichier image avant pour assurer cette cohrence. Le COMMIT des utilisateurs modifiant la table n'est pas diffr la fin de l'interrogation. Remarque : Ds que l'on interroge une table, un verrou est plac sur la dfinition de la table, c'est dire qu'un autre utilisateur ne peut pas dtruire la table, l'indexer, la mettre en cluster ou modifier sa dfinition, jusqu' ce que l'interrogation soit termine.

Cohrence de plusieurs interrogations successives


Si l'utilisateur dsire que l'on ne modifie pas une table pendant une session de travail, celui-ci peut verrouiller la table en mode partag au moyen de l'ordre sql suivant : LOCK TABLE nom_table IN SHARE MODE NOWAIT; o l'option NOWAIT, qui peut s'adjoindre toutes les commandes de verrouillage, spcifie que le process qui demande le verrou n'est pas mis en attente si celui-ci n'est pas disponible. La table n'est alors accessible aux autres utilisateurs qu'en lecture jusqu' la fin de la transaction de celui qui l'a verrouille (les autres utilisateurs peuvent aussi verrouiller la table en share mode). Les modifications des autres utilisateurs seront suspendues.

Mise jour
Pour s'assurer l'accs exclusif en modification une table, l'on peut verrouiller cette table en mode exclusif par la commande : LOCK TABLE nom_table IN EXCLUSIVE MODE NOWAIT; La table n'est alors accessible aux autres utilisateurs qu'en lecture et ils ne peuvent plus la verrouiller en mode exclusif, ni en mode mise jour partage, ni en mode partag jusqu' la fin de la transaction. Ce verrou est galement obtenu automatiquement ds que l'on effectue un UPDATE, INSERT ou DELETE sur une table. C'est le mode par dfaut de mise jour d'une table.

Contrle des accs la base et scurit des donnes

Les systmes de gestion de bases de donnes permettent plusieurs utilisateurs de travailler en toute scurit sur la mme base ou sur des bases diffrentes. Chaque donne peut tre dfinie, soit comme confidentielle et accessible un seul utilisateur, soit comme tant partageable entre plusieurs utilisateurs. Les ordres GRANT et REVOKE du langage sql permettent de dfinir les droits de chaque utilisateur sur les objets de la base. Tout utilisateur doit possder un nom d'utilisateur et un mot de passe pour pouvoir accder la base. C'est ce nom d'utilisateur qui dterminera les droits d'accs aux objets de la base. Droits d'accs aux tables

Droits d'accs aux tables


La protection des objets d'une base de donnes est dcentralise : c'est le crateur d'un objet qui possde tous les droits de lecture, de modification et de suppression de cet objet. Les autres utilisateurs n'ont aucun droit d'accs cet objet, moins que le crateur ne les leur accorde explicitement par une commande GRANT :

GRANT privilege ON {nom_table | nom_vue} TO nom_utilisateur WITH GRANT OPTION ; Les privilges pouvant tre accords sont entre autres les suivants : [update(col,...) ] SELECT

consultation
INSERT

rajout des lignes


UPDATE(col,...)

modification des lignes (peut-tre restreint certaines colonnes)


DELETE

suppression des lignes


ALTER

modification de la dfinition de la table


ALL

tous les droits ci-dessus


Un utilisateur ayant reu un privilge avec l'option GRANT peut le transmettre son tour (WITH GRANT OPTION). Exemple : L'utilisateur scott peut autoriser l'utilisateur douglas lire sa table emp. GRANT SELECT ON emp TO douglas ; Les droits peuvent tre accords tous les utilisateurs en employant le mot rserv PUBLIC la place du nom d'utilisateur. GRANT SELECT, UPDATE ON emp TO PUBLIC; Un utilisateur ayant accord un privilge peut le reprendre l'aide de l'ordre REVOKE. REVOKE PRIVILGE ON {nom_table | nom_vue} FROM nom_utilisateur; Le propritaire d'une table peut donner des droits de lecture non pas sur la table entire, mais sur une vue base sur la table. Ainsi, seules les informations faisant partie de la vue seront accessibles. CREATE VIEW emp1 AS SELECT nom, fonction, embauche FROM scott.emp WHERE n_dept != 10 ; GRANT SELECT ON emp1 TO PUBLIC; Tous les utilisateurs pourront slectionner les employs travers la vue emp1 : ils ne verront que les colonnes nom, fonction, embauche de la table emp et n'auront pas accs aux employs du dpartement 10. Avec l'option de contrle (CHECK OPTION), les vues peuvent servir raliser les contrles lors des mises jour. Exemple : La vue suivante ne permettrait pas d'insrer dans la table des employs emp un employ dont le numro de dpartement ne figurerait pas dans la table des dpartements dept : CREATE VIEW majemp AS SELECT * FROM emp WHERE n_dept IN (SELECT n_dept FROM dept) WITH CHECK OPTION ;

Comme il est impossible de faire une mise jour sur une vue comportant une jointure il faut transformer le critre de jointure en une sous-interrogation. Pour oracle , le nom complet d'une table ou d'une vue est le nom donn par le crateur, prfix par le nom du crateur. Par exemple scott.emp est le nom complet de la table emp cre par l'utilisateur scott . Ceci permet plusieurs utilisateurs de crer des objets de mme nom sans qu'il y ait confusion. En revanche, pour accder un objet dont on n'est pas le crateur, il faut le dsigner par son nom complet incluant le nom du crateur.

Stockage des donnes


La taille des donnes stockes dans une bases de donnes va de l'ordre de plusieurs centaines de Mega-octets pour des bases moyennes des dizaines ou des centaines de Giga-octets pour des bases importantes. La plus grosse base connue ce jour atteint le Tra-octet. Ces donns, bien videmment, vont tre stockes sur un ou plusieurs disques de faon compltement transparente pour l'utilisateur final. Les temps d'accs disques tant trs pnalisants, il va falloir essayer de les minimiser. Il existe deux possibilits lies au stockage des donnes de minimiser les accs disques : Les index Utilisation des index Valeurs NULL Conversions Choix des index Index comprim et non comprim Index concatn Les clusters Buts

Les index
Selon le modle relationnel les slections peuvent tre faites en utilisant le contenu de n'importe quelle colonne et les lignes sont stockes dans n'importe quel ordre. Considrons le SELECT suivant : SELECT * FROM emp WHERE nom = 'MARTIN' Un moyen de retrouver la ou les lignes pour lesquelles nom est gal MARTIN est de balayer toute la table. Un tel moyen d'accs conduit des temps de rponse prohibitifs pour des tables dpassant quelques centaines de lignes. Une solution offerte par tous les systmes de gestion de bases de donnes est la cration d'index, qui permettra de satisfaire aux requtes les plus frquentes avec des temps de rponse acceptables. Un index sera matrialis par la cration de blocs disque contenant des couples (valeurs d'index, numro de bloc) donnant le numro de bloc disque dans lequel se trouvent les lignes correspondant chaque valeur d'index.

Utilisation des index


L'adjonction d'un index une table ralentit les mises jour (insertion, suppression, modification de la cl) mais acclre beaucoup la recherche d'une ligne dans la table. L'index acclre la recherche d'une ligne partir d'une valeur donne de cl, mais aussi la recherche des lignes ayant une valeur d'index suprieure ou infrieure une valeur donne, car les valeurs de cls sont tries dans l'index. Exemple : Les requtes suivantes bnficieront d'un index sur le champ n_dept. SELECT * FROM emp WHERE num = 16034 ; SELECT * FROM emp WHERE num >= 27234 ; SELECT * FROM emp WHERE num BETWEEN 16034 AND 27234; Un index est utilisable mme si le critre de recherche est constitu seulement du dbut de la cl. Exemple : La requte suivante bnficiera d'un index sur la colonne nom. SELECT * FROM emp WHERE nom LIKE 'M Par contre si le dbut de la cl n'est pas connu, l'index est inutilisable. Exemple : La requte suivante ne bnficiera pas d'un index sur le champ nom.

SELECT * FROM emp WHERE ename LIKE '

Valeurs NULL
Elles ne sont pas reprsentes dans l'index, ceci afin de minimiser le volume ncessaire pour stocker l'index. En contrepartie, l'index ne sera d'aucune utilit pour retrouver les valeurs NULL lorsque le critre de recherche est du type IS NULL.

Conversions
L'index n'est utilisable que si le critre de slection est le contenu de la colonne indexe, sans aucune transformation. Par exemple un index sur salaire ne sera pas utilis pour la requte suivante : SELECT * FROM emp WHERE salaire * 12 > 300000 ; Attention en particulier aux conversions de type qui peuvent empcher l'utilisation de l'index. sql est un langage typ, chaque type de donnes (numrique, caractre, date) ayant ses propres oprateurs, ses propres fonctions et sa propre relation d'ordre. En consquence, si dans une expression, figurent la fois un nombre et une chane de caractres, sql convertira la chane de caractres en nombre. De mme si dans une expression, figurent la fois une chane de caractres et une date, sql convertira la chane de caractres en date. Or, dans un prdicat du type : WHERE fonction(col_indexe) = constante sql ne peut pas utiliser l'index. Ceci peut se produire , de faon insidieuse, lorsque sql est oblig d'ajouter un appel une fonction de conversion cause d'une discordance de type. Exemple : Le prdicat suivant ne bnficiera pas d'un index sur le champ embauche. SELECT * FROM emp WHERE embauche LIKE ' En effet, sql est oblig d'effectuer une conversion, et le prdicat qui sera valu est : WHERE TO_CHAR(embauche) LIKE ' Le critre de recherche est une fonction de embauche, et non le champ embauche lui-mme, dans ce cas l'index est inutilisable.

Choix des index


Indexer en priorit : 1. les cls primaires 2. les colonnes servant de critre de jointure 3. les colonnes servant souvent de critre de recherche Ne pas indexer : 1. les colonnes contenant peu de valeurs distinctes (index alors peu efficace) 2. les colonnes frquemment modifies

Index comprim et non comprim


Les cls dans les index peuvent tre comprimes ou non. La compression est une technique permettant de rduire dans des proportions trs importantes (d'autant plus que la cl est longue) le volume de l'index. En contrepartie, il faut parfois un traitement supplmentaire pour recomposer la cl lors des mises jour de l'index. Par dfaut, les index sont comprims, les avantages de rduction de taille l'emportant sur les inconvnients dans la plupart des cas. sql sait excuter certaines requtes directement au niveau de l'index sans passer par le segment de donnes, si l'index est non comprim et si tous les champs rsultats de la requte sont dans l'index. Exemple : L'index cre par : CREATE INDEX x ON emp (num, nom) nocompress ;

permettra de rpondre la question : SELECT nom FROM emp WHERE num > 17217 ; sans lire la table puisque toutes les informations se trouvent dans l'index et que l'index est non concatn.

Index concatn
Un index concatn est un index portant sur plusieurs colonnes. Exemple : CREATE INDEX xemp ON (n_dept,num) ; Les index concatns peuvent tre utiliss pour matrialiser une cl compose de plusieurs colonnes. sql sait utiliser un index concatn mme si le critre de recherche ne porte pas sur toutes les colonnes prsentes dans l'index. Exemple : L'index ci-dessus est utilisable si l'on ne connat que le numro de dpartement. SELECT nom FROM emp WHERE n_dept = 20 ;

Les clusters
Buts
Le cluster est une organisation physique des donnes qui consiste regrouper physiquement (dans un mme bloc disque) les lignes d'une ou plusieurs tables ayant une caractristique commune (une mme valeur dans une ou plusieurs colonnes) constituant la cl du cluster. La mise en cluster a trois objectifs : acclrer la jointure selon la cl de cluster des tables mises en cluster, acclrer la slection des lignes d'une table ayant mme valeur de cl, par le fait que ces lignes sont regroupes physiquement, conomiser de la place, du fait que chaque valeur de la cl du cluster ne sera stocke qu'une seule fois. Le regroupement en cluster est totalement transparent l'utilisateur : des tables mises en cluster sont toujours vues comme des tables indpendantes. Par exemple on pourrait mettre en cluster les tables emp et dept selon n_dept. Ces tables seraient rorganises de la faon suivante : un bloc de cluster serait cr pour chaque numro de dpartement, ce bloc contenant la fois les lignes de la table emp et de la table dept correspondant ce numro de dpartement. La jointure entre les tables emp et dept selon n_dept deviendrait alors beaucoup plus rapide, puisqu'elle serait dj ralise dans l'organisation physique des tables. Pour que l'on puisse mettre une table en cluster il faut que l'une au moins des colonnes faisant partie du cluster soit dfinie comme obligatoire (NOT NULL). On peut indexer les colonnes d'une table en cluster, y compris les colonnes correspondant la cl ou une partie de la cl du cluster. La cl elle-mme est automatiquement indexe, on peut ventuellement la rindexer pour crer un index unique servant contrler son unicit.