Вы находитесь на странице: 1из 54

Cours de Bases de Donnes e

Jean-Claude Marti
1997 Correction 2007

UNIVERSITE DES SCIENCES ET TECHNOLOGIES DE LILLE

Cours de Bases de Donnes e

Jean-Claude Marti
1997 Correction 2007

UNIVERSITE DES SCIENCES ET TECHNOLOGIES DE LILLE

Introduction
1 Quest-ce quun SGBD

Un SGBD est un syst`me au sein du syst`me, et dans certains cas, ses fonctionnalits (gestion des e e e disques) se substituent ` celles du syst`me grant la machine sur laquelle il est implant. a e e e Cest un progiciel de stockage et dexploitation de linformation qui en assure la recherche et la maintenance. Les donnes sont persistantes (gestion de disques), partages entre de nombreux utilisateurs e e ayant des besoins dirents, qui les manipulent ` laide de langages appropris (graphiques ou proches e a e du langages naturel). Le syst`me assure galement la gestion de la scurit et des conits dacc`s (gestion e e e e e des transactions). Son administration est centralise (action dun Administrateur, le DBA). Les SGBD e sont munis dun langage de requtes et leur conception est tablie ` partir de trois couches indpendantes : e e a e la couche conceptuelle, la couche logique et la couche physique (implmentation). e Il faut remarquer que les donnes sont accessibles directement, alors que les syst`mes de banques de e e donnes antrieurs ne fournissaient quun acc`s ` un ensemble plus ou moins vaste au sein duquel il fallait e e e a encore faire une recherche squentielle. On retrouve ce dernier mode de fonctionnement quand on utilise e sur Internet des moteurs de recherche dont la conception a repos au dpart sur des moteurs de bases de e e donnes. e

Historique

Le mot Data Base est apparu en 1964 lors dune confrence sur ce th`me aux USA, organise dans e e e le cadre du programme spatial amricain. e Auparavant, on ne connaissait que des syst`mes de gestion de chiers (SGF), bass sur la gestion de e e bandes magntiques, destins ` optimiser les acc`s squentiels. Les disques taient alors chers et rservs e e a e e e e e a ` de petits chiers. La gure suivante montre comment, au sein dune mme entreprise, on pouvait concevoir deux chiers e COBOL permettant la gestion du personnel. De tels chiers ne pouvaient schanger de donnes sans des e e programmes dextraction et de conversion appropris. Les informations sont en compte doctet. Le concept e de type de donne au sens actuel du terme nest pas encore apparu : tout est caract`re (octet), mme les e e e chires des nombres !
0 5 17 prnom 22 prnom nom 27 job 43 52 60 Fichier "PAYE" ...

n emp nom emp 0 n emp 7

qualification salaire 42 salaite 50 Fichier "personnel"

La course ` la lune change la donne. Il faut imprativement dnir de nouveaux outils, plus ecaces et a e e mieux normaliss. Vers la n de la dcennie 60 apparaissent les premiers SGBD, conus selon les mod`les e e c e hirarchiques, puis rseaux dans la dcennie suivante. On voit appara e e e tre des langages navigationnels, inspirs du cobol, et la description des donnes est indpendante des programmes dapplication. Cette e e e premi`re gnration suit les recommandations du DTBG CODASYL (Data Base Task Group - Conference e e e On Data System Language), inuenc par le syst`me IMS dIBM. e e Le mod`le relationnel voit le jour en 70 et met 20 ans pour simposer sur le march. Ce mod`le e e e permet la naissance de langages assertionnels, bass sur la logique du premier ordre et les traitements e ensemblistes. Dans le mme temps, lemploi des disques se gnralise, les acc`s directs deviennent la e e e e r`gle, le dveloppement des techniques doptimisation assurent aux SGBD des performances largement e e quivalentes ` celles des anciens mod`les de donnes. e a e e Au cours des annes 80, de nouveaux besoins se font jour. Les syst`mes mis jusque l` sur le march e e a e

privilgiaient des donnes de gestion. On cherche de plus en plus ` manipuler des donnes techniques, e e a e des images, du son. De nombreux travaux de recherche tentent de faire le lien avec le monde Oriente Objet ainsi quavec les syst`mes dinfrence utiliss en Intelligence Articielle. Compte tenu de linertie e e e du march, il faudra attendre encore une dizaine dannes pour quun mod`le vraiment nouveau et e e e performant commence ` lenvahir. Cest ` la n des annes 90 quon voit une volution vers le mod`le a a e e e relationnel-Objet. Aujourdhui, tous les SGBD qui sortent suivent ce dernier mod`le, bien que la majorit e e des utilisateurs continue de nen utiliser que la couche relationnelle. La gure suivante trace lhistorique et la liation des principaux produits.

3
3.1

Objectifs des SGBD


Indpendance des donnes e e

