Vous êtes sur la page 1sur 204

1

Plan du Cours dInitiation


3. Quest-ce quune BD ? Notion de SGBDR. 4. Modliser conceptuellement la BD 5. Modliser mathmatiquement la BD 6. Comprendre lAlgbre Relationnelle 7. Se familiariser avec SQL, le langage informatique 8. Aller plus loin avec SQL et lAlgbre Relationnelle 9. Apprhender la notion de transactions et de vues 10.Comprendre les subtilits dimplmentation physique
2

INTRODUCTION

Quest-ce quune BD ? Notion de SGBDR.


3

Dupont
Symptomes : y Turlututu : sqj Symptomes : y Turlututu : sdd Analyses : xxx

Dupond
Turlututusqjsk Symptom: yyyy Analyses xxxx Turlututudhjsd Analyses :xx

LAPPROCHE SYSTEMES DE FICHIERS

Duhpon
Symptomes : yy Analyses : xxxx Symptomes : yy

Duipont
Turlututu : sq Symptomyyyy Analysesxxxx Turlututudhjsd

Caractristiques
Plusieurs applications
plusieurs formats plusieurs langages

Problmes
Difficults de gestion Incohrence des donnes Cots levs Maintenance difficile Gestion de pannes ??? Partage des donnes ??? Confidentialit ???

Redondance de donnes Pas de facilit dinterrogation


Question dveloppement

Redondance de code

Lapproche Bases de donnes


Modlisation des donnes
Eliminer la redondance de donnes Centraliser et organiser correctement les donnes Plusieurs niveaux de modlisation Outils de conception

Logiciel Systme de Gestion de Bases de Donnes


Factorisation des modules de contrle des applications
- Interrogation, cohrence, partage, gestion de pannes, etc

Administration facilites des donnes

I- Indpendance Physique X - Standards II- Indpendance Logique III Langage de manipulation

IX - Gestion de la confidentialit VIII - Concurrence daccs VII - Gestion des pannes VI - Gestion de la cohrence

BD

IV - Gestion des vues V - Optimisation des questions

Modlisation du rel
Rel Modle conceptuel Modle logique Modle Physique
Indpendant du modle de donnes Indpendant du SGBD Dpendant du modle de donnes Indpendant du SGBD
IMPLEMENTATION

Mdecin

effectue

Visite

Codasyl

Relationnel Objet

XML

Dpendant du modle de donnes Dpendant du SGBD

Organisation physique des donnes Structures de stockage des donnes Structures acclratrices (index)

La manipulation se fait via un langage dclaratif


La question dclare lobjectif sans dcrire la mthode Le langage suit une norme commune tous les SGBD SQL : Structured Query Langage

Syntaxe (aperu !) Select Nom, Description From Mdicaments Where Type = Aspirine

1970 : bases thoriques au modle relationnel : Algbre de Codd 1980 : Logiciel de SGBDR commercialiss : ORACLE, SYBASE, SQL SERVER et Access Logiciels libres : mysql; postgresl Actuellement, en germe, SGBDO (Oracle 8 : SGBDOR), Multimdia, Data Mining

10

Structuration en trois couches :


Terminaux Programmes dapplication SGBD externe SGBD Interne
Gestionnaire de Fichiers et Mmoires Secondaires

11

Description des donnes en trois niveaux dabstraction Schma conceptuel :


description des donnes dune organisation en terme de types dobjets et de liens logiques indpendants de toute reprsentation en machine, correspondant une vue canonique globale de lorganisation modlise -> Schma ER -> Administrateur Organisation

Schma interne :
description des donnes dune base en termes de reprsentation physique en machine, correspondant une spcification des structures de mmorisation et des mthodes de stockage et daccs utilises pour ranger et retrouver les donnes sur disque -> INDEX -> Administrateur BD

Schma externe :
description dune partie de la base de donnes, extraite ou calcule partir de la base physique, correspondant la vision dun programme ou dun utilisateur, donc un arrangement particulier de certaines donnes -> VUES -> Administrateur Applications 12

5 tapes pour llaboration des schmas conceptuels et internes (coeur de la BDR) 1. Perception du monde rel et capture des besoins
Entretiens -> ensemble de vues ou schmas externes

3. Elaboration du schma conceptuel


ensemble de vues ou schmas externes -> intgration dans un schma global

5. Conception du schma logique (automatisable)


schma global -> ensemble de tables

7. Affinement du schma logique


ensemble de tables -> ensemble de tables regroupes ou dcomposes

9. Elaboration du schma physique


->ensemble de tables regroupes ou dcomposes indexes
13

MODELE CONCEPTUEL

Modliser conceptuellement la BD
14

Objectifs : Prendre en main la mthodologie de conception MERISE


Apprendre les dfinitions essentielles des objets manipuls par le modle conceptuel : entit, attribut, identifiant, relation, dimension, cardinalit. Etre capable dapprhender la mthodologie de passage dun nonc en langage naturel un modle conceptuel, avec la part darbitraire inhrente.

15

Plusieurs noms dans le cadre dun SGBDR : Modles Entits-Associations, Schma ER, MCD Ncessit dune mthodologie et dun cadre de conception : MERISE, UML

Rel Modle conceptuel Modle logique Modle Physique


Indpendant du modle de donnes Indpendant du SGBD Dpendant du modle de donnes Indpendant du SGBD
IMPLEMENTATION

Mdecin

effectue

Visite

Codasyl

Relationnel Objet

XML

Dpendant du modle de donnes Dpendant du SGBD

Organisation physique des donnes Structures de stockage des donnes Structures acclratrices (index)

16

Le modle de donnes dit

Entits-Relations (MERISE) ou Entits-Associations


Champs, attributs, colonnes

Relation, table, schma

Id-D 1 2 3 .

Nom Dupont Durand Masse ..

Prnom Pierre Paul Jean

Entit = objet du monde rel, modle dobjet, classe. Ex :un client pour une socit. Attributs (caractristiques ou proprits)= ils dcrivent les entits;

Tuples, lignes ou n-uplets, occurrence, instance

17

Identifiant = ensemble dattributs permettant de dterminer une et une seule occurence dune entit;

Docteurs
Id-D 1 2 3 . Nom Dupont Durand Masse .. Prnom Pierre Paul Jean Id-V

Prescriptions
Ligne 1 2 1 2 3 . Id-M 12 5 8 12 3 . Posologie 1 par jour 10 gouttes 2 par jour 1 par jour 2 gouttes

Visites
Id-D 1 1 2 2 Id-P 2 1 2 3 Id-V 1 2 3 4 Date 15 juin 12 aot 13 juillet 1 mars Prix 250 180 350 250

1 1 2 2 2 .

Patients
Id-P 1 2 3 4 . Nom Lebeau Troger Doe Perry . Prnom Jacques Zoe John Paule . Ville Paris Evry Paris Valenton . Id-M 1 2 3 .

Mdicaments
Nom Aspegic 1000 Fluisdal Mucomyst .. Description .. .. .. ..

18

Relation = reprsente les liens entre les entits; contrairement aux entits, les relations nont pas
dexistence propre; mais comme les entits, elles sont caractrises par un nom et dventuels attributs.

Reprsentation graphique de ces schmas: entits par rectangles; relations par ellipses; les attributs identifiants sont souligns;
EMPLOYE Code_emp Nom Prenom Date_nais CAMION Immatriculation Poids_vide Annee_mec

Conduire

19

Dimension (ou degr) = nombre dentits impliques dans la relation; Cardinalit (maximale) = nombre de participations maximal dune entit une relation (une relation
binaire peut tre de cardinalit I-I, I-N ou M-N);

-> traduit les rgles et contraintes propres un processus mtier -> approche franaise (MERISE) : nombre de participations dune entit une relation -> approche anglosaxone : nombre de correspondants dune entit au sein dune relation Cette distinction a une importance pratique dans le cas de relation n-aire (avec n>2)
EMPLOYE Code_emp Nom Prenom Date_nais 1 N

travaille

SERVICE code Etage Nom

20

Un modle EER enrichi: Cardinalit minimale;


EMPLOYE Code_emp Nom Prenom Date_nais 0-1 1-N

Conduire

CAMION Immatriculation Poids_vide Annee_mec

Gnralisation= description dune entit diffrents niveaux dabstraction;


EMPLOYE Code_emp Nom Prenom Date_nais

CAMION Immatriculation 1-1

Conduire

1-N

Poids_vide Annee_mec

ADMINISTRATIF Service

CHAUFFEUR Permis Visite_med

21

PRODUIT code_produit designation prix

CLIENT Code_client

1-N

Commande
quantite derniere_date

1-N

nom adresse

1-N
FOURNISSEUR Code_fournisseur nom adresse

Certains principes peuvent indiquer quune relation ternaire 1-N-N manque de cohrence et que lon ne devrait trouver dans un MCD que des relations ternaires N-N-N (valable pour toutes relations n-aire avec n>2). Ce principe permet de simplifier la suite du processus, et indique quune telle relation devrait pouvoir tre dcouper en deux relations binaires par exemple.
22

La dmarchepour passer de lnonc du problme au MCD:

. Dterminer la liste des entits; . Pour chaque entit: a) Etablir la liste de ses attributs; b) Parmi ceux-ci, dterminer un identifiant; . Dterminer les relations entre les entits; . Pour chaque relation: a) Dresser la liste des attributs propres la relation; b) Vrifier la dimension (binaire, ternaire); c) Dfinir les cardinalits (I-I, I-N, M-N); . Vrifier le schma obtenu, notamment: a) Supprimer les transitivits; b) Sassurer que le schma est connexe;

23

A toute situation modliser, peuvent correspondre plusieurs schmas diffrents, avec leurs avantages et leurs inconvnients.

Qualit dune modlisation ER ou ERR:


lexpressivit, la minimalit, la lisibilit et la simplicit.

24

Ne pas surestimer la dimension dune relation !


PRODUIT code_produit designation prix CLIENT Code_client

1-N

Commande
quantite derniere_date

1-N

nom adresse

ternaire ou quaternaire ?
Commande
quantite

1-N
FOURNISSEUR Code_fournisseur nom adresse date

DATE

25

Ne pas attribuer une relation les attributs des entits participantes ou inversement !
PRODUIT code_produit designation prix PRODUIT code_produit designation

1
PROVIENT

N
PROVIENT prix

N
FOURNISSEUR Code_fournisseur nom adresse

N
FOURNISSEUR Code_fournisseur nom adresse

26

Ne pas exprimer des relations redondantes ! N 1 TRAVAILLE


EMPLOYE R

PROJET

1
RATTACHER GERER DEPARTEMENT

Ne pas se tromper de niveau de discours !


-> Cas dagences ou dune agence

Ne pas confondre les concepts de donnes et de traitement !


-> Cas de Demander et Facturer

Ne pas introduire dattribut calcul !

