Escolar Documentos
Profissional Documentos
Cultura Documentos
www.cours-ofppt.com
SUPPORT DE COURS
www.cours-ofppt.com
Plan Chapitre 1 Chapitre 2 Chapitre 3 Chapitre 4 Chapitre 5 Chapitre 6 Chapitre 7 Chapitre 8 Chapitre 9 Chapitre 10 Chapitre 11 Chapitre 12 Introduction gnrale Le modle relationnel Prsentation des donnes Lalgbre relationnelle Le langage QBE Le langage SQL Gestion des transactions Programmation avec VBA Les objets dans Access Linterface DAO Le mode client serveur et ODBC Automation et le modle DCOM
Chapitre 1
Introduction gnrale
Notions intuitives Objectifs et avantages des SGBD Larchitecture ANSI/SPARC Notion de modlisation des donnes Survol des diffrents modles de donnes Bref historique, principaux SGBD commercialiss
www.cours-ofppt.com
Notions intuitives
Base de donnes
www.cours-ofppt.com
Systme de Gestion de Base de Donnes (SGBD) DATA BASE MANAGEMENT SYSTEM (DBMS)
systme qui permet de grer une BD partage par plusieurs utilisateurs simultanment
FICHIER Les donnes des fichiers sont dcrites dans les programmes
BASE DE DONNEES Les donnes de la BD sont dcrites hors des programmes dans la base elle-mme
Description fichier
Programmes
Programmes
La multiplication des fichiers entranait la redondance des donnes, ce qui rendait difficile les mises jour. D'o l'ide d'intgration et de partage des donnes
www.cours-ofppt.com
IUT de Nice - Cours SGBD1 5
II
www.cours-ofppt.com
IUT de Nice - Cours SGBD1 6
intgrit
www.cours-ofppt.com
vrification de contraintes d'intgrit ex.: le salaire doit tre compris entre 400F et 20000F
Partage
une BD est partage entre plusieurs utilisateurs en mme temps contrle des accs concurrents notion de transaction L'excution d'une transaction doit prserver la cohrence de la BD
Scurit
reprise aprs panne, journalisation
Performances d'accs
index (hashage, arbres balancs ...)
www.cours-ofppt.com
IUT de Nice - Cours SGBD1 8
Indpendance physique
Pouvoir modifier les structures de stockage ou les index sans que cela ait de rpercussion au niveau des applications Les disques, les mthodes daccs, les modes de placement, le codage des donnes ne sont pas apparents
Indpendance logique
Permettre aux diffrentes applications davoir des vues diffrentes des mmes donnes Permettre au DBA de modifier le schma logique sans que cela ait de rpercussion au niveau des applications
EXTERNE
Vue 1
Vue 2
CONCEPTUEL
Schma logique DICTIONNAIRE DE DONNEES Schma physique STRUCTURE DE DONNEES SGBD Niveaux de reprsentation des donnes
INTERNE
10
Le niveau externe
Le concept de vue permet d'obtenir l'indpendance logique
La modification du schma logique nentrane pas la modification des applications
(une modification des vues est cependant ncessaire)
Chaque vue correspond la perception dune partie des donnes, mais aussi des donnes qui peuvent tre synthtises partir des informations reprsentes dans la BD (par ex. statistiques)
Le niveau conceptuel
il contient la description des donnes et des contraintes dintgrit (Dictionnaire de Donnes) le schma logique dcoule dune activit de modlisation
Le niveau interne
il correspond aux structures de stockage et aux moyens daccs (index)
11
(conforme un modle de donnes) MANIPULATION DES DONNEES Interrogation Mise jour insertion, suppression, modification
Langage de manipulation des donnes (DML)
(langage de requte dclaratif) CONTRLE DES DONNEES Contraintes d'intgrit Contrle des droits d'accs Gestion de transactions
Langage de contrle des donnes (DCL)
12
UNIVERS REEL Modles smantiques Orients conception Entit-Association, Merise MODELE CONCEPTUEL MCD Modles de BD Hirarchique, Rseau Relationnel SCHEMA LOGIQUE
Les modles de BD sont souvent trop limits pour pouvoir reprsenter directement le monde rel Mthodologies de conception prsentes en ACSI, SGBD2
13
Le modle Entit-Association
EA en franais, ER en anglais (pour Entity Relationship) Formalisme retenu par l'ISO pour dcrire l'aspect conceptuel des donnes laide dentits et dassociations
Le concept dentit
Reprsentation dun objet matriel ou immatriel Par exemple un employ, un projet, un bulletin de paie Nom de lentit Liste des proprits
Les proprits
donnes lmentaires relatives une entit Par exemple, un numro demploy, une date de dbut de projet on ne considre que les proprits qui intressent un contexte particulier Les proprits dune entit sont galement appeles des attributs, ou des caractristiques de cette entit
Lidentifiant
proprit ou groupe de proprits qui sert identifier une entit Lideintifiant dune entit est choisi par lanalyste de faon ce que deux occurrences de cette entit ne puissent pas avoir le mme identifiant Par exemple, le numro demploy sera lidentifiant de lentit EMPLOYE
15
Les associations
Reprsentation dun lien entre deux entits ou plus une association peut avoir des proprits particulires
adhrent emprunter
date demprunt
exemplaire
16
Les cardinalits
La cardinalit dune association pour une entit constituante est constitue dune borne minimale et dune borne maximale : Minimale : nombre minimum de fois quune occurrence de lentit participe aux occurrences de lassociation, gnralement 0 ou 1 Maximale : nombre maximum de fois quune occurrence de lentit participe aux occurrences de lassociation, gnralement 1 ou n Par exemple : adhrent emprunter
0,3 date demprunt 0,1
exemplaire
La cardinalit 0,3 indique quun adhrent peut tre associ 0, 1, 2 ou 3 livres, cest dire quil peut emprunter au maximun 3 livres. A linverse un livre peut tre emprunt par un seul adhrent, ou peut ne pas tre emprunt.
17
Les cardinalits maximum sont ncessaires pour concevoir le schma de la base de donnes Les cardinalits minimums sont ncessaires pour exprimer les contraintes dintgrit
En notant uniquement les cardinalits maximum, on distingue 3 type de liens : Lien fonctionnel 1:n Lien hirarchique n:1 Lien maill n:m
18
Lien fonctionnel
1:n
A
1 n
dpartement
19
A
n 1
Une instance de A peut tre associe plusieurs instances de B Inverse d'un lien 1:n
dpartement emploie
n 1
employ
20
Lien maill
A
n:m
B
n m
projet
21
est chef de
employ travaille n 1
dpartement
dirige
a pour chef
n participe m
projet
22
SGBDR
23
introduit par Codd (recherche IBM) donnes organises en tables (adressage relatif) stratgie d'accs dtermine par le SGBD
24
LE MODLE RSEAU
Schma logique reprsent par un GRAPHE noeud arc : article (reprsente une entit) : lien hirarchique 1:N
VENTE
Diagramme de Bachman
25
x, p
x, q q y, p
y y, r r
26
LE MODLE HIRARCHIQUE
Schma logique reprsent par un ARBRE noeud arc : segment (regroupement de donnes) : lien hirarchique 1:N
Adquation du modle pour dcrire des organisations structure arborescente (ce qui est frquent en gestion)
27
LE MODLE RELATIONNEL
En 1970, CODD prsente le modle relationnel Schma logique reprsent par des RELATIONS LE SCHMA RELATIONNEL Le schma relationnel est l'ensemble des RELATIONS qui modlisent le monde rel Les relations reprsentent les entits du monde rel (comme des personnes, des objets, etc.) ou les associations entre ces entits Passage d'un schma conceptuel E-A un schma relationnel - une entit est reprsente par la relation : nom_de_l'entit (liste des attributs de l'entit) - une association M:N est reprsente par la relation : nom_de_l'association ( liste des identifiants des entits participantes, liste des attributs de l'association)
28
Ex . : CLIENT (IdCli, nom, ville) PRODUIT (IdPro, nom, prix, qstock) VENTE (IdCli, IdPro, date, qte) Reprsentation des donnes sous forme de tables :
CLIENT IdCli
X Y Z
Nom
Smith Jones Blake
Ville
Paris Paris Nice
PRODUIT
IdPro
P Q R S
Nom
Auto Moto Velo Pedalo
Prix
100 100 100 100
Qstock
10 10 10 10
VENTE
IdCli
X X X Y Y Z
IdPro
P Q R P Q Q
Date
Qte
1 2 3 4 5 6
SIMPLICITE DE PRSENTATION - reprsentation sous forme de tables OPRATIONS RELATIONNELLES - algbre relationnelle - langages assertionnels INDEPENDANCE PHYSIQUE - optimisation des accs - stratgie d'accs dtermine par le systme INDEPENDANCE LOGIQUE - concept de VUES MAINTIEN DE LINTEGRIT - contraintes d'intgrit dfinies au niveau du schma
30
fichiers relis par des pointeurs systmes IDS 1 et IMS 1 prcurseurs des SGBD modernes
apparition des premiers SGBD sparation de la description des donnes de la manipulation de celles-ci par les applications modles hirarchique et rseau CODASYL langages d'accs navigationnels SGBD IDMS, IDS 2 et IMS 2
modle relationnel les SGBDR reprsentent l'essentiel du march BD (aujourd'hui) architecture rpartie client-serveur
31
Principaux systmes Oracle DB2 (IBM) Ingres Informix Sybase SQL Server (Microsoft) O2 Gemstone
32
Chapitre 2
Le modle relationnel
I.
LES CONCEPTS
II. LES DPENDANCES FONCTIONNELLES III. LES RGLES D'INTGRIT IV. LES FORMES NORMALES
33
LES CONCEPTS
LE DOMAINE LA RELATION LES N-UPLETS LES ATTRIBUTS LE SCHMA DUNE RELATION LE SCHMA DUNE BDR LA REPRSENTATION
34
LE DOMAINE
ensemble de valeurs atomiques d'un certain type smantique Ex. : NOM_VILLE = { Nice, Paris, Rome } les domaines sont les ensembles de valeurs possibles dans lesquels sont puises les donnes deux ensembles peuvent avoir les mmes valeurs bien que smantiquement distincts Ex. : NUM_ELV = { 1, 2, , 2000 } NUM_ANNEE = { 1, 2, , 2000 }
35
LA RELATION
sous ensemble du produit cartsien de plusieurs domaines R D1 D2 ... Dn D1, D2, ... , Dn sont les domaines de R n est le degr ou larit de R
Ex.: Les domaines : NOM_ELV = { dupont, durant } PREN_ELV = { pierre, paul, jacques } DATE_NAISS = {Date entre 1/1/1990 et 31/12/2020} NOM_SPORT = { judo, tennis, foot } La relation ELEVE ELEVE NOM_ELV PREN_ELV DATE_NAISS ELEVE = { (dupont, pierre, 1/1/1992), (durant, jacques, 2/2/1994) } La relation INSCRIPT INSCRIPT NOM_ELV NOM_SPORT INSCRIPT = { (dupont, judo), (dupont, foot), (durant, judo) }
36
LES N-UPLETS
un lment d'une relation est un n-uplet de valeurs (tuple en anglais) un n-uplet reprsente un fait
Ex.: Dupont pierre est un lve n le 1 janvier1992 dupont est inscrit au judo
Une relation peut tre considre comme un PRDICAT n variables (x, y, z) vrai (x, y, z) R Ex. :
est_inscrit (dupont, judo) (dupont, judo) INSCRIPT
37
LES ATTRIBUTS
Chaque composante d'une relation est un attribut Le nom donn un attribut est porteur de sens Il est en gnral diffrent du nom de domaine Plusieurs attributs peuvent avoir le mme domaine
Ex. : La relation TRAJET : TRAJET NOM_VILLE NOM_VILLE Dans laquelle la premire composante reprsente la ville de dpart VD, la deuxime composante la ville darrive VA dun trajet.
38
Le schma d'une relation est dfini par : - le nom de la relation - la liste de ses attributs on note :
Ex.: ELEVE (NOM, PRENOM, NAISS) INSCRIPT (NOM_ELV, SPORT) TRAJET (VD, VA)
Extension et Intension - L'extension d'une relation correspond l'ensemble de ses lments (n-uplets) le terme RELATION dsigne une extension - L'intention d'une relation correspond sa signification le terme SCHMA DE RELATION dsigne l'intention d'une relation
39
Le schma d'une base de donnes est dfini par : - l'ensemble des schmas des relations qui la composent Notez la diffrence entre :
le schma de la BDR qui dit comment les donnes sont organises dans la base l'ensemble des n-uplets de chaque relation, qui reprsentent les donnes stockes dans la base
Conception de Schma Relationnel - Problme : Comment choisir un schma appropri ? - Mthodologies de conception cours ACSI cours SGBD 2
40
LA REPRSENTATION
1 RELATION = 1 TABLE U1 U2 U3 V1 V2 V3 W1 W2 W3 X1 X2 X3 Y1 Y2 Y3
41
Exemples :
- La relation ELEVE ELEVE : lment NOM dupont durant duval PRENOM Pierre Jacques Paul NAISS 1/1/1992 2/2/1994 3/03/81
- La relation INSCRIPT INSCRIPT : lment NOM_ELV Dupont Dupont Durant SPORT judo foot judo
- La relation TRAJET TRAJET : lment VD Nice Paris Rome VA paris rome nice
42
Boutons de dplacement
IUT de Nice - Cours SGBD1 43
II
Dpendance fonctionnelle
Soit R(A1, A2, ...., An) un schma de relation Soit X et Y des sous ensembles de {A1,A2,...An) On dit que Y dpend fonctionnellement de X (X->Y) si chaque valeur de X correspond une valeur unique de Y on crit : XY
une dpendance fonctionnelle est une proprit smantique, elle correspond une contrainte suppose toujours vrai du monde rel D.F. lmentaire
D.F. X -> A mais A est un attribut unique non inclus dans X et il nexiste pas de X inclus dans X tel que X -> A
44
La cl dune relation
attribut (ou groupe minimum d'attributs) qui dtermine tous les autres
Ex.: PRODUIT (no_prod, nom, prixUHT) no_prod (nom, prixUHT) no_prod est une cl
Une cl dtermine un n-uplet de faon unique Pour trouver la cl d'une relation, il faut examiner attentivement les hypothses sur le monde rel Une relation peut possder plusieurs cls, on les appelle cls candidates
Ex.: dans la relation PRODUIT, nom est une cl candidate ( condition qu'il n'y ait jamais 2 produits de mme nom)
45
Cl primaire
Cl trangre ou cl secondaire
attribut (ou groupe d'attributs) qui fait rfrence la cl primaire d'une autre relation
Ex.: CATEG (no_cat, design, tva) PRODUIT(no_prod, nom, marque, no_cat, prixUHT) no_cat dans PRODUIT est une cl trangre
46
Les rgles d'intgrit sont les assertions qui doivent tre vrifies par les donnes contenues dans une base
Le modle relationnel impose les contraintes structurelles suivantes :
La gestion automatique des contraintes dintgrit est lun des outils les plus importants dune base de donnes. Elle justifie elle seule lusage dun SGBD.
47
INTGRIT DE DOMAINE
contrle des valeurs des attributs contrle entre valeurs des attributs
48
INTGRIT DE CL
Les valeurs de cls primaires doivent tre : - uniques - non NULL Unicit de cl Unicit des n-uplets
Valeur NULL valeur conventionnelle pour reprsenter une information inconnue dans toute extension possible d'une relation, il ne peut exister 2 n-uplets ayant mme valeur pour les attributs cls
sinon 2 cls identiques dtermineraient 2 lignes identiques (d'aprs la dfinition dune cl), ce qui est absurde
49
INTGRIT RFRENCIELLE
Les valeurs de cls trangres sont 'NULL' ou sont des valeurs de la cl primaire auxquelles elles font rfrence
Relations dpendantes
LES DPENDANCES : Liaisons de un plusieurs exprimes par des attributs particuliers: cls trangres ou cls secondaires
50
Les contraintes de rfrence ont un impact important pour les oprations de mises jour, elles permettent dviter les anomalies de mises jour Exemple : CLIENT (no_client, nom, adresse) ACHAT (no_produit, no_client, date, qte) Cl trangre no_client dans ACHAT insertion tuple no_client = X dans ACHAT vrification si X existe dans CLIENT suppression tuple no_client = X dans CLIENT soit interdire si X existe dans ACHAT soit supprimer en cascade tuple X dans ACHAT soit modifier en cascade X = NULL dans ACHAT modification tuple no_client = X en X dans CLIENT soit interdire si X existe dans ACHAT soit modifier en cascade X en X dans ACHAT
51
IdPro de Vente est une cl trangre qui fait rfrence la cl primaire de Produit Appliquer lintgrit rfrentielle signifie que lon ne pourra pas avoir, aucun moment, une ligne de Vente avec un code produit IdPro inexistant dans la table Produit. Une valeur de cl trangre peut tre Null
52
La thorie de la normalisation
elle met en vidence les relations "indsirables" elle dfinit les critres des relations "dsirables" appeles formes normales Proprits indsirables des relations - Redondances - Valeurs NULL elle dfinit le processus de normalisation permettant de dcomposer une relation non normalise en un ensemble quivalent de relations normalises
53
La dcomposition
Objectif: - dcomposer les relations du schma relationnel sans perte dinformations - obtenir des relations canoniques ou de base du monde rel - aboutir au schma relationnel normalis Le schma de dpart est le schma universel de la base Par raffinement successifs ont obtient des sous relations sans perte dinformations et qui ne seront pas affectes lors des mises jour (non redondance)
5 FN, les critres sont de plus en plus restrictifs FNj FNi (j>i)
Notion intuitive de FN une bonne relation peut tre considre comme une fonction de la cl primaire vers les attributs restants
54
Une relation est en 1FN si tout attribut est atomique (non dcomposable) Contre-exemple ELEVE (no_elv, nom, prenom, liste_notes) Un attribut ne peut pas tre un ensemble de valeurs Dcomposition ELEVE (no_elv, nom, prenom) NOTE (no_elv, no_matiere, note)
55
Une relation est en 2FN si - elle est en 1FN - si tout attribut nappartenant pas la cl ne dpend pas dune partie de la cl Cest la phase didentification des cls Cette tape vite certaines redondances Tout attribut doit dpendre fonctionnellement de la totalit de la cl Contre-exemple une relation en 1FN qui n'est pas en 2FN COMMANDE (date, no_cli, no_pro, qte, prixUHT) elle n'est pas en 2FN car la cl = (date, no_cli, no_pro), et le prixUHT ne dpend que de no_pro Dcomposition COMMANDE (date, no_cli, no_pro, qte) PRODUIT (no_pro, prixUHT)
56
Une relation est en 3FN si - elle est en 2FN - si tout attribut nappartenant pas la cl ne dpend pas dun attribut non cl Ceci correspond la non transitivit des D.F. ce qui vite les redondances. En 3FN une relation prserve les D.F. et est sans perte. Contre-exemple une relation en 2FN qui n'est pas en 3FN VOITURE (matricule, marque, modle, puissance)
on vrifie qu'elle est en 2FN ; elle n'est pas en 3FN car la cl = matricule, et la puissance dpend de (marque, modle)
57
Une relation est en BCFN : - elle est en 1FN et - ssi les seules D.F. lmentaires sont celles dans lesquelles une cl dtermine un attribut BCNF signifie que l'on ne peut pas avoir un attribut (ou groupe d'attributs) dterminant un autre attribut et distinct de la cl Ceci vite les redondances dans lextension de la relation: mmes valeurs pour certains attributs de nuplets diffrents BCNF est plus fin que FN3 : BCNF FN3 Contre-exemple une relation en 3FN qui n'est pas BCNF CODEPOSTAL (ville, rue, code)
on vrifie qu'elle est FN3, elle n'est pas BCNF car la cl = (ville, rue) (ou (code, ville) ou (code, rue)), et code ville
58
Chapitre 3
Une fois la base et les tables cres, il faut pouvoir les exploiter. Lutilisateur final aura besoin de visualiser et saisir des donnes,deffectuer des calculs et dimprimer des rsultats. La rponse ces problmes de prsentation des donnes est fournie par : les formulaires destins tre affichs lcran les tats destins tre imprims.
59
Les formulaires
2 types de formulaires : de prsentation des donnes Ils permettent de saisir, ou modifier les donnes dune ou plusieurs tables sous une forme visuellement agrable de distribution ils ne sont attachs aucune table, et servent uniquement de page de menu pour orienter lutilisateur vers dautres formulaires ou tats
60
Formulaire rudimentaire
61
Permet dafficher les donnes de deux tables qui sont en relation lune avec lautre. Le formulaire principal affiche les donnes de la table principale Le sous formulaire affiche les donnes de la table lie Si lutilisateur change denregistrement principal, le sous formulaire est automatiquement mis jour.
62
63
2) Insrer dans le formulaire les Zones de texte lies aux champs de la Source de donnes
a) Slectionner loutil Zone de texte b) Insrer la Zone de texte avec son Etiquette associe
Pour afficher la fentre des proprits dun contrle, cliquer dessus avec le bouton droit de la souris
64
II
Les tats
Un tat permet dimprimer des enregistrements, en les groupant et en effectuant des totaux et des sous totaux.
Pied de groupe
Sous totaux :
Page 1 sur 1
Total gnral :
200
65
66
67
68
Chapitre 4
Lalgbre relationnelle
I.
Les oprations
69
Les oprations
70
UNION
L'union de deux relations R1 et R2 de mme schma est une relation R3 de schma identique qui a pour n-uplets les n-uplets de R1 et/ou R2 On notera :
R3 = R1 R2
R1 A 0 2 R2 A 0 4
B 1 3
B 1 5
R3 = R1 R2
R3 A 0 2 4
B 1 3 5
71
INTERSECTION
Lintersection entre deux relations R1 et R2 de mme schma est une relation R3 de schma identique ayant pour n-uplets les n-uplets communs R1 et R2 On notera :
R3 = R1 R2
R1 A 0 2 R2 A 0 4
B 1 3
B 1 5
R3 = R1 R2
R3 A 0
B 1
72
DIFFRENCE
La diffrence entre deux relations R1 et R2 de mme schma est une relation R3 de schma identique ayant pour n-uplets les n-uplets de R1 n'appartenant pas R2 On notera :
R3 = R1 R2
R1 A 0 2 R2 A 0 4
B 1 3
B 1 5
R3 = R1 R2
R3 A 2
B 3
73
PROJECTION
La projection d'une relation R1 est la relation R2 obtenue en supprimant les attributs de R1 non mentionns puis en liminant ventuellement les nuplets identiques On notera :
La projection permet dliminer des attributs dune relation Elle correspond un dcoupage vertical :
A1 A2 A3 A4
74
Requte 1 :
Quels sont les rfrences et les prix des produits ? PRODUIT (IdPro, Nom, Marque, Prix) IdPro
P Q R S
Nom
PS1 Mac PS2 Word
Marque
IBM Apple IBM Microsoft
Prix
1000 2000 3000 4000
IdPro
P Q R S
Prix
1000 2000 3000 4000
75
Requte 2 :
Quelles sont les marques des produits ? PRODUIT (IdPro, Nom, Marque, Prix) IdPro
P Q R S
Nom
PS1 Mac PS2 Word
Marque
IBM Apple IBM Microsoft
Prix
1000 2000 3000 4000
PRODUIT (Marque)
Marque
IBM Apple Microsoft
76
RESTRICTION
La restriction d'une relation R1 est une relation R2 de mme schma n'ayant que les n-uplets de R1 rpondant la condition nonce On notera :
R2 = R1 (condition)
la restriction d'une relation R1 suivant le critre "condition" o "condition" est une relation d'galit ou d'ingalit entre 2 attributs ou entre un attribut et une valeur
77
Requte 3 :
Quelles sont les produits de marque IBM ? PRODUIT (IdPro, Nom, Marque, Prix) IdPro
P Q R S
Nom
PS1 Mac PS2 Word
Marque
IBM Apple IBM Microsoft
Prix
1000 2000 3000 4000
IdPro
P R
Nom
PS1 PS2
Marque
IBM IBM
Prix
1000 3000
78
JOINTURE
La jointure de deux relations R1 et R2 est une relation R3 dont les n-uplets sont obtenus en concatnant les nuplets de R1 avec ceux de R2 et en ne gardant que ceux qui vrifient la condition de liaison On notera :
R3 = R1 R2 (condition)
la jointure de R1 avec R2 suivant le critre condition Le schma de la relation rsultat de la jointure est la concatnation des schmas des oprandes (s'il y a des attributs de mme nom, il faut les renommer) Les n-uplets de R1 R2 (condition) sont tous les couples (u1,u2) d'un n-uplet de R1 avec un n-uplet de R2 qui satisfont "condition"
La jointure de deux relations R1 et R2 est le produit
79
R1(A, B, C) A
A1 A2 A3 A4 B1 B2 B3 B4
R2(U, V) B
10 10 20 30
C
10 20 30
U
V1 V2 V3
R1 R2 (R1.C = R2.U)
A
A1 A1 A3 A4 B1 B2 B3 B4
B
10 10 20 30
C
10 10 20 30
U
V1 V1 V2 V3
80
Jointure naturelle
PRODUIT As P Qte
1 1 1
Idcli IdPro
X Y Z P Q P
Date
1/1/98 2/1/98 3/1/98
81
Auto-jointure
CLIENT As C2 Ville
Nice Paris Nice
IdCli Nom
X Y Z Smith Blake John
Ville
Nice Paris Nice
R1 C1.IdCli
X X Y Z Z
C1.Nom
Smith Smith Blake John John
Ville
Nice Nice Paris Nice Nice
C2.IdCli C2.Nom
X Z Y X Z Smith John Blake Smith John
82
R1 C1.IdCli
X X Y Z Z
C1.Nom
Smith Smith Blake John John
Ville
Nice Nice Paris Nice Nice
C2.IdCli C2.Nom
X Z Y X Z Smith John Blake Smith John
R2 = R1 (C2.Nom = John)
R2 C1.IdCli
X Z
C1.Nom
Smith John
Ville
Nice Nice
C2.IdCli C2.Nom
Z Z John John
R3 = R2 (C1.Nom)
R3 C1.Nom
Smith John
83
DIVISION
Soit deux relations R1 (A1, A2, , An, B1, B2, , Bm) R2 (B1, B2, , Bm) Si le schma de R2 est un sous-schma de R1. La division de R1 par R2 est une relation R3 dont : - le schma est le sous-schma complmentaire de R2 par rapport R1 - un n-uplet (a1, a2, , an) appartient R3 si (a1, a2, , an, b1, b2, , bm) appartient R1 pour tous (b1, b2, , bm) R2. On notera :
R3 = R1 R2
la division de R1 par R2
84
la division permet de rechercher dans une relation les sous n-uplets qui sont complts par tous ceux d'une autre relation Elle permet de rpondre des questions qui sont formules avec le quantificateur universel : "pour tout ..." Requte 6 :
Quels sont les lves qui sont inscrits tous les sports ? INSCRIPT Elve
toto tata toto toto
SPORT Sport
judo danse foot danse
Sport
judo foot danse
85
II
Le langage algbrique
Le langage algbrique permet de formuler une question par une suite d'oprations de l'algbre relationnelle Requtes sur le schma CLIENT, PRODUIT, VENTE CLIENT (IdCli, nom, ville) PRODUIT (IdPro, dsignation, marque, prix) VENTE (IdCli, IdPro, date, qte)
Requte 8 :
Donner les no des produits de marque Apple et de prix < 5000 F R1 = PRODUIT (marque = Apple') R2 = PRODUIT (prix < 5000) R3 = R1R2 RESUL = R3 (IdPro)
86
Requte 9 :
Donner les no des clients ayant achet un produit de marque Apple R1 = PRODUIT (marque = 'Apple') R2 = R1VENTE (R1.IdPro = VENTE.IdPro) RESUL = R2 (IdCli)
87
Requte 10 :
Donner les no des clients n'ayant achet que des produits de marque Apple R1 = VENTEPRODUIT (VENTE.IdPro = PRODUIT.IdPro) R2 = R1 (marque = 'Apple') R3 = R2 (IdCli) R4 = R1 (marque 'Apple') R5 = R4 (IdCli) RESUL = R3 R5
88
Requte 11 :
Donner les no des clients ayant achet tous les produits de marque Apple R1 = PRODUIT (marque = 'Apple') R2 = R1 (IdPro) R3 = VENTE (IdCli, IdPro) R4 = R3 R2
89
Arbre algbrique
(marque='Apple')
x (C.no-pro=P.no-pro)
(ville='Nice') CLIENT C
PRODUIT P
Optimisation de requtes
Plusieurs arbres quivalents peuvent tre dduits d'un arbre donn l'aide de rgles de transformation simples, telles que permutation des jointures et restrictions, permutation des projections et des jointures, etc. Ces transformations sont la base des techniques d'optimisation de requtes
90
Chapitre 5
II
91
Deux classes de langages correspondant la manire de considrer une relation : comme un ensemble, ou comme un prdicat
92
Langages Ensemblistes
SQL Paraphrasage du langage Algbrique Standard daccs aux BDR, norme ISO
Langages Prdicatifs
ALPHA
Dfini par Codd Non implant
QUEL
Systme INGRES (Berkeley)
DATALOG
BD dductives
QBE
Souvent offert au dessus de SQL
93
Exemple dune requte dans les 4 langages ALGBRIQUE, SQL, ALPHA, et QBE Donner les noms des clients qui ont achet le produit 'p1' ? ALGBRIQUE
R1 = CLIENTVENTE (CLIENT.IdCli=VENTE.IdCli) R2 = R1 (IdPro = 'p1') R3 = R2 (Nom)
SQL
SELECT C.Nom FROM client C, vente V WHERE C.IdCli = V.IdCli AND V.IdPro = 'p1'
ALPHA
RANGE OF v IS vente -- v est une variable tuple GET client.Nom : -- qualification v (v.IdCli = client.IdCli v.IdPro = 'p1')
QBE
CLIENT VENTE | IdCli | x | IdCli | x | Nom | P. | IdPro | p1 | Ville | | Date | | Qte | | | | |
94
II
QBE a t dvelopp par IBM (Zloof 77) L'ide de base de QBE est de formuler une question par un exemple de rponse dans les emplacements appropris d'une table vide
Ex.: Quels sont les noms des clients de Nice ? | IdCli | | nom | P.toto | ville | Nice | |
CLIENT
P. signifie "print" ; il indique le but de la question toto est une valeur exemple, i.e. un exemple de rponse possible (les valeurs exemples sont soulignes) Nice (non soulign) est une constante
Les variables domaines sont dsignes par des valeurs exemples soulignes
elles servent pour tablir des liens entre des lignes si aucun lien n'est ncessaire, comme dans l'exemple ci-dessus, on peut omettre la valeur exemple (P.toto peut tre rduit P.)
Une variable non imprime non prcdee de P. est implicitement quantifie par "il existe" Une variable peut tre quantifie par "quel-que-soit" en tapant ALL. devant son nom La disjonction (ou) est exprime en utilisant 2 lignes (2 exemples)
IUT de Nice - Cours SGBD1 95
1 Oprations de recherche
Recherche simple
Q1 Donner les nos des produits vendus VENTE | IdCli | | IdPro | P.p | date | | qte | | |
QBE limine automatiquement les doublons pour obtenir les doublons il faut spcifier ALL.
VENTE
| IdCli |
| IdPro | P.ALL.p
| date |
| qte | | |
Q2 Donner tous les renseignements sur tous les clients CLIENT | IdCli | P.x | nom | P.toto | ville | P.rome | |
96
Recherche qualifie
Q3 Donner les nos des produits de marque Apple et cotant moins de 8000 F. PRODUIT | IdPro | P.p | nom | | marque | prix | | Apple | <8000 |
Q4 Donner les noms des clients de Nice ou Rome CLIENT | IdCli | P.x | P.y | nom | | | ville | | Nice | | Rome |
Q5 Donner les nos des clients qui ont achet la fois le produit p1 et le produit p2 VENTE | IdCli | P. x | x | IdPro | p1 | p2 | date | | | qte | | | | |
Q6 Donner les noms des clients tris par villes et noms CLIENT | IdCli | | nom | ville | | P.AO(2).toto | P.AO(1).nice |
il faut spcifier AO. ou DO. pour obtenir des rsultats tris par ordre croissant ou dcroissant ; on peut prciser le champ majeur lorsque le tri s'effectue sur plusieurs champs
97
Q7 Donner les noms des clients qui ont achet le produit p1 CLIENT VENTE | IdCli | x | IdCli | x | nom | P.toto | IdPro | p1 | ville | | date | | qte | | | | |
Q8 Donner les noms des clients qui ont achet au moins un produit de marque Apple CLIENT PRODUIT VENTE | IdCli | x | IdPro | p | IdCli | x | nom | P.toto | nom | | IdPro | p | ville | | |
98
Q9 Donner les noms des clients qui n'ont pas achet le produit p1 CLIENT VENTE | IdCli | x | IdCli | x | nom | P.toto | IdPro | p1 | ville | | date | | qte | | | | |
Q10 Donner les nos des clients qui ont achet au moins un produit achet par le client c1 VENTE | IdCli | P. x | c1 | IdPro | p | p | date | | | qte | | | | |
Q11 Donner les nos des produits achets par plus qu'un seul client VENTE | IdCli | x | y
| |
| IdPro | P. p | p
| date | |
| |
| qte | | | | |
CONDITION BOX xy
Lorsque la condition est importante ou si l'on veut simplifier l'criture d'une requte on peut utiliser une bote condition
99
www.cours-ofppt.com
2 Fonctions de calcul
QBE fournit un ensemble de fonctions de calcul prdfinies : CNT.ALL SUM.ALL AVG.ALL MAX.ALL MIN.ALL CNT.UNQ.ALL SUM.UNQ.ALL AVG.UNQ.ALL
- ALL. est toujours spcifi - L'option UNQ. signifie "liminer les doublons avant d'appliquer la fonction" - Les valeurs nulles sont limines, sauf pour CNT.
Q12 Donner le nombre total de clients CLIENT | IdCli | P.CNT.ALL.x | nom | | ville | | |
Q13 Donner le nombre total de clients ayant achet des produits VENTE | IdCli | P.CNT.UNQ.ALL.x | IdPro | date | | | qte | | |
100
Q14 Donner le nombre de ventes du produit p1 VENTE | IdCli | P.CNT.ALL.x | IdPro | p1 | date | | qte | | |
Q15 Donner la qte totale vendue du produit p1 VENTE | IdCli | | IdPro | p1 | date | qte | | | P.SUM.ALL.qte |
Q16 Donner les nos des produits moins chers que tous ceux de marque Apple PRODUIT | IdPro | P.p | | nom | | | marque | prix | | | val | | Apple | prix |
Q17 Pour chaque produit vendu, donner le no de produit et la quantit totale vendue de ce produit VENTE | IdCli | | IdPro |P.G.p | date | | qte | | P.SUM.ALL.qte |
101
Q18 Changer la ville du client c1 par Nice CLIENT U. | IdCli | c1 | nom | | ville | Nice | |
Q19 Augmenter de 100F le prix du produit p1 PRODUIT U. | IdPro | p1 | p1 | nom | | | marque | prix | | val | | val + 100 | | |
102
Modification de plusieurs enregistrements Les enregistrements modifier sont spcifis par une valeur exemple (non une constante) de cl primaire
Q20 Doubler le prix de tous les produits Apple PRODUIT U. | IdPro | p | p | nom | | | marque | prix | Apple | val | | 2 val | | |
Q21 Mettre 0 toutes les qts achetes par les clients de Nice CLIENT VENTE U. | IdCli | x | IdCli | x | nom | | IdPro | | ville | Nice | date | | | | |
| qte | 0
Q22 Ajouter le client (c20, 'Duduche', 'Nice') dans la table CLIENT CLIENT I.
| ville | Nice
| |
Le nouvel enregistrement doit avoir une valeur de cl primaire non nulle, et distincte de toutes les valeurs de cls primaires existantes dans la table
103
Q23 La table TEMP a une seule colonne IdPro. Introduire dans TEMP les nos de tous les produits achets par le client c1 TEMP I. VENTE | IdPro | p | IdCli | c1 | | | IdPro | p | date | | qte | | |
| IdCli | c1
| nom |
| ville |
| |
La suppression n'est pas possible si le client figure dans la table VENTE (intgrit rfrentielle)
| IdCli |
| nom |
| ville | Nice
| |
A nouveau la suppression n'est possible qu'en respect de l'intgrit rfrentielle avec VENTE
104
Le dictionnaire de donnes contient la description des relations du schma relationnel de la BD Le DD est reprsent sous forme de relations prdfinies, parmi lesquelles :
CATALOG (TNAME, CREATOR, NCOLS, ...)
informations sur toutes les tables de la BD
105
5 Fermeture transitive
La fermeture transitive permet d'enrichir une relation 2 attributs de mme domaine, avec tous les couples qui se dduisent par transitivit Si on a (a, b) et (b, c) alors on ajoute (a, c)
Ex.
NOMENCLATURE A B E G Fermeture transitive C F A A C C E A A A C B C E F G E F G G ENSEMBLE A A C C E SOUS-ENSEMBLE B C E F G
La fermeture transitive ne peut pas tre exprime par une expression constante de l'algbre relationnelle
elle peut tre effectue par une srie de jointure/projection/union, mais le nbre d'oprations effectuer dpend du contenu de la relation
106
Pour rechercher les sous-ensembles de 3ime niveau il faut ajouter une ligne : NOMENCLATURE | ensemble | A | u | v | sous-ens | u | v | P.w | | | |
Pour rechercher les sous-ensembles de niveau n, il faut n lignes ; QBE fournit un raccourci en permettant d'indiquer le nombre de niveau : NOMENCLATURE
(3L) signifie "third level"
| ensemble | A
| sous-ens | P.u(3L)
| |
QBE permet aussi d'obtenir les sous-ensembles de dernier niveau l'aide du mot cl LAST
107
108
www.cours-ofppt.com
SQL peut tre utilis de 2 manires : - en mode interactif pour apprendre le langage
SQL est un langage pour les dveloppeurs
n'est pas destin un utilisateur final
Les requtes sont envoyes partir d'un terminal interactif auquel les rsultats sont retourns Ex. : SELECT C.ville FROM client C WHERE C.IdCli = 'c1'
La notion de curseur permet d'exploiter les rsultats d'une requte ligne ligne Un programme intgrant SQL doit tre prcompil par un prcompilateur SQL
109
Applications
SQL
ORACLE SYBASE DB2 INGRES INFORMIX
110
Plusieurs niveaux de normalisation - SQL1 : norme de base - SQL2 : extension de SQL1 meilleur support des rgles du relationnel types de donnes plus varis - SQL3 : intgration du modle objet
Quels sont les avantages de la normalisation ? Rduction des cots de formation Portabilit des applications Prennit des applications Communication facilite entre systmes
111
CRATION DE TABLES
, , , ,
, ,
112
Contraintes d'intgrit
NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK
valeur null impossible unicit d'un attribut cl primaire cl trangre plage ou liste de valeurs
Une contrainte qui ne fait rfrence qu' une seule colonne de la table peut faire partie intgrante de la dfinition de colonne
113
Toute opration de mise jour violant une des contraintes spcifies sera rejete Le systme garantit l'intgrit des donnes SQL2 permet de spcifier les actions entreprendre pour le maintien de l'intgrit rfrentielle, lors d'une suppression ou d'une modification d'un tuple rfrenc CASCADE cascader les suppressions ou modifications
par ex. si on supprime un produit dans la table PRODUIT, toutes les ventes correspondantes seront supprimes dans la table VENTE
SET NULL
RESTRICT
114
Exemple
CREATE TABLE client ( , IdCli CHAR(4) PRIMARY KEY nom CHAR(20) , ville CHAR(30) CHECK (ville IN ('Nice', 'Paris', 'Rome') , ) CREATE TABLE produit ( IdPro CHAR(6) PRIMARY KEY nom CHAR(30) NOT NULL UNIQUE marque CHAR(30) prix DEC(6,2) qstock SMALLINT
CHECK (qstock BETWEEN 0 AND 100)
, , , , ,
-- contrainte de table CHECK (marque <> 'IBM' OR qstock < 10) ) CREATE TABLE vente ( IdCli CHAR(4) IdPro date qte CHAR(6) DATE SMALLINT
, , , , ,
-- contrainte de table PRIMARY KEY (IdCli, IdPro, date) FOREIGN KEY (IdPro) REFERENCES produit
ON DELETE CASCADE ON UPDATE CASCADE
)
IUT de Nice - Cours SGBD1 115
CRATION D'INDEX
Les index permettent d'acclrer les recherches Le systme dtermine sa stratgie d'accs en fonction des index existants Les index sont automatiquement mis jour Il est indispensable de crer les index appropris pour acclrer le traitement des requtes Il ne faut cependant pas crer des index sur n'importe quel colonne ou groupe de colonnes, car les mises jour seraient ralenties inutilement par la maintenance de ces index Un index est supprim par la commande DROP INDEX
116
MODIFICATION DU SCHMA
La modification du schma n'est pas prvue dans SQL1 ; cependant la plupart des systmes permettent la suppression ou la modification d'une table l'aide des commandes : DROP TABLE ALTER TABLE
Ex.: ALTER TABLE client ADD COLUMN teleph CHAR(16)
117
DICTIONNAIRE DE DONNES
Le dictionnaire de donnes contient la description de tous les objets (relations, index, ...) de la BD Le DD est dcrit sous forme de tables systmes Par exemple, on peut citer dans DB2 :
SYSTABLES (NAME, CREATOR, COLCOUNT, ...) description des tables SYSCOLUMNS (NAME, TBNAME, COLTYPE, ...) description des colonnes
Le DD peut tre consult de la mme manire que les tables de base avec le langage d'interrogation il faut toutefois connatre les noms et les schmas des tables systmes
118
Ajout INSERT
INSERT INTO VALUES client (IdCli, nom, ville) ('c100', 'Duduche', 'Nice')
Suppression DELETE
DELETE FROM produit P WHERE P.IdPro = 'p4'
119
LA COMMANDE SELECT
La commande SELECT permet de rechercher des donnes partir de plusieurs tables ; le rsultat est prsent sous forme d'une table rponse
On peut introduire dans la clause FROM un synonyme (alias) un nom de table en le plaant immdiatement aprs le nom de la table Les noms de table ou les synonymes peuvent tre utiliss pour prfixer les noms de colonnes dans le SELECT Les prfixes ne sont obligatoires que dans des cas particuliers (par ex. pour une auto-jointure) ; leur emploi est cependant conseill pour la clart Un alias est utilis par SQL comme une variable de parcours de table (dite variable de corrlation) dsignant tout instant une ligne de la table
120
Q2 Donner les diffrentes marques de produit SELECT FROM DISTINCT P.marque produit P
Contrairement lalgbre relationnelle, SQL n'limine pas les doublons Pour liminer les doublons il faut spcifier DISTINCT
Q3 Donner les rfrences des produits et leurs prix majors de 20% SELECT FROM P.IdPro, P.prix * 1.20 produit P
Il est possible d'effectuer des oprations arithmtiques (+, -, *, /) sur les colonnes extraites
Q4 Donner tous les renseignements sur les clients SELECT FROM * client
121
La condition de recherche (qualification) est spcifie aprs la clause WHERE par un prdicat Un prdicat simple peut-tre :
- un prdicat dgalit ou dingalit (=, <>, <, >, <=, >=) - un prdicat LIKE - un prdicat BETWEEN - un prdicat IN - un test de valeur NULL - un prdicat EXISTS - un prdicat ALL ou ANY
122
Exemples
Q6 Lister les clients dont le nom comporte la lettre A en 2ime position SELECT FROM WHERE * client C C.nom LIKE '_A%'
Le prdicat LIKE compare une chane avec un modle (_) remplace n'importe quel caractre (%) remplace n'importe quelle suite de caractres
Q7 Lister les produits dont le prix est compris entre 5000F et 12000F SELECT FROM WHERE * produit P P.prix BETWEEN 5000 AND 12000
Q8 Lister les produits de marque IBM, Apple ou Dec SELECT FROM WHERE * produit P P.marque IN ('IBM', 'Apple', 'Dec')
Q9 Lister les produits dont le prix est inconnu SELECT FROM WHERE * produit P P.prix IS NULL
123
124
Q10 Lister les produits de marque IBM dont le prix est infrieur 12000F SELECT FROM WHERE * produit P P.marque = 'IBM' AND P.prix < 12000
USER Le mot rserv USER dsigne l'usager courant Valeurs nulles La valeur NULL est une valeur particulire signifiant qu'une donne est manquante, sa valeur est inconnue
Dans une expression arithmtique, si l'un des termes est null, alors l'expression entire prend la valeur NULL Un prdicat de comparaison (=, <>, <, <=, >, >=) prend la valeur logique "inconnu" si l'un des termes de la comparaison est NULL
AND F V ? F F F F V F V ? ? F ? ? OR F V ? F F V ? V V V V ? ? V ? NOT F V ? V F ?
L'ordre de tri est prcis par ASC (croissant) ou DESC (dcroissant) ; par dfaut ASC
126
Q13 Donner les noms des clients qui ont achet le produit de nom 'PS1' SELECT FROM WHERE C.nom client C , produit P, vente V V.IdCli = C.IdCli AND V.IdPro = P.IdPro AND P.nom = 'PS1'
127
Auto-jointure
Q14 Donner les noms des clients de la mme ville que John SELECT FROM WHERE C2.nom client C1 , client C2 C1.ville = C2.ville AND C1.nom = 'John' AND C2.nom <> 'John'
Cet exemple utilise, pour le couplage des villes, la jointure de la table Client avec elle-mme (auto-jointure) Pour pouvoir distinguer les rfrences ville dans les 2 copies, il faut introduire 2 alias diffrents C1 et C2 de la table client
128
Jointures externes
La jointure externe permet de retenir lors d'une jointure les lignes d'une table qui n'ont pas de correspondant dans l'autre table, avec des valeurs nulles associes On distingue jointure externe gauche, droite et complte selon que l'on retient les lignes sans correspondant des 2 tables ou seulement d'une SQL2 offre la possibilit de spcifier les jointures externes au niveau de la clause FROM selon la syntaxe suivante :
FROM table1 [NATURAL] [{LEFT|RIGHT}] JOIN table2
[ON ( liste de colonnes = liste de colonnes) ] NATURAL signifie jointure naturelle, c.a.d l'galit des attributs de mme nom
Q15 Lister tous les clients avec le cas chant leurs achats SELECT FROM C.IdCli, C.nom, C.ville V.IdPro, V.date, V.qte client C NATURAL LEFT JOIN vente V
129
Sous-requtes
SQL permet l'imbrication de sous-requtes au niveau de la clause WHERE
d'o le terme "structur" dans Structured Query Language
dans des prdicats de comparaison (=, <>, <, <=, >, >=) dans des prdicats IN dans des prdicats EXISTS dans des prdicats ALL ou ANY
Une sous-requte dans un prdicat de comparaison doit se rduire une seule valeur ("singleton select" ) Une sous-requte dans un prdicat IN, ALL ou ANY doit reprsenter une table colonne unique L'utilisation de constructions du type "IN sous-requte" permet d'exprimer des jointures de manire procdurale ... ce qui est dconseill !!
130
Exemple
Q16 Donner les noms des clients qui ont achet le produit 'p1' Avec sous-requte C.nom client C IdCli IN ( SELECT V.IdCli FROM vente V WHERE P.IdPro = 'p1' )
Avec jointure C.nom client C , vente V C.IdCli = V.IdCli AND V.IdPro = 'p1'
131
Requtes quantifies
Le prdicat EXISTS Il permet de tester si le rsultat d'une sous-requte est vide ou non
Q17 Donner les noms des produits qui n'ont pas t achet SELECT FROM WHERE C.nom produit P NOT EXISTS ( SELECT * FROM vente V WHERE V.IdPro = P.IdPro )
Il permet de rpondre des questions quantifies par "pour tout..." : x | P(x) ( x | P(x) )
Q18 Donner les noms des produits qui ont t achets par tous les clients de Nice
SELECT FROM WHERE P.nom produit P NOT EXISTS ( SELECT * FROM client C WHERE C.ville = 'Nice' AND NOT EXISTS ( SELECT * FROM vente V WHERE C.IdCli = V.IdCli AND V.IdPro = P.IdPro ) )
132
Le prdicat ALL ou ANY Ils permettent de tester si un prdicat de comparaison est vrai pour tous (ALL) ou au moins un (ANY) des rsultats d'une sous-requte
Q19 Donner les nos des clients ayant achet un produit en quantit suprieure chacune des quantits de produits achetes par le client 'c1'
SELECT FROM WHERE V.IdCli vente V V.qte >= ALL ( SELECT W.qte FROM vente W WHERE W.IdCli = 'c1' )
Q20 Donner les nos des clients ayant achet un produit en quantit suprieure au moins l'une des quantits de produits achetes par le client 'c1'
SELECT FROM WHERE V.IdCli vente V V.qte >= ANY ( SELECT W.qte FROM vente W WHERE W.IdCli = 'c1' )
133
Les prdicats ALL et ANY sont redondants, ils peuvent s'exprimer avec EXISTS
x ANY ( SELECT FROM WHERE
y t p
y t p
134
L'union limine les doublons, pour obtenir les doublons il faut spcifier ALL aprs UNION UNION est une opration binaire, on peut crire : (x UNION y) UNION z ou x UNION (y UNION z) Les parenthses sont ncessaires dans certains cas, par ex. :
(x UNION ALL y) UNION z n'est pas quivalent x UNION ALL (y UNION z)
135
Fonctions de calculs
SQL fournit des fonctions de calcul oprant sur l'ensemble des valeurs d'une colonne de table COUNT SUM AVG MAX MIN nombre de valeurs somme des valeurs moyenne des valeurs plus grande valeur plus petite valeur
Q22 Donner le nombre total de clients SELECT FROM COUNT ( IdCli ) client
Q23 Donner le nombre total de clients ayant achet des produits SELECT FROM COUNT ( DISTINCT IdCli ) vente
On peut faire prcder l'argument du mot cl DISTINCT pour indiquer que les valeurs redondantes doivent tre limines avant application de la fonction
136
La fonction spciale COUNT (*) compte toutes les lignes dans une table Les valeurs nulles ne sont pas prises en compte, sauf pour COUNT(*) Si l'argument est un ensemble vide, COUNT renvoie la valeur 0, les autres fonctions renvoyant la valeur NULL Exemples :
Q24 Donner le nombre total de 'PS1' vendus SELECT FROM WHERE SUM ( V.qte ) vente V , produit P P.IdPro = V.IdPro AND P.nom = 'PS1'
Q25 Donner les noms des produits moins chers que la moyenne des prix de tous les produits SELECT FROM WHERE P1.nom produit P1 P1.prix < ( SELECT FROM )
Cet exemple montre un "singleton select " pour calculer la moyenne des prix
137
La clause GROUP BY
La clause GROUP BY permet de partitionner une table en plusieurs groupes Toutes les lignes d'un mme groupe ont la mme valeur pour la liste des attributs de partitionnement spcifis aprs GROUP BY Les fonctions de calcul oprent sur chaque groupe de valeurs Exemples :
Q26 Donner pour chaque rfrence de produit la quantit totale vendue SELECT FROM GROUP BY V.IdPro, SUM ( V.qte ) vente V V.IdPro
Q27 Donner la quantit totale achete par chaque client (0 pour ceux qui n'ont rien achet) SELECT FROM GROUP BY C.IdCli, SUM ( V.qte ) client C NATURAL LEFT JOIN vente V C.IdCli
138
La clause HAVING
La clause HAVING permet de spcifier une condition de restriction des groupes Elle sert liminer certains groupes, comme WHERE sert liminer des lignes Exemples
Q28 Donner les noms des marques dont le prix moyen des produits est < 5000F SELECT FROM GROUP BY HAVING P.marque, AVG ( P.prix ) produit P P.marque AVG ( P.prix ) < 5000
Q29 Donner les rfrences des produits achets en qte > 10 par plus de 50 clients SELECT FROM WHERE GROUP BY HAVING P.marque, AVG ( P.prix ) vente V V.qte > 10 V.IdPro COUNT (*) > 50
139
Exemple
Q30 Donner les nos, les prix, les marques et la quantit maximum vendue de tous les produits IBM, Apple ou Dec dont la quantit totale vendue est suprieure 500 et dont les quantits vendues sont > 10 SELECT FROM WHERE GROUP BY HAVING P.IdPro, P.prix, P.marque, 'Qte max vendue = ', MAX ( V.qte) produit P , vente V P.IdPro = V.IdPro AND P.marque IN ('IBM', 'Apple', 'Dec') AND V.qte > 10 P.IdPro, P.prix, P.marque SUM ( V;qte ) > 500
140
Du seul point de vue logique, on peut considrer que le rsultat d'un SELECT est construit suivant les tapes :
1. FROM
la clause FROM est value de manire produire une nouvelle table, produit cartsien des tables dont le nom figure aprs FROM
2. WHERE
le rsultat de l'tape 1 est rduit par limination de toutes les lignes qui ne satisfont pas la clause WHERE
3. GROUP BY
le rsultat de l'tape 2 est partitionn selon les valeurs des colonnes dont le nom figure dans la clause GROUP BY
dans l'exemple ci-dessus, les colonnes sont P.IdPro, P;prix et P.marque ; en thorie il suffirait de prendre uniquement P.IdPro comme colonne dfinissant les groupes (puisque le prix et la marque sont dtermins par le no de produit)
SQL oblige de faire apparatre dans la clause GROUP BY toutes les colonnes qui sont mentionnes dans la clause SELECT
4. HAVING
les groupes ne satisfaisant pas la condition HAVING sont limins du rsultat de l'tape 3
5. SELECT
chacun des groupes gnre une seule ligne du rsultat
141
La commande INSERT
La commande INSERT permet d'ajouter de nouvelles lignes une table INSERT INTO table [ (liste de colonnes) ] {VALUES (liste de valeurs) | requte}
Dans le cas o la liste de colonnes n'est pas spcifie tous les attributs de la table cible doivent tre fournis dans l'ordre de dclaration Si seulement certaines colonnes sont spcifies, les autres sont insres avec la valeur NULL Une insertion partir d'une requte permet d'insrer plusieurs lignes dans la table cible partir d'une autre table
142
143
La commande UPDATE
La commande UPDATE permet de changer des valeurs d'attributs de lignes existantes UPDATE SET [ WHERE table liste d'affectations qualification ]
L'absence de clause WHERE signifie que les changements doivent tre appliqus toutes les lignes de la table cible Exemples
Q33 Augmenter de 20% les prix de tous les produits UPDATE SET produit prix = prix * 1.2
Q34 Augmenter de 50% les prix des produits achets par des clients de Nice UPDATE SET WHERE produit prix = prix * 1.5 EXISTS ( SELECT * FROM vente V , client C WHERE V.IdCli = C.IdCli AND C.ville = 'Nice' )
144
La commande DELETE
La commande DELETE permet d'enlever des lignes dans une table DELETE FROM [ WHERE table qualification ]
L'absence de clause WHERE signifie que toutes les lignes de la table cible sont enleves Exemples
Q35 Supprimer les ventes antrieures au 01-jan-1994 DELETE FROM WHERE vente date < '01-jan-1994'
Q36 Supprimer les ventes des clients de Nice antrieures au 01-mar-1994 DELETE FROM WHERE vente date < '01-mar-1994' AND IdCli IN ( SELECT C.IdCli FROM client C WHERE C.ville = 'Nice' )
145
La notion de transaction
Une transaction est une unit logique de traitement qui est soit compltement excute, soit compltement abandonne Une transaction fait passer la BD d'un tat cohrent un autre tat cohrent Une transaction est termine - soit par COMMIT - soit par ROLLBACK
146
La commande COMMIT
La commande COMMIT termine une transaction avec succs ; toutes les mises jour de la transaction sont valides On dit que la transaction est valide Tous ses effets sont alors connus des autres transactions s'excutant concurremment
La commande ROLLBACK
La commande ROLLBACK termine une transaction avec chec ; toutes les mises jour de la transaction sont annules (tout se passe comme si la transaction n'avait jamais exist) On dit que la transaction est annule Aucune des oprations effectues par cette transaction n'est connue des autres transactions
147
Chaque crateur d'une table est propritaire de cette table et obtient tous les droits d'accs cette table (i.e. les droits d'effectuer les oprations SELECT, INSERT, UPDATE, DELETE) Le propritaire d'une table peut passer ses privilges slectivement d'autres utilisateurs ou tout le monde (PUBLIC)
La commande GRANT
La commande GRANT permet de passer des droits d'accs un utilisateur ou un groupe d'utilisateurs GRANT privilges ON table TO bnficiaire [WITH GRANT OPTION]
soit ALL (tous les privilges) soit une liste de privilges parmi : SELECT INSERT UPDATE [(liste de colonnes)]
l'omission de la liste de colonnes signifie toutes les colonnes
DELETE
148
L'option WITH GRANT OPTION permet de passer un privilges avec le droit de le transmettre Exemples
GRANT SELECT ON produit TO PUBLIC GRANT INSERT, UPDATE ON produit TO toto
La commande REVOKE
149
5 Les vues
Une vue est une table virtuelle calcule partir des tables de base par une requte Une vue apparat l'utilisateur comme une table relle, cependant les lignes d'une vue ne sont pas stockes dans la BD (uniquement sa dfinition est enregistre dans le DD) Les vues assurent l'indpendance logique Elles peuvent tre utilises pour cacher des donnes sensibles, ou pour montrer des donnes statistiques Ex.:
CREATE VIEW SELECT FROM prix-cach AS P.IdPro, P.nom, P.marque produit P
CREATE VIEW stat-vente ( IdPro, tot-qte ) AS SELECT V.IdPro, SUM ( V.qte ) FROM vente V GROUP BY V.IdPro
150
La commande CREATE VIEW cre la dfinition d'une vue CREATE VIEW vue [(liste de colonnes)] AS requte [ WITH CHECK OPTION ] Ex.:
CREATE VIEW produitIBM ( no, nom, prx ) AS SELECT P.IdPro, P.nom, P.prix FROM produit P WHERE P.marque = 'IBM'
Les donnes des tables de bases peuvent tre modifies dans certains cas au travers dune vue, mais cela nest pas toujours possible L'option WITH CHECK OPTION permet de vrifier que les lignes insres dans une table de base au-travers d'une vue vrifient les conditions exprimes dans la requte. Cela permet d'imposer des contraintes d'intgrit lors des mises jour au travers de la vue
151
Indpendance logique
Le concept de vue permet d'assurer une indpendance des applications vis--vis des modifications du schma
Simplification d'accs Les vues simplifient l'accs aux donnes en permettant par exemple une pr-dfinition des jointures et en masquant ainsi l'utilisateur l'existence de plusieurs tables Ex. : La vue qui calcule les moyennes gnrales pourra tre consult par la requte : SELECT * FROM Moyennes Confidentialit des donnes Une vue permet d'liminer des lignes sensibles et/ou des colonnes sensibles dans une table de base
152
153
Chapitre 6
Ce chapitre aborde les techniques mises en uvre par les SGBD pour traiter les problmes de concurrence daccs, de reprise aprs panne, de scurit, dintgrit, ainsi que des mthodes daccs aux donnes.
I II
154
Gestion de transactions
La notion de transaction
Unit logique de traitement qui est : - soit compltement excute - soit compltement abandonne
Une transaction est une unit atomique de traitement Une transaction fait passer la base de donnes d'un tat cohrent un autre tat cohrent Si une transaction ne va pas son terme pour une raison ou pour une autre, la base est restaure dans l'tat o elle se trouvait avant que la transaction ne dmarre
155
Exemple du banquier : le transfert d'une somme S dun compte C1 vers un compte C2 (1) dbut-transaction (2) lire C1 (3) C1 := C1 - S (4) crire C1 (5) lire C2 (6) C2 := C2 + S (7) crire C2 (8) fin-transaction
Cette transaction est constitue dun ensemble dactions lmentaires, mais elle doit tre traite comme une seule opration. Autrement dit le gestionnaire des transactions doit assurer que toutes les actions de la transaction sont excutes, ou bien quaucune ne lest.
156
Un suicide Au cours de son excution la transaction dtecte certaines conditions qui font que la poursuite de son excution s'avre impossible, elle peut se supprimer en excutant une instruction d'annulation ROLLBACK en SQL
Dans ces deux derniers cas, tout doit se passer comme si la transaction n'avait jamais existe. Il faut donc en quelque sorte lui faire faire marche arrire et effacer de la base de donnes toute trace de son excution : nous dirons que la transaction a t annule.
IUT de Nice - Cours SGBD1 157
Un systme de gestion transactionnel doit garantir les proprits suivantes (rsumes par le vocable ACID) :
Atomicit
Une transaction doit effectuer toutes ses mises jour ou rien faire du tout
Cohrence
La transaction doit faire passer la base de donnes dun tat cohrent un autre
Isolation
Les rsultats dune transaction ne doivent tre visibles aux autres transactions quune fois la transaction valide
Durabilit
Ds quune transaction valide ses modifications, le systme doit garantir que ces modifications seront conserves en cas de panne
158
Des transactions excutes concurremment peuvent interfrer et mettre la base de donnes dans un tat incohrent. Considrons deux transactions T1 et T2 qui s'intressent un mme objet A Les deux seules oprations possibles sur A, sont : lire et crire Quatre possibilits : 1. LECTURE-LECTURE ET PARTAGE Aucun conflit un mme objet peut toujours tre partag en lecture
159
2. ECRITURE-ECRITURE ET PERTE DE MISE A JOUR T2 vient "craser" par une autre criture celle effectue par T1
Etat de la base A = 10
Transaction T2 lire A A := A + 50
A = 20 A = 60
crire A
160
3. ECRITURE-LECTURE ET LECTURES IMPROPRES T2 lit une valeur modifie par T1 et ensuite T1 est annule
Transaction T2 -
A = 30
lire A
161
Transaction T2 lire A -
A = 20
lire A
De nombreuses solutions ont t proposes pour traiter le problme des accs concurrents. Un exemple important est le protocole appel verrouillage deux phases qui est un des plus utiliss.
162
Verrouillage
Il repose sur les deux actions : verrouiller (A) : acqurir un contrle de l'objet A librer (A) : librer l'objet A
Il y a deux types de verrous : Verrous exclusifs (X locks) ou verrous dcriture Verrous partags (S locks) ou verrous de lecture
163
164
Phnommes indsirables
La privation
Une transaction risque d'attendre un objet indfiniment si chaque fois que cet objet est libr, il est pris par une autre transaction.
Pour traiter ce problme, on peut organiser sur chaque verrou une file d'attente avec une politique "premire arrive", "premire servie".
On peut construire le graphe "qui attend quoi" : - les sommets reprsentent les transactions Ti - on aura une arte Ti ---> Tj si Ti est en attente de Tj Il y a situation d'interblocage lorsque le graphe contient un cycle.
165
166
Srialisabilit
Une excution entrelace donne dun ensemble de transactions est considre correcte si elle est srialisable cest--dire, si elle produit le mme rsultat quune certaine excution en srie des mmes transactions sexcutant lune aprs lautre Ordonnancement Etant donn un ensemble de transactions, toute excution de ces transactions (entrelace ou non) est appel un ordonnancement
Thorme de verrouillage deux phases : Si toutes les transactions satisfont le protocole de verrouillage deux phases , tous les ordonnancements entrelacs sont alors srialisables.
167
Pour chaque transaction, tous les verrouillages doivent prcder toutes les librations de verrous. Aprs labandon dun verrou, une transaction ne doit plus jamais pouvoir obtenir de verrous On distingue deux phases : - acquisition des verrous - libration des verrous - Dans la pratique, la seconde phase est souvent condense en une seule opration de COMMIT ou de ROLLBACK la fin de la transaction. - Dans le but de rduire les conflits sur les ressources et, par la mme, damliorer les performances, les systmes rels autorisent la construction de transactions qui ne sont pas deux phases cest-dire qui abandonnent prmaturment des verrous (avant le COMMIT) et obtiennent ensuite de nouveaux verrous.
168
Niveaux disolation
Tout protocole qui nest pas compltement srialisable ne peut tre considr sr, cependant, les systme autorisent des transactions sexcutant un niveau disolation non sr qui pourrait violer la srialisabilit de trois faons particulires : Lecture salissante
Supposons que la transaction T1 effectue une mise jour sur une certaine ligne, que la transaction T2 rcupre ensuite cette ligne et que la transaction T1 se termine par un ROLLBACK. La transaction T2 a alors observ une ligne qui nexiste plus, et dans un certain sens na jamais exist (car la transaction T1 na en fait jamais t excute).
Fantmes
Supposons que la transaction T1 rcupre un ensemble de lignes qui satisfont une certaine condition. Supposons que la transaction T2 insre ensuite une ligne qui satisfait la mme condition. Si la transaction T1 rpte maintenant la mme demande, elle observera une ligne qui nexistait pas prcdemment un fantme .
169
READ COMMITTED
Lecture valide
REPEATABLE READ
Lecture renouvelable
SERIALIZABLE
Srialisable
170
II
Analysons un exemple :
T1 T2 T3 T4 T5
temps t panne
Une panne se produit au temps t Les deux transactions T3 et T5 sont en cours d'excution Les transactions T1, T2 et T4 s'taient termines correctement avant la panne Les effets de T1, T2 et T4 doivent survivre la panne Ceux de T3 et T5 doivent tre limins. Que faut-il faire ?
dfaire le travail de T3 et T5 refaire, totalement ou partiellement, le travail de T1, T2 et T4 partir d'un tat de la base conserv au pralable
(bien que l'on ait gard une trace du fait que T1,T2 et T4 ont atteint leur point de confirmation, il pourra se faire que la panne a dtruit les modifications effectues par T1,T2 et T4 sur la base)
171
Ce journal est compos d'articles qui indiquent les vnements principaux qui affectent la base de donnes :
dbut d'une nouvelle transaction, fin d'une transaction et donc confirmation de ses mises jour, annulation d'une transaction, pour une mise jour on conserve : 1) l'identificateur de la transaction effectuant la maj, 2) l'identificateur du n-uplet modifi, 3) l'ancienne valeur, 4) la nouvelle valeur affecte.
De plus des sauvegardes de la base sont faites intervalles rguliers (sur bande ou sur d'autres disques). Un tel vnement est enregistr dans le journal.
172
Redmarrage du SGBD
Nous supposons qu'il y a eu une sauvegarde totale de la base au temps indiqu ci-dessous :
T1 T2 T3 T4 T5 Point de sauvegarde
temps t panne
refaire le travail des transactions ayant t confirmes avant la panne (ici T1, T2 et T4) dfaire le travail de celles qui taient actives au moment de la panne (ici T3 et T5)
Aucune des modifications de T5 n'apparat dans la sauvegarde donc T5 est dj dfaite. Toutes les modifications faites par T1 figurent dans la sauvegarde, donc T1 n'est pas refaire. Refaire T2 et T4 ncessite de parcourir le journal vers l'avant partir du point de sauvegarde. Puisque le journal contient les nouvelles valeurs, il suffit de refaire chacune des modifications (toutes les modifications faites avant la sauvegarde figurent dj dans la base). Dfaire T3 ncessite un parcours reculons du journal : pour chaque modification faites, il faut revenir l'ancienne valeur et ceci jusqu' ce qu'on rencontre le dbut-transaction de T3.
173
III Scurit
Protection des donnes contre les accs non autoriss
Les contrles d'accs vrifient l'identit des usagers qui se prsentent et en consquence leur assignent des droits d'accs sur tel ou tel ensemble de donnes.
174
Cette procdure de rvocation complique le mcanisme d'autorisation car il faut appliquer recursivement les procdures de rvocation puisqu'un usager auquel on retire un privilge a pu le transmettre d'autres.
175
Cryptographie
La cryptographie a pour but de stocker ou de transporter l'information sous une forme telle que seuls les usagers en possession de la cl de dcryptage sont susceptibles de la comprendre.
Texte en clair cryptage dcryptage Texte chiffr ou cryptogramme cl de cryptage cl de dcryptage Texte en clair
Cryptographie cl publique
Elle fait appel 2 cls
une cl prive (garde secrte par son dtenteur) qui ne sert qu'au dcryptage une cl publique qui n'est utilise que pour crypter
L'algorithme de cryptage C et l'algorithme de dcryptage sont choisis de telle sorte que le calcul de D soit trs complexe mme si l'on connat compltement C
Paul utilise la cl publique Cjacques de Jacques pour crypter le message qu'il transmet Jacques. Jacques dchiffre le message reu en lui appliquant Djacques(Cjacques(M)) , personne d'autre n'est capable de dchiffrer le message Cjacques(M).
176
L'algorithme du MIT
1. choisir 2 nombres premiers, p et q, chacun plus grands que 10100 2. calculer n=p.q et z=(p-1)(q-1) 3. choisir un nombre d premier avec z 4. chercher un nombre e tel que e.d=1(modz)
Dcouper le texte en une suite de blocs de telle sorte que chaque bloc de texte en clair M soit un nombre tel que 0<=M<n pour crypter : C = Me(mod n) la cl publique = (e,n) la cl prive = d
La scurit de la mthode rside dans la difficult dcomposer de trs grands nombres en facteurs premiers.
Ex.: p=3, q=11, n=33, z=20, d=7, e=3 Texte en clair M M3 Texte chiffr C=M3(mod 33) C7 C7(mod 33) Texte en clair N 14 2744 5 78125 14 N I 9 729 3 2187 9 I C 3 27 27 3 C E 5 125 26 5 E
177
IV Intgrit
Contrle de la validit des donnes
Contrainte dintgrit
Une contrainte d'intgrit est une assertion qui doit tre vrifie par des donnes des instants dtermins.
Les contraintes d'intgrit permettent de prciser davantage la partie intentionnelle (smantique) de la base de donnes. Une base de donnes est cohrente vis vis des contraintes qui sont exprimes, si ces contraintes sont respectes par les donnes de la base.
178
Expression des contraintes L'criture des diffrents types de CI est prvue dans de nombreux langages Par exemple la clause CHECK de SQL/ORACLE Vrification des contraintes Les CI sont vrifies lors des mises jour (en fin de transaction) C'est trs coteux en temps machine, il est essentiel de pouvoir vrifier ces contraintes de manire efficace Violation des contraintes Une mise jour qui provoque la violation d'une CI est refuse L'intgrit de la base de donnes est prserve par le SGBD
179
Un dclencheur (trigger) permet de dfinir un ensemble dactions qui sont dclenches automatiquement par le SGBD lorsque des mises jour sont effectues. Les actions sont enregistres dans la base et plus dans les programmes dapplication Cette notion nest pas encore spcifie dans SQL 2 Elle est prsente dans les principaux SGBD (Oracle, Sybase, DB2, SQL Server)
180
V Mthodes daccs
L'adresse relative d'un article (ou d'un paquet contenant l'article) est obtenu par une fonction de hachage applique la cl
cl 1 cl 2 cl 3 article 3 h(cl3)=h(cl2) fonction de dispersion h(cl1) article 2
collision
article 1
Avantages
rapidit si l'on parvient raliser un faible taux de collisions
Inconvnients
pas d'accs squentiel tri dans l'ordre des cls
IUT de Nice - Cours SGBD1 181
L'adresse relative d'un article (ou d'un paquet contenant l'article) est recherche partir de la cl dans une table d'index
index
cl 1
cl 1
article 2
cl 2
cl 2
article 1
182
183
Niveau 3
12
21
30
Niveau 2
12
14
18 21
23 25
30
Niveau 1
pointeur interne permettant de reprsenter l'arbre pointeur externe sur l'adresse relative d'un article
Les paquets de niveau k+1 contiennent les plus grandes cls des paquets de niveau k
184
Chapitre 7
I-
185
L'architecture client serveur est caractrise par une rpartition des programmes entre processus client et processus serveur communiquant sur un rseau.
REQUTE
CLIENT
REPONSE
SERVEUR
Dialogue client serveur Le client est le processus qui adresse un serveur une requte spcifique correspondant une demande de service. Le serveur est un processus l'coute d'une demande de service en provenance d'un processus client.
186
Ils excutent des requtes SQL et des procdures stockes pour le compte du client Aujourd'hui, bass sur des SGBD relationnels
187
Le middleware
Le middleware est ce logiciel du milieu qui assure les dialogues entre clients et serveurs souvent htrognes. Ensemble des services logiciels construits audessus d'un protocole de transport afin de permettre l'change de requtes et des rponses associes entre client et serveur de manire transparente.
188
Un systme ouvert est un sytme dont les interfaces obissent des standards internationaux tablis au sein de structures accessibles tous. De nombreux groupes proposent des standards, dont l'ISO, l'ANSI, le CCITT, l'IEEE.
189
Bibliothque de fonctions permettant de dvelopper des applications client serveur Les programmes clients envoyent leurs requtes au serveur par des appels des fonctions contenues dans l'API
CLIENT
protocole
SERVEUR
APPLICATIO N
interface API Transport
SGBD
Adaptateur
Interface applicative
190
fourni par l'diteur du SGBD permet uniquement l'accs la base pour laquelle elle a t dveloppe
191
fourni par un constructeur indpendant du SGBD permet l'accs des SGBD diffrents
192
Les principaux serveurs SQL ORACLE DB2 SYBASE CA-OPEN INGRES INFORMIX SQL SERVER
193
II
interface applicative SQL interface unique permettant l'accs des SGBDR diffrents travaux du SAG (SQL Access Group) standard X/Open
194
protocole d'application construit au-dessus des couches prsentation et session de l'architecture OSI de l'ISO les messages permettent le transport des requtes gnres par l'interface CLI et les rponses associes standard ISO
195
III ODBC
1. Gnralits Open Data Base Connectivity Implmentation du standard CLI Accs normalis des SGBD relationnels diffrents (Oracle, DB2 ...) Accs mme des pseudo-SGBD, ou des tableurs, ou encore des gestionnaires de fichiers Interoprabilit avec des sources de donnes htrognes Avec ODBC, il est possible de dvelopper une application sans se soucier de la source de donnes qui sera utilise en exploitation API C (SDK ODBC) et classes C++ (MFC)
196
2. Composants ODBC
Application
API
Gestionnaire de pilotes
ODBC.DLL
Pilote
Pilote
Pilote
Source de donnes
Source de donnes
Source de donnes
Composants ODBC
197
Application
Connexion un SGBD Envoi de requtes SQL Rcupration des rsultats Gestion des erreurs Gestion des transactions Dconnexion
198
Gestionnaire de pilotes
Charge dynamiquement les pilotes correspondant aux sources de donnes auxquelles l'application souhaite se connecter Consulte le fichier ODBC.INI pour retrouver le pilote Transmet les requtes au pilote Transmet les rsultats l'application Pour accder un nouveau SGBD, il suffit d'installer un pilote spcifique ce SGBD (aucun changement dans l'application) Une application peut tablir plusieurs connexions diffrentes sources de donnes
199
Fichier ODBC.INI
Dfinit des sources de donnes Exemple
[ODBC Data Sources] iut1=Oracle73 Ver 2.5 (32 bit) ... [iut1] Driver32=C:\ORANT\ODBC250\sqo32_73.dll
La section [ODBC Data Sources] donne le nom de chaque source disponible et le pilote associ A chaque source correspond une section particulire donnant des informations supplmentaires : le nom du serveur, le protocole utilis pour les communications ...
200
Administrateur ODBC
ajoute les sources de donnes dans le fichier ODBC.INI en utilisant l'utilitaire ODBC Administrator installe les pilotes ODBC tablit les connexions avec des BD physiques
201
Pilote
Deux types de pilotes
202
Source de donnes
Donnes auxquelles un utilisateur souhaite accder
Chaque entre de nom de source dans ODBC.INI spcifie des informations de connexion
203
3. Niveaux de conformit En principe, une application ODBC devrait pouvoir interoprer avec n'importe quelle source de donnes. Mais en pratique, les pilotes et les sources de donnes associes n'offrent pas tous les mmes possibilits de fonctionalits de l'API et de requtes SQL
204
205
206
207
208
SQLAllocEnv
dfinit un descripteur d'environnement pour l'application ce descripteur est l'adresse d'une zone mmoire o seront places des informations globales pour l'application, par exemple, le descripteur de la connexion courante
SQLAllocConnect
dfinit un descripteur de connexion ce descripteur est l'adresse d'une zone mmoire o seront places des informations concernant une connexion un descripteur de connexion est toujours associ un descripteur d'environnement
209
SQLConnect
charge un pilote et tablit une connexion entre l'application et une source de donnes
SQLDisconnect
termine une connexion entre l'application et une source de donnes
SQLFreeConnect
libre un descripteur de connexion
SQLFreeEnv
libre un descripteur d'environnement
210
Programmation
#include <windows.h> #include <sql.h> #include <sqlext.h> HENV henv; // descripteur d'environnement HDBC hdbc; // descripteur de connexion // Allouer un descripteur d'environnement SQLAllocEnv(&henv); // Allouer un descripteur de connexion SQLAllocConnect(henv, &hdbc); // Etablir la connexion SQLConnect( hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS );
*/
211
Mode AUTO_COMMIT
chaque instruction SQL est automatiquement valide aprs son excution pas de notion de transaction dans ce mode option par dfaut les pilotes qui ne supportent pas la notion de transaction sont toujours en mode AUTO_COMMIT
Mode transactionnel
le programmeur gre explicitement la fin (validation ou annulation) des transactions
212
SQLConnectOptions
permet de spcifier diffrentes options de connexion, en particulier le mode de validation il faut utiliser SQLConnectOptions avant d'tablir la connexion
SQLTransact
termine une transaction soit en la validant \verb+SQL_COMMIT+ soit en l'annulant \verb+SQL_ROLLBACK+
213
Programmation
SQLAllocEnv(&henv); SQLAllocConnect(henv, &hdbc); SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); SQLConnect( hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS /* mise a jour no 1 */ /* mise a jour no 2 */ /* mise a jour no 3 */ SQLTransact(henv, hdbc, SQL_COMMIT); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); );
L'appel SQLTransact(henv, hdbc, SQL_COMMIT) permet de valider en bloc les 3 mises jour effectues dans le contexte de la connexion hdbc.
214
7. Envoi de requtes SQL Deux manires pour soumettre une requte SQL:
215
SQLSetParam SQLExecDirect
216
SQLFreeStmt
libre un descripteur d'instruction si un curseur est associ l'instruction, il est ferm
SQLExecDirect
prpare et excute directement une instruction SQL
217
SQLPrepare
prpare une instruction SQL
SQLExecute
excute une instruction SQL prpare en utilisant les valeurs courantes des ventuels paramtres on utilise cette fonction lorsqu'on doit excuter plusieurs fois la mme instruction dans l'application, dans ce cas, l'instruction n'est prpare qu'une seule fois
SQLSetParam
permet d'associer un paramtre d'une instruction SQL, une variable contenant la valeur du paramtre l'utilisation de cette fonction est dconseill depuis ODBC v2.0 o elle a t remplace par SQLBindParameter mais qui est une fonction du niveau 1
218
SQL_DROP
Ferme le curseur ventuellement Libre toutes les ressources associes au descripteur d'instruction
219
Programmation
rc = SQLAllocEnv(&henv); rc = SQLAllocConnect(henv, &hdbc); rc = SQLConnect(hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS); rc = SQLAllocStmt(hdbc, &hstmt); rc = SQLExecDirect(hstmt, "select * from employe", SQL_NTS);
220
Type dinstruction ?
SELECT
221
222
Programmation
rc = SQLExecDirect(hstmt, "select no, nom from employe", SQL_NTS); rc = SQLBindCol(hstmt, 1, SQL_C_FLOAT, &no, 0, &cbno); rc = SQLBindCol(hstmt, 2, SQL_C_CHAR, &nom, 20+1 , &cbnom); while (1) { rc = SQLFetch(hstmt); if (rc == SQL_NO_DATA_FOUND) break; if (rc != SQL_SUCCES) { printf("\n**Erreur fatale...\n"); break; } printf("%f %20s", no, nom); } SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_CLOSE);
www.cours-ofppt.com
IUT de Nice - Cours SGBD1 223
www.cours-ofppt.com