Un aspect important des SGBD vient du principe de dcoupage en couches, lequel est inspir du e e dvelopement dArpanet apparu ` la n des annes 50, qui assure lindpendance des donnes par rapport e a e e e au syst`me et ` larchitecture, mais aussi par rapport aux probl`mes du monde rel quil sagit de e a e e modliser. e Le schma conceptuel est issu des travaux des analystes, dirigs par un chef de projet et correspond e e a ` une modlisation purement intellectuelle de lunivers ` grer et des param`tres qui doivent tre pris en e a e e e compte. Cest ` ce niveau quop`re le chef de projet charg de la conception de la base. a e e Le schma logique en est la traduction informatique abstraite (au sens o` on parle de type abstrait de e u donnes en algorithmique). Selon le mod`le utilis, les donnes sont organises selon un schma arborescent e e e e e e (mod`le hirarchique), un graphe (mod`le rseau), des tables (mod`le relationnel), des objets (mod`le e e e e e e

objet). A ce niveau travaillent des analystes programmeurs et le DBA (Data Base Administrator) ou administrateur de la base de donnes. Cest lui qui est responsable de la modication du schma danalyse e e dans le but doptimiser lexploitation de la base. Le schma physique correspond ` limplmentation des donnes sous forme de chiers sur disques et e a e e g`re les mcanismes dacc`s. Cest le domaine des programmeurs syst`me, mais aussi celui du DBA qui e e e e peut, lorsque le SGBD le permet, dcider des modalits dimplantation de la base (position mdiane sur e e e le disque, nature des chiers - squentiels, ordonns, hachs, . . . ). e e e Ces 3 niveaux doivent tre indpendants, de faon ` permettre la modication de lun sans pour e e c a autant remettre en cause la totalit des autres couches, du moins tant que les r`gles dinterface restent e e respectes. Les logiciels daide ` lanalyse permettent tous une transformation automatique et normalise e a e du schma danalyse en un script de cration de la base. e e

3.2

Administration centralise e

Elle prend tout son sens dans le contexte historique de dveloppement de linformatique, par rapport e a ` une poque o`, lanarchie tant la r`gle, on nageait, au sein dune mme entreprise, dans la plus e u e e e totale incohrence. Avec un SGBD, personne ne peut modier de donnes, encore moins leur mode e e dorganisation, sans y avoir t dment autoris par ladministrateur. Ce dernier a tous les droits sur ee u e la base, la cre, loptimise, suit son volution, g`re les sauvegardes, ajuste les param`tres, distribue les e e e e droits dacc`s. Il joue le rle du responsable syst`me vis ` vis de ce syst`me spcique quest le SGBD. e o e a e e Il utilise un langage de dnitions des donnes ou DDL en anglais (Data Denition Language), un e e langage de manipulation de donnes ou DML (Data Manipulation Language), ainsi quun langage de e scurit des donnes ou DSL (Data Security Language). e e e
Exploitation programmes dapplications Programmeur dapplications appels systme Utilisateur requtes Administrateur de la base Schma

Prcompilateur du DML

Processeur de requetes

Compilateur du DLL

Code-objet des programmes dapplication

gestionnaire de la BD SGBD

gestionnaire de fichiers Fichiers de donnes Dictionnaire des donnes

index

3.3

Normalisation

Cest un aspect fondamental qui permet lchange et la recherche de donnes ` travers des syst`mes e e a e dirents. Malgr les dveloppements particuliers de chaque diteur de logiciel, la normalisation sest e e e e impose tr`s tt, que ce soit au niveau des mod`les (ANSI/SPARC, CODASYL) ou des langages (SQL). e e o e Aujourdhui, la communication ` travers des SGBD dirents est largement utilise. a e e

Le Mod`le Conceptuel des Donnes e e


Il existe plusieurs syst`mes de modlisation. Le plus rpandu demeure le mod`le Entit-Association e e e e e qui est laboutissement de mthodes danalyse dont la plus utilise en France est la mthode MERISE. e e e

1
1.1

Concepts
Type dentit e

Une entit ou individu est un objet discernable des autres objets du monde ` modliser, par exemple e a e une personne, un vhicule. Ce peut tre aussi un concept ou une grandeur abstraite. Une entit ne peut e e e exister par elle-mme sans tre dtermine par la liste de ses proprits ou attributs. Une proprit e e e e ee ee constitue le plus petit lment dinformation ayant un sens intrins`que : un nom, une date de naissance, ee e un numro de tlphone, . . . e ee
Nom de lEntit proprit 1 proprit 2 proprit 3 ..............

Un type dentit est reprsente par lensemble des entits de mme nature que lon pourra dterminer e e e e e e au cours du temps : lensemble des individus, des vhicules, des comptes en banque, . . . e Chaque entit devra pouvoir tre distingue de faon unique par un identiant ou cl. Ce dernier est en e e e c e gnral reprsent par une proprit particuli`re. Lusage veut quelle soit souligne dans la reprsentation e e e e ee e e e graphique du type dentit. e

1.2

Association

Cest un lien logique entre 2 ou plusieurs types dentit. Elle est le plus souvent perue comme une e c action entre des catgories dobjets et se traduit presque toujours par un verbe. On dira ainsi quun e auteur publie (cf. g) des ouvrages Une association peut aussi possder des proprits qui dans ce cas nappartiennent en propre ` aucun e ee a des types dentits quelle relie. e
Nom de lassociation Auteurs Publie date de publication Ouvrages

proprit (ventuelle) de lassociation

On distingue : Les associations binaires qui relient entre elles les direntes instances de deux types dentit. e e Les associations n-aires (n > 2) qui relient les instances de n types dentit. e Les associations rexives qui relient des instances dun type dentit avec dautres instances du e e mme type. On en trouve un exemple dans lassociation Composant-Compos qui traduit le fait e e quune pi`ce de machine peut tre un assemblage de plusieurs autres composants, et rciproquement. e e e

Association binaire

Association ternaire Association rflexive

1.2.1

Cardinalits e

Les cardinalits dune association sont un lment cl de la traduction du MCD vers un mod`le e ee e e logique. Elles permettent de prciser les nombres minimum, et surtout maximum doccurrences dune e entit pouvant tre implique dans les occurrences de lassociation. e e e Il faut faire tr`s attention au fait que les normes US et europennes sont inverses lune de lautre dans e e la reprsentation des cardinalits. En Europe, et en France plus particuli`rement, les cardinalits sont e e e e places vis ` vis du type dentit quelles renseignent. Ainsi, dans lexemple ci-dessous, un client passe de e a e 0 ` plusieurs commandes, et une commande est passe par un client et un seul. Linterprtation de ces a e e cardinalits seraient inverses si le schma gurait dans un livre publi aux USA. e e e e
Cardinalits CLIENT Nom 0,n PASSE 1,1 COMMANDE numro

Instances de lentit COMMANDE CLIENT instances de lentit CLIENT CLIENT 4 COMMANDE 3 CLIENT 3 CLIENT 2 PASSE 3 CLIENT 1 PASSE 2 COMMANDE 1 5 PASSE 4 COMMANDE 4

COMMANDE 2

PASSE 1

Instances de lassociation PASSE

Les cardinalits doivent toujours tre analyses du point de vue de lentit ` laquelle elles sont accoles. e e e ea e Les valeurs possibles sont : 0,1 0,n 1,1 et 1,n

Les cardinalits permettent de prciser la nature de lassociation et du lien quelle constitue entre e e les entits. On parle de liens hirarchiques, fonctionnels et maills. Un lien fonctionnel est linverse dun e e e lien hirarchique et relie des feuilles ` la racine dun arbre. Le lien maill est le lien qui permet de relier e a e entre-eux des nuds au sein dun graphe. Les cardinalits minimales peremettent de prciser des lments de lannalyse, mais ne jouent aucun e e ee rle sur la traduction du MCD en un schma logique. Lorsque les cardinalits maximales valent 1 et N o e e de part et dautre dune association, il y a prsence dun lien hirarchique (du ct du N) et dun lien e e oe fonctionnel (du ct du 1). Le lien hirarchique exprime le point de vue du sommet dun arbre, le lien oe e fonctionnel le point de vue des feuilles. Dans lexemple de la gure, un client passe plusieurs commandes. Il est plac ` la racine dun arbre dont les commandes sont en feuilles. Chaque commande voit le client ea qui la mise. e Le lien maill correspond ` des cardinalits maximales valant N de part et dautre de lassociation. e a e Lassociation publie gurant ` la page prcdente est construite sur un lien maill : un auteur peut a e e e publier plusieurs ouvrages, mais il se peut quun ouvrage soit publi par plusieurs auteurs. Le lien maill e e peut tre implment par la runion de deux liens fonctionnels opposs lun ` lautre. e e e e e a

R`gles dcriture du MCD e e


Les proprits doivent tre mono values. On ne peut rencontrer une proprit sous la forme dune ee e e ee liste de valeurs ; elle est toujours reprsente par une valeur unique. Dans le cas contraire, elle doit e e tre dcompose sous la forme dau moins deux entits associes. e e e e e Les direntes valeurs des proprits dune entit doivent dpendre enti`rement de lidentiant (cl) e ee e e e e de cette entit. e Dans le cadre dune association, deux entits de types dirents sont relies par une seule instance e e e de lassociation. Si la proprit dune entit dpend dune proprit autre que la cl, cest le signe que lanalyse a ee e e ee e t mal faite et quil existe un type dentit imbriqu dans le type initial. Les proprits ne peuvent ee e e ee dpendre que de la cl, sauf sil existe plusieurs cls candidates dans lentit. Ainsi, si lon est certain e e e e de ne jamais avoir dhomonymes, un employ peut indistinctement tre repr par un numro ou e e ee e par son nom. Ces deux proprits sont des cls candidates, et une seule (probablement le numro) ee e e sera choisie comme cl primaire. La cl primaire est une cl dimplmentation. Au niveau du mod`le e e e e e (sur le plan thorique), les autres proprits ne dpendent que de cette cl, mais au niveau logique e ee e e (sur le plan pratique), elles continuent toutes de dpendre ` la fois du numro et du nom. e a e

Anciens mod`les de donnes e e


1
1.1

Le mod`le hirarchique e e
Gnralits e e e

Dvelopp pour les besoins de la NASA, il a donn naissance entre autre ` IMS (IBM) qui utilise, e e e a pour manipuler les donnes, un COBOL navigationnel. e Les entits du MCD sont reprsentes par des segments de donnes. Il ny a pas de concept denree e e e gistrement. Les proprits sont des champs, et le type de lien pris en compte est le lien hirarchique. Le ee e SGBD est une fort compose darbres de segm ents et de pointeurs. e e

1.2

Traduction du MCD
1,n 1,1 1,1 A Y X1 X2 ... Xn Y1 Y2 ... Yn 1,1 A Y X1 X

Y11

Y12

Y1n

1,1 X A p

1,1 Y X1 X2 ... Xn p1 p2 pn X Y1 Y2 ... Yn 1,n A 1,n Y X1 X2 Xp Y1 Y2 Yn X1 Y1

Le mcanisme de traduction sappuit sur larit et la cardinalit des associations. On distingue les cas e e e suivants : Les associations binaires bi-univoques X Y sont traduites par des arbres dont soit X soit Y est la racine, selon la smantique des entits (g. 1-a). Si lassociation est porteuse de proprits, e e ee celle-ci est reprsente p ar un nud constituant un niveau intermdiaire entre X et Y (g. 1-b). e e e Les associations binaires hirarchiques X Y sont traduites par des arbres dont X est obligatoie rement la racine (g. 1-c). les associations n-aires ou construites sur des liens maills sont traduites par une srie darbres e e (fort). Lun deux est constitu des donnes (segments), les autres tant des arbres de pointeurs, e e e e fournissant un acc`s hirarchis ` une informati on qui nest pas duplique. Le SGBD est la racine e e ea e (symbolique) qui permet de relier tous ces arbres en un arbre unique. (g 1-d).

1.3

Anomalies

le mod`le donne lieu ` un certain nombre danomalies de fonctionnement. e a il est impossible dinsrer des donnes sans avoir au pralable cr la cha des nuds suprieurs e e e ee ne e qui la relient ` la racine. a la suppression dun nud conduit ncssairement ` la destruction du sous arbre associ. e e a e la mise ` jour conduit ` balayer la totalit de la fort dont le SGBD est la racine. a a e e

1.4

Avantages-inconvnients e

Le mod`le conduit naturellement ` une bonne reprsentation des syst`mes hirarchiques et fonce a e e e tionne remarquablement avec des applications de cartographie et de CAO. il est simple et facile ` implmenter. a e il est cependant mal adapt ` la reprsentation des liens maills et des ralits complexes. ea e e e e

ses bonnes performances sont limites par les anomalies de fonctionnement exposes ci-dessus. e e les bases hirarchiques doivent tre manipules ` laide de langages navigationnels lourds et coteux e e e a u a mettre en uvre. ` lindpendance entre les niveaux logiques et physiques est pratiquement inexistante. e

2
2.1

Le mod`le rseau e e
gnralits e e e

Ce mod`le correspond ` la deuxi`me gnration de SGBD. Il a t normalis par le DBTG CODASYL, e a e e e ee e et a donn lieu ` de nombreux produits commerciaux (IDS (CII-HB), DBMS (DEC), IDMS). Les recome a mandations du CODASYL ont conduit ` xer la syntaxe et la smanti que des oprations des langages a e e de manipulation. Au concept dentit du MCD correspond la notion denregistrement. Les proprits sont des items de e ee donnes. Le type du lien pris en compte est le lien hirarchique. e e Le concept de base, sur lequel repose tout le mod`le, est le concept de COSET, qui relie un type e denregistrement ma avec un type denregistrement membre, et fait dispara tre tre le besoin dune cl e pour accder ` un enregistrement parti culier. e a

2.2
X

traduction du MCD
1,1 A 1,1 Y Coset XY : Matre : X membre : Y Si A contient une proprit p, celle-ci est transfre au niveau de lentit membre. (ou linverse)

1,n A

1,1

Coset XY : Matre : X membre Y

1,n A

1,n

Coset XA : Matre : X membre : A

Coset YA : Matre Y membre : A

A est une entit artificielle

Y X A Z Coset XA Coset YA Coset ZA A est une entit artificielle

Le mcanisme de traduction est schmatis ci-dessus. Il fait intervenir, pour la traduction des liens e e e maills ou des associations n-aires (avec n > 2), une entit bidon, ventuellement vide, qui nest l` que e e e a pour permettre la dcomposition du lien ma ill en une srie de liens hirarchiques. e e e e

2.3

proprits du COSET e e

une occurence donne dun COSET poss`de un propritaire et plusieurs membres. Les types dentits e e e e du propritaire et des membres sont ncessairement dirents. e e e un type denregistrement peut tre propritaire dans plusieurs instances de COSETS dirents, e e e mais pas dans des instances direntes du mme COSET. e e un type denregistrement peut tre membre dans plusieurs instances de COSETS dirents, mais e e pas dans des instances direntes du mme COSET. e e

2.4

Avantages - inconvnients e

Le mod`le assure une bonne reprsentation des liens maills. e e e

10

Il permet de ce fait une meilleure reprsentation des ralits plus complexes que les organisations e e e hirarchiques. e il est dpourvu danomalies de fonctionnement. e Il a donn lieu ` une ore commerciale assez toe. e a e e Les moteurs de bases de donnes rseaux ont t largement utiliss dans la conception de produits e e ee e hyper-textes, en association avec des index arborescents. il conduit malheureusement ` une indpendance faible entre les niveaux logiques et physiques. a e Les donnes ne peuvent tre manipules quavec des outils de navigation lourds et coteux. e e e u

2.5

Langage navigationnel

Le syst`me dispose dune multitude de pointeur : e un par type denregistrement. un par type de COSET. un pour lenregistrement courant. les changes de donnes se font ` laide de gabarits denregistrements. e e a De nombreux lments syntaxiques des langages permettent de positionner ces pointeurs sur telle ou telle ee partie de linformation. recherche par nom ou crit`re : La recherche du premier enregistrement de nom donn se fait par : e e FIND enregistrement RECORD USING valeur; La recherche des autres enregistrements de mme nom utilise : e FIND NEXT DUPLICATE enregistrement RECORD [USING condition] En cas derreur, une condition (STATUS CHECK) est leve et permet dinterrompre le traitement. e Recherche dun membre dun COSET : FIND PRIOR | NEXT | FIRST | LAST | n enregistrement RECORD WITHIN coset SET Recherche du propritaire : FIND OWNER RECORD OF coset SET e Recherche au sein dun COSET : FIND enregistrement RECORD VIA coset SET [WHERE condition] Le LMD dispose aussi dinstructions de boucles de la forme : loop until condition ... end loop La condition de boucle pouvant tre : no more records ou encore end of set e La programmation consiste ` naviguer ` travers le graphe de la base et conduit ` des programmes a a a rapidement assez complexes, qui rendent diciles la ralisation dapplications ` la carte. e a

11

Exemple dutilisation pour les type dentits dnis ci-dessous avec leurs proprits : e e e e Stations(ns,nom,nr) Region(nr,nom) Activits(na,libelle) e propose(ns,na) Les Cosets correspondants sont : AP : Maitre = Activites, membre = propose RS : Maitre = Region, membre = Station SP : Maitre = Station, membre = Propose

Procdure : Activits des stations des alpes daltitude > 1200m e e find region record using nom=ALPES; exit if status_check; find station record via RS set where altitude > 1200; exit if status_check; loop until no more records find first propose record within SP set; exit if status_check; find owner record of AP set; output libelle of activite; loop until end of set find next propose record within SP set; exit if status_check; find owner record of AP set; output nom of activite; end loop; find next duplicate station record using altitude > 1200; end loop;

12

Le mod`le relationnel e
1
1.1

Gnralits e e e
Historique

Il est n de la th`se de Codd (IBM San Jos - 1970) et il est bas sur des concepts tr`s simples. e e e e e De 72 ` 75, les laboratoires IBM ont conu un premier prototype : SYSTEM R, do` sont directement a c u issus les logiciels : INGRES (RTI - 1976), ORACLE (1979), SQL/DS (IBM-1981) et DB2 (IBM - 1983). Pour manipuler System R, des prototypes de langages ont t crs qui ont rapidement abouti ` SQL. e e ee a Normalis par lANSI en 86, ce langage a continu son dveloppement pour donner lieu en 92 ` la norme e e e a SQL-2. Une nouvelle et derni`re normalisation a eu lieu en 1999 (SQL-3). e

1.2

Dnitions e

Au type dentit du MCD correspond la notion de Relation, ` ne pas confondre avec une association. e a Une relation, dans le cadre du mod`le, est assimile ` une table. Les proprits sont appeles des attributs. e e a ee e Le seul type de lien reconnu par le mod`le est le lien fonctionnel entre N instances dun type dentit et e e une et une seule instance du type dentit associ. e e Un Domaine est un ensemble de valeurs : ensemble des entiers, ensemble des couleurs (bleu, blanc, rouge), intervalle 0..1, etc . . . Le produit cartsien de plusieurs domaines D1, D2, . . ., Dn est constitu dun ensemble de n-uplets e e encore appels tuples : (v1, v2,. . ., vn), o` chaque vi est une valeur dun Di. e u D1 Bleu Bleu Blanc Blanc Rouge Rouge D2 0 1 0 1 0 1

Produit cartsien de lensemble D1 des couleurs par celui D2 des valeurs binaires e Une relation est un sous ensemble du produit cartsien des domaines sur lesquels sont dnis ses e e attributs. Elle peut donc tre reprsente par une table ` 2 dimensions dont les colonnes correspondent e e e a aux dirents domaines et dont les lignes reprsentent les tuples. e e Le schma relationnel est constitu de lensemble des relations dnies par leur nom suivi de la liste e e e de leurs attributs. Exemple de schma relationnel : e EMPLOYE(numero, nom, adresse, salaire, emploi, departement) Il ny a pas didenticateur de tuple. Cest un attribut particulier, la cl primaire (numero dans e lexemple prcdent), qui permet didentier une range de la table parmi toutes les autres. Il arrive que e e e plusieurs attributs soient capables de jouer le rle de cl pour une relation. Lun deux est alors choisi o e pour constituer la cl primaire, les autres cls candidates deviennent alors des cls secondaires. e e e Le schma de chaque relation reprsente son intention, alors que les donnes du tableau constituent e e e une extension particuli`re, c.`.d un instantan des valeurs quil contient ` un instant donn. La gure e a e a e prcdente reprsente une extention du schma (couleur, nombre binaire), alors que le schma relationnel e e e e e de la table employe reprsente lintention de cette mme table. e e

1.3

Traduction

La traduction du MCD en un schma relationnel est un processus extrmement simple : e e Chaque relation est traduite par une table.

13

Les associations construites sur des liens maills sont reprsentes par des tables, et elles seulement. e e e Leur cl primaire est au minimum obtenue par la runion des cls des relations associes. Il peut e e e e arriver que ce regroupement ne soit pas susant pour garantir lunicit des valeurs sur chaque ligne e et quil faille y rajouter des proprits supplmentaires de lassociation. ee e Les associations construites sur des liens fonctionnels sont implmentes de la mani`re suivante : e e e Dans la table qui reprsente le type dentit situ du ct du lien fonctionnel, on ajoute un attribut e e e oe reprsentant un pointeur par valeur vers la cl de la table qui implmente lautre type dentit. e e e e Dans lexemple Clients-Commandes du chapitre sur le MCD, on place dans la table commandes un attribut permettant de faire rfrence ` la cl du client ayant pass la commande. Si lassociaee a e e tion est porteuse de proprits, celles-ci suivent la reprsentation de lassociation. Une proprit ee e ee ventuelle de lassociation passe serait reprsente par lajout de lattribut correspondant dans la e e e table commandes.

1.4

R`gles dintgrit e e e

Ces r`gles garantissent le bon fonctionnement du mod`le et lacc`s aux donnes lmentaires reprsentes e e e e ee e e par les lignes des tables qui traduisent les relations. 1.4.1 Lintgrit dunicit e e e

Lacc`s ` une ligne particuli`re dune table ne peut tre ralis directement que par lintermdiaire e a e e e e e de la valeur dune cl qui joue le rle dun identiant. Le mod`le relationnel est un mod`le valeur e o e e parce que ce sont des valeurs qui servent ` lidentication ; le corollaire, cest quune telle valeur doit a obligatoirement tre unique et dnie. Lorsquaucune valeur ne peut convenir pour reprer la range e e e e dune table, il faudra en crer une, mme articiellement, en lui attribuant par exemple un numro qui e e e naura quune signication interne au sein du syst`me. e 1.4.2 Lintgrit de rfrence e e ee

Cette contrainte traduit lexistence dun lien fonctionnel entre deux relations. La relation qui est du ct de la cardinalit 1,1 dans lassociation est la relation rfrenante, celle qui est racine de la oe e ee c hirarchie (cardinalit 1,n) est la relation rfrence. On doit trouver dans la relation rfrenante un e e ee e ee c attribut construit sur le mme domaine que la cl de la relation rfrence. Une ou plusieurs valeurs de e e ee e cet attribut doivent correspondre ` une valeur unique de la cl. Ce procd permet dassocier par valeur a e e e plusieurs ranges de la relation rfrenante ` une et une seule ligne de la relation rfrence. e ee c a ee e
R1 R2

Cl

Relation rfrenante

La rfrence se fait par VALEUR

relation rfrence

1.4.3

Lintgrit de domaine e e

Les valeurs dun attribut doivent obligatoirement correspondre aux valeurs du domaine sur lequel il est dni. Un domaine est souvent associ ` des crit`res logiques qui permettent de restreindre le type e ea e sur lequel il est construit (entiers positifs, caract`res limits aux voyelles, etc). Le respect de lintgrit e e e e de domaine permet donc de contrler lors de linsertion ou de la mise ` jour dune valeur que celle-ci est o a conforme au cahier des charges (un salaire ne peut tre ngatif, un mois doit tre compris entre 1 et 12, e e e un nom sera transform indpendemment de sa saisie avec une initiale en capitale, etc . . .) e e Un schma totalement relationnel est un schma satisfaisant tous ces types dintgrit. e e e e

14

1.5

Avantages et inconvnients du mod`le e e

Le mod`le relationnel est un mod`le simple pour lutilisateur qui ne manipule que des tables. e e Lindpendance entre les niveaux peut tre parfaitement respecte. e e e Le reprsentation est uniforme. Elle poss`de une certaine puissance que lui confert la thorie e e e algbrique qui la fonde. e Le concept de table permet de garantir des acc`s scuriss aux donnes, en ligne comme en colonne. e e e e Il existe de nombreux interfaces non procduraux, un grand nombre de langages conviviaux de e manipulation et un standard (SQL). Lore commerciale est norme et concerne tous les syst`mes, toutes les plates-formes. e e Nanmoins, le processus de normalisation pose certaines dicults (anomalies de fonctionnement, e e baisses de performances) et fait perdre un peu de lindpendance entre le niveau conceptuel et le e niveau logique. Le mod`le est inadapt au traitement de donnes multimdia. e e e e

Lalg`bre relationnelle e

Elabore par Codd dans sa th`se, elle repose sur un petit nombre doprateurs de type ensemblistes. e e e Les exemples qui vont suivrent manipulent les relations suivantes, R, S et T respectivement :

A a b a b

B 1 1 1 2

C a b d f B 1 3 3 1 2 C a b c d a D 1 1 2 4 3

A a

B 3

C f

2.1

Oprateurs monadiques e

Ces oprateurs sont des rducteurs de donnes. e e e 2.1.1 Projection

A, B

Symbole graphique de loprateur de projection