27

Le conflit entit contre attribut


-> Cas du pays

Le conflit entit contre association


-> Cas de la commande, de la facture
HOMME HOMME

0-1
MARIER

?
MARIAGE

0-1
FEMME FEMME

Le conflit gnralisation contre attribut


PERSONNE PERSONNE sexe HOMME

FEMME

28

Cas pratique: gestion des hpitaux dun dpartement; Enonc: La direction dpartementale dIlde de France souhaite informatiser la gestion des hpitaux du dpartement. Chaque hpital a des activits de soin dans les services mdicaux et des activits de recherche dans les laboratoires. Les mdecins employs sont obligatoirement rattachs un seul hpital. Ils ont le choix entre trois types de fonctions: consultant indpendant, mdecin praticien, mdecin chercheur. Les consultants indpendants ne sont rattachs aucune structure interne de laboratoire ou de service. Les praticiens sont rattachs un seul service. Les chercheurs sont rattachs un laboratoire unique. Les fonctions de praticien et de chercheur peuvent tre cumules. Lorsquun mdecin est consultant indpendant ou mdecin praticien, il se voit confier la responsabilit dun ou plusieurs patients. Dans certains cas ncessitant des traitements complexes, un mme patient peut tre suivi par plusieurs mdecins. Vous devez concevoir le schma de la base de donnes dIle de France en tenant compte de ces hypothses. Les hpitaux, en plus de leurs nom et adresse, sont identifis au moyen dun code. De mme, chaque service hospitalier et chaque laboratoire sont dcrits par un code didentification et un nom. On connat, pour chaque mdecin, son numro matricule, ses coordonnes (nom, prnom, sexe, adresse, date de naissance) et sa spcialit (urologie, gyncologie, griatrie, pdiatrie, etc.). Enfin, chaque patient possde un numro de scurit sociale, un nom, un prnom, une adresse, une date de naissance. Les fonctions que le systme devra effectuer sont: - La gestion dactivit des mdecins; - La gestion du suivi des patients; - Les statistiques dpartementales (nombre de laboratoires par domaine, nombre de mdecins, etc.). Construire le schma ER modlisant cette situation, le justifier en fonction de vos hypothses et indiquer le contenu des entits et relations. Constater les insuffisances du modle ER pour reprsenter ces informations. Proposer plusieurs modlisations EER de cette situation et les justifier. Analyser leurs qualits compares. 29

Schma EER
30

Schma EER avec 4 catgories de mdecins


31

Schma EER avec gnralisations

32

Schma EER avec gnralisations 2 niveaux

33

Bibliographie
1. Bases de Donnes, Georges Gardarin, Ed. Eyrolles, Best Of Eyrolles, 19 euros en 2004 :
ouvrage de rfrence en France, complet mais trs orient vers la thorie et finalement peu pdagogique.

3.

Conception des bases de donnes relationnelles en pratique, J. AKOKA et I. COMYN, Ed. Vuibert Informatique :
ouvrage trs pratique avec exercices et corrigs.

34

MODELE RELATIONNEL

Modliser mathmatiquement la BD
35

Objectifs : Apprendre les dfinitions essentielles des objets manipuls par


le modle relationnel : domaine, relation, schma dune relation, attribut et tuple, contrainte dintgrits, cls primaire et trangre, schma relationnel. Etre capable dappliquer la procdure de passage du schma conceptuel (diagramme) au schma relationnel (expression formelle).

36

Rel Modle conceptuel Modle logique Modle Physique


Indpendant du modle de donnes Indpendant du SGBD Dpendant du modle de donnes Indpendant du SGBD
IMPLEMENTATION

Mdecin

effectue

Visite

Codasyl

Relationnel Objet

XML

Dpendant du modle de donnes Dpendant du SGBD

Organisation physique des donnes Structures de stockage des donnes Structures acclratrices (index)
37

Ncessit de rendre oprationnel le schma conceptuel laide dune reprsentation logique, par exemple relationnelle Conue par E.F. Codd (1970s): dfinition rigoureuse des concepts fonde sur la thorie mathmatique des relations, lie celle des ensembles : , ,

38

Domaine =
ensemble de valeurs dfini en extension (par exemple lensemble des grades dun Salari) ou en intention ( par exemple le salaire dun Salari).
Exemples:
ENTIER REEL CHAINES DE CARACTERES EUROS SALAIRE = {4 000..100 000} COULEUR= {BLEU, BLANC, ROUGE} POINT = {(X:REEL,Y:REEL)} TRIANGLE = {(P1:POINT,P2:POINT,P3:POINT)}

Notion de granularit de linformation: voir lexemple dune date ou dune adresse.


39

Produit cartsien =
Le produit cartsien de plusieurs domaines D1x D2x ... x Dn est lensemble des tuples (N-UPLETS) <V1,V2,....Vn> tels que Vi Di
Exemple: D1 = {Bleu,Blanc,Rouge} D2 = {Vrai, Faux} D1xD2 = {(Bleu,Vrai),(Bleu,Faux),(Blanc,Vrai),}

Bleu Bleu Blanc Blanc Rouge Rouge

Vrai Faux Vrai Faux Vrai Faux

40

Relation ou Table =
sousensemble du produit cartsien dune liste de domaines, non ncessairement tous distincts = tableau deux dimensions

Exemple : la relation CoulVins issue du produit cartsien D1xD2 D1xD2

Bleu Bleu Blanc Blanc Rouge Rouge

Vrai Faux Vrai Faux Vrai Faux

CoulVins

Coul Bleu Blanc Rouge

Choix Faux Vrai Vrai


41

VISION TABULAIRE DU RELATIONNEL

Une relation est une table deux dimensions Une ligne est un tuple

Un nom est associ chaque colonne afin de la reprer indpendamment de son numro d'ordre

Attribut ou Colonne =
sous-ensemble de valeurs dun domaine

Tuple ou n-uplet ou t-uple ou Ligne =


ensemble de n valeurs prises dans les n domaines considrs

Degr dune relation =


nombre de colonnes ou de domaines considrs
42

Schma dune relation =


nom de la relation suivi de la liste de ses attributs et de la dfinition de leurs domaines, par exemple la table SALARIE est caractris par le schma relationnel suivant:
SALARIE(matricule: entier, nom: chane de caractres, grade: {employ, agent de matrise, cadre},salaire: [7000, 24000] )

ou le plus souvent
SALARIE(matricule, nom, grade, salaire)

Schma relationnel =
ensemble des schmas des relations dune base de donnesou ensemble des tables
43

Intgrit Logique ou Cohrence des donnes ->assure par la vrification par le SGBD dun ensemble de
contraintes dintgrit ->Objectif : Dtecter les mises jour errone -> Avantages :
simplification du code des applications scurit renforce par l'automatisation mise en commun des contraintes

-> Ncessite :
un langage de dfinition de contraintes d'intgrit la vrification automatique de ces contraintes
44

Contrainte dintgrit =
expression logique qui doit tre vraie, tout moment, dans une base de donnes, par exemple deux employs ne peuvent avoir le mme matricule; Exemples
Contrle sur les donnes lmentaires
Contrle de types: Nom alphabtique Contrle de valeurs: Salaire mensuel entre 1 et 10kEuros

Contrle sur les relations entre les donnes


Relations entre donnes lmentaires: Prix de vente > Prix d'achat Relations entre objets:
Un lecteur doit tre inscrit sur une seule liste lectorale
45

Contrainte de domaine
restriction de lensemble des valeurs possibles dun domaine

Contrainte de clsous-ensemble minimal de colonnes tel que la


table ne puisse contenir deux lignes ayant les mmes valeurs pour ces colonnes

Contrainte obligatoire
un attribut doit toujours avoir une valeur

Contrainte dintgrit rfrentielle ou dinclusion note


elle lie deux ensemble de colonnes de deux tables diffrentes

46

Cl
Groupe dattributs minimum qui dtermine de faon unique un tuple dans une relation
Exemples: NumScuSociale pour une PERSONNE

Contrainte dentit
Toute relation doit possder au moins une cl documente

47

Cl Etrangre
Groupe dattributs devant apparatre comme cl dans une autre relation
Exemples:
SALARIE(matricule, nom, grade, salaire, Code_Filiale) FILIALE(Code_Filiale, nom, adresse)

Les cls trangres dfinissent les contraintes d'intgrit rfrentielles Lors d'une insertion, la valeur des attributs doit exister dans la relation rfrence Lors d'une suppression dans la relation rfrence les tuples rfrenant doivent disparatre Elles correspondent aux liens entit-association obligatoires

48

Docteurs
Id-D 1 2 3 . Nom Dupont Durand Masse .. Prnom Pierre Paul Jean Id-V

Prescriptions
Ligne 1 2 1 2 3 . Id-M 12 5 8 12 3 . Posologie 1 par jour 10 gouttes 2 par jour 1 par jour 2 gouttes

Visites
Id-D 1 1 2 2 Id-P 2 1 2 3 Id-V 1 2 3 4 Date 15 juin 12 aot 13 juillet 1 mars Prix 250 180 350 250

1 1 2 2 2 .

Patients
Id-P 1 2 3 4 . Nom Lebeau Troger Doe Perry . Prnom Jacques Zoe John Paule . Ville Paris Evry Paris Valenton . Id-M 1 2 3 .

Mdicaments
Nom Aspegic 1000 Fluisdal Mucomyst .. Description .. .. .. ..

49

Schma dune relation (bis) =


nom de la relation suivi de la liste des attributs, de la dfinition de leurs domaines et de lensemble des contraintes dintgrit associes cette table
exemple
SALARIE(matricule: entier, nom: chane de caractres, grade: {employ, agent de matrise, cadre},salaire: [7000, 24000] )

ou le plus souvent
SALARIE(matricule, nom, grade, salaire, Code_Filiale) FILIALE(Code_Filiale, nom, adresse) SALARIE[Code_Filiale]

FILIALE[Code_Filiale]
50

Diagramme des Liens


SALARIES MATRICULE CODE_FILIALE NOM GRAD E SALAIRE

FILIALE

CODE_FILIALE NOM

ADRESSE

51

Concepts Descriptifs : Bilan


RELATION ou TABLE ATTRIBUT ou COLONNE DOMAINE ou TYPE CLE CLE ETRANGERE
52

Questions ?

INTENTION ET EXTENSION

Un schma de relation dfinit l'intention de la relation Une instance de table reprsente une extension de la relation

Thorie de la normalisation =
dfinition formelle de la qualit des tables au regard du problme pos par la redondance des donnes et au moyen de la notion de dpendance fonctionnelle
53

Dpendance fonctionnelle =
soit une table relationnelle T(A1,A2,,An), soient X et Y deux sous-ensembles de colonnes de T, on dit que X dtermine fonctionnellement Y (on note X->Y) si, un n-uplet de valeurs de X, correspond au plus un n-uplet de valeurs de Y