La projection est un oprateur dacc`s par les colonnes. La projection U dune relation R sur une liste e e dattributs est la relation dont le schma se rduit aux attributs de la liste. Ses tuples sont ceux de R, e e avec limination des tuples en double. e A a b b 15 B 1 1 2

U=
A,B

2.1.2

Restriction

Symbole graphique de loprateur de restriction

La restiction est un oprateur dacc`s par les lignes. Une formule de restriction ou qualication q est e e une expression logique reliant des attributs de la relation oprande avec des constantes par lintermdiaire e e doprateurs de comparaison ; par exemple : e A = a AND B < 2 La restriction U de la relation R par la qualication q est une relation de mme schma que R dont e e les tuples sont ceux de R qui vrient la qualication. e A a a B 1 1 C a d

U = A=a (R)

2.2
2.2.1

Oprateurs dyadiques e
Union

Symbole graphique de loprateur dunion

Lunion de deux relations R et S de mme schma est la relation de mme schma dont les tuples e e e e sont ` la fois ceux de R et de S. Lunion est un oprateur expanseur de donnes. a e e A a b a b a B 1 1 1 2 3 C a b d f f S

U= R

16

2.2.2

Dirence e

Symbole graphique de loprateur de diffrence

La dirence de deux relations de mme schma R et S est une relation de mme schma dont les e e e e e tuples sont ceux de R nappartenant pas ` S. La dirence nest pas un oprateur commutatif. a e e 2.2.3 Intersection

Symbole graphique de loprateur dintersection

Lintersection de deux relations R et S de meme schma est une relation de mme schma constitue e e e e des tuples qui appartiennent ` la fois R et ` S. Lintersection, obtenue par composition de dirences, a a e nest pas un oprateur de base. e 2.2.4 Division

11 00 11 00 11 00
Symbole graphique de loprateur de division

La division dune relation R par une relation S est la relation forme des tuples qui, concatns ` e e e a chaque tuplede S, redonnent un tuple de R. La division nest pas un oprateur de base et peut tre e e ralise par lexpression algbrique : e e e R S =
X

(R)
X

((
X

(R) S) R)

o` X est lensemble des attributs de R qui ne sont pas dans S. u Soit la relation Z : B 1 1 La division R Z est : 2.2.5 Produit cartsien e C a d A a

Le produit cartsien de deux relations R et S est une relation dont le schma est la concatnation de e e e ceux des relations composantes et dont les tuples sont obtenus en combinant chaque tuple de R avec tous ceux de S. Le produit cartsien (ainsi que tous les oprateurs drivs) est un expanseur de donnes. e e e e e

17

2.2.6

Jointures

q R S Symbole graphique de loprateur de jointure

On distingue plusieurs oprateurs de jointures. Ils sont associs ` des formules de qualication reliant e e a entre eux certains attributs des relations composantes. On distingue : lquijointure : La clause de qualication est une galit entre deux attributs des relations oprandes. e e e e La relation rsultante est le sous-ensemble du produit cartsien rduit aux tuples vriant la quae e e e lication, sans rptition, dans le schma, de lattribut commun. e e e U = R A a a b a a b R.B 1 1 1 1 1 2 R.C a a b d d f
R.A = T.C

T.B 1 2 3 1 2 3

T.D 1 3 1 1 3 1

la -jointure : dans la clause de qualication, loprateur dgalit est remplac par un des cinq e e e e autres oprateurs de comparaison. e U = R
R.B < T.D

lautojointure : cest la jointure dune relation avec elle-mme. SI algbriquement parlant, il est e e possible dcrire : e U = R
B < B

dans la pratique, il conviendra de donner des noms ou alias dirents aux deux oprandes, puisque e e les traitements vont concerner des lignes direntes. e la jointure naturelle : Cest lquijointure de deux relations sur tous les attributs ayant mme nom e e et construits sur le mme domaine. e les semi-jointures : on distingue la semiquijointure, la semi- jointure, la semi-jointure naturelle. e Une semi jointure entre R et S : R <A = A S, est la projection sur loprande gauche de la e jointure correspondante. On a la relation : R <A
= A

S =
Attributs de R

(R

R.A = T.A

S)

La semi-jointure de deux relations R et S est la relation de mme schma que R dont les tuples sont e e ceux de R qui participent ` la jointure de R et de S. a La semi-jointure est un oprateur rducteur de donnes et nest pas commutative. e e e

2.3

Composition doprations e

La composition des divers oprateurs permet denvisager des traitements algbriques complexes aue e torisant des manipulations formelles des donnes. e Soient les relations : EMP(numemp, nomemp, salaire, emploi, departement)

18

DEPT(numdept, nomdept, adresse, ville) La dtermination des informaticiens bass ` Lille et gagnant plus de 20000 F se fera par : e e a (salaire>20000 (EM P )
numemp,nom departement=numdept

ville= LILLE (DEP T ))

Cette expresion peut tre reprsente graphiquement par larbre statique dexcution suivant : e e e e
Rsultat

numemp,nom

departement=numdept

Salaire > 20 000

Ville = LILLE

EMP

DEPT

3
3.1

Normalisation
Quel est le bon schma ? e

Il ny a pas une solution unique ` un probl`me de gestion de donnes. En gnral, des quipes danaa e e e e e lystes indpendantes permettraient daboutir ` des dizaines de MCD dirents pour un mme probl`me e a e e e complexe. Une fois que lon applique les r`gles automatiques de traduction prsentes au dbut de ce e e e e chapitre, on obtient des schmas relationnels aux proprits bien direntes. Au dbut du dveloppement e ee e e e des bases de donnes relationnelles, ces schmas pouvaient aboutir ` des requtes dinterrogation qui e e a e sexcutaient en des temps variant de moins dune seconde ` plusieurs dizaines de minutes. Tr`s tt sest e a e o donc pos un probl`me dvaluation des schmas et de classication de leurs proprites. e e e e ee Cest par lintroduction du concept de dpendance fonctionnelle quon a pu construire des outils e dvaluation et de manipulation des schmas relationnels. On a pu ainsi rpondre aux questions : queste e e ce quun bon schma, quel est le meilleur schma, comment amliorer un schma . e e e e

3.2
3.2.1

Dpendance fonctionnelle e
gnralits e e e

Les dpendances fonctionnelles (D.F.) permettre dintroduire des dpendances de valeurs entre les e e donnes. Cest une notion intuitive : un salaire dpend (en gnral) de la qualication dun employ, la e e e e e vitesse maximale dun vhicule dpend de sa puissance. Si la date de naissance dpend dun individu, elle e e e dpend donc de la cl (ventuellement un numro) qui, dans la base, sert ` le reprer. e e e e a e On aura dans ce cas : numero date naissande. Dans toute relation R(X,Y) munie de la DF X Y, X est cl candidate. Si elle est la seule possible, e ou si elle choisie parmi dautres possibles, elle devient la cl primaire de la relation R. e On appelle dpendance lmentaire X Y, toute dpendance telle que Y ne dpend pas dun souse ee e e ensemble de X. Cest un mod`le de dpendance de valeur. La valeur dune donne dpend de celle dune autre donne. e e e e e (Attention : linverse nest pas forcment vrai ! La dtection dune consquence nimplique pas quelle e e e 19

soit due ` une cause spcique, sauf lorsque le mcanisme causal, auquel sapparente le mcanisme des a e e e DF ne dpend que dune cause unique). Ceci veut dire que si on fait dpendre un ge dun nom, le mme e e a e nom devra toujours tre associ ` la mme valeur de lge. La dpendance impose ainsi au nom dtre e ea e a e e associ au mme ge qui doit rester xe, et tous les homonymes devront avoir cet ge. Il convient donc, e e a a lors de la modlisation, dexaminer cette notion de dpendance en faisant preuve de beaucoup de sens e e critique. 3.2.2 Axiomes dArmstrong

Le formalisme des dpendances fonctionnelles est celui dArmstrong (1974). e X,Y,Z dsignant des ensembles dattributs, on dit que Y dpend fonctionnellement de X, et on note e e X Y , sil existe une DF de X vers Y. 1. Rexivit : si Y X alors X Y e e 2. Augmentation : Si X Y et si W est un ensemble quelconque dattributs, alors XW Y W 3. Transitivit : Si X Y et Y Z, alors X Z e 4. Pseudo-transitivit : si X Y et Y W Z, alors XW Z e 5. Union : si X Y et X Z, alors X Y Z 6. dcomposition : Si X Y Z, alors X Y et X Z e laxiome daugmentation permet dintgrer des attributs isols, non lis ` une dpendance fonctione e e a e nelle particuli`re. Les trois derni`res r`gles ne sont pas indispensables ; ce sont des r`gles opratoires e e e e e permettant, plus directement, la manipulation des graphes de dpendances. e Ces direntes DF gn`rent un graphe F. On appelle fermeture transitive dun graphe le graphe obtenu e e e en ajoutant ` F lensemble de tous les arcs qui se dduisent de ceux de F par les 3 premiers axiomes. Ce a e graphe F + dnit la couverture maximale des DF. e Soit R(A,B,C,D) une relation munie des DF suivantes : A BC CD DB la fermeture transitive sera obtenue par lajout de : AD au graphe initial. La couverture minimale est obtenue par lensemble des arcs de F + qui ne sont pas redondants. Cest ce graphe qui permet dobtenir une dcomposition de F sans perte dinformation (cf. plus loin). e Deux graphes F et G obtenus ` partir de la mme liste de DF correspondent ` une solution correcte a e a (mais dont les proprits ne sont pas quivalentes) si F + = G+ ee e En pratique, le graphe des dpendances fonctionnelles permet dobtenir, de faon algorithmique, le e c schma conceptuel ( ou une version de ce schma), et la rciproque est vraie aussi. e e e

3.3

Dcomposition e

Puisquon peut toujours transformer un graphe de DF en sa fermeture transitive, on peut imaginer de placer tous les attributs du probl`me dans une seule et mme relation universelle U. On constate e e que la gestion dune base relationnelle organise selon ce principe conduit ` une srie de disfonctione a e nements qui la rendent rapidement incohrente et inecace. On saperoit quune dcomposition de U e c e en plusieurs relations regroupant les DF autours de leur source amliore le fonctionnement de la base. e Cette dcomposition, appliquant laxiome 6, doit tre rversible (axiome 5) et sans perte dinformation. e e e Elle utilise pour ce faire les oprations de projection et de jointure qui ralisent respectivement ces deux e e oprations de dcomposition et dunion. e e On dit quune dcomposition (par projection) est sans perte dinformation sil existe des jointures qui e permettent de reconstituer les donnes sous leur forme initiale. En dautres termes, si on dcompose U e e en : U1 = U , U2 = U et U3 = U , on doit obligatoirement avoir :
X Y Z

U = U1

U2

U3

20

Soit par exemple : A a B C B 5 5 5 C x y x D 2 2 2

On voit bien que, dans cette relation R, les DF nonces au paragraphe prcdent sont vries. e e e e e e R2 = R. La dcomposition R1(A,B) et R2(B, C, D) nest pas conservative puisque R1 e Par contre R1(A, B, C) et R2(A,D) constitue bien une dcomposition sans perte. e

3.4

Formes normales

Ce processus de dcomposition permet de mettre en vidence des situations caractrises par la e e e e prsence ou non danomalies de fonctionnement. Ces situations fournissent des crit`res dvaluation du e e e comportement dune base relationnelle. 3.4.1 Premi`re forme normale e

Une relation est en premi`re forme normale si tous ses attributs contiennent des valeurs atomiques. e Sont exclus les attributs construits sous formes complexes (vecteurs, listes, arbres, objets . . .) Dans la relation (numemp, nom, enfant(prenom,dateNaissance)) lattribut enfant est un groupe compos qui ne peut tre pris en compte dans le mod`le relationnel. e e e Une telle relation appartient au monde orient-objet (OO) et ne peut tre manipule par les oprateurs e e e e relationnels. Le mod`le relationnel est un mod`le ensembliste, et tous les lments dun ensemble doivent e e ee avoir la mme cardinalit, faute de quoi on ne peut plus parler densemble au sens mathmatique du e e e terme. Il est ncessaire de dcomposer la relation prcdante en deux relations qui seront alors en premi`re e e e e e forme normale : Emp(numemp, nom) et Enfants(numemp, prenom, dateNaissance) 3.4.2 Deuxi`me forme normale e

Cette forme normale ne sapplique quaux relations possedant une cl multiple. e Une relation est 2NF ssi : elle est 1NF tous ses attributs non-cl dpendent de la totalit de la cl. e e e e La relation Stock(piece, entrepot, qt, adresse) nest pas 2NF car ladresse ne dpend que de e e lentrept. Elle subit de ce fait des anomalies de fonctionnement qui sont : o une redondance dinformations susceptible dinduire des incohrences ; e en cas de mise ` jour de ladresse dun entrept, lobligation de balayer toute la table pour modier a o cette derni`re partout o` elle peut tre prsente ; e u e e lors de la suppression de la derni`re pi`ce de lentrept, on perd toute trace de celui-ci. e e o Si on dsire mettre la relation en 2NF, on doit la dcomposer en : e e e Stock(piece, entrepot, qt) Local(entrepot, adresse) 3.4.3 Troisi`me forme normale e

Une relation est 3NF ssi : elle est 2NF Aucun attribut non-cl ne dpend fonctionnellement dun autre attribut non-cl. e e e Soit : Emp(numemp, nom, service, batiment) Le service implique le btiment dans lequel il se situe. De ce fait, Emp nest pas 3NF. Elle dissimule a la prsence dune relation cache qui a chapp ` lanalyse, et doit tre dcompose en : e e e ea e e e Emp(numemp, nom, service) Localisation(service, batiment) La dcomposition est bien 3NF. En pratique, cette forme normale est importante car dote de proe e prits correctes. Il existe souvent plusieurs faons doprer des dcompositions 3NF, mais toute relation ee c e e 21

en poss`de au moins une qui soit sans perte et qui prserve les DF. Un algorithme d ` Bernstein permet e e ua de la gnrer automatiquement. e e Le principe de la normalisation des relations sappuie sur la notion de cl. On distingue la cl primaire e e parmi toutes les cls candidates possibles (les cls candidates non retenues sont appeles cls secondaires). e e e e La normalisation en 3NF prend en compte la notion gnrale de cl, quelle soit primaire ou secondaire. e e e La seule dirence qui intervient entre direntes cls correspond ` un choix dimplmentation, mais e e e a e toute cl candidate joue le mme rle que la cl primaire vis ` vis des autres attributs de la relation. e e o e a 3.4.4 Forme normale de Boyce-Codd

Dans la dnition des formes normales qui prc`dent, on ne sest pas proccup des dpendances e e e e e e transitives (caches) qui peuvent causer des anomalies de mise ` jour. Celles-ci peuvent se manifester e a de faon insidieuse par lintermdiaire de cls candidates qui pourraient demeurer dans une relation. La c e e forme normale de Boyce Codd doit donc prendre en compte toute cl (au sens large) dans la relation. e Une relation est BCNF si et seulement si les seules DF lmentaires sont celles dans lesquelles il ny ee a pas dautre dterminant que la cl primaire. Une relation BCNF est aussi 3NF et constitue le degr e e e ultime de dcomposition sur la base des dpendances fonctionnelles. e e En gnral, une dcomposition BCNF aboutit ` une perte de dpendance. Soit la relation : e e e a e Entretiens(candidat, datexam, heure, jury, salle) avec les dpendances : e candidat, datexam heure, jury, salle jury, datexam, heure candidat jury, datexam salle La relation ci-dessus contient des dpendances transitives partielles et ncessite, pour viter des anoe e e malies de mise ` jour, la transformation en deux relations BCNF : a Entretiens(candidat, datexam,heure,jury) Planning(jury, datexam, salle) La seconde DF est perdue. 3.4.5 Dpendances multivalues e e

La dcomposition BCNF est insusante pour liminer totalement toutes les anomalies de fonctione e nement et les redondances. La relation Etudiants(numetud, cours, sport) indique quels cours suit et quels sports pratique un tudiant. Elle nest pas 3NF et il ny a mme pas de dpendance fonctionnelles entre les donnes, ainsi e e e e quon peut le constater sur lextension suivante o` aucune cl ne peut tre trouve : u e e e Numetud 100 100 200 200 Cours BD BD BD CL Sport Tennis Football Vlo e Footing

En fait, on trouve des dpendances multivalues, les valeurs des attributs cours et sport tant intere e e correlles par lattribut numetud. e On dit quil y a multi-dtermination entre des ensembles dattributs X et Y ou encore que X multie dtermine Y (X e Y ) lorsquil existe un ensemble Z tel que, si z Z, x1 X, x2 X, y1 Y , et y2 Y , si x1 zy1 et x2 zy2 sont prsents dans la relation R, alors x1 zy2 et x2 zy1 y sont aussi reprsents e e e (ou susceptibles de ltre). e
y1 x1 x2 X Z Y z y2

Ces dpendances multivalues (DM) sont rgies par les axiomes suivants : e e e Complmentation : X e Y X RX Y Multi-augmantation : Si X Y , et si W est un ensemble dattributs de R, alors XW

YW

22

Pseudo-transitivit : si X e Y et Y Z X Rplication : X Y X e Y Coalescence : X Y et Z Y , avec W R et W Union : si X Y et Y Z, alors X YZ Intersection : si X Y et X Z, alors X Y Dirence : si X e Y et X Z, alors X Y Z Cet ensemble de r`gles est ferm et complet. On en dduit les e e e 3.4.6 Quatri`me forme normale e

Z Y Y = et W Z, alors X Z Z et X Z Y r`gles de dcomposition. e e

Un ensemble dattributs muni de dpendances multivalues est dcomposable sans perte dinformation. e e e Cette dcomposition est 4NF SSI toutes les dpendances multivalues sont celles dans lesquelles une cl e e e e dtermine un attribut. Avec lexemple prcdant, on obtient une dcomposition en deux relations 4NF : e e e e Etudes(numetud, cours) Activites(numetud, sport) 3.4.7 Dpendance de jointure e

La dcomposition 4NF nest pas susante pour liminer les anomalies, car on peut encore trouver e e des redondances dinformation, sans pour autant les devoir ` des dpendances multivalues. Ainsi, dans a e e la relation enseignement suivante, la prsence des tuples (X COO Z) et (X SYSTEME T) nimplique e aucunement quon puisse trouver (X SYSTEME Z) ou (Y COO T). ETUDIANTS X X X Y COURS COO COO SYSTEME SYSTEME ENSEIGNANTS Z T T T

Enseignement

En eet, les enseignants sont indpendants des tudiants, et ne peuvent inter-corrler lassociation e e e dun tudiant et des cours quil suit. e On ne peut dcomposer la relation initiale en deux, il faut ncessairement 3 relations de schmas : e e e R1 = (Etudiant, Cours), R2 = (Etudiant, Enseignant), R3 = (Cours, Enseignant) Dans ce cas, Enseignement = R1 R2 R3 Cest ce quon appelle la dpendance de jointure (note *), dont les dpendances multivalues sont e e e e un cas particulier, et qui exprime une interdpendance de plusieurs entre eux. e 3.4.8 Cinqui`me forme normale e

Une relation R est 5NF si toute dpendance de jointure est implique par ses cls candidates. e e e Soit R(X,Y,Z,T), X et Y tant des cls candidates. e e Une dcomposition 5NF sans perte est alors : e *[(XY), (XZ), (XT)] ou encore *[(XY), (YZ), (YT)] Une relation 5NF ne donne lieu ` aucune anomalie et cette forme constitue lultime stade de dcomposition a e dune relation.

23

Les langages du relationnel


La manipulation des donnes par un langage appropri a tout dabord t propose sous une forme e e ee e algbrique dans la th`se de Codd et a constitu une premi`re approche ensembliste. Divers prototypes e e e e de languages ont t labors au sein des laboratoires IBM pour assurer une interface plus conviviale aux e ee e utilisateurs : Square, puis Sequel et enn SQL (1976) pour SystemR. Une autre approche, prdicative, a t mene autour des alg`bres de tuple et de domaine. Sur la base e ee e e dun premier langage, Alpha, on a vu appara tre successivement Quel et surtout QBE, qui a t par la ee suite utilis par Paradox(Borland) et Access(MicroSoft). e

Approche ensembliste

Cette approche est avant tout illustre par le langage SQL, utilis par la socit Oracle d`s 1979, puis e e ee e par IBM dans SQL/DS(81) et DB2(83). Ce langage a t normalis par lANSI en 86. Une version amliore, prenant en compte un certain ee e e e nombre davances proposes par des diteurs, a t normalise en 92. Elle inclut entre autre la prise e e e ee e en compte des contraintes relationnelles lors de la cration des objets, le concept de curseur et celui de e requtes dynamiques. La norme 3 date de 1999. Elle a introduit lemploi de procdures stockes(boucles e e e et rcursivit), les triggers et les principaux lments du mod`le Relationnel-Objet. e e ee e Les principaux lments du langage sont exposs dans le poly de TP : guide de lutilisateur. ee e

2
2.1

Approche prdicative e
Calcul relationnel de tuples

Cest un procd permettant de dcrire formellement linformation que lon veut extraire, dune faon e e e c non procdurale, et sans spcier comment on va oprer. Une consultation sexprime par : e e e {t | P (t)} soit : rechercher lensemble t des tuples vriant le prdicat P. Ce dernier est compos de formules e e e atomiques relies entre elles par des oprateurs logiques (Et, Ou, Non), et dont les variables peuvent tre e e e ventuellement quanties par et . e e Les variables peuvent tre des tuples pris globalement, ou rduits ` leurs champs signicatifs. La e e a recherche prend alors la forme suivante : {u(r) | (t1 R1) . . . (tn Rn) u[1] = ti [j1 ] . . . u[r] = tk [jr ] } Soit : trouver une expression u compose de r parties telles quil existe un tuple t1 de R1, . . .un tuple e e tn de Rn, que la premi`re partie de u peut tre identie avec la valeur du j`me attribut de Ri, . . .que la e e e 1 e e ri`me partie de u soit identie avec la valeur du j`me attribut de Rk et quune expression soit aussi e vrie. e e Voici des exemples de requtes construites sur la base dont le schma est : e e EMP(num, nom, poste, salaire, service) DEPT(service, batiment) Liste et localisation des services : {D.service, D.batiment | dept(D)} Pour chaque service, donner le nom des employs : e {D.service, E.nom | Dept(D) Emp(E) (D.service = E.service)} Nom des directeurs gagnant plus de 30000 F : {E.nom | EMP(E) (E.poste = directeur ) (E.salaire > 30000)} 24

2.2

QUEL

Cr par INGRES en 1976 ` luniversit de Californie, ce langage correspond ` une mise en uvre de ee a e a lalg`bre relationnelle de tuples. e Ainsi, des expressions comme (t R) sont traduites par : Range of t is R. La recherche dinformation par : RETRIEVE expression WHERE predicat ; Les lments du langage, malgr la volont de convivialit ache par ses concepteurs, restent calqus ee e e e e e sur lalg`bre. On peut, ` titre dillustration, proposer les exemples suivants : e a Equijointure de R et S : Range of r is R; Range of s is S; Append to T(C1=r.A1, C2=r.A2, C3=s.B2, C4=s.B3) WHERE r.A1=s.B1 Autre exemple, Nom et salaire des directeurs touchant plus de 30000F : RETRIEVE E.nom, E.sal WHERE (E.poste=directeur) AND (E.sal > 3000)

2.3

Calcul relationnel de domaines

Le calcul relationnel de domaines fait appel ` des variables prenant leurs valeurs sur le domaine dun a attribut plutt que sur un tuple entier. Les expressions dans ce mode de calcul sont de la forme : o {(a1, a2, . . . , an) | P (a1, a2, . . . , an)} o` les ai reprsentent les variables dun domaine et o` P est un prdicat compos de formules atomiques u e u e e construites sur ces mmes variables. e La position des variables joue un rle essentiel dans le mcanisme de recherche qui doit identier les o e champs concerns au sein de la relation. Lordre des variables de domaine doit donc correspondre au e schma des relations explores. e e Ainsi, les requtes proposes en exemple ci-dessus sont traduites par : e e {x, y | DEPT(service : x, batiment : y)} {x, y | DEPT(service : x) EMP(nom : y, service : z) (x = z)} {x, y, z | (EMP : nom : x, poste : y, salaire; z) (y = directeur ) (z > 30000)}

2.4

QBE

Query by exemple (QBE) date de 1977 et a t mis au point par Zlo dans les laboratoires dIBM. Il sagit ee dun interface visuel permettant dexprimer les concepts du calcul relationnel de domaines. Lutilisateur n a pas besoin dtre informaticien, encore moins dtre un spcialiste des bases de donnes. Il demande e e e e graphiquement lachage des champs quil dsire visualiser en ltrant les donnes par des expressions e e logiques lmentaires. Les jointures sont prises en compte automatiquement lorsque les attributs concerns ee e sont reprs par des variables soulignes. Les recherches par identication ne rclament que la frappe de ee e e la valeur dans le champ concern. Seules les autres comparaisons ncessitent une expression logique e e compl`te. e Voici comment Access prsente lutilisation de ce langage : e

25

QBE ache le schma dune relation et permet la prise en compte de crit`res dinterrogation. Lexemple e e ci-dessus correspond ` la recherche des directeurs gagnant plus de 30000F. Les noms seront achs dans a e lordre alphabtique. Il est possible aussi de demander lachage dexpressions calcules, ventuellement e e e renommes par un alias, qui gureront dans la grille dinterrogation. e Dans lexemple qui suit, on peut voir que les jointures sont automatiquement ralises d`s lors quon e e e a indiqu au syst`me les associations ` prendre en compte. Il sagit de donner les noms des employs du e e a e btiment M3 : a

Extensions

Les limitations des langages de manipulation de bases de donnes ont donn lieu ` toutes sortes de e e a travaux permettant de sen aranchir. Comme toujours, apparaissent dabord les ores commerciales destines ` donner une avance ` un diteur sur la concurrence. Vient ensuite la norme qui seorce e a a e dentriner le dnominateur commun ou les avances remarquables. e e e Deux approches ont vu le jour pour tenter de donner ` un langage de type SQL une souplesse propre a aux langages procduraux. e La cration dun langage adapt par extension dun langage procdural. e e e Lintgration dans un langage donn en assurant une interface adquate. e e e La premi`re approche a donn le jour ` PL/SQL ` la suite de bien dautres tentatives aujourdhui obsol`tes. e e a a e La seconde, initialise par des produits tels que Pro-C, est bien reprsente actuellement par par PHP. e e e Cette dmarche a abouti ` la conception dAPI dont le mod`le est ODBC (Microsoft) telle JDBC intgre ` e a e e e a JAVA. On trouvera un descriptif succint de PL/SQL dans le poly de TP : TP de bases de donnes ; guide de e lutilisateur

3.1

Pro-C et les requtes dynamiques e

Ce produit correspond ` une approche par intgration de SQL dans le langage C. On t aussi a e ee commercialiss : PRO-BASIC, PRO-COBOL, PRO-PL1, PRO-PASCAL et PRO-ADA. e le principe gnral dutilisation consiste ` : e e a Ecrire un programme en PRO-C

26

Le soumettre ` un prprocesseur de macros (prcompilateur) qui fournit un chier C. Les requtes a e e e SQL sont seules analyses, transformes en appels de fonctions en biblioth`que et en oprations de e e e e gestion de structures C de faon ` assurer linterface avec les donnes de la base. c a e Compiler le programme obtenu avec un compilateur C classique et raliser ldition des liens. e e Les instructions SQL sont prxes par la macro EXEC SQL dont elles constituent le param`tre. Les e e e outils permettant la traduction sont fournis par un chier SQLCA.H qui initialise une structure complexe de communication entre le programme et le SGBD. Le programme PRO-C est dcoup en deux parties : une zone de dclarations et une zone dinstruce e e tions. 3.1.1 Dclarations e

Elles sont encadres par les instructions EXEC SQL BEGIN DECLARE SECTION et EXEC SQL e EN DECLARE SECTION. Exemple : EXEC SQL BEGIN DECLARE SECTION int numero; char nom[15]; char tnoms[20][15]; float salaire; EXEC SQL END DECLARE SECTION. Les variables ont des types conformes aux types de base de SQL. Un cas particulier est pos par le e type VARCHAR, qui est reprsent de faon interne par un enregistrement ` deux champs : e e c a Exec SQL begin declare section VARCHAR nom[30]; Exec SQL end declare section Le prcompilateur ralise lexpansion de la faon suivante : e e c struct{ unsigned short int len; unsigned char arr[30]; }nom; Il faut donc lors de lutilisation dun VARCHAR, manipuler explicitement les champs correspondant en utilisant des fonctions telles que strcpy, strcat, strlen, . . .comme lillustre lexemple ci-apr`s. e Certaines variables ont un statut particulier. On les dsigne sous le nom de variables-htes (host e o variables). Elles sont dclares dans la declare section, et sont utilises dans les requtes SQL sur la e e e e base dune syntaxe tendue, prxes par le symbole : e e e 3.1.2 Requtes dynamiques e

Il est possible de dnir dynamiquement le texte des requtes ` excuter, en fonction de ltat des e e a e e donnes et du droulement du programme. Ces requtes dynamique utilisent un curseur associ ` une e e e e a variable destine ` contenir le texte de la requte. Par rapport au mcanisme classique de gestion dun e a e e curseur, la seule nouveaut rside dans une instruction prepare qui ralise lassociation. e e e Dans lexemple suivant, on veut raliser une synth`se des rponses ` un questionnaire. Les rponses e e e a e sont stockes dans une table QUESTIONS, de 5 colonnes Q1 jusqu` Q5 . Chaque rponse est code par e a e e des entiers de 1 ` 3, et le programme compte le nombre de rponses identiques. a e

27

#include <stdio.h> #include <stdlib.h> EXEC SQL begin declare section VARCHAR uid[20]; VARCHAR pswd[20]; VARCHAR requete[120]; int total; EXEC SQL end declare section char numq[5]={"1","2","3","4","5"}; char valeur[1]; int i,j; EXEC SQL INCLUDE SQLCA; main(){ strcpy(uid.arr,"monNom"); uid.len=strlen(uid.arr); strcpy(pswd.arr,"monMotDePasse"); pswd.len=strlen(pswd.arr); EXEC SQL WHENEVER SQLERROR STOP; EXEC SQL CONNECT :uid IDENTIFIED BY :pswd; printf("Connexion a Oracle reussie\n"); for(i=0;i<5;i++){ strcpy(requete.arr,"SELECT COUNT(Q"); strcat(requete.arr,numq[i]); strcat(requete.arr,") FROM QUESTIONS WHERE Q"); strcat(requete.arr,numq[i]); strcat(requete.arr," = "); for(j=1;j<=3;j++){ itoa(j,valeur,10); /* conversion en base 10 dun entier en ASCII */ strcat(requete.arr,valeur); requete.len=strlen(requete.arr); EXEC SQL PREPARE S FROM :requete; EXEC SQL DECLARE C CURSEUR FOR S; EXEC SQL OPEN C; EXEC SQL WHENEVER NOT FOUND GOTO fin; EXEC SQL FETCH C INTO :total; } } fin: EXEC SQL CLOSE C; printf("reponse %d a la question %d : %s \n",j,i,total);}} EXEC SQL COMMIT WORK RELEASE; exit(0); }

Les API

Les API (Application Programming Interface) sont dcrites dans la norme SQL2. Lide est de donner e e a ` lutilisateur des librairies de fonctions assurant linterface entre le SGBD et lapplication ; cest ce qui est ralis par des bibilioth`ques propres ` certains produits (PRO-C dOracle), avec linconvnient e e e a e davoir des outils propritaires. Ici, la librairie est normalise et documente ; elle peut tre invoque par e e e e e nimporte quel langage, quel quen soit le compilateur. Le API sont largement utilises aujourdhui en e mode client/serveur. Cest en 1992 que Microsoft a propos ODBC (Open database Connectivity), et devant son succ`s, ses e e concurrents ont tous depuis propos des ores similaires. e

28

4.1

Gnralits e e e

Une API permet la gestion des curseurs, les requtes dynamiques, les acc`s concurrents ; Elle remplace e e lintgration dans un langage procdural. En autorisant la notion de trains de requtes, elle rduit le trac e e e e rseau en mode Client/Serveur. e ODBC est maintenant tr`s rpandu et a t conu en couches : le gestionnaire de drivers et les drivers e e ee c sont spars. Il sut du driver ODBC adquat pour rendre les requtes comprhensibles par ce dernier. e e e e e Comme ce produit est devenu une norme de fait, les diteurs, en crivant eux-mme les drivers pour e e e chaque nouvelle version, assurent la compatibilit de leur produit avec les anciennes applications ; cette e technique est beaucoup plus souple, car il est nettement plus facile de modier un driver que le noyau du SGBD. Quant au dveloppeur, il dispose dun kit de dvelopement : SDK (Software Devlopement Kit). e e Devant le succ`s dODBC, tous les diteurs proposent aujourdhui un driver ODBC pour leur produit. e e

JDBC

JDBC signie Java Data Base Connectivity et constitue la rponse de SUN au dveloppement fulgurant e e dODBC de MicroSoft. Lun comme lautre sont dailleurs devenus des standards de la communication entre un programme et une base de donne. e JDBC est, comme ODBC, une API (Application Interface Programming), cest ` dire une bia blioth`que orant des classes et des interfaces pour se connecter et exploiter des SGBD ` partir de e a programmes Java. Il est ainsi possible dexploiter les SGBD en Client/Serveur ou en utilisant le Web. Documentation : http://java.sun.com/javase/6/docs/api/

5.1
5.1.1

Programmer avec JDBC


Liste des principales classes et interfaces Description Renvoie une connexion utilise par le DriverManager e Connexion ` une base a li ` un ordre SQL ea li ` un ordre SQL paramtr ea e e li ` une procdure stocke sur le serveur ea e e lignes issues dun SELECT description de lignes du SELECT informations du dictionnaire des donnes. e Interfaces Driver Connection Statement PreparedStatement CallableStatement ResultSet ResultSetMetaData DatabaseMataData

29

Classes DriverManager Date Time TimeStamp Types DriverPropertyInfo

Description g`re les drivers, lance les connexions e dates SQL h mn s SQL estampille descriptions des types SQL informations pour la connexion

Il faut en premier lieu disposer des classes (drivers) qui implmentent les interfaces de JDBC. Ces e classes doivent fournir la mthode connect() qui renvoie une instance de la classe qui implmente line e terface Connection. Les requtes sont lances ensuite en crant les instances de classes qui implmentent e e e e linterface Statement. Le chargement de plusieurs drivers permet de travailler avec plusieurs SGBD. Quand une classe correspondant ` linterface Driver est charge en mmoire, une instance de cette a e e derni`re est cre et le driver est enregistr par le DriverManager. Lors dune tentative de connexion, e ee e celui-ci tente deectuer la connexion avec tous les drivers enregistrs et slectionne le premier qui convient e e dans lordre des dclarations. De ce fait, lordre dinstanciation des dirents drivers a une importance e e capitale. Une application Java peut travailler avec tous ces types de drivers. Il est possible, pour accder ` un SGBD via le Web, dutiliser des servlets qui sont des applications Java e a libres des contraintes existant sur les appliquettes (applets). Ces servlets sont installes ct serveur et ee e oe doivent tre gres par un serveur web spcique (norme apache), tel que tomcat. Elles peuvent gnrer e ee e e e des pages Web contenant des donnes rcupres de la base et constitue une variante dynamique des e e ee programmes CGI. 5.1.2 Mod`le de connexion e

Larchitecture la plus frquente aujourdhui correspond ` ce quon appelle un mod`le 3-tiers : un e a e serveur web middleware (2nd tiers) dialoguant grce ` JDBC avec le SGBD (3eme tiers), sert dinterface a a avec lapplication Java (sur le client : 1er tiers ). Ce mod`le assure une plus grande scurit du SGBD et e e e une plus grande souplesse dans la programmation. Il permet entre autre de communiquer avec non pas un, mais plusieurs SGBD. Cest ce mod`le qui est utilis pour le traitement des servlets. e e La gure suivante illustre le principe dutilisation de JDBC dans le cas dune architecture 3/tiers :

5.1.3

JDBC en pratique :

Sous Windows, le plus simple est dutiliser NetBeans qui est un outil intgr de dveloppement et e e e encapsule toutes les variables denvironnement ainsi que lacc`s au compilateur et ` la machine JAVA. e a Sinon, il faut (cf. gure page suivante) donner une visibilit aux classes implmentant JDBC en e e dnissant des variables denvironnements. Pour cela, ouvrir la fentre des param`tres, choisir system, e e e puis Avanc et enn cliquer sur Variables denvironnement. e Dans la partie utilisateurs, dnir JAVA_HOME avec, par exemple, si on a plac le rpertoire du jdk e e e sous la racine, la valeur : C:\jdkk1.5.0_06\

30

Dans la partie Syst`me, dnir CLASSPATH avec la valeur : e e

C:\jdk1.5.0_06\lib\dt.jar;C:\jdk1.5.0_06\lib\tools.jar;C:\jdk1.5.0_06\lib\mysql-connector-java-3.1.7-bin.jar si on a plac dans le rpertoire lib du jdk le driver mysql. e e Dnir enn PATH avec la valeur : %PATH%;C:\jdk1.5.0_06\bin e Ceci tant ralis, on ouvre linvite de commande, et on lance la compilation avec la commande : javac MaClasse.java e e e et la machine java (excution) avec java MaClasse. e Au niveau du programme Java, la dmarche, assez rptitive, consiste ` : e e e a 1. Importer le paquetage java.sql 2. Charger en mmoire la classe du driver, par exemple avec linvocation suivante du Class.forName : e Class.forName("com.mysql.jdbc.Driver"); Puis : 3. Ouvrir une connexion : Connection con = java.sql.DriverManager.getConnection(...) 4. Crer des instructions SQL en exploitant lune des classes implmentant : Statement, PreparedStatement, e e CallableStatement. 5. Lancer les requtes avec, selon le cas, une des mthodes de Statement : executeQuery(), executeUpdate() e e ou execute(). 6. Fermer la connexion : con.close()

Ouvrir une connexion Une connexion ` un SGBD est reprsente par une instance de la classe implmentant linterface Connection. a e e e On lobtient en retour de la mthode static getConnection() de la classe DriverManager. On doit passer ` cette e a mthode lURL de la base de donne. Le gestionnaire de driver essaye tous les drivers enregistrs lors de leur e e e chargement par Class.forName() jusqu` ce quil en trouve un qui lui permette de se connecter ` la base. a a Une URL de base de donne est de la forme : jdbc :sous-protocole :base de donne e e Par exemple, avec un pont JDBC-ODBC on pourrait avoir : jdbc:odbc:base En fait, la syntaxe de lURL dpend du driver utilis. Il faut se reporter ` la documentation du driver. e e a Pour les bases de donnes suivantes, les pilotes sont : e

31

BD Oracle MySQL postgreSQL

pilote oracle.jdbc.driver.OracleDriver com.mysql.jdbc.Driver org.postgresql.Driver

URL jdbc:oracle:thin:serveur:1521:chaine\_de\_connexion jdbc:mysql:serveur/nomDeLaBase jdbc:postgresql:serveur/nomDeLaBase

Ainsi avec mysql, pour la base essai situe sur un serveur local, pour un utilisateur dont les login et mot de e passe seraient contenus par les variables uid et pswd, on aurait : static final String url = "jdbc:mysql://localhost/essai"; Connection con = DriverManager.getConnection(url, uid, pswd); Le pilote MySQL peut tre tlcharg ` partir de mysql.com. Une fois linstallation faite (par exemple dans le e ee ea rpertoire lib dEasyPHP), la variable denvironnement CLASSPATH doit naturellement lui donner sa visibilit. e e La squence compl`te de connexion pour ce SGBD sera alors, si lutilisateur est le DBA root (sans mot de e e passe) :

try{ Class.forName("com.mysql.jdbc.Driver"); java.sql.Connection con = java.sql.DriverManager.getConnection( "jdbc:mysql://localhost/essai","root",""); } catch(Exception e){ System.out.println("Pb de driver : " + e.getMessage());); }

Instructions SQL simples Les ordres SQL sont reprsents par des instances de la classe implmentant linterface Statement. La mthode e e e e a appeler est dirente suivant la nature de la requte ; la consultation utilise executeQuery(), la modication ` e e executeUpdate(). Interrogation La requte (Select) est passe ` la mthode excuteQuery(String). Celle-ci renvoit une instance de la classe e e a e ResultSet, qui est une reprsentation des lignes retournes par le Select. Ces derni`res sont parcourues par e e e la mthode next() : e Statement stmt = connexion.createStatement(); ResultSet rset = stmt.executeQuery("select nom from emp"); while (rset.next() ) System.out.println (rset.getString(1)); // getString(1) rcup`re la premi`re colonne e e e stmt.close(); Rcupration des donnes e e e La classe ResultSet fournit des mthodes getXXX(int numroColonne) ou getXXX(String nomColonne) e e pour rcuprer dans le code Java les valeurs de colonnes des lignes renvoyes par linterrogation. Par exemple, e e e getString() renvoit une instance de la classe String. Il existe des possibilits de conversion automatique, mais si celle-ci est impossible, la mthode lance une e e SQLException. Oracle nutilise pratiquement que le type number avec lequel on peut utiliser getShort(), getInt(), getLong(), getFloat(), getDouble(). Type SQL CHAR/CHAR(n) VARCHAR(n)/VARCHAR2(n) NUMBER DATE Mthode Java conseille e e getString() getString() getXXX() getDate()

Rem : quand on rcup`re un CHAR(n) dans un objet de la classe String, la valeur est complte par des e e e e espaces. Valeur NULL Celle-ci est repre par la mthode wasNull() renvoyant un boolen . Dans lexemple qui suit, on imprime e e e e des noms demploys associ avec une ventuelle commission lorsque celle-ci existe : e e e Statement stmt = connexion.CreateStatement(); ResultSet rset = stmt.executeQuery("select nom, commission from emp");

32

Float commission; while (rset.next()) { nom = rset.getString(1); commission = rset.getFloat(2); if (rset.wasNull()) System.out.println(nom + " pas de commission"); else System.out.println(nom + " avec " + commission + " euros de commission"); } Modication de donnes e Statement stmt = connexion.createStatement(); String ville = new String ("Villeneuve dAscq"); int nbLignesModifiees = stmt.executeUpdate("insert into vendeur values(15,toto,"" + ville + "")); stmt.close(); Attention ` bien mettre deux apostrophes simples entre le d et le nom Ascq de la ville. a La mthode executeUpdate() doit toujours tre utilise pour lancer des ordres SQL ne renvoyant aucun e e e rsultat, comme toutes les commandes dadministration : ( Create Table, Grant, . . .). Elle retourne un code e dexcution ou le nombre d elignes aectes selon la nature de la requte SQL. e e e La mthode execute, quant ` elle, peut remplacer avantageusement les deux prcdentes. e a e e

5.2

Exemples dapplications JDBC

Les exemples qui suivent correspondent ` trois applications tournant sous Windows en ralisant un pont a e ODBC/JDBC avec une base Access. Ces trois applications permettent de : crer une table, y insrer des donnes, e e e puis lire ces derni`res. e Ils supposent la cration pralable dun driver ODBC, ralise en allant chercher le panneau de conguration e e e e dans les param`tres, puis en cliquant sur licne ODBC 32 bits. On clique sur le bouton Add (g.a), on choisit e o le type de driver (Microsoft Access Driver). La fentre qui souvre alors (g. c) permet dassocier au nom e symbolique dun driver (ici Temp dans lexemple) le type et le chemin dacc`s ` la base de donnes. La gure d e a e montre ce driver en place parmi les autres :

33

5.3

Manipulation dune table Access


la table matable*/

/* Essai.java : Essais avec import java.sql.*;

public class Essai{ public static void main(String args[]){ String url = "jdbc:odbc:temp; //le lien ODBC a pour nom symbolique temp Connection con; Statement stmt; String requete; try { Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e){ System.err.print("ClassNotFoundException : "); System.err.println(e.getMessage()); } try{ con=DriverManager.getConnection(url,"",""); stmt=con.createStatement(); // Cration de la table e requete = "Create table matable(Nom varchar(10), prenom varchar(10), adresse varchar(30))"; stmt.executeUpdate(createString); // remplissage de la table stmt.executeUpdate("Insert into matable values (Toto,Paul,25 rue DOS, Lille)"); stmt.executeUpdate("Insert into matable values(Truc,Bob,32 Av Linux, Roubaix)"); stmt.executeUpdate("Insert into matable values(Machin,Momo,10 Bd OS,Tourcoing)"); // interrogation de la table requete = "select nom, prenom, adresse from matable"; ResultSet rs = stmt.executeQuery(query); System.out.println("Liste des personnes"); while (rs.next()){ String n = rs.getString("nom"); String p = rs.getString("prenom"); String a = rs.getString("adresse"); System.out.println(n+" "+p+" "+a);

34

} stmt.close(); con.close(); } catch(SQLException ex){ System.err.println ("SQLException : "+ex.getMessage()); }}}

5.4

Acc`s ` la mtabase e a e

La mthode con.getMetaData() de lobjet de connexion con permet dobtenir les mta-donnes, sous la forme e e e dun objet typ par : DatabaseMetaData. e Soit dmd un tel objet. La mthode e getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) fournit alors, sous la forme dun objet ResultSet, la liste des objets de la base correspondant au types passs en param`tre. Par exemple lobjet : String les_types={"TABLE" ,"VIEW"}; permet daccder ` la liste e e e a des tables et des vues de lutilisateur. Le catalogue (dictionnaire des donnes) peut tre vide (null) ou obtenu e e par con.getCatalog(). Le schma sera une cha vide sous Postgres (pas de schma) ou dni par le nom de e ne e e lutilisateur en majuscules (this.login.toUpperCase() sous Oracle) Ainsi, sous Oracle, la squence : e ResultSet les_tables = dmd.getTables(con.getCatalog(),null,"%",les_types) va placer dans un ResultSet la liste des tables et vues. les_tables.getString("table_name") permet dobtenir le nom de lobjet (table ou vue), et les_tables.getString("table_type") indiquera sil sagit dune table ou dune vue. Si, apr`s excution dune requte dinterrogation, on souhaite acher, en pralable aux donnes rcupres, e e e e e e e e un chapeau contenant les noms des colonnes, on peut procder de la mani`re suivante : e e Linterrogation dune table (ou vue) place le rsultat dans un objet ResultSet. Les mta-donnes de cet e e e objet (appelons-le rs) sont accessibles via la classe ResultSetMetaData. Par exemple : ResultSetMetaData rsmd=rs.getMetaData() Le nombre de colonnes de la table peut tre obtenu ` partir de : rsmd.getMetaData().getColumnCount(), e a et le nom de la colonne numro i par : rsmd.getMetaData().getColumnName(i). e On peut aussi avoir acc`s directement au schma relationnel de chaque table de la faon suivante : e e c La mthode e getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern) de la classe DataBaseMetaData fournit un rsultat de type ResultSet. e ResultSet les_colonnes=dmd.getColumns(null,le_schema,nomTable,"%"); En explorant les colonnes retournes par la mthode next, on peut invoquer : e e les_colonnes.getString("column_name"); qui donne les noms des colonnes les_colonnes.getInt("data_type"); qui retourne le code du type de la colonne les_colonnes.getInt("column_size"); qui retourne sa longueur ventuelle e les_colonnes.getString("is_nullable"); qui indique si la colonne peut contenir ou non des valeurs nulles. Les mthodes qui suivent sont des mthodes de DataBaseMetaData et retournent un objet de type ResultSet : e e getPrimaryKeys(String catalog, String schema, String table) retourne la cl primaire e getExportedKeys(String catalog, String schema, String table) retourne les attributs rfrencs ee e getImportedKeys(String catalog, String schema, String table) retourne les attributs rfrenants. ee c Exemple : ResultSet les_cles=dmd.getPrimaryKeys(null, le_schema, nomTable); if (les_cles)==null){System.out.println("Pas de cl primaire dfinie");} e e else{ System.out.println("Cl primaire : "); e while (les_cles.next(){ System.out.println(les_cles.getString("COLUMN_NAME"); } } En ce qui concerne les types SQL retournes par lintermdiaire des mta donnes, ce sont des codes entiers e e e e dnis dans : java.sql.Types. Ces codes portent un nom ; on a les quivalences suivantes : e e java.sql.Types.CHAR correspond au type CHAR java.sql.Types.VARCHAR correspond au type VARCHAR

35

java.sql.Types.INTEGER correspond au type INTEGER java.sql.Types.FLOAT correspond au type FLOAT java.sql.Types.DATE correspond au type DATE sans donc avoir ` se proccuper de la valeur de leur valeur. a e

Servlets

Il existe de nombreux moyens dacc`der via le web ` une ou des bases de donnes. Ces moyens peuvent utiliser e a e des programmes JAVA, mais aussi nombre dautres langages de programmation (du C au PHP). Deux procds populaires et symtriques existent : e e e lcriture de servlets, programmes java tournant sur le serveur et orant ainsi un maximum de scurit. e e e La servlet correspond avec lutilisateur en retournant des squence HTML constituant les pages de rponse e e ` ses requtes. a e des pages JSP qui sont constitues de squences JAVA encapsules dans du HTML par lintermdiaire de e e e e marqueurs spciques. Le JSP est transform automatiquement en servlet au niveau du serveur, mais sont e e contenu est visible par le client et ne permet pas dassurer une scurit susante. e e Schma dune application WEB e Une application Web : 1. Recueille les donnes utilisateur e 2. Envoie une requte au serveur Web e 3. Excute le programme dapplication (serveur dapplication/de donnes) e e 4. retourne les rsultats au navigateur e Le traitement des donnes issues dun formulaire HTML se fait avec deux mthodes, GET et POST : e e la requte GET : e Extrait des informations sur le serveur HTTP utilise la technique CGI pour intgrer les donnes de formatage ` lURL. Exemple : e e a http://www.fil.univ-lille1.fr/monAppli?x=3&y=4 la requte POST e Modie des donnes sur le serveur e Les donnes de la page sont assembles et envoyes vers le serveur e e e Permet dexploiter un plus gros volume de donnes e Le retour des rsultats au navigateur se fait de la faon suivante : du ct serveur, le programme prcise la e c oe e nature du contenu(HTML, images, . . .) et int`gre la rponse dans le ot de sortie. Du ct client, le navigateur e e oe dnit le type MIME de len-tte et ache des donnes encapsules dans du HTML e e e e
Rseau SERVEUR.

Requete http CLIENT Navigateur Web Rponse

Programme dapplication SERVEUR

WEB

Base de donnes

Servlets : principes de fonctionnement

36

Moteur de Servlets Instanciation de la servlet appel de la mthode init() Requete http 1 Requete http 2 Reponse 1 Reponse 2 Appel d ela mthode destroy() Affectation de la requete un thread Appel de la mthode service() Affectation de la requete un thread Appel de la mthode service() Excution du service Excution du service

Une servlet doit implmenter linterface javax.servlet.Servlet. Il faut noter que importation de javax.servlet.* e et de javax.servlet.http.* devient inutile avec le jdk1.3 (il faut importer java.net.* a la place), mais ` redevient indispensable avec le j2sdk1.4 Trois mthodes doivent tre implmentes : e e e e init() qui initialise la servlet service() qui traite les requtes e destroy() qui dtruit la servlet et lib`re les ressources e e Dans la classe HttpServlet, on trouve deux mthodes qui remplacent la mthode service() de la classe e e m`re : doGet() pour les requtes HTTP de type GET, et doPost() pour les requtes HTTP de type POST e e e Lexemple ci-dessous indique comment doit se raliser une implmentation de doPost : e e

public class essai1 extends HttpServlet{ public void init(HttpServletConfig c) throws ServletException{....} public void doPost( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ PrinterWriter out=res.getWriter(); res.setContentType("text/html"); out.println("<html>"); .... } public void destroy(){....} } Quant ` la rcupration de param`tres, son principe est illustr par limplmentation suivante de doGet : a e e e e e public void doGet(HttpServletRequest req, HttpServletResponse rep) throws ServletException, IOException{ Enumeration liste = req.getParameterNames(); String [] valeurs = req.getParameterValues(); String val1 = req.getParameter(param1);

37

Exemple : annuaire DESS Lexemple qui suit permet de raliser un annuaire des tudiants du DESS, ` partir de deux chiers : un chier e e a HTML stock sur le serveur Web et auquel un client acc`de par lintermdiaire de son navigateur, et un chier e e e java. La page HTML contient un formulaire permettant de rentrer le nom dun tudiant. Le programme java prend e ce nom en param`tre, interroge la base, et renvoit en rponse un page HTML de prsentation des rsultats. e e e e La pageHTML <HTML> <HEAD><TITLE> ANNUAIRE TIIR </TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"<CENTER> <CENTER><H1>ANNUAIRE DU DESS TIIR </H1></CENTER> <HR><CENTER> <H2>Recherche de coordonnes </H2></CENTER> e <P> Tapez le dbut du nom de la personne recherche: e e <P><FORM METHOD=POST ACTION=http://localhost:8080/examples/servlets/annuaire <INPUT TYPE=TEXT NAME="nom" SIZE=20 MAXLENGTH=30 VALUE=""> <P><INPUT TYPE=SUBMIT NAME="go" VALUE="RECHERCHER"> <INPUT TYPE=RESET NAME="reset" VALUE="ANNULER"> </FORM> </BODY></HTML> La Servlet par elle-mme e import import import import java.io.*; java.sql.*; javax.servlet.*; javax.servlet.http.*;

method=post>

public class Annuaire extends HttpServlet{ public void doPost( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContType("text/html"); PrintWriter out=res.getWriter(); out.println("<HEAD><TITLE>Rponse annuaire </TITLE></HEAD><BODY>"); e out.println("<HR>"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url ="jdbc:odbc:mabase"; java.sql.Connection c=DriverManager.getConnection(url,"",""); java.sql.Statement st = c.createStatement(); java.sql.ResultSet rs = st.executeQuery("Select * from matable where nom like " +req.getParameter("nom"+"*")); rs.next(); out.println(rs.getString("prenom")+" "+rs.getString("nom") ); } catch (SQLException e){out.println("Cette personne nexiste pas");} out.println("<P><A href = annuaire.html> Retour</A>"</P>); out.println("</BODY>"); out.close(); } public String getServletInfo(){ return "Servlet Annuaire"; }

38

7
7.1

INTRODUCTION ` PHP a
Quest-ce que PHP ?

PHP est un langage de script interprt excut du ct serveur. La syntaxe du langage est issue de celles du ee e e oe langage C, du Perl et de Java. Elle est de ce fait peu lisible et ce langage sapparente ` un bricolage ralis sans a e e les apports de la thorie des langages ni pense directrice. Il a cependant des avantages dans le lot des langages e e de scripts disponibles : La gratuit et la disponibilit du code source (PHP3 est distribu sous licence GNU GPL) e e e la possibilit dinclure le script PHP au sein dune page HTML e La simplicit dinterfaage avec des bases de donnes (de nombreux SGBD sont supports, mais le plus e c e e utilis avec ce langage est MySQL. e Lintgration au sein de nombreux serveurs web (Apache, EasyPHP, Microsoft IIS, ...) e

7.2

Origines de PHP

Le langage PHP a t mis au point au dbut dautomne 1994 par Rasmus Lerdorf. Ce langage de script lui ee e permettait de conserver la trace des utilisateurs venant consulter son CV sur son site, en acc`dant ` une base de e a donnes par lintermdiaire de requtes SQL. Par la suite, de nombreux internautes lui demand`rent ce programme e e e e et Rasmus Lerdorf mit en ligne en 1995 la premi`re version quil baptisa Personal Sommaire Page Tools, puis e Personal Home Page v1.0. Etant donn le succ`s de PHP 1.0, il dcida damliorer ce langage en y intgrant des structures plus avances e e e e e e telles que des boucles, des structures conditionnelles, un paquetage permettant dinterprter les formulaires quil e avait dvelopp (FI, Form Interpreter) ainsi que le support de mSQL. Cest de cette faon que la version 2 du e e c langage, baptise pour loccasion PHP/FI version 2, vit le jour durant lt 1995. Il fut rapidement utilis sur e ee e de nombreux sites (15000 n 1996, puis 50000 en milieu danne 1997). A partir de 1997, Zeev Suraski et Andi e Gurmans rejoign`rent Rasmus pour former une quipe de programmeurs an de mettre au point PHP 3 (Stig e e Bakken, Shane Caraveo et Jim Winstead les rejoign`rent par la suite). La version 3.0 de PHP fut disponible le 6 e juin 1998. A la n de lanne 1999, une version bta de PHP, baptise PHP4 est apparue... e e e Lintrt du langage est quil est dot de nombreuses fonctions assurant quasiment toutes les fonctionnalits e e e e du shell UNIX, et quil peut donc se substituer ` un shelle, ` la mani`re de perl ou python. Il permet galement a a e e de communiquer avec la plupart des SGBD.

7.3

SGBD supports par Php e

PHP permet un interfaage simple avec de nombreux SGBD, parmi lesquels : c Informix, MySQL, PostgreSQL, Oracle, Sybase Cet interfaage est ralis par lintermdiaire de fonctions spcialises, intgres au langage, et qui corresc e e e e e e e pondent aux fonctions que lon trouverait dans une API indpendante. e

7.4

PHP est interprt par le serveur e e

Un script PHP est un simple chier texte contenant des instructions crites ` laide de caract`res ASCII 7 bits e a e incluses dans un code HTML ` laide de balises spciales et stock sur le serveur. Ce chier doit avoir lextension a e e .php pour pouvoir tre interprt par le serveur ! e ee Un script PHP est stock sur et interprt par le serveur, les utilisateurs ne peuvent donc pas voir le source. e ee

7.5

Implantation au sein du code HTML

Le script peut tre interprt par le serveur de deux faon sdirentes e ee c e Le chier contenant le code a une extension en .php et ne contient que du PHP. Il peut gnrer, ` laide e e a des procdures dimpression, du code HTML destin au client. e e Le chier est un chier HTML. Le code PHP doit alors tre dlimit par les balises < ?php et ?> e e e Voici un exemple lmentaire : ee <html> <head><title>Exemple</title></head> <body> <?php echo "Hello world"; ?> </body>

39

</html>

7.6

Linterprtation du code e

Un code PHP (celui compris entre les dlimiteurs < ?php et ?> dans un chier HTML ) est un ensemble e dinstructions se terminant chacune par un point-virgule (comme en langage C). Lorsque le code est interprt, e e les espaces, retours chariot et tabulation ne sont pas pris en compte par le serveur. Les commentaires sont dlimits par /* et */ Un commentaire sera donc not de la faon suivante : e e e c /* Voici un commentaire! */ Les commentaires peuvent tre crits sur plusieurs lignes, mais ne peuvent tre imbriqus. e e e e Il est possible galement de mettre toute la n dune ligne en commentaire en utilisant le double slash (//). e Le langage PHP est par exemple sensible ` la casse (en anglais case sensitive). Toutefois, cette r`gle ne a e sapplique pas aux fonctions, les spcications du langage PHP prcisent que la fonction print peut tre appele e e e e print(), Print() ou PRINT(). Enn, toute instruction se termine par un point-virgule.

7.7

Introduction ` EasyPHP a

An de faire fonctionner PHP, il est ncessaire de disposer dun serveur APACHE intgrant un module e e dinterprtation. Cest le cas dEasyPHP qui int`gre de plus MySQL. e e EasyPHP est disponible sur le site : www.easyphp.org

7.8

Rcupration de donnes e e e

PHP rend tr`s simple la rcupration de donnes envoyes par lintermdiaire de formulaires HTML. e e e e e e <FORM Method="POST" Action="test.php"> Nom : <INPUT type=text size=20 name=nom><BR> Prnom : e <INPUT type=text size=20 name=prenom><BR> Age : <INPUT type=text size=2 name=age><BR> <INPUT type=submit value=Envoyer> </FORM> Lorsque lon soumet un formulaire ` un chier Php, toutes les donnes du formulaires lui sont passes en tant a e e que variables, dont les noms correspondent ` ceux des champs du formulaires, et ce par lintermdiaire dune table a e nomme $_POST[] ou $_GET[], selon la mthode de transfert invoque. e e e // fichier test.php <?php $nom=$_POST[nom]; $prenom=$_POST[prenom]; $age=$_POST[age]; if (($nom=="")||($prenom=="")||($age=="")) { if($nom=="") print("Veuillez saisir le nom de lutilisateur<BR>\n"); if($nom=="") print("Veuillez saisir le prnom de lutilisateur<BR>\n"); e if($nom=="") print("Veuillez saisir lage de lutilisateur<BR>\n"); } else { echo "Rcapitulatif des informations saisies<BR>\n <UL> e <LI>Nom: $nom</LI> <LI>Prenom: $prenom</LI> <LI>Age: $age</LI> </UL>"; } ?>

7.9

Acc`s aux bases de donnes e e

PHP permet un interfaage tr`s simple avec un grand nombre de bases de donnes. Lorsquune base de c e e donnes nest pas directement supporte par PHP, il est possible dutiliser un driver ODBC, pilote standard pour e e communiquer avec une base.

40

//connection : $connect = mysql_connect($host,$user,$password) or die("erreur de connexion au serveur $host"); //$user : Le nom dutilisateur //$passwd : Le mot de passe //$host : Lh^te (ordinateur sur lequel le SGBD est install) o e //choix du SGBD : mysql_select_db($bdd) or die("erreur de connexion a la base de donnees"); //$bdd : Le nom de la base de donnes e Il est possible dinvoquer la clause (fonction) die() en cas derreur dexcution. Si la fonction retourne la valeur e 0 (cest-`-dire sil y a une erreur) la fonction die() renvoie un message derreur. a Lorsque lon eectue une requte de slection de tuples ` laide de la fonction mysql_query, il est essentiel e e a de stocker le rsultat de la requte (les enregistrements) dans une variable, que lon peut nommer par exemple e e $result. Toutefois, cette variable contient lensemble des enregistrements et nest donc pas exploitable telle quelle. Aussi utilise t-on lune des fonctions mysql_fetch_row() ou mysql_fetch_array(), qui dcoupe les lignes de rsultat e e en colonnes (par exemple Nom,adresse,...) et les aecte ` une variable tableau dans lordre o` elles arrivent. a u Ainsi, imaginons une table appele liens contenant le nom et lURL de sites internet. Il est possible de rcuprer e e e lensemble des enregistrements et de les acher dans un tableau : <html> <head> <title>Liens</title> <head> <body> <table border="1" cellpadding="0" cellspacing="0"> <tr> <th>Nom du site</th> <th>URL</th> </tr>

<?php // Dclaration des param`tres de connexion e e $host = la_machine; // Gnralement la machine est localhost e e // cest-a-dire la machine sur laquelle le script est hberg e e $user = votre_login; $bdd = Nom_de_la_base_de_donnees; $password = Mot_de_passe; // Connexion au serveur mysql_connect($host, $user,$password) or die("erreur de connexion au serveur"); mysql_select_db($bdd) or die("erreur de connexion a la base de donnees"); // Creation et envoi de la requete $query = "SELECT nom,prenom FROM personnes ORDER BY nom"; $result = mysql_query($query); // Recuperation des resultats while($row = mysql_fetch_row($result)) { $nom = $row[0]; $prenom = $row[1]; echo "<tr>\n

41

<td><a href=\"$prenom\">$nom</a></td>\n <td>$Url</td>\n </tr>\n"; } // Deconnexion de la base de donnees mysql_close(); ?> </tr> </table> </body> </html> Dans lexemple ci-dessus, les requte retourne les champs nom et prenom. La fonction mysql_fetch_row() e analyse donc chaque ligne de rsultat de la requte et stocke les colonnes dans le tableau row[]. Ainsi, le champ e e nom sera stock dans row[0] et prenom dans row[1]. Dautre part, on inclue gnralement mysql_fetch_row() e e e dans une boucle TantQue de telle faon ` ce que lensemble des lignes de rsultat soient traites. Lorsquil ny a c a e e plus de ligne ` traiter, la boucle TantQue se termine et linterprteur excute la suite des instructions. a e e La non prsence de rsultat se traduit par un rsultat nul de la part de la fonction mysql_fetch_row(). e e e