Cl = sous-ensemble minimal X de colonnes de T dterminant fonctionnellement toutes les colonnes de T


54

Forme Normale =
plus une table est normalise, moins elle comporte de redondances et donc de risques dincohrence:
1FN: la table ne contient que des attributs atomiques(code postal et ville); 2FN: 1FN + il nexiste pas de dpendance fonctionnelle entre une partie dune cl et une colonne non cl de la table. Autrement dit toute colonne dpend de toute la cl. 3FN: 2FN + il nexiste aucune dpendance fonctionnelle entre les colonnes non cl

Algorithme de Bernstein=
algorithme permettant partir de la seule connaissance des dpendances fonctionnelles entre attributs reprsentatives dune situation de gnrer automatiquement un schma relationnel en troisime forme normale
55

Une dmarchepossible MC -> MR


Rgle 1. Toute entit est traduite en une table relationnelle dont les caractristiques sont les suivantes : Le nom de la table est le nom de lentit ; La cl de la table est lidentifiant de lentit ; Les autres attributs de lentit forment les autres colonnes de la table.

HOPITAL(code_hopital, nom_hopital,adresse_hopital)

HOPITAL code_hopital nom_hopital adresse_hopital

CREATE TABLE HOPITAL( code_hopital INT PRIMARY KEY, nom_hopital CHAR(10), adresse_hopital CHAR(30)) 56

Rgle 2. Toute relation binaire M-N est traduite en une table relationnelle dont les caractristiques sont les suivantes : Le nom de la table est le nom de la relation ; La cl de la table est forme par la concatnation des identifiants des entits participants la relation ; Les attributs spcifiques de la relation forment les autre colonnes de la table ; Une contrainte dintgrit rfrentielle est gnre entre chaque colonne cl de la nouvelle table et la table dorigine ;

MEDECIN(num_matricule, nom_medecin,adresse_medecin,specialite) PATIENT(num_secu_sociale, nom_patient,prenom,adresse_patient,date_naissance) CONSULTE(num_matricule, num_secu) CONSULTE[num_matricule] MEDECIN[num_matricule]

CONSULTE[num_secu] MEDECIN[num_secu_sociale]

PATIENT num_secu_sociale nom_patient prenom adresse_patient date_naissance

CONSULTE num_matricule num_secu

MEDECIN Num_matricule nom_medecin adresse_medecin specialite

57

Rgle 3. toute relation binaire I-N est traduite : soit par un report de cl : lidentifiant de lentit participant la relation ct N est ajout comme colonne supplmentaire la table reprsentant lautre entit. Cette colonne est parfois appele cl trangre. Le cas chant, les attributs spcifiques la relation sont eux aussi ajouts la mme table ; soit par une table spcifique dont les caractristiques sont les suivantes : 1. le nom de la table est le nom de la relation ; 2. la cl de la table est lidentifiant de lentit participant la relation ct 1 ; 3. les attributs spcifiques de la relation forment les autres colonnes de la table ; de plus, une contrainte dintgrit est gnre ;

HOPITAL(code_hopital, nom_hopital,adresse_hopital) LABORATOIRE(code_labo,nom_labo,code_hopital)

HOPITAL code_hopital nom_hopital adresse_hopital

LABORATOIRE code_labo nom_labo code_hopital

CREATE TABLE LABORATOIRE( code_labo INT PRIMARY KEY, nom_labo CHAR(10), 58 code_hopital INT REFERENCES HOPITAL(code_hopital))

Rgle 4. Toute relation binaire I-I est traduite, au choix, par lune des trois solutions suivantes : Fusion des tables des entits quelle relie ; Report de cl dune table dans lautre ; Cration dune table spcifique reliant les cls des deux entits ; De plus, deux contraintes dintgrit rfrentielle sont gnres ; Rgle 5. Toute relation ternaire ou plus est traduite par une table spcifique ;

Rgle 6. Toute relation rcursive est considre comme une relation binaire. Sa traduction dpend donc du type de cette relation binaire (I-I, I-N ou MN) et obit lune des rgles 2,3 ou 4 ;

59

Rgle 7. Toute gnralisation E de n entits E1, E2, , En peut tre traduite au choix par lune des trois solutions suivantes : La cration dune seule table reprsentant lentit gnrique E et intgrant tous les attributs des entits spcifiques ; La cration de n tables reprsentant les entits E1, E2, En qui hritent de lensemble des attributs et des relations de lentit gnrique E; La cration conjointe des tables E, E1, E2, En relies par des relations I-I (voir rgle 4) ; Rgle 8. Vrifier le schma relationnel obtenu au regard des dpendances fonctionnelles existant entre les attributs pour vrifier que lensemble des relations sont de type 3FN ;

60

Les erreurs ne pas commettre:


Sens du report de cl pour les relations 1-N; Oubli de report des attributs spcifiques des relations 1-N; Difficult de lidentification des ternaires ou plus; Rpercussion des erreurs de modlisation conceptuelle;

61

Ceci est une mthode, il en existe beaucoup dautres qui parfois entreront en contradiction apparente avec celle-ci, notamment sur la gestion des cardinalits minimales pour le passage Conceptuel-> Relationnel. Constituer un bon schma conceptuel est une affaire avant tout de bons sens. Si le schma conceptuel est cohrent, on obtient sans aucun doute un schma relationnel au niveau minimum de la troisime forme normale. La thorie de la normalisation est surtout utile quand on reprend une base qui existe dj et quil faut essayer de la rparer. Dans ce cas, faire la liste des dpendances fonctionnelles et appliquer lalgorithme de type Bernstein peut tre une solution pour retrouver la cohrence. Essayer de retrouver le modle conceptuel est aussi une faon de procder (rtroengineering). Dans tous les cas, ce nest pas une tache facile. Dautant plus, que pour des raisons doptimisation (en temps de rponse essentiellement), on est parfois amen dnormaliser un schma en crant des redondances et au prix dun code un peu plus lourd.
62

EMPLOYE Code_emp Nom Prenom Date_nais

0-1

1-N

Conduire

CAMION Immatriculation Poids_vide Annee_mec

A cause de la cardinalit 0-1, deux possibilits : On la traite comme une relation 1-N :
EMPLOYE(Code_emp,Nom,Prenom,Date_nais,Immatriculation) CAMION(Immatriculation, Poids_vide,Annee_mec)

On la traite comme une relation N-N, pour viter les valeurs nulles dans EMPLOYE pour le champ Immatriculation
EMPLOYE(Code_emp,Nom,Prenom,Date_nais) CAMION(Immatriculation, Poids_vide,Annee_mec) CONDUIRE(Code_emp,Immatriculation)

Du coup, en analysant les dpendances fonctionnelles dans CONDUIRE on saperoit que Code_emp -> Immatriculation, et pour tre en troisime forme normale il faut crire CONDUIRE (Code_emp, Immatriculation). Vous vous apercevez ici que passer du MR au MCD nest pas une tache ais, tant donn que les mthodes de passage du MCD au MR peuvent lgrement diffrer en fonction des pratiques de chaque concepteur.
63

Ce MCD N LOUER date_fin km_parcourus N DATE date_debut

VEHICULE immatriculation marque modele km_init devient :

CLIENT code_client nom adresse tel type

VEHICULE(immat, marque, modle, km_init) CLIENT(code_client,nom, adresse, tel, type) LOUER(immat,code_client,date_debut,date_fin,km_parcouru)

o on a supprim le schma de la relation DATE car il ne contient quun attribut (sa cl)
64

ALGEBRE RELATIONNELLE

65

Langage de requtes
Fondement mathmatique la base de SQL : le langage des Bases de Donnes Traduction automatique des questions dclaratives (qui sont les employs habitant Paris ?) en programmes procduraux. Optimisation automatique des questions
Langage oprationnel, trs utile pour reprsenter les plans dexcution.
66

Oprations Ensemblistes
Ensemble : une dfinition mathmatique pour une collection dobjets ne possdant pas dlments dupliqus. Oprations pour des relations de mme schma
UNION note INTERSECTION note DIFFERENCE note

Oprations binaires pour des relations de schmas diffrents


PRODUIT CARTESIEN : Relation X Relation --> Relation Relation --> Relation JOINTURE : Relation DIVISION : Relation / Relation --> Relation

Oprations algbriques sur une relation PROJECTION note RESTRICTION note

67

Projection
Elimination des attributs non dsirs VINS et suppression des tuples en double; Algorithme de tris !! donc trs coteux en temps de calcul; Relation -> Relation note: A1,A2,...Ap (R) Avec Ai pour i de 1 n une liste de domaines
Cru Mill Rgion Qualit

VOLNAY VOLNAY CHENAS

1983 1979 1983

BOURGOGNE BOURGOGNE BEAUJOLAIS BEAUJOLAIS

A B A C

JULIENAS 1986

(VINS)

Cru,Rgion

Cru,Rgion

Cru VOLNAY CHENAS

Rgion BOURGOGNE BEAUJOLAIS

JULIENAS BEAUJOLAIS
68

Projection
Patients
Id-P 1 2 3 4 Nom Lebeau Troger Doe Perry Prnom Jacques Zoe John Paule Ville Paris Evry Paris Valenton

Patients

Patients

Id-P 1 2 3 4

Nom Lebeau Troger Doe Perry

Prnom Jacques Zoe John Paule

Ville Paris Evry Paris Valenton

Nom et prnom des patients ?

Nom, Prnom

69

Restriction
Obtention des tuples de R satisfaisant un critre Q Relation ->Relation, note Q(R) Q est le critre de qualification de la forme :
(Ai Op Valeur) avec Op ={ =, <, >=, >, <=, !=} Il est possible de raliser des "ou" (union) et des "et" (intersection) de critres simples
VINS Cru Mill Rgion BOURGOGNE BOURGOGNE BEAUJOLAIS BEAUJOLAIS Qualit A B A C

VOLNAY 1983 VOLNAY 1979 CHENAS 1983 JULIENAS 1986

MILL>1983

VINS

Cru Mill JULIENAS 1986

Rgion BEAUJOLAIS

Qualit C

70

Restriction (ou Slection)


Patients
Id-P 1 2 3 4 Nom Lebeau Troger Doe Perry Prnom Jacques Zoe John Paule Ville Paris Evry Paris Valenton

Patients

Patients

Id-P 1 2 3 4

Nom Lebeau Troger Doe Perry

Prnom Jacques Zoe John Paule

Ville Paris Evry Paris Valenton

Patients habitant Paris ?

Ville='Paris'

71

Produit cartsien
Composition de deux relations sur un domaine commun; = Cross Produit Relation2 ->Relation, note R1xR2

72

Jointure
Composition de deux relations sur un domaine commun AVEC UNE CONDITION de jointure !
Relation2 ->Relation,
VINS Cru VOLNAY VOLNAY CHABLIS JULIENAS
LOCALISATION Cru