42

Architecture des SGBD


1 Structure des disques

Un disque est compos dune srie de galettes magntiques tournant autour du mme axe. Les faces intrieures, e e e e e magntises, sont physiquement constitues dune srie de pistes numrotes, et logiquement dcoupes en secteurs e e e e e e e e eux aussi numrots. Un trou laissant passer la lumi`re dune diode permet de conna e e e tre le numro du secteur e situ en face des ttes de lecture ` un instant donn. e e a e

La ncessit de diminuer la taille des pistes fait que le champ magntique permettant la lecture/criture doit e e e e tre aussi rduit que possible. De ce fait, les ttes de lecture doivent otter au plus pr`s de la surface, ce qui pose e e e e des probl`mes dintgrit des donnes et, en corollaire, de temps dacc`s aux donnes. Le dlai moyen dattente e e e e e e e (temps dinertie) lors dune opration dE/S et de lordre de 4 ` 5 ms. De ce fait, les E/S sont burises et e a e e concernent, non un octet, ni mme un secteur, mais la portion de cylindre constitue par toutes les fractions de e e pistes situes dans le mme secteur ` la verticales les unes des autres. e e a

43

2
2.1

Organisation des chiers


Pagination

Les chiers des SGBD sont souvent des chiers pagins, du moins dans les grands produits commerciaux e (Oracle). La dimension dune page correspond en principe ` celle dun cylindre de faon ` pouvoir tre accessible a c a e en une seule opration dEntre/Sortie. Au sein du chier, les pages sont g`res comme une liste cha ee. Les e e e e n principaux lments (tables, index) occupent plusieurs pages, rparties au sein du chier au gr des mcanismes ee e e e dallocations. Chaque page est alors lie ` la suivante, qui nest pas ncessairement contigue, et qui contient la e a e suite des donnes de lobjet concern. Les pages libres, g`res par une liste particuli`re, sont elles aussi cha ees, e e e e e n de faon ` pouvoir tre attribues lors de toute demande dallocation. c a e e
Page 1 R1 2 R2 3 R1 4 5 R3 6 R1 7 R2 R3 R2 R1

R1 R2 R3 VIDES Structure du fichier pagin des relations

2.2

Clustrisation e

Cest un procd qui permet doptimiser le traitement de certaines jointures, en stockant physiquement les e e lments les plus frquemment demands au sein dune mme page, quelle que soit la relation ` laquelle ils ee e e e a appartiennent. Les clusters sont crs par lordre SQL : Create Cluster. Ils sont rfrencs au moment de la ee ee e cration dune table, an de permettre un stockage slectif des attributs. La clustrisation ncessite des moyens e e e e dacc`s spciques aux divers attributs de la mme table. e e e exemple : create cluster C(A number,B char(10), D number); create table T1(A number, B char(10), C date) cluster C(A,B); create table T2(D number, E char) cluster C(D);

2.3

Burisation e

Dans tout syst`me, les entres/sorties sont burises et un SGBD ne droge pas ` la r`gle. Dans un syst`me e e e e e a e e informatique classique, on utilise la stratgie LRU ( last recently used ) : Les buers sont chargs au fur et ` mesure e e a des besoins de lecture. Lorsquils sont saturs, le contenu du plus ancien buer est cras au prot des donnes e e e e rclames. e e Dans un SGBD, lexcution dune jointure, qui rclame en gnral beaucoup de buers, demande lcrasement e e e e e du buer le plus rcemment charg : cest la stratgie MRU (most recently used ). e e e En fait, la gestion dun SGBD rclame des mcanismes plus sophistiqus que celle dun syst`me classique. En e e e e particulier, la sauvegarde des donnes lors des critures est rgie par des protocoles qui garantissent, comme nous e e e le verrons plus loin, la scurisation des transactions. e