Mill 1983 1979 1983 1986


Rgion

Qualit A B A C
QualMoy

note R1

R2

Critre de jointure Q, Attributs gaux : Attribut1 = Attribut2 Equi-jointure Comparaison d'attributs : Attribut1 Attribut2 Thta-jointure Sous-ensemble du produit cartsien des deux relations

VOLNAY CHABLIS CHABLIS

Bourgogne Bourgogne Californie

A A B

V. Cru = VINSREG

L. Cru Cru Mill Qualit Rgion QualMoy

VOLNAY VOLNAY CHABLIS CHABLIS

1983 1979 1983 1983

A B A A

Bourgogne Bourgogne Bourgogne Californie

A A A B

73

Jointure
Patients
Id-P 1 2 3 4 Nom Lebeau Troger Doe Perry Prnom Jacques Zoe John Paule Ville Paris Evry Paris Valenton
P.ID_P=V.ID_P

Visites
Id-D 1 1 2 2 Id-P 2 1 2 3 Id-V 1 2 3 4 Date 15 juin 12 aot 13 juillet 1 mars Prix 250 180 350 250

Id-P 1 2 2 3

Nom Lebeau Troger Troger Doe

Prnom Jacques Zoe Zoe John

Ville Evry Evry Paris

Id-D 1 2 2

Id-P 1 2 2 3

Id-V 2 1 3 4

Date 12 aot 15 juin 13 juillet 1 mars

Prix 180 250 350 250

Paris ID_P 1

Patients

Visites
En fait cest une qui-jointure

Patients

Visites

P.ID_P=V.ID_P

Quon peut reprsenter ainsi sans ambigut

ID_P

ID_P

74

Jointure :
Une jointure est une composition dun PRODUIT CARTESIEN et dune RESTRICTION. Attention : R S = RxS !! Trs dangeureux !

En consquence, cest assez coteux en place mmoire et en temps de calcul mais R S QRxS.

Condition

Condition

x
Visites Patients Visites
75

Patients

OUTER JOINs
Remarquez que la plupart des infos sont perdues en appliquant une jointure deux relations. Les jointures externes sont utilises pour afficher tous les nuplets, y compris ceux n'ayant pas de correspondance dans l'une ou l'autre des relations concernes. Une jointure externe conserve les informations qui auraient t perdues, en remplaant les valeurs manquantes avec la valeur NULL. Il existe 3 formes de jointure externe, dpendant des donnes que lon veut conserver. LEFT OUTER JOIN - keep data from the left-hand table RIGHT OUTER JOIN - keep data from the right-hand table 76 FULL OUTER JOIN - keep data from both tables

OUTER JOIN Exemple 1


R ColA ColB A 1 B 2 D 3 F 4 E 5 SColA SColB A 1 C 2 D 3 E 4 R LEFT OUTER JOINR.ColA = S.SColAS A D E B F A D E 1 3 5 2 4 1 3 5 A D E 1 3 4 -

R RIGHT OUTER JOINR.ColA = S.SColAS A D E C 1 3 4 2


77

OUTER JOIN Exemple 2


R ColA ColB A 1 B 2 D 3 F 4 E 5 SColA SColB A 1 C 2 D 3 E 4 R FULL OUTER JOINR.ColA = S.SColAS A D E B F 1 3 5 2 4 A D E C 1 3 4 2

Symbole ?
78

Union
Union ensembliste de deux relations de MEME SCHEMA ! Relation2 ->Relation, note R1 R2

79

UNION
Patients
Nom Lebeau Troger Doe Perry Pr nom Jacques Zoe John Paule Ville Paris Evry Paris Valenton

Malades

Lebeau Troger Doe Perry Ducq Foch Jacques Paris Zoe John Paule Pierre Didier Evry Paris Valenton Paris Paris

Nom Ducq Lebeau Foch

Pr nom Pierre Jacques Didier

Ville Paris Paris Paris

80

Intersection
Intersection ensembliste de deux relations de MEME SCHEMA ! Relation2 ->Relation, note R1 R2

81

INTERSECTION
Patients
Id-P 1 2 3 4 Nom Lebeau Troger Doe Perry Pr nom Jacques Zoe John Paule Ville Paris Evry Paris Valenton

Malades

1 Lebeau

IdM 1 2 3

Nom Lebeau Ducq Foch

Pr nom Jacques Pierre Didier

Ville Paris Paris Paris

Jacques Paris

82

DIFFERENCE
Diffrence ensembliste de deux relations de MEME SCHEMA ! Relation2 ->Relation, note R1 - R2 Attention R1-R2 R2-R1

83

DIFFERENCE
Patients
Nom Lebeau Troger Doe Perry Pr nom Jacques Zoe John Paule Ville Paris Evry Paris Valenton

Malades

Troger Doe Perry Zoe John Paule Evry Paris Valenton

Nom Ducq Lebeau Foch

Pr nom Pierre Jacques Didier

Ville Paris Paris Paris

84

Division

R = R1 / R2 R(X) est la division de R1 (X, Y) par R2 (Y) ssi R contient tous les tuples ( x ) tels que (y) R2, ( x, y ) R1
S# S1 S1 S2 P# P1 P2 P1 P# P1 P2 R2
85

Quels sont les fournisseurs de toutes les pices ?

S# S1 R

R1

Rsum
Oprations de base:
Slection ( ) : RESTRICT(Critre, Relation) ou SELECT
Slectionne un sous-ensemble des lignes dune relation.

Projection ( ) : PROJECT(A1,,An, Relation)


Efface des colonnes dune relation [et limine les doubles].

Produit Cartsien ( X )
Permet de combiner deux relations : PRODUIT(Relation1, Relation2)

Diffrence ( - )
Elimine les tuples de R1 contenus dans R2

Union ( )
Constitue une relation R avec les tuples de R1 et ceux de R2

Oprations additionnelles:
Jointure ( | |) : JOIN(Critre, Relation1, Relation2)
Combinaison de produit cartsien et slection sur colonne comparables (=, <, >, ...)

Intersection
Constitue une relation R avec les tuples appartenant la fois R1 et R2

Division

86

Rsum (bis)
Il y a deux types doprateurs de requtes : Fonds sur la thorie des ensembles :
UNION, INTERSECTION, DIFFERENCE, et CARTESIAN PRODUCT (ou
CROSS PRODUCT ou JOIN PRODUCT)

Spcifiques aux bases de donnes :


SELECT (pas le mme que SQL SELECT), PROJECT, et JOIN.

87

Chaque opration retournant une relation, les oprations peuvent tre composes ! Lalgbre relationnelle est ferme. L'algbre relationnelle est complte
Les cinq oprations de base permettent de formaliser sous forme d'expressions toutes les questions que l'on peut poser avec la logique du premier ordre (sans fonction).

Exemple :
Nom et prnom des buveurs de volnay 1988 ? PROJECT (NOM, PRENOM, RESTRICT(CRU="VOLNAY" et MILL =1988, JOIN(VINS, ABUS, BUVEURS)))
88

SQL
Une requte SQL est une paraphrase d'une expression de l'algbre relationnelle en anglais; Requte lmentaire : SELECT A1, A2, Ap FROM R1, R2, Rk WHERE Q [{UNION |INTERSECT | EXCEPT } ] Smantique du bloc select : PROJECT (A1,A2,Ap, ( RESTRICT (Q, PRODUIT ( R1, R2, , Rk) ) ) )
89

Le SELECT relationnel SELECT is used to obtain a subset of the tuples of a relation that satisfy a select condition.

For example, find all employees born after 1st Jan 1950:
SELECT
dob>'01/JAN/1950'

(employee)

Le PROJECT relationnel

The PROJECT operation is used to select a subset of the attributes of a relation by specifying the names of the required attributes.

For example, to get a list of all employees surnames and employee numbers: PROJECT surname,empno(employee)
90

SELECT and PROJECT


SELECT and PROJECT can be combined together. For example, to get a list of employee numbers for employees in department number 1:

PROJECTempno (SELECT depno = 1 (employee))

Mapping this back to SQL gives: SELECT empno FROM employee WHERE depno = 1;

91

Exemple de plan dexcution

Select From Where and and Patients.Nom, Patients.Prnom Patients, Visites Patients.Id-P = Visites.Id-P Patients.Ville = Paris Visites.Date = 15 juin

Patients

Visites
92

Plan dexcution optimis


Patients Visites Patients


Visites
93

LANGAGE SQL

94

Origines et Evolutions
SQL est driv de l'algbre relationnelle et de SEQUEL (1975) Il a t intgr SQL/DS, DB2, puis ORACLE, INGRES, Il existe trois versions normalises de base, du simple au complexe :
SQL1 86 version minimale SQL1 89 addendum (intgrit) SQL2 (92) langage relationnel complet

Une version SQL3 (99) tendue (objets, rgles) est en intgration La plupart des systmes supportent SQL2 complet

95

Oprations
Oprations de base SELECT, INSERT, UPDATE, DELETE Oprations additionnelles dfinition et modification de schmas dfinition de contraintes d'intgrit dfinition de vues accord des autorisations gestion de transactions

96

SQL1 - 86
LANGAGE DE DEFINITIONS DE DONNEES CREATE TABLE CREATE VIEW LANGAGE DE MANIPULATION DE DONNEES SELECT - OPEN INSERT - FETCH UPDATE - CLOSE DELETE LANGAGE DE CONTROLE DE DONNEES GRANT et REVOKE BEGIN et END TRANSACTION COMMIT et ROLLBACK

97

Conventions mta-syntaxiques A::=B se lit A est redfini par B A|B se lit A ou B [A] se lit A est optionnel A+ est quivalent A[,..,A] Les symboles ::=, | , [, ], + ne figurent jamais dans les expressions SQL

98

SELECT: Forme Gnrale


SELECT <liste de projection> FROM <liste de tables> [ WHERE <critre de jointure> AND <critre de restriction> ] [ GROUP BY <attributs de partitionnement> ] [ HAVING <critre de restriction> ]
[ORDER BY {nom_champ | 1} [ ASC | DESC [, ..., {nom_champN | N} ASC | DESC } ] ] ]

Restriction : arithmtique (=, <, >, , ,) textuelle (LIKE) sur intervalle (BETWEEN) sur liste (ou ensembles issus de SELECT par exemple) (IN) Possibilit de blocs SELECT imbriqus par : IN, EXISTS, NOT EXISTS, ALL, SOME, ANY
99

Fonction et Agrgat
FONCTION et ATTRIBUT CALCULE :
Fonction de calcul en ligne applique sur un ou plusieurs attributs Exemple : SELECT TVA, HT, (1+TVA) *TTC FROM ACHATS

AGREGAT : GROUP BY et HAVING