Interface avec la couche logique

Lutilisateur dune BD relationnelle ne manipule que des tables, qui correspondent au niveau logique. Le niveau physique est constitu dun ou de plusieurs chiers pagins dont la structure peut tre assez complexe. e e e Une interface doit mettre en rapport ces deux niveaux. Cette derni`re est un descripteur des zones physiques et e doit contenir les ttes des listes cha ees associes ` chaque relation. e n e a Cette interface est assure par exemple dans ORACLE par la notion de Tablespace qui est manipul par les e e instructions SQL create,alter,delete Tablespace. Des param`tres physiques (clause Storage) permettent de e prciser la dimension des blocs, ainsi que leur mode dextension lors des allocations. e

44

TableSpace Blocs Segments Extensions Enregistrement

Schma dorganisation dun TableSpace et de laccs aux donnes

3.1

Cration dune base (Oracle) e

La cration dune base se fait par lordre create database, qui permet dassocier la base ` un certain nombre e a de chiers constitus dune srie contig e dadresses sur le disque. e e u CREATE DATABASE maBase logfile journal.log, size 50MB, datafile fichier1.ora size 2GB; CREATE TABLESPACE TA datafile fichier2.ora size 500MB, fichier3.ora size 500MB; ALTER TABLESPACE TA ADD DATAFILE fichier4.ora size 300MB; La base est munie dun chier de journalisation de 50 Mega-octets et dun chier de donnes de 2 giga. Un e tablespace, TA, est ajout au tablespace par dfaut (SYSTEM). Ce tablespace peut grer des donnes qui seront e e e e places dans les trois chiers noncs. La structure logique et lespace physique sont ainsi totalement dcoupls : e e e e e

Lors de la cration dun utilisateur, ce dernier est rattach ` un tablespace, SYSTEM par dfaut. e ea e CREATE USER toto IDENTIFIED BY truc DEFAULT TABLESPACE TA, TEMPORARY TABLESPACE TA, QUOTA UNLIMITED ON TA, QUOTA 10MB ON SYSTEM; De mme, lors de la cration dune table, on peut lattacher ` un tablespace particulier si on le souhaite : e e a CREATE TABLE T(...) TABLESPACE TB;

3.2

Stockage des tuples (Oracle)

Chaque bloc ou page de chiers est muni dun index permettant de grer les lignes avec ecacit. A chaque e e enregistrement est associ un bit de validit permettant une destruction logique et non physique, qui serait bien e e trop co teuse. u Lorsque les enregistrements sont de longueur variable, la page contient une partie xe, le bloc daccrochage, et un pointeur permettant daccder ` la partie variable (le bloc de dbordement) qui est ventuellement stock e a e e e dans une autre page du chier. Un exemple denregistrement de taille variable est constitu par le type Varchar2 e ou le type long qui peut atteindre 65000 caract`res. e

45

En-tte (index) Zone libre

blocs de dbordement Zone dinsertion blocs daccrochage

Structure dun bloc de donne

Lors de la cration dune table, une clause storage indique le volume initial de lallocation (initial), le volume e allou lors dune demande ultrieure (next), le nombre dextensions dallocation quil est possible de demander, e e le pourcentage daugmentation du volume ` chaque demande ultrieure (pctincrease), ainsi que le numro de la a e e liste permetant de grer lespace libre en cas dinsertion/suppression de tuples. En voici un exemple : e Storage ( initial 15 KB, next 10KB, minextents 3, maxextents 15, pctincrease 20, freelist 3); Au sein dun bloc, la structure des enregistrements est la suivante :

Dans ce schma, LGi dsigne la longueur de la donne Di qui suit, et qui correspond ` la reprsentation binaire e e e a e du i`me attribut. e

3.3

Dictionnaire des donnes e

La mtabase est la base qui g`re toutes les bases. Elle est conue selon un schma relationnel et constitue un e e c e dictionnaire des donnes prenant en compte : e les utilisateurs leurs droits les objets (tables, vues, index, etc) les attributs de chaque table la structure logique de description des tables, la taille et lorganisation des blocs de donnes. e lorganisation des chiers, leur taux doccupation, lespace libre. A titre dexemple, le dictionnaire dORACLE tait constitu de 44 tables pour la version 5, dune centaine pour e e la version 6, pr`s de 300 pour la version 7 et plus de 1000 pour la V10. Certaines de ces tables ne peuvent tre e e accdes que par le DBA. e e La base du dictionnaire de la V7 est en ralit dtenue par le super-administrateur SYS, qui voit les tables e e e suivantes (toutes ne sont pas indiques) du vritable dictionnaire : e e

46

USER$ OBJ$ TS$ FILE$ SEG$ TAB$ CLU$ IND$ ICOL$ CON$ CDEF$ CCOL$

Liste des utilisateurs et des rles o Objets des utilisateurs Tablespaces Fichiers Segments Tables de la base Clusters Indexes Colonnes accessibles par un index Liste des contraintes Dnitions des contraintes e Colonnes sur lesquelles portent des contraintes

Le dictionnaire courant accessible ` ladministrateur SYSTEM ainsi quaux utilisateurs ordinaires est compos a e de vues spcialises, permettant davoir la liste des objets de la base. Ce sont des vues construite sur le dictionnaire e e interne, mme quand elles sont qualies de tables. Certaines sont issues des anciennes versions dOracle pour e e des raisons de compatiblit. e

Les mthodes dacc`s e e

Aujourdhui, les SGBD utilisent essentiellement des acc`s directs en utilisant les techniques de hachage et e dindexation.

4.1
4.1.1

Le hachage
Principe

Le principe en est tr`s simple. Lacc`s est calcul par une fonction de hachage h, qui, ` une entre i, fait e e e a e correspondre la valeur h(i) [1, C]. Une mme valeur h(i) peut correspondre ` plusieurs entres direntes, qui e a e e appartiennent alors ` la mme classe dquivalence. La fonction h est caractrise par la valeur C du nombre de a e e e e classes quelle dtermine. e
Table de hachage Entre 0 Entre 1

Blocs de donnes i

Lacc`s aux donnes est ralis par une table de hachage, qui, ` chaque valeur de h(i), fournit ladresse de e e e e a la zone de stockage correspondante. Comme plusieurs entres dlivrent la mme valeur, on assiste, relativement e e e a la zone de stockage, ` un mcanisme de collision qui peut tre rsolu de direntes faons ; les plus courantes ` a e e e e c sont le cha nage, ou lutilisation dune fonction de collision pour obtenir une nouvelle adresse. Dans tous les cas, la recherche de linformation devient squentielle, chaque collision imposant la lecture ou le calcul de ladresse e suivante.

4.1.2

Exemples

Il ny a pas de thorie pour construire une bonne fonction de hachage, chaque programmeur conservant e jalousement celle quil a russi ` imaginer apr`s un bricolage plus ou moins laborieux. e a e Le principe du hachage suppose une qui-rpartition des valeurs de largument, ce qui est rarement observ e e e en pratique. Cet argument est toujours numrique, et necessite une transformation pralable des cls alphae e e numriques. e Une bonne mthode de transformation des cls alph-numriques en valeurs numriques consiste ` extraire des e e e e a caract`res mdians dune cl ( 2 ou 4), et ` prendre les valeurs binaires correspondantes pour former les poids e e e a

47

hauts et bas dune entier. Une fois la cl numrise, il existe bien des procds pour construire des fonctions de e e e e e hachage : Les fonctions les plus simples sont construites ` partir de la fonction modulo : h(cl)=cl Modulo N, ou N a e e est le nombre maximum de classes voulues. La mthode du milieu des carrs consiste ` extraire des bits du milieu du carr des cls. La valeur obtenue e e a e e correspond ` une classe dquivalence et est convertie en adresse. Exemple : 54862 30096196. On peut a e extraire la valeur mdiane : 96. e la mthode de dcoupage et addition transforme un nombre sans tenir compte de la derni`re retenue, e e e conformment ` lexemple suivant : 24315268 243 + 152 + 68 = 463 e a

4.1.3

Acc`s multicls e e