Partitionnement d'une relation selon les valeurs d'un groupe d'attributs, suivi d'un regroupement en ligne des tuples lis par une fonction de calcul en colonne (SUM, MIN, MAX, AVG, COUNT, ) La clause HAVING permet dappliquer un critre de restriction sur un GROUPE de tuples ! En opposition la clause WHERE qui agit sur chaque 100 tuple.

Exemples d'agrgats
VINS CRU CHABLIS CHABLIS VOLNAY VOLNAY MEDOC MILL 1977 1987 1977 1986 1985 DEGRE 10.9 11.9 10.8 11.2 11.2 QUANTITE 100 250 400 300 200

SELECT AVG(DEGRE) FROM VINS;


AVG DEGRE 11.2

SELECT CRU, SUM(QUANTITE) FROM VINS GROUP BY CRU;

SUM

CRU CHABLIS VOLNAY MEDOC

QUANTITE 350 700 200

On regroupe sur la colonne CRU mais on fait des statistiques sur la colonne QUANTITE !
101

Forme gnrale de la condition de restriction


<search condition> ::= [NOT] <nom_colonne> (constante <nom_colonne>) <nom_colonne> LIKE <modle_de_chane> <nom_colonne> IN <liste_de_valeurs> <nom_colonne> (ALL ANY SOME) <liste_de_valeurs> EXISTS <liste_de_valeurs> UNIQUE <liste_de_valeurs> <tuple> MATCH [UNIQUE] <liste_de_tuples> <nom_colonne> BETWEEN constante AND constante <search condition> AND OR <search condition> avec ::= < = > <> Remarque: <liste_de_valeurs> peut tre dynamiquement dtermine par une requte
102

Soit le schma de base de donnes suivant :


VITICULTEURS (NVT, NOM, PRENOM, VILLE, REGION) VINS (NV, CRU, MILLESIME, DEGRE, PRIX , NVT ) BUVEURS (NB, NOM, PRENOM, VILLE) ABU (NV, NB,DATE,QTE)

103

Exemples de Questions (1) et Expression SQL de la Jointure


Q1: Crus des vins sans doubles.
SELECT DISTINCT CRU FROM VINS;

Q2: Noms des buveurs ayant bus des Beaujolais 97 ou 98


SELECT DISTINCT NOM FROM BUVEURS B, VINS V, ABU WHERE B.NB = ABU.NB AND ABU.NV = V.NV AND CRU LIKE '%BEAUJOLAIS%' AND MILLESIME IN (1987, 1988);
104

Exemples de Questions (2)


Q3 : Noms et prnoms des buveurs de vins dont le cru commence par B, de degr inconnu ou compris entre 11 et 13.
SELECT NOM, PRENOM FROM BUVEURS B, VINS V, ABU A WHERE B.NB = A.NB AND A.NV = V.NV AND CRU LIKE "B%" AND (DEGRE BETWEEN 11 AND 13 OR DEGRE IS NULL);

Q4 : Noms des crus bus par au moins un buveurs.


SELECT DISTINCT CRU /* Le vrai PROJECT*/ FROM VINS V WHERE EXISTS ( SELECT * FROM BUVEURS B, ABU A WHERE B.NB = A.BNB AND A.NV = V.NV );
105

Exemples de Questions (3)


Q5: Calculer le degr moyen pour chaque cru.
SELECT CRU, AVG(DEGRE) FROM VINS GROUP BY CRU;

Q6 : Calculer le degr moyen et le degr minimum pour tous les crus de 94 dont le degr minimum est suprieur 12.
SELECT CRU, AVG(DEGRE), MIN(DEGRE) FROM VINS WHERE MILLESIME = 1994 GROUP BY CRU HAVING MIN(DEGRE) > 12;
106

Requtes imbriques (1)


Q7: Donner les crus des vins qui n'ont jamais t bus
SELECT CRU FROM VINS V WHERE V.NV NOT IN ( SELECT A.NV FROM ABU A ); SELECT CRU FROM VINS V WHERE V.NV <> ALL ( SELECT A.NV FROM ABU A );

107

Requtes imbriques (2)


Q8 : Donner le nom des buveurs qui ont bu tous les vins
/* Appel au concept de Division ensembliste : reformuler la question dclarativement : Donner le nom des buveurs pour lesquels il nexiste pas de vins qui nait pas t bu (ou encore pour lesquels il nexiste pas dassociation ABU) */ SELECT NOM FROM BUVEURS B WHERE NOT EXISTS ( SELECT * FROM VINS V WHERE NOT EXISTS ( SELECT * FROM ABU A WHERE V.NV = A.NV AND A.NB = B.NB) );

Q8bis : Donner le nom des vins qui ont t bu par tous les108 buveur ?

Requtes imbriques (3)


Q9: Donner le numro et le cru des vins bu exactement une fois
SELECT NV, CRU FROM VINS WHERE NV MATCH UNIQUE ( SELECT NV FROM ABU );
109

Requte Union
Q10 :Donner le numro et le cru des vins bus plus de 100 fois ou bien jamais bus
( SELECT V.NV, V.CRU FROM VINS V, ABU A WHERE V.NV = A.NV GROUP BY V.NV HAVING COUNT(A.NV) > 100 ) UNION ( SELECT NV, CRU FROM VINS WHERE NV NOT IN (SELECT NV FROM ABU) );
110

Create Table
CREATE TABLE <relation name> (<attribute definition>+) [{PRIMARY KEY | UNIQUE} (<attribute name>+)] avec : <attribute definition> ::= <attribute name> <data type> [NOT NULL [{UNIQUE | PRIMARY KEY}] ] Exemple : CREATE TABLE VINS ( NV INTEGER PRIMARY KEY CRU CHAR VARYING MILL INTEGER NOT NULL, DEGRE FIXED 5.2 );
111

Commande INSERT
INSERT INTO <relation name> [( attribute [,attribute] )] {VALUES (<value spec.> [, <value spec.>]) |<query spec.>} Exemples
INSERT INTO VINS (NV, CRU, MILLESIME) VALUES (112, (JULIENAS, NULL); INSERT INTO BUVEURS (NB,NOM,PRENOM) SELECT NVT, NOM, PRENOM FROM VITICULTEURS WHERE VILLE LIKE '%DIJON%;

112

Commande UPDATE
UPDATE <relation name> SET <attribute = {value expression | NULL} [<attribute> = {value expression | NULL}] [WHERE <search condition>] EXEMPLE
UPDATE ABUS SET QTE = QTE * 1.1 WHERE ABUS.NV IN SELECT NV FROM VINS WHERE CRU = 'VOLNAY' AND MILLESIME = 1990;

113

Commande DELETE
DELETE FROM <relation name> [WHERE <search condition>] EXEMPLE DELETE FROM ABUS WHERE NV IN SELECT NV FROM VINS WHERE DEGRE IS NULL

114

SQL1 - 89 : Intgrit
Valeurs par dfaut : CREATE TABLE VINS ( NV INT UNIQUE, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2) , NVT INT, PRIX INT DEFAULT 40 ); Contraintes de domaine : SALAIRE INT CHECK BETWEEN 6000 AND 100000
115

SQL1 - 89 : Contrainte rfrentielle


Cl primaire et contrainte rfrentielle : CREATE TABLE VINS ( NV INT PRIMARY KEY, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2) , NVT INT REFERENCES VITICULTEURS, PRIX INT DEFAULT 40 ); Rfrence en principe la cl primaire : celle de VITICULTEURS
116

SQL1 - 89 : Cration de tables


CREATE TABLE <nom_table> (<def_colonne> + [<def_contrainte_table>+]) ;

< def_colonne > ::= <nom_colonne> < type nom_domaine > [CONSTRAINT nom_contrainte < NOT NULL UNIQUE PRIMARY KEY CHECK (condition) REFERENCES nom_table (liste_colonnes) > ] < def_contrainte_table > ::= CONSTRAINT nom_contrainte < UNIQUE (liste_colonnes) PRIMARY KEY (liste_colonnes) CHECK (condition) FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes) > [NOT] DEFERRABLE
117