Les tables de hachage peuvent tre bi, voire multi-dimensionnelles. Elles permettent en cas de recherche e multicrit`res daccder ` des zones o` sont stocks les enregistrement correspondant ` des entres multiples. La e e a u e a e gestion dune telle structure est cependant tr`s lourde si lon tient compte des mises ` jour. e a On peut aussi raliser un hachage partitionn si la fonction de hachage est capable de traiter une entre e e e constitue de champs indpendants. Par exemple, si le premier champ renvoit ` un service et le dernier ` un e e a a emploi, la valeur 010.110 permet dacc`der ` un programmeur particulier dIEEA. La valeur 000.110 renverra ` e a a lensemble des programmeurs.

4.1.4

Tableaux de bits

Une utilisation annexe, mais importante, des fonctions de hachage est lie ` loptimisation des oprations e a e de jointure. De faon ` ne slectionner que les tuples qui interviennent dans la jointure de R et S, lorsque la c a e cardinalit de R est tr`s grande devant celle de S, on op`re de la faon suivante : e e e c On applique aux tuples de S une petite srie de fonctions simples, h0 , h1 , . . ., hn , ayant si possible le mme e e nombre de classes. Si, pour un tuple si de S, h(si )=j, on met ` 1 llment (i,j) dune table T, et ` 0 sinon. Cette a ee a table sert ensuite de crible pour tester les tuples de R. Si un tuple de R a une signature conforme ` la table a (i, hi (r) = j avec T(i,j)=1), il est retenu, car susceptible de participer ` la jointure. a
Classes 012345 .......... j .......... h0 h1 h2 h3 N 101101010101110101000101010 010101011110101000101010101 111001100010100011110101011 001100001101011101011100101

Tableau de bits ou crible de jointure

4.1.5

Gestion des collisions

Cest le principal probl`me ` rsoudre si on veut viter la squentialisation qui en dcoule. En cas de collision, e a e e e e il faut ranger un tuple dans lespace associ ` une classe. Si cet espace est satur, il faut allouer une extension de ea e taille susant e pour tenir compte dautres collisions ventuelles. e La mthode de Fagin conduit ` une croissance quadratique de lespace dallocation. Son principe est le suivant : e a Lors de linitialisation dune table, on utilise une fonction de hachage dont la valeur tient sur un bit. Elle permet daccder ` seulement 2 paquets dnomms 0 et 1. D`s quun des paquets est satur, on alloue le mme e a e e e e e nombre de paquets, ce qui fait 4 au total. La fonction de hachage, compte tenu de la collision qui vient de se produire est alors sur 2 bits, et les valeurs dans les paquets initiaux sont rparties en fonction de la valeur de e h(cl, c). Le param`tre c, qui indique le nombre de collisions, vaut alors 1. le procd est ritr ensuite autant e e e e e e e de fois que ncessaire, mais la saturation de lespace mmoire peut intervenir ` tout moment. e e a

48

Tte des classes 0 1 paquet 1 paquet 0 00 01 10 paquet 10 11 paquet 11 paquet 00 paquet 01

Avant saturation des paquets Mthode de Fagin

Aprs saturation

La mthode de Litvin permet dobtenir une croissance linaire de lespace mmoire. Elle utilise une fonction e e e de hachage et une fonction de collision. Supposons par exemple que h0 = cl modulo N, avec N=10. h0 fournit e donc les adresses de 10 blocs dirents. e Soit la fonction de collision hc+1 = hc + N2c . Lors de la premi`re collision, on cre le nombre de blocs e e ncessaires pour correspondre ` la valeur de hc+1 . Si 26 est une cl, h0 (26) vaut 6, et le 6eme bloc est satur. e a e e h1 (26) vaut 16. On cre les blocs de 10 ` 16, et on redistribue certaines des valeurs des blocs de 0 ` 9 vers les e a a blocs de 10 ` 16, pour permettre des insertions directes vers les premiers blocs. a
Bloc 0 10 20 40 90 Bloc 1 1 21 Bloc 2 32 62 102 Bloc 6 6 16 36 56 Bloc 9 9 ... 19 39 79

...

Les 2 dernires valeurs des blocs 0 et 6 sont rparties La valeur 26 est alors insre dans le bloc 6.

dans les blocs vides 10 et 16, respectivement.

Mthode de Litvin croissance linaire

4.2

Index arborescents

Les index arborescents sont raliss ` partir darbres quilibrs de la famille des B-arbres, principalement les e e a e e arbres B+ . Un arbre B+ dordre d est un arbre totalement quilibr (toutes ses feuilles sont ` la mme hauteur) dont les e e a e nuds sont composs dun nombre de valeurs comprises entre d+1 et 2d+1 (sauf ventuellement la racine). e e
Structure du noeud dun B-Arbre de degr 2

P0

C1

P1

C2

P2

C3

P3

C4

P4

Donnes < C1 Donnes dans [C1, C2[

La premi`re valeur dun nud est une adresse (un pointeur), les autres sont des index : (cl, adresse). Ladresse e e correspond ` un autre nud, de hauteur infrieure, ou ` une feuille. En ce qui concerne les feuilles, ladresse est a e a celle dune page contenant le tuple recherch, et, sous Oracle, correspond au rowId. Pour les nuds, ladresse e associe ` Ci renvoit au nud contenant les rfrences des cls comprises entre Ci et Cj , Cj exclu. e a ee e

49

ARBRE B+

rowid

rowid

rowid

rowid

rowid

rowid

+1) La nombre de niveaux ncessaire pour stocker N cls est 1 + logd/2 (N2 et le cot dun acc`s est en logd N . e e u e 6 A titre dexemple, 3 acc`s susent pour 10 cls lorsque d = 200. e e La principale dicult de gestion dun B-arbre est de conserver les feuilles au mme niveau lors des insertions e e et des suppressions. Rappelons les algorithmes exposs dans le cours dalgorithmique. e

4.2.1

Recherche

Lexploration du contenu dun nud se fait squentiellement dans lordre des champs, les cls tant stockes e e e e dans lordre alpha-numrique. e Lorsque la cl cherche nest pas prsente, la recherche se poursuit au niveau du nud point par lindex dont e e e e la cl est immdiatement infrieure. Sil nen existe pas, cest le pointeur antrieur P0 qui indique le nud suivant. e e e e

4.2.2

Insertion

On commence par eectuer une recherche du nud o` doit se faire linsertion. Sil nest pas satur, linsertion u e se fait en rorganisant les index prsents de faon ` respecter lordre alpha-numrique. e e c a e Si le nud est plein, il faut crer un nouveau nud, en clatant celui qui est satur. Les index correspondant e e e aux d premi`res cls (les plus petites) restent sur place, les d plus grandes sont insres dans le nouveau nud, et e e e e la valeur mdiane est remonte au niveau du nud p`re. Le processus est rpt rcursivement si ncessaire. En e e e e ee e e cas de besoin, on cre un nouveau nud racine, ce qui permet ` larbre par le haut, les feuilles restant toujours e a au mme niveau. e
66 66 78 71 78

66

69

71

76

78

84

93

66

69

71 Aprs insertion de la valeur 75

75

76

Avant insertion Insertion de la valeur 75 dans un arbre B+

4.2.3

Suppression

Lalgorithme dpend de la position de la valeur ` supprimer : e a Si le nombre dindex est suprieur ` d, on supprime la valeur du nud que lon rorganise. e a e Si la valeur est situe dans une feuille et que le nombre dindex quelle contient est gal ` d, on recombine e e a les feuilles voisines. Si lindex est dans un nud non feuille, on fait la suppression dans la feuille associe et on rorganise e e rcursivement les nuds suprieurs. Il est possible ainsi de supprimer la racine ; ce qui a poour consquence e e e ladoption dune nouvelle racine au niveau infrieur et la diminution dun niveau pour larbre. e

50

66

120

260

68

120

260

66

91

105

68

91

105

66

68

75

68

75

Suppression de la cl 66

51

Scurit des donnes e e e


1
1.1

Rsistance aux pannes e


Mmoire s re e u

Toutes sortes de pannes peuvent survenir lors de lexcution dune transaction : e des erreurs logicielles, bugs, oubli du commit, mauvaise analyse du traitement, . . . des pannes du serveur ou de la machine client des pannes de rseau (coupure, saturation, . . .) e des pannes de disque (crash, panne du contrleur). o Le SGBD doit garantir la cohrence de la base et latomicit des transactions. Il doit donc assurer dirents e e e niveaux de protection, de faon ` garantir la sauvegarde des donnes quel que soit lenvironnement de traitement. c a e Cette prservation est assure par les protocoles dcriture bass sur la notion de mmoire sre mis en uvre par e e e e e u le moyen de la journalisation des transactions.

1.2

Journalisation

Toutes les oprations dacc`s ` la base sont enregistres dans plusieurs journeaux, selon un principe dcritures e e a e e en miroir. Dans un cadre professionnel, il est prfrable que les direntes versions du journal soient stockes ee e e dans des disques dirents abrits dans des sites dirents, de faon ` se mettre ` labri des accidents, incendies, e e e c a a sabotages, . . .Il est bon galement de disposer dune sauvegarde sur des supports non magntiques (papier, cdrom). e e Les direntes oprations de la vie des transactions enregistres dans le journal sont entrelaces du fait de e e e e la concurrence. Elles sont donc distingues par un identicateur de transaction qui peut tre une estampille. On e e peut ainsi trouver, pour une transaction : <Ti, <Ti, <Ti, <Ti, <Ti, <Ti, <Ti, debut de transaction> lecture, variable, valeur> ecriture, variable, nouvelle valeur, ancienne valeur> commit> rollback> point de controle> fin de transaction>

Latomicit de la transaction est prise en compte de la faon suivante : Au moment ou est atteint ltat de e c e validation partielle ou logique, le gestionnaire de la transaction assure la sauvegarde des oprations en mmoire e e sre. Les critures dans le journal sont assures par un processus particulier qui envoit un acquittement lorsque u e e tout est enregistr. Le gestionnaire de transaction eectue alors la sauvegarde eective des donnes (commit) en e e les transmettant au gestionnaire des donnes qui ralise les critures sur les disques de la base. e e e

52

Journal read write Redo Undo Ecritures finales Commit read(x) write(x) gd_read(x) gd_write(x)

GT

GD
BD

Gestionnaire de la transaction Buffer de la transaction

Gestionnaire des donnes

Lorsquune panne survient au cours du droulement dune transaction, elle peut intervenir avant ou apr`s e e son point de validation totale. Les journaux sont alors lus. Si le commit est enregistr dans le journal, cest que e la transaction sest achev normalement. Il sut de reprendre lensemble des oprations enregistres (processus e e e redo) pour restaurer les donnes. Si ce mme processus de rcupration tombe en panne, lopration peut-tre e e e e e e reprise autant de fois que ncessaire : elle est idempotente e Par contre, si le commit est absent du journal, il faut restaurer les donnes dans leur tat antrieur ` la e e e a transaction (processus undo). L` encore, il sut de reprendre le journal autant de fois que ncessaire, ce processus a e tant lui aussi idempotent. La plupart du temps, il nest pas ncessaire deectuer la lecture de la totalit du e e e journal qui est souvent volumineux. Les oprations undo et redo peuvent parfaitement tre menes ` partir dun e e e a point de contrle que le programme met en place entre deux phases indpendantes du traitement. o e

2
2.1

Scurit e e
droits et rles o

La scurit est assure ` plusieurs niveaux. La connexion ` la base peut-tre contrle par un mot de passe. e e e a a e oe SQL permet de plus de dnir dirents niveaux dacc`s. e e e Les droits sont assurs globalement et pour chaque objet de la base : e grant connect|resource|DBA to uid identified by pswd Le mot-cl connect ne donne que des droits de lecture, resource permet de crer et de modier ses objets, e e et DBA correspond aux droits de ladministrateur qui peut tout (ou presque) se permettre. Les manipulations dobjet sont assures par : e grant select|insert|update|delete|index|cluster|alter|all on objet to utilisateur [with grant option] Ces droits sont donns par le propritaire ` un usager, avec ventuellement la possibilit pour ce dernier de le e e a e e transmettre ` son tour (clause with grant option). a on peut trouver fastidieux de dlivrer des droits identiques ` des utilisateurs dirents. Il para plus simple e a e t de dnir des types de droits que lon aecte ensuite aux bnciaires : cest le concept de rle. On peut ainsi e e e o trouver la squence suivante (Oracle) : e create role R; grant select, update on EMP to R; grant R to toto; revoke R from toto; drop role R;

2.2
2.2.1

Protection des donnes e


Utilisation de vues

La vue est un moyen ecace de protection des donnes et de restriction des acc`s. Elle permet de limiter la e e vision des donnes au niveau des lignes et des colonnes de la seule vue. En r`gle gnrale, un service informatique e e e e qui a le souci de protger ses donnes sensibles ne doit jamais donner ` un utilisateur lacc`s directement aux e e a e

53

tables, mais nutiliser ` cet eet que des vues. Ladministrateur doit cependant tre attentif aux limitations de a e mises ` jour ` travers une vue qui peuvent rendre impossible certains types de traitements. a a

2.3

Procdures stockes e e

Une autre possibilit dassurer une scurit optimale est dans ce cas lutilisation oblige de procdures stockes e e e e e e (PL/SQL). Celles-ci, proprit de ladministrateur, bncient de ses droits, mais ne permettent quun traitement ee e e spcique. Lutilisateur disposant dun droit dexcution pourra agir sur la base selon le mode autoris sans mme e e e e avoir ` en conna la moindre caractristique (nom des tables et des vues manipules). a tre e e

2.3.1

Niveaux de scurit e e

Il existe plusieurs normes (NCSC aux USA, ITSEC en europe). Celles-ci dnissent des niveaux de scurit e e e en ce qui concerne les donnes et les programmes dapplication (ou les utilisateurs) ; par exemple, pour NCSC, e par niveau dcroissant : e top-secret (ts) secret (s) condential (c) unclassied (u) La lecture des donnes peut se faire pour des donnes de niveau infrieur ou gal ` celui du programme ou de e e e e a lutilisateur. Lcriture ne peut concerner que les donnes de mme niveau. Ce dernier est prcis dans les tables e e e e e par un attribut supplmentaire. e

2.3.2

Cryptage

Ce dernier reste en France limit par la loi, bien quon trouve des cartes de cryptage ` un prix modique, et e a des algorithmes puissants (PGP) gratuitement sur Internet. Il est soumis ` autorisation aupr`s du minist`re des a e e armes et ne concerne que certains services dtat ainsi que des banques pour certaines oprations condentielles. e e e Le cryptage est cependant admis pour la transmission de mots de passe et pour les signatures lectroniques. e Lusage du tiers de conance est aussi inscrit dans la loi. Une socit peut crypter ses donnes ` condition de ee e a coner la cl du cryptage ` un organisme de conance agr par le minist`re des armes. e a ee e e

2.3.3

La recherche par infrence e

Elle peut tre puissamment ralise ` laide doutils conus pour les services de renseignement militaires, e e e a c aujourdhui largement utiliss dans le civil. Ces logiciels assurent des fonctions despionnage conomique contre e e lequel certaines entreprises doivent se protger. e Parmi ces outils, citons Topic, cr par la CIA, L4U/Ta par le DGSE, Spirit dvelopp par le CEA, Dataview ee ga e e du centre de recherches rtrospectives de Marseilles, Pricl`s conu pour la marine, Technology Watch dIBM. e e e c Certains font de la navigation automatique dans Internet, dautres consultent des bases de donnes ` la recherche e a dinformations quils recoupent et synthtisent. e Cette recherche dinformation (Data Mining) commence (1996) ` constituer une activit spcique en infora e e matique et touche ` tous les domaines (banques, nance, industrie, recherche, sant,. . .) a e

54

Вам также может понравиться