CREATE TABLE EXPEDITIONS ( numExp INTEGER PRIMARY KEY date_exp DATE, qte QUANTITE, CONSTRAINT refCom FOREIGN KEY numExp REFERENCES COMMANDES (numCom) DEFERRABLE ); L'association d'un nom une contrainte est optionnelle. Ce nom peut tre utilis pour rfrencer la contrainte (ex: messages d'erreurs). DEFERRABLE : vrification de contrainte diffrable ( la fin dune transaction par exemple)

SQL2 (1992)
Trois niveaux distingus :
Entry SQL2 = SQL89 + manques Intermediate SQL2 =Complments relationnels Full SQL2 = Gadgets en plus

119

Entry SQL2
Codes rponses SQLSTATE Renommage des colonnes rsultats Mots cls utilisables entre " " Mta-base normalise (schmas)
120

SQL2 Intermediate : Cration de domaines


CREATE DOMAIN <nom> <type> [valeur] [Contrainte]
<type> ::= CHAR [(n)] VARCHAR [(n)] BIT [VARYING] [(n)] SMALLINT INTEGER NUMERIC [p, [q]] DECIMAL [p, [q]] FLOAT [n] DATE TIME TIMESTAMP INTERVAL <valeur> ::= DEFAULT constante USER NULL CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
121

Exemples de domaine
CREATE DOMAIN cru VARCHAR(20) ; CREATE DOMAIN couleur_vins CHAR(10) DEFAULT 'rouge' ; CREATE DOMAIN date_commande DATE DEFAULT CURRENT_DATE ; CREATE DOMAIN quantite SMALLINT ; Possibilit de crer des domaines avec contraintes : CREATE DOMAINE MONEY IS DECIMAL (5,2) DEFAULT (-1) CHECK (VALUE = -1 OR VALUE > 0) NOT NULL;

SQL2 : Types
Types de donnes date avec oprations :
DATE, TIME et TIMESTAMP Intervalles de temps

Cascade des mises jour :


Suppression en cas d' intgrit rfrentielle avec options
Cascader les suppressions (CASCADE) Rendre nul l'attribut rfrenant (NULLIFY)

Diffrents alphabets et ordres de lettres


123

Traitement des chanes de caractres


expression_caractre ::= 'chane_caractre' <nom_colonne> USER UPPER (expression_caractre) LOWER (expression_caractre) CHARACTER_LENGTH (expression_caractre) SUBSTRING (expression_caractre FROM dbut FOR longueur) POSITION (expression_caractre IN expression_caractre ) CAST (expression AS type | domaine) expression_caractre | |expression_caractre

Exemple de chanes de caractres


Q11 :Donner le numro et les 5 premires lettres du cru en majuscules pour chaque vin dont le cru possde plus de 10 lettres
SELECT NV, UPPER(SUBSTRING(CRU FROM 1 TO 5) FROM VINS WHERE CHARACTER_LENGTH(CRU) > 10

Traitement du type date


expression_date_temps ::= constante <nom_colonne> CURRENT_DATE CURRENT_TIME [prcision] CURRENT_TIMESTAMP [prcision] EXTRACT (champ FROM source) CAST (expression AS type | domaine)

Exemple dutilisation du type date


UPDATE VINS SET ANNEE = EXTRACT (YEAR FROM CURRENT_DATE) WHERE NV = 10 UPDATE COMMANDES SET DATE_COM = CAST ('1996-10-23' AS DATE) WHERE NV = 10

SQL2 : Oprateurs

Jointure externe (outer-join) :


SELECT FROM R1 [NATURAL] [{LEFT | RIGHT}] JOIN R2 [ON (A=B)], WHERE

Expressions de SELECT [OUTER] UNION INTERSECT EXCEPT

128

Jointure Naturelle
La jointure naturelle est une quijointure dont la condition porte sur l'galit de valeurs entre tous les attributs de mme nom, des relations concernes. Le schma de la relation rsultante correspond une concatnation de l'ensemble des attributs des deux relations dont elle est issue, autour du ou des attributs communs.

129

Exemple de Jointure Externe


Q12 :Afficher le numro et le cru des vins ainsi que la quantit bue pour ceux d'entre eux qui ont t bus SELECT NV, CRU, QTE FROM VINS NATURAL LEFT JOIN COMMANDES ou bien SELECT NV, CRU, QTE FROM VINS LEFT JOIN COMMANDES USING (NV) ou encore SELECT NV, CRU, QTE FROM VINS LEFT JOIN COMMANDES ON V.NV = C.NV

SQL2 : Cration d'index


CREATE [UNIQUE] INDEX [nom_index] ON nom_table ( <nom_colonne [ASC DESC] > * );

Exemple: CREATE UNIQUE INDEX index_exp ON EXPEDITION (num_exp ASC) ;

Sur quelles colonnes faire porter un index ? Sur celles qui sont le plus souvent utilises dans les critres de recherche Quel index utiliser ? Arbres B (B-tree) : index par dfaut et mthode la plus puissante Arbres R (R-tree) : index pour les oprations sur les donnes gomtriques CREATE INDEX geo_ids ON polygones USING RTREE (forme)

PostgreSQL : ->INSERT INTO test values (4, fff); ->ANALYSE test; \\pour mettre jour les stat de la table) ->EXPLAIN select * from test where i<34; ->CREATE INDEX testindex on test(i); ->EXPLAIN select * from test where i=34;

132

SQL2 : Cration de schma


CREATE SCHEMA [nom_schma] [ AUTHORIZATION <nom_utilisateur>] [DEFAULT CHARACTER SET <jeu_car>] [ <lments_du_schma> * ];

Exemple: CREATE DATABASE VIGNOBLES // non normalis CREATE SCHEMA COOPERATIVE CREATE DOMAIN ... CREATE TABLE ...

SQL2 : Modification de schma


DROP DOMAIN <nom_domaine> TABLE <nom_table> INDEX <nom_index> SCHEMA <nom_schema> [CASCADE RESTRICT] ; RESTRICT interdit la destruction d'un objet rfrenc (via une contrainte d'intgrit, une vue, ...) alors que CASCADE propage la destruction

ALTER TABLE <nom_table>

ADD COLUMN <def_colonne> CONSTRAINT <def_contrainte_table >


ALTER <def_colonne>

DROP COLUMN <nom_colonne> CONSTRAINT <nom_contrainte >


Exemple : ALTER TABLE EXPEDITION ADD COLUMN adresse_livraison VARCHAR(30) ALTER quantite INTEGER NOT NULL ;

SQL2 Full
Extension des dates et temps Expressions tendues avec correspondances de colonnes (ASSERTION) Possibilit de SELECT en argument d'un FROM Vues concrtes Contraintes d'intgrit multi-tables Contrles d'intgrit diffrs (DEFERRABLE)

136

SQL3 ou SQL99 : BD Avances


Interface client
SQL/CLI du SAG (X/OPEN)

Composants multiples
Framework, Foundation, Binding CLI, PSM Transactions, temporal, real-time Multimdia

Procdures stockes
Persistent Stored Modules (PSM)

Objets Requtes rcursives Dclencheurs (trigger)


137

Un Standard depuis 1999


Proposition concurrente de l'ODMG Accord entre constructeurs de SGBD Objets Support du modle pur objet de l'OMG Variation de SQL traitant des collections imbriques Accord ANSI X3 H2 et ODMG Dfinition d'un langage d'interrogation intgrant relationnel et objet Convergence relationnel-objet vers SQL3 SQL3 est le standard depuis 1999 En matire d'objet aussi ...

138

SQL comprend quatre parties :


Le langage de dfinition de schma (Tables, Vues, Droits) Le langage de manipulation (Slection et mises jour) La spcification de modules appelables (Procdures) L'intgration aux langages de programmation (Curseurs)

139

Conclusion
Un standard de plus en plus complet et de plus en plus suivi :
Attention aux approximations et imitations incompltes Tout ou presque existe dans les propositions SQL2 ou SQL3 Une rfrence pour implmenter et utiliser chaque aspect des BD

Le langage universel sur lequel s'appuie les progiciels

http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=sommaire
140

VUES et DROITS

141

Indpendance Physique : SQL


Indpendance des programmes d'applications vis vis du modle physique :
Possibilit de modifier les structures de stockage (fichiers, index, chemins d'accs, ) sans modifier les programmes; Ecriture des applications par des non-spcialistes des fichiers et des structures de stockage; Meilleure portabilit des applications et indpendance vis vis du matriel.
142

Indpendance Logique
Les applications peuvent dfinir des vues logiques de la BD
Gestion des mdicaments
Nombre_Mdicaments
IdM 1 2 3 . Nom Aspegic 1000 Fluisdal Mucomyst .. Description .. .. .. .. Nombre 30 20 230 ..
Patie nts
Id- P 1 2 . No m Leb eau Tro ger . Prno m Jacq u es Zo e . Id -M 1 2 3 .

Cabinet du Dr. Masse


Pre scription Visite s
Id - D 1 2 Id - P 2 3 Id - V 1 4 Da te 1 5 ju in 1 mars Prix 250 250 Id -V 1 1 . Lig ne 1 2 . Id- M 12 5 . Po solog ie 1 p ar jou r 1 0 g o u ttes

M dicam e nt
No m Asp eg ic 1 0 0 0 Flu isd al Mu co my st .. Descriptio n .. .. .. ..

Docteur
Id-D 1 2 3 . Nom Dupont Durand Masse .. Prnom Pierre Paul Jean Id-V

Prescription
Ligne 1 2 1 2 3 . Id-M 12 5 8 12 3 . Posologie 1 par jour 10 gouttes 2 par jour 1 par jour 2 gouttes

Visites
Id-D 1 1 2 2 Id-P 2 1 2 3 Id-V 1 2 3 4 Date 15 juin 12 aot 13 juillet 1 mars Prix 250 180 350 250

1 1 2 2 2 .

Patients
Id-P 1 2 3 4 . Nom Lebeau Troger Doe Perry . Prnom Jacques Zoe John Paule . Id-M 1 2 3 .

Mdicament
Nom Aspegic 1000 Fluisdal Mucomyst .. Description .. .. .. ..

143

Avantages de lindpendance logique


Possibilit pour chaque application d'ignorer les besoins des autres (bien que partageant la mme BD). Possibilit d'volution de la base de donnes sans rcriture des applications :
ajout de champs, ajout de relation, renommage de champs.

Possibilit d'intgrer des applications existantes sans modifier les autres. Possibilit de limiter les consquences du partage : Donnes confidentielles.
144

Gestion des vues


Les vues permettent dimplmenter lindpendance logique en permettant de crer des objets virtuels Vue = Question SQL stocke Le SGBD stocke la dfinition et non le rsultat Exemple : la vue des patients parisiens Create View Parisiens as ( Select Nom, Prnom From Patients Where Patients.Ville = Paris )

145

Relation d'un schma externe dduite des relations de la base par une question Exemple : GrosBuveurs
CREATE VIEW GrosBuveurs AS SELECT NB, Nom, Prnom, FROM Buveurs, Abus WHERE Buveurs.NB = Abus.NB and Abus.Quantit > 100

Calcul de la vue
Une vue est une fentre dynamique sur la BD et est recalcule chaque accs. Une vue peut tre matrialise (vue concrte).

146

Le SGBD transforme la question sur les vues en question sur les relations de base
Question Q sur des vues

Gestionnaire de Vues
Dfinition des vues Question Q sur les relations de base

147

Les vues externes


application 1 application 2

PROD_VINS Schma externe

EXPEDITIONS Schma externe

VITICULTEURS VINS COMMANDES BUVEURS Schma conceptuel

Schma conceptuel : VINS (NV, CRU, ANNEE, DEGRE, NVIT) VITICULTEURS (NVIT, NOM, PRENOM, VILLE) BUVEURS (NB, NOM, PRENOM, VILLE) COMMANDE (NB, NV, QTE, DATE) On peut dfinir de nombreuses applications particulires qui n'utilisent qu'une partie des donnes du schma.

Exemple
APPLICATION = INFLUENCE GEOGRAPHIQUE SUR LA CONSOMMATION DE L'ANNEE 1996

VUES = RESTRICTION-PROJECTION DES RELATIONS DE BASE BUVEURS-1 (NB, VILLE) ACHETE-1 (NB, NV, QTE, DATE) // restreint aux dates de l'anne 96 VINS-1 (NV, CRU) VUE = RESTRUCTURATION DU SCHEMA CONCEPTUEL ACHAT-2 (NB, VILLE, CRU, QTE, DATE) VUE = RESTRUCTURATION et AGREGATION CONSOMMATION-PAR-VILLE CPV (VILLE, CRU, QTE)

Dfinition SQL des vues

CREATE VIEW <nom_vue> [(liste_attributs)] AS <expression_de_slection> [WITH CHECK OPTION] L'expression de slection peut porter sur des tables de base et/ou des vues Dans le cas de vues modifiables, la clause WITH CHECK OPTION garantit que les tuples insrs (ou modifis) dans la vue vrifient bien le critre de la vue

Interrogation des vues


MODIFICATION DE QUESTION PAR RESTRUCTURATION SYNTAXIQUE EXEMPLE : SELECT CRU, QTE FROM CPV WHERE VILLE = "PARIS" DEVIENT : SELECT V.CRU, SUM (C.QTE) FROM BUVEURS B, COMMANDES C, VINS V WHERE B.NB = C.NB AND C.NV = V.NV AND C.DATE BETWEEN '01.01.96' AND '31.12.96' AND B.VILLE = 'PARIS' GROUP BY VILLE, CRU

MODIFICATION DE QUESTION PAR RESTRUCTURATION D'ARBRES ALGEBRIQUES


Arbre algbrique de la vue CPV
BUVEURS COMMANDES VINS

Arbre algbrique de la requte


CPV

Date

Ville = Paris

Cru, Qte

Rsultat

Group By CPV

Les arbres sont mis bout bout


BUVEURS COMMANDES VINS Date

Group By CPV

Ville = Paris

Cru, Qte

Rsultat

Puis l'arbre rsultat est optimis


BUVEURS COMMANDES

VINS

Ville = Paris

Date

Group By CPV

Cru, Qte

Rsultat

Mises jour au travers des vues


Les mises jour au travers des vues sont rarement dfinies
Ex: Comment reporter une mise jour sur CPV dans les relations de base ?

Pour rendre le report de mises jour possible, la dfinition de la vue doit respecter certaines contraintes:
la clause SELECT doit conserver les cls de toutes les relations de base la clause SELECT ne doit pas contenir de calcul d'agrgat la dfinition ne doit pas contenir de clause GROUP BY ni HAVING

Dans SQL2, en plus des conditions prcdentes, seules les vue dfinies partir d'une relation unique seront considres comme modifiables

Vues concrtes
Vue concrte :
Vue dont on a demande l'implantation dans la base de donnes (virtuel ---> rel)

Intrts :
interrogations frquentes, systmes rpartis

Problmes :
Maj des donnes de base rpercuter sur la vue

L'objectif est d'viter de rvaluer compltement la vue chaque mise a jour

Partage des donnes

BD

Accs concurrent aux mmes donnes Conflits daccs !!


158

BD

Le SGBD gre les accs concurrents Chacun limpression dtre seul (Isolation) Cohrence conserve (Verrouillage)
159

Confidentialit et

Contrle daccs aux donnes


Objectif : Protger les donnes de la BD contre des accs non autoriss Deux niveaux :
Connexion restreinte aux usagers rpertoris (mot de passe) Privilges d'accs aux objets de la base

Usagers : Usager ou groupe dusagers Objets : Relation, Vue, autres objets (procdures, triggers, etc.)
160

Puissance des droits SGBD


Service des ressources humaines Employs (intranet) Public (internet)

Id-E Nom Prnom Poste 1 Ricks Jim 5485 2 Trock Jack 1254 3 Lerich Zoe 5489 4 Doe Joe 4049

Nombre Masse demploy Salariale 4 890 s

Id-E Nom Prnom Poste Adresse 1 Ricks Jim 5485 . 2 Trock Jack 1254 . 3 Lerich Zoe 5489 . 4 Doe Joe 4049 .

Ville Salaire Paris 230 Versailles 120 Chartres 380 Paris 160

161

Hirarchie des privilges

Administrateur Systme {users login, }

Administrateur de la Base {connexion utilisateurs BD, gestion des schmas}

Propritaires d'Objets {crateurs d'objets, distribution des droits}

Autres (PUBLIC) {droits obtenus par GRANT}

Dfinition des droits


GRANT <droits> ON <objet> TO <usagers> [WITH GRANT OPTION]

<droits> ::= ALL |

SELECT | DELETE | INSERT [<attribut>]| UPDATE [<attribut>]| REFERENCE [<attribut>]

<objet> ::= TABLE <relation> * | VIEW <vue> *


<usagers> : := PUBLIC| <username> * Exemple: GRANT SELECT , UPDATE (DEGRE) ON TABLE VINS TO DUPONT

Suppression des droits


REVOKE <droits> ON <objet> FROM <usagers>

Exemple: REVOKE ALL ON TABLE VINS FROM DUPONT

Rgles d'octroi et de suppression des droits


On ne peut transmettre que les droits que l'on possde ou qui nous ont t transmis avec grant option On ne peut supprimer que les droits que l'on a transmis La rvocation des droits est rcursive Si un utilisateur U1 a reu le droit D de la part de plusieurs utilisateurs (U2, U3, ...), il ne perd ce droit que si tous les utilisateurs lui retirent

Ces rgles garantissent la cohrence des retraits

Autorisations sur une vue


Une vue est une relation virtuelle dfinie partir des relations de base par une expression SQL Exemple :
CREATE VIEW GROS_BUVEURS (NB, NOM, QTE_BUE) AS SELECT B.NB, B. NOM, SUM(A.QTE) FROM BUVEURS B, ABUS A WHERE B.NB = A.NB GROUP BY NB

AUTORISATIONS SUR LES VUES:


Permet un granule d'autorisation trs fin Cependant, les mises jour au travers des vues sont limites

TRANSACTIONS et INTEGRITE

167

Intgrit Logique
Objectif : Dtecter les mises jour errones Contrle sur les donnes lmentaires
Contrle de types: ex: Nom alphabtique Contrle de valeurs: ex: Salaire mensuel entre 5 et 50kf

Contrle sur les relations entre les donnes


Relations entre donnes lmentaires:
Prix de vente > Prix d'achat

Relations entre objets:


Un lecteur doit tre inscrit sur une seule liste lectorale

168

Contraintes dintgrit
Avantages :
simplification du code des applications scurit renforce par l'automatisation mise en commun des contraintes

Ncessite :
un langage de dfinition de contraintes d'intgrit la vrification automatique de ces contraintes

169

Exemples de contrainte
Contraintes dintgrit rfrentielles
Docteurs
Id-D 1 2 3 . Nom
Dupont Durand Masse

Prescriptions Visites
Id-D Id-P 1 1 2 2 2 1 2 3 IdV 1 2 3 4 Date
15 juin 12 aot 13 juillet 1 mars

Prnom Pierre Paul Jean

IdV Prix 250 180 350 250 1 1 2 2 2 .

Lign e 1 2 1 2 3 .

IdM 12 5 8 12 3 .

Posologi e
1 par jour 10 gouttes 2 par jour 1 par jour 2 gouttes

..

170

Association des contraintes


Une contrainte d'intgrit peut tre :
Associe un domaine
Spcifie au travers de la clause CREATE DOMAIN

Associe une relation


Spcifie au travers de la clause CREATE TABLE

Dissocie
Spcifie au travers de la clause CREATE ASSERTION

Contraintes associes aux domaines


CREATE DOMAIN <nom> <type> [valeur] [CONSTRAINT nom_contrainte CHECK (condition) ]

Exemple: CREATE DOMAIN couleur_vins CHAR(5) DEFAULT 'rouge' CONSTRAINT couleurs_possibles CHECK (VALUE IN ('rouge', 'blanc', 'ros'))

Contraintes associes aux relations


CREATE TABLE <nom_table> (<def_colonne> * [<def_contrainte_table>*]) ;
< def_colonne > ::= <nom_colonne> < type nom_domaine > [CONSTRAINT nom_contrainte < NOT NULL UNIQUE PRIMARY KEY CHECK (condition) REFERENCES nom_table (colonne) > ] [NOT] DEFERRABLE < def_contrainte_table > ::= CONSTRAINT nom_contrainte < UNIQUE (liste_colonnes) PRIMARY KEY (liste_colonnes) CHECK (condition) FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes) > [NOT] DEFERRABLE

Contraintes associes aux relations


CREATE TABLE VINS ( NV INTEGER PRIMARY KEY, couleur COULEURS_VINS, cru VARCHAR(20), millesime DATE, degre CHECK (degre BETWEEN 8 AND 15) NOT DEFERRABLE, quantite INTEGER, CONSTRAINT dependance_fonctionnelle CHECK (NOT EXISTS (SELECT * FROM VINS GROUP BY cru,millesime HAVING COUNT(degre) > 1) NOT DEFERRABLE) ;

Contraintes rfrentielles
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes) [ON DELETE {CASCADE SET DEFAULT SET NULL}] [ON UPDATE {CASCADE SET DEFAULT SET NULL}] [NOT] DEFERRABLE Les contraintes rfrentielles caractrisent toutes les associations Problme des contraintes rfrentielles croises ==> mode DEFERRABLE En cas de violation de la contrainte, la mise jour peut tre rejete ou bien une action de correction est dclenche ==> ON DELETE spcifie l'action effectuer en cas de suppression d'un tuple rfrenc ON UPDATE spcifie l'action effectuer en cas de mise jour de la cl d'un tuple rfrenc

CREATE TABLE ABUS ( NB INTEGER NOT NULL, NV INTEGER NOT NULL, date DATE, qte QUANTITE,

UNIQUE (NB, NV, date)


CONSTRAINT rfrence_buveurs FOREIGN KEY NB REFERENCES BUVEURS (NB) ON DELETE CASCADE DEFERRABLE );

176

Contraintes dissocies
CREATE ASSERTION nom_contrainte CHECK (condition)

Remarque: les contraintes dissocies peuvent tre multi-tables Exemple: CREATE ASSERTION quantite_produite
CHECK ( (SELECT SUM(quantite) FROM VINS) > ( SELECT SUM(quantite) FROM ABUS) )

Intgrit Physique
Motivations : Tolrance aux fautes
Transaction Failure : Contraintes d'intgrit, Annulation System Failure : Panne de courant, Crash serveur ... Media Failure : Perte du disque Communication Failure : Dfaillance du rseau

Objectifs :
Assurer l'atomicit des transactions Garantir la durabilit des effets des transactions commises

Moyens :
Journalisation : Mmorisation des tats successifs des donnes Mcanismes de reprise
178

Transaction
Etat cohrent Begin Transaction Incohrence possible... Etat cohrent Commit

Begin T1 CCourant = CCourant - 2000 CEpargne = CEpargne - 3000 CCourant = CCourant + 3000 Commit T1
Faire le lien avec la clause DEFERRABLE : contrainte CCourant > 0
179

Atomicit et Durabilit

ATOMICITE Begin CEpargne = CEpargne 3000 CCourant = CCourant + 3000 Commit T1 Annuler le dbit !!
Panne

DURABILITE Begin CEpargne = CEpargne 3000 CCourant = CCourant + Crash disque 3000 Commit T1

Sassurer que le 180 virement a t fait !

Proprits des transactions


Atomicit
Unit de cohrence : toutes les mises jour doivent tre effectues ou aucune.

Cohrence
La transaction doit faire passer la base de donne d'un tat cohrent un autre.

Isolation
Les rsultats d'une transaction ne sont visibles aux autres transactions qu'une fois la transaction valide.

Durabilit
Les modifications dune transaction valide ne seront jamais perdue
181

Commit et Abort
INTRODUCTION DACTIONS ATOMIQUES
Commit (fin avec succes) et Abort (fin avec echec) Ces actions s'effectuent en fin de transaction

COMMIT
Validation de la transaction Rend effectives toutes les mises jour de la transaction

ABORT
Annulation de la transaction Dfait toutes les mises jour de la transaction
182

Effet logique
Mmoire de la transaction Update Update

Commit

Abort

Bases de donnes

Poubelle

183

Interface applicative
API pour transaction simple
Trid Begin (context*) Commit () Abort()

Possibilit de points de sauvegarde :


Savepoint Save() Rollback (savepoint) // savepoint = 0 ==> Abort

Quelques interfaces supplmentaires


ChainWork (context*) //Commit + Begin Trid Mytrid() Status(Trid) // Active, Aborting, Committing, Aborted, Committed Le tout reli des journaux de sauvegarde et de 184

reprise -> apprentissage mtier

JAVA
import java.sql.*; public class TransactionPairs { public static void main(String args[]) {

String url = "jdbc:mySubprotocol:myDataSource"; Connection con = null; Statement stmt; PreparedStatement updateSales; PreparedStatement updateTotal; String updateString = "update COFFEES " + "set SALES = ? where COF_NAME like ?"; String updateStatement = "update COFFEES " + "set TOTAL = TOTAL + ? where COF_NAME like ?"; String query = "select COF_NAME, SALES, TOTAL from COFFEES"; try { Class.forName("myDriver.ClassName"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }

185

try { con = DriverManager.getConnection(url, "myLogin", "myPassword"); updateSales = con.prepareStatement(updateString); updateTotal = con.prepareStatement(updateStatement); int [] salesForWeek = {175, 150, 60, 155, 90}; String [] coffees = {"Colombian", "French_Roast", "Espresso", "Colombian_Decaf","French_Roast_Decaf"}; int len = coffees.length; con.setAutoCommit(false); for (int i = 0; i < len; i++) { updateSales.setInt(1, salesForWeek[i]); updateSales.setString(2, coffees[i]); updateSales.executeUpdate(); updateTotal.setInt(1, salesForWeek[i]); updateTotal.setString(2, coffees[i]); updateTotal.executeUpdate(); con.commit(); } con.setAutoCommit(true); updateSales.close(); updateTotal.close(); stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { String c = rs.getString("COF_NAME"); int s = rs.getInt("SALES"); int t = rs.getInt("TOTAL"); System.out.println(c + " " + s + " } stmt.close(); con.close();

" + t);

186

catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); if (con != null) { try { System.err.print("Transaction is being "); System.err.println("rolled back"); con.rollback(); } catch(SQLException excep) { System.err.print("SQLException: "); System.err.println(excep.getMessage()); } } } } }

187

Dclencheurs (Triggers)
Dclencheur :
action ou ensemble d'actions dclenche(s) automatiquement lorsqu'une condition se trouve satisfaite aprs l'apparition d'un vnement

Un dclencheur est une rgle ECA


Evnement = mise jour d'une relation, une opration sur une table (dbut ou fin), un vnement externe (heure, appel,etc.) Condition = optionnelle, quivaut une clause <WHERE> Action = excution de code spcifique (requte SQL de mise jour,excution d'une procdure stocke, abandon d'une transaction, ...)

De multiples usages sont possibles :


contrle de l'intgrit maintien de statistiques mise jour de copies multiples, ...
Exemple : dcrmenter un stock chaque commande du produit

Dfinition des triggers


CREATE TRIGGER <nom-trigger> <vnement> [<condition>] <action >
<vnement> ::= BEFORE AFTER {INSERT DELETE UPDATE [OF <liste_colonnes>]} ON <nom_de_table> <condition> ::= [REFERENCING OLD AS <nom_tuple> NEW AS <nom_tuple>] WHEN <condition_SQL> <action> ::= {requte_SQL [FOR EACH ROW] exec_procdure COMMIT ROLLBACK}

Exemples de trigger
CREATE TRIGGER degr_croissant BEFORE UPDATE OF degre ON VINS REFERENCING OLD AS old_vin NEW AS new_vin WHEN (new_vin.degre < old_vin.degre) ROLLBACK FOR EACH ROW CREATE TRIGGER rfrence_vins BEFORE DELETE ON VINS DELETE FROM ABUS WHERE ABUS.NV = VINS.NV FOR EACH ROW
Equivalent ON DELETE CASCADE sur la table VINS ?

PostgreSQL : CREATE TRIGGER {BEFORE|AFTER} {vnement } ON nom_table FOR EACH {ROW|STATEMENT} EXECUTE PROCEDURE nom_fonction (paramtres) La fonction nom_fonction est dveloppe en PL/pgSQL par exemple

Bilan transactions
Des techniques complexes Un problme bien matris dans les SGBDR La concurrence complique la gestion de transactions Les transactions longues restent problmatiques Enjeu essentiel pour le commerce lectronique Toutes ces vrifications de contraintes se font par programmation : TRIGGER associ des fonctions crites en PL/pgSQL pour postresql, dans le code 191 Java directement par exemple

CONCLUSION
Le modle relationnel offre
des contraintes d'intgrits riches des droits d'accs intgrs un concept de vue trs puissant des methodes d'interrogation simples et efficaces

Problmes difficiles :
maj au travers des vues vues concrtes

Interfaage BD/Applications
C + curseurs Java + JDBC

JDBC : Java Database Connectivity est une API (Interface Applicative) calque sur ODBC (Object Database Connectivity) Classes du package java.sql (SQL3 ++) Exportations des interfaces des classes par le JDBC Driver Manager
// Connexion Connection con = DriverManager.getConnection(url); // Cration d'une instruction Statement statement = con.createStatement(); // Excution d'une requete String query = "SELECT * FROM Employs"; ResultSet resultset = statement.executeQuery(query); // Traitement des rsultats while(resultset.next()) { System.out.println(resultset.getString(2) + " " + resultset.getString(3)); } // fermeture de la connexion statement.close(); con.close();

SQL

ResultSet Application/ Applet JDBC Driver Manager

Base de donnes

url = jdbc.odbc.mabase, nombase,password

194

Interfaage BD/Web
php/mysql ou postgresl Tomcat/Java/Servlet XML

requte Client internet rponse


appel de la page

Serveur

Base de donnes MySQL

extraction de donnes

Script PHP

excution

Document Html

<HTML> <HEAD> <TITLE>HOPITAL ACCUEIL</TITLE> </HEAD> <BODY LINK="#0000ff" BGCOLOR="White"> <CENTER> <P> <?php $link=mysql_connect("diamant","login", $Password) or die ("impossible de se connecter"); mysql_select_db ("login") or die ("Impossible d'acceder a la base de donnees"); $query = "SELECT * FROM hopital"; $result = mysql_query($query) or die ("La requete a echoue"); ?> <table border="1"> <tr> <td>Nom</td> <td>Arrondissement</td> </tr> <?php while ($line = mysql_fetch_array($result)){ print "\t <tr>\n"; echo "\t\t<td>".$line["nom_hopital"]."</td>\n"; echo "\t\t<td>".$line["arrondissement"]."</td>\n"; print "\t</tr>\n"; } print "</table>\n"; mysql_close($link); ?> <P> </BODY> </HTML>

197

Bibliographie :
Les cahiers du programmeur, PostgreSQL, Services Web avec PostreSQL et PHP/XML, Stephane Mariel, Edition Eyrolles PostgreSQL par la pratique, John C. Worsley, Ed. OReilly

198

postgreSQL
Types et fonctions spcifiques Trs utiles

Calcul de distances et gomarketing

Si le champ position est de type point, on peut chercher les partenaires proches dun client : SELECT partenaires.id,partenaires.nom from partenaires, clients WHERE (clients.position<->partenaires.position)<0.2

199

Automatisation des procdures courantes Les squences : liste dincrmentation


CREATE SEQUENCE commande_id MINVALUE 0; SELECT nextval(commande_id); \\renvoie la dernire valeur de la squence et incrmente CREATE TABLE commandes (id integer DEFAULT nextval(commande_id) PRIMARY KEY, id_client integer, id_produit integer)

Les Triggers :
CREATE TRIGGER {BERORE|AFTER} {vnement } ON nom_table FOR EACH {ROW|STATEMENT} EXECUTE PROCEDURE nom_fonction (paramtres)

Les fonctions SQL :


->CREATE FUNCTION isbn_titre(text) RETURNS text AS SELECT titre FROM livres WHERE isbn=$1 LANGUAGE SQL; ->SELECT isbn_titre(099993333);

Les fonctions C
$gcc -shared est-nul.c -o est_nul.so ->CREATE FUNCTION est_nul(int4) RETURNS Boolean AS /home/master/est_nul.so LANGUAGE C; 200

Les fonctions PL/pgSQL (sous ORACLE PL/SQL) :


-> CREATE FUNCTION identificateur (paramtres) RETURNS type AS DECLARE Dclaration; [] BEGIN Instruction; [] END; LANGUAGE plpgsql

201

Transactions et curseurs Nutilise pas la technique des verrous -> effet nfaste sur les performances (consultation bloque par exemple tant que la transaction na pas t valide (COMMIT) Utilise la technique de MVCC (Multi-Version Concurrency Control) : tant que les modifications nont pas t valides, chaque connexion postgreSQL maintient un instantan temporaire de la base de donnes pour les objets modifis dans un bloc transactionnel (BEGIN COMMIT) Utilisateur 1 : ->BEGIN; ->UPDATE sujets SET emplacement = NULL WHERE id =132; Utilisateur 2 : -> SELECT emplacement FROM sujets WHERE id=12; Paris Utilisateur 1 : -> SELECT emplacement FROM sujets WHERE id=12; NULL -> COMMIT; Utilisateur 2 : -> SELECT emplacement FROM sujets WHERE id=12; NULL

202

Un curseur est un pointeur en lecture seule vers lensemble rsultat dune instruction SELECT compltement excute : utilis pour les applications qui maintiennent une connexion persistante vers un serveur PostgreSQL. En excutant un curseur et en grant une rfrence vers lensemble rsultat quil produit, une application peut grer plus efficacement les lignes quelle souhaite rcuprer diffrents instants sans devoir excuter nouveau la requte avec les clauses LIMIT et OFFSET diffrentes. Les curseurs sont souvent encapsuls dans une API bien que lon puisse galement les manipuler directement via les commandes SQL standard. Noter quils sont toujours encapsuls lintrieur dune transaction (normal). -> BEGIN; -> DECLARE tous_livres CURSOR FOR SELECT * FROM livres; -> FETCH 4 FROM tous_livres; -> FETCH NEXT FROM tous_livres; -> FETCH PRIOR FROM tous_livres; -> MOVE FORWARD 10 IN tous_livres; -> CLOSE tous_livres; -> COMMIT;
203

En C : Pr-processeur SQL :
$ecpg -o nom.c nom.sql -I /usr/include/psql/

Compilation :
$cc nom.c -o nom -I /usr/include/pgsql -lecpg -lpq

Excution du programme :
$./nom |more

En Java :
La classe java.sql.ResultSet et ses mthodes
204