Vous êtes sur la page 1sur 224

IUT de Nice - Cours SGBD1 1

Cours SGBD 1
Concepts et langages des
Bases de Donnes Relationnelles
SUPPORT DE COURS
IUT de Nice Dpartement INFORMATIQUE
IUT de Nice - Cours SGBD1 2
Plan
Chapitre 1 Introduction gnrale
Chapitre 2 Le modle relationnel
Chapitre 3 Prsentation des donnes
Chapitre 4 Lalgbre relationnelle
Chapitre 5 Le langage QBE
Chapitre 6 Le langage SQL
Chapitre 7 Gestion des transactions
Chapitre 8 Programmation avec VBA
Chapitre 9 Les objets dans Access
Chapitre 10 Linterface DAO
Chapitre 11 Le mode client serveur et ODBC
Chapitre 12 Automation et le modle DCOM
IUT de Nice - Cours SGBD1 3
Chapitre 1 Introduction gnrale
I. Notions intuitives
II. Objectifs et avantages des SGBD
III. Larchitecture ANSI/SPARC
IV. Notion de modlisation des donnes
V. Survol des diffrents modles de donnes
VI. Bref historique,
principaux SGBD commercialiss
IUT de Nice - Cours SGBD1 4
I Notions intuitives
Base de donnes
ensemble structur de donnes apparentes qui
modlisent un univers rel
Une BD est faite pour enregistrer des faits, des oprations au
sein d'un organisme
(administration, banque, universit, hpital, ...)
Les BD ont une place essentielle dans l'informatique
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
IUT de Nice - Cours SGBD1 5
Des fichiers aux Base de Donnes
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
Sparation des donnes et des programmes
BASE DE DONNEES
FICHIER
Les donnes de la BD sont
dcrites hors des programmes
dans la base elle-mme
Les donnes des fichiers sont
dcrites dans les programmes
Description
fichier
Programmes
Description
fichier
Description
unique
Programmes
IUT de Nice - Cours SGBD1 6
II Objectifs et avantages des SGBD
Que doit permettre un SGBD ?
Dcrire les donnes
indpendamment des applications (de manire
intrinsque)
langage de dfinition des donnes
DATA DEFINITION LANGUAGE (DDL)
Manipuler les donnes
interroger et mettre jour les donnes
sans prciser d'algorithme d'accs
dire QUOI sans dire COMMENT
langage de requtes dclaratif
ex.:
quels sont les noms des produits de prix < 100F ?
langage de manipulation des donnes
DATA MANIPULATION LANGUAGE (DML)
IUT de Nice - Cours SGBD1 7
Contrler les donnes
intgrit
vrification de contraintes d'intgrit
ex.: le salaire doit tre compris entre 400F et
20000F
confidentialit
contrle des droits d'accs, autorisation
langage de contrle des donnes
DATA CONTROL LANGUAGE (DCL)
IUT de Nice - Cours SGBD1 8
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 ...)
IUT de Nice - Cours SGBD1 9
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
IUT de Nice - Cours SGBD1 10
III Larchitecture ANSI/SPARC
proposition en 75 de l ANSI/SPARC
(Standard Planning And Requirement Comitte)
3 niveaux de reprsentation des donnes
Vue 1 Vue 2
Schma logique
DICTIONNAIRE DE DONNEES
Schma physique
STRUCTURE DE DONNEES
EXTERNE
CONCEPTUEL
INTERNE
SGBD
Niveaux de reprsentation des donnes
IUT de Nice - Cours SGBD1 11
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)
IUT de Nice - Cours SGBD1 12
Pour rsumer :
Les fonctions des SGBD
DEFINITION DES DONNEES
Langage de dfinition des donnes (DDL)
(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)
IUT de Nice - Cours SGBD1 13
IV Notion de modlisation des donnes
Les modles de BD sont souvent trop limits pour
pouvoir reprsenter directement le monde rel
Mthodologies de conception prsentes en ACSI,
SGBD2
UNIVERS REEL
MODELE
CONCEPTUEL
MCD
SCHEMA
LOGIQUE
Modles smantiques
Orients conception
Entit-Association, Merise
Modles de BD
Hirarchique, Rseau
Relationnel
IUT de Nice - Cours SGBD1 14
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
Les entits peuvent tre regroupes en types
dentits
Par exemple, on peut considrer que tous les employs
particuliers sont des instances du type dentit gnrique
EMPLOYE
Par exemple lemploy nomm DUPONT est une instance ou
occurrence de lentit EMPLOYE
Nom de lentit
Liste des proprits
IUT de Nice - Cours SGBD1 15
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
IUT de Nice - Cours SGBD1 16
Les associations
Reprsentation dun lien entre deux entits ou plus
une association peut avoir des proprits particulires
Par exemple, la date demprunt dun livre
emprunter
date demprunt
exemplaire
adhrent
IUT de Nice - Cours SGBD1 17
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 :
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.
emprunter
date demprunt
exemplaire
adhrent
0,3 0,1
IUT de Nice - Cours SGBD1 18
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
IUT de Nice - Cours SGBD1 19
Lien fonctionnel 1:n
Une instance de A ne peut tre associe qu' une seule
instance de B
Par exemple :
Un employ ne peut travailler que dans un seul
dpartement
1
A B
n
n
1
travaille
dpartement employ
IUT de Nice - Cours SGBD1 20
Lien hirarchique n:1
Une instance de A peut tre associe plusieurs
instances de B
Inverse d'un lien 1:n
Un dpartement emploie gnralement plusieurs
employs
A B
1 n
n
1
emploie
dpartement employ
IUT de Nice - Cours SGBD1 21
Lien maill n:m
Une instance de A peut tre associe plusieurs
instances de B et inversement
Par exemple :
De ce schma, on dduit quun employ peut participer
plusieurs projets.
A B
m n
m
n
participe
projet employ
IUT de Nice - Cours SGBD1 22
Exemple de diagramme Entit Association
a pour chef
est chef de
n
m
n
1 n
dpartement
employ
participe
projet
travaille
dirige
1
IUT de Nice - Cours SGBD1 23
V Les diffrents modles de donnes
L'organisation des donnes au sein d'une BD a une
importance essentielle pour faciliter l'accs et la mise
jour des donnes
Hirarchique
Liens 1:N
Rseau
Liens N:M
Relationnel
Liens N:1
SGBDR
IUT de Nice - Cours SGBD1 24
Les modles hirarchique et rseau sont issus du
modle GRAPHE
donnes organises sous forme de graphe
langages d'accs navigationnels
(adressage par liens de chanage)
on les appelle "modles d'accs"
Le modle relationnel est fond sur la notion
mathmatique de RELATION
introduit par Codd (recherche IBM)
donnes organises en tables (adressage relatif)
stratgie d'accs dtermine par le SGBD
IUT de Nice - Cours SGBD1 25
LE MODLE RSEAU
Schma logique reprsent par un GRAPHE
noeud : article (reprsente une entit)
arc : lien hirarchique 1:N
Exemple de shma rseau
VENTE
CLIENT PRODUIT
Diagramme de Bachman
Langage navigationnel pour manipuler les donnes
Implmentation d'un lien par une liste circulaire :
R
S
L
sn
.....
r
s1 s2
IUT de Nice - Cours SGBD1 26
Exemple de schma rseau :
Reprsentation dune association N:M par 2 liens
CODASYL
x
y
p
q
r
CLIENTS PRODUITS
x, p
x, q
y, p
y, r
x
y
p
q
r
IUT de Nice - Cours SGBD1 27
LE MODLE HIRARCHIQUE
Schma logique reprsent par un ARBRE
noeud : segment (regroupement de donnes)
arc : lien hirarchique 1:N
Exemple de shma hirarchique
VENTE
CLIENT
PRODUIT
CLIENT
PRODUIT VENTE
Choix possible entre plusieurs arborescences
(le segment racine est choisi en fonction de l'accs souhait)
Dissymtrie de traitement pour des requtes symtriques
En prenant l'ex. prcdent, considrer les 2 requtes :
a) Trouver les no de produits achets par le client x
b) Trouver les no de clients qui ont achet le produit p
Elles sont traites diffremment suivant le choix du segment racine
(Client ou Produit)
Adquation du modle pour dcrire des organisations
structure arborescente (ce qui est frquent en gestion)
IUT de Nice - Cours SGBD1 28
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)
IUT de Nice - Cours SGBD1 29
Ex . :
CLIENT (IdCli, nom, ville)
PRODUIT (IdPro, nom, prix, qstock)
VENTE (IdCli, IdPro, date, qte)
Reprsentation des donnes sous forme de tables :
CLIENT IdCli Nom Ville
X Smith Paris
Y Jones Paris
Z Blake Nice
PRODUIT IdPro Nom Prix Qstock
P Auto 100 10
Q Moto 100 10
R Velo 100 10
S Pedalo 100 10
VENTE IdCli IdPro Date Qte
X P 1
X Q 2
X R 3
Y P 4
Y Q 5
Z Q 6
LES AVANTAGES DU MODLE RELATIONNEL
IUT de Nice - Cours SGBD1 30
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
IUT de Nice - Cours SGBD1 31
VI Bref historique, principaux systmes
Annes 60 Premiers dveloppements des BD
fichiers relis par des pointeurs
systmes IDS 1 et IMS 1 prcurseurs des SGBD
modernes
Annes 70 Premire gnration de SGBD
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
Annes 80 Deuxime gnration
modle relationnel
les SGBDR reprsentent l'essentiel du march BD
(aujourd'hui)
architecture rpartie client-serveur
Annes 90 Troisime gnration
modles de donnes plus riches
systmes objets
OBJECTSTORE, O2
IUT de Nice - Cours SGBD1 32
Principaux systmes
Oracle
DB2 (IBM)
Ingres
Informix
Sybase
SQL Server (Microsoft)
O2
Gemstone
Sur micro :
Access
Paradox
FoxPro
4D
Windev
Sharewares :
MySQL
MSQL
Postgres
InstantDB
IUT de Nice - Cours SGBD1 33
Chapitre 2 Le modle relationnel
I. LES CONCEPTS
II. LES DPENDANCES
FONCTIONNELLES
III. LES RGLES D'INTGRIT
IV. LES FORMES NORMALES
IUT de Nice - Cours SGBD1 34
I LES CONCEPTS
LE DOMAINE
LA RELATION
LES N-UPLETS
LES ATTRIBUTS
LE SCHMA DUNE RELATION
LE SCHMA DUNE BDR
LA REPRSENTATION
IUT de Nice - Cours SGBD1 35
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 }
IUT de Nice - Cours SGBD1 36
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) }
IUT de Nice - Cours SGBD1 37
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
DEFINITION PRDICATIVE DUNE RELATION
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
IUT de Nice - Cours SGBD1 38
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.
IUT de Nice - Cours SGBD1 39
LE SCHMA DUNE RELATION
Le schma d'une relation est dfini par :
- le nom de la relation
- la liste de ses attributs
on note : R (A1, A2, ... , An)
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
IUT de Nice - Cours SGBD1 40
LE SCHMA DUNE BDR
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
IUT de Nice - Cours SGBD1 41
LA REPRSENTATION
1 RELATION = 1 TABLE
U1 V1 W1 X1 Y1
U2 V2 W2 X2 Y2
U3 V3 W3 X3 Y3
1 LMENT ou n-uplet = 1 LIGNE
LIGNE
U1 V1 W1 X1 Y1
1 lment
une relation est un ensemble on ne peut pas avoir 2 lignes
identiques
1 ATTRIBUT = 1 COLONNE
U1
U2
U3

COLONNE
1 attribut ou proprit
IUT de Nice - Cours SGBD1 42
Exemples :
- La relation ELEVE
ELEVE : NOM PRENOM NAISS
lment
dupont Pierre 1/1/1992
durant Jacques 2/2/1994
duval Paul 3/03/81
- La relation INSCRIPT
INSCRIPT : NOM_ELV SPORT
lment
Dupont judo
Dupont foot
Durant judo
- La relation TRAJET
TRAJET : VD VA
lment
Nice paris
Paris rome
Rome nice
IUT de Nice - Cours SGBD1 43
Fentre Cration de Table dAccess
Affichage dune table dans Access
Boutons de dplacement
Slecteur denregistrement
IUT de Nice - Cours SGBD1 44
II LES DPENDANCES
FONCTIONNELLES
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 : X Y
on dit que : X dtermine Y
Ex.:
PRODUIT (no_prod, nom, prixUHT)
no_prod (nom, prixUHT)
NOTE (no_contrle, no_lve, note)
(no_contrle, no_lve) note
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
IUT de Nice - Cours SGBD1 45
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)
IUT de Nice - Cours SGBD1 46
Cl primaire
choix d'une cl parmi les cls candidates
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
CL TRANGRE = CL PRIMAIRE dans une autre
relation
IUT de Nice - Cours SGBD1 47
III LES RGLES D'INTGRIT
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 :
INTGRIT DE DOMAINE
INTGRIT DE CL
INTGRIT RFRENCIELLE
La gestion automatique des contraintes dintgrit
est lun des outils les plus importants dune base
de donnes.
Elle justifie elle seule lusage dun SGBD.
IUT de Nice - Cours SGBD1 48
INTGRIT DE DOMAINE
Les valeurs d'une colonne de relation doivent appartenir
au domaine correspondant
contrle des valeurs des attributs
contrle entre valeurs des attributs
IUT de Nice - Cours SGBD1 49
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
IUT de Nice - Cours SGBD1 50
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
IUT de Nice - Cours SGBD1 51
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
IUT de Nice - Cours SGBD1 52
Paramtrage des Relations dans Access
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
IUT de Nice - Cours SGBD1 53
IV LES FORMES NORMALES
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
IUT de Nice - Cours SGBD1 54
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)
Les formes normales
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
IUT de Nice - Cours SGBD1 55
1
re
Forme Normale 1FN
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)
IUT de Nice - Cours SGBD1 56
2
me
Forme Normale 2FN
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)
IUT de Nice - Cours SGBD1 57
3
me
Forme Normale 3FN
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)
Dcomposition
VOITURE (matricule, marque, modle)
MODELE (marque, modle, puissance)
IUT de Nice - Cours SGBD1 58
3
me
Forme Normale de BOYCE-CODD BCNF
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 n-
uplets 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
IUT de Nice - Cours SGBD1 59
Chapitre 3 Prsentation des donnes
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.
IUT de Nice - Cours SGBD1 60
I 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
IUT de Nice - Cours SGBD1 61
Formulaire rudimentaire
Fentre Conception de Formulaire dAccess
IUT de Nice - Cours SGBD1 62
Formulaire avec sous-formulaire
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.
IUT de Nice - Cours SGBD1 63
Cration dun formulaire de prsentation
1) Dfinir la proprit Source de donnes (table ou
requte)
Slectionner longlet Donnes
Dfinir la proprit Source (table ou requte)
Bote des proprits du formulaire
Cliquer ici avec le bouton droit, puis slectionner Proprits
IUT de Nice - Cours SGBD1 64
2) Insrer dans le formulaire les Zones
de texte lies aux champs de la
Source de donnes
Pour afficher la fentre des proprits dun contrle,
cliquer dessus avec le bouton droit de la souris
a) Slectionner loutil Zone de texte
b) Insrer la Zone de texte avec son Etiquette associe
c) Dfinir la proprit Source contrle de la Zone de texte
IUT de Nice - Cours SGBD1 65
II Les tats
Un tat permet dimprimer des enregistrements, en
les groupant et en effectuant des totaux et des
sous totaux.
En-tte dtat
Etat du Stock
En-tte de page
E
E
E
n
n
n
t
t
t
r
r
r
e
e
e
p
p
p
r
r
r
i
i
i
s
s
s
e
e
e


M
M
M
I
I
I
C
C
C
R
R
R
O
O
O
En-tte de groupe
Catgorie : O
IdPro Dsignation Marque Qstock
Dtail
10 Ps Ibm 10
20 Imac Apple 20
30 Aptiva Ibm 10
Pied de groupe
Sous totaux : 40

Pied de page
Jeudi 12 fvrier 1998 Page 1 sur 1
Pied dtat
Total gnral : 200
IUT de Nice - Cours SGBD1 66
Cration dun tat
1) Dfinir la proprit Source de donnes (table ou
requte)
Cliquer ici avec le bouton droit, puis slectionner Proprits
IUT de Nice - Cours SGBD1 67
2) Dfinir Trier et grouper
IUT de Nice - Cours SGBD1 68
3) Placer les champs dans les diffrentes section
de ltat
IUT de Nice - Cours SGBD1 69
Chapitre 4 Lalgbre relationnelle
I. Les oprations
II. Le langage algbrique
IUT de Nice - Cours SGBD1 70
I Les oprations
LAlgbre relationnelle est une collection doprations
OPRATIONS
- oprandes : 1 ou 2 relations
- rsultat : une relation
DEUX TYPES DOPRATIONS
OPRATIONS ENSEMBLISTES
UNION
INTERSECTION
DIFFRENCE
OPRATIONS SPCIFIQUES
PROJECTION
RESTRICTION
JOINTURE
DIVISION
IUT de Nice - Cours SGBD1 71
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 R2
A B

A B
0 1 0 1
2 3 4 5
R3 = R1 R2
R3
A B
0 1
2 3
4 5
IUT de Nice - Cours SGBD1 72
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 R2
A B

A B
0 1 0 1
2 3 4 5
R3 = R1 R2
R3
A B
0 1
IUT de Nice - Cours SGBD1 73
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 R2
A B

A B
0 1 0 1
2 3 4 5
R3 = R1 R2
R3
A B
2 3
IUT de Nice - Cours SGBD1 74
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 n-
uplets identiques
On notera :
R2 = R1 (Ai, Aj, ... , Am)
la projection d'une relation R1 sur les attributs
Ai, Aj, , Am
La projection permet dliminer des attributs dune
relation
Elle correspond un dcoupage vertical :
A1 A2 A3 A4
IUT de Nice - Cours SGBD1 75
Requte 1 :
Quels sont les rfrences et les prix des produits ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
PRODUIT (IdPro, Prix)
IdPro Prix
P 1000
Q 2000
R 3000
S 4000
IUT de Nice - Cours SGBD1 76
Requte 2 :
Quelles sont les marques des produits ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
PRODUIT (Marque)
Marque
IBM
Apple
Microsoft
Notez llimination des doublons..
IUT de Nice - Cours SGBD1 77
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
La restriction permet d'extraire les n-uplets qui
satisfont une condition
Elle correspond un dcoupage horizontal :
A1 A2 A3 A4
IUT de Nice - Cours SGBD1 78
Requte 3 :
Quelles sont les produits de marque IBM ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro Nom Marque Prix
P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000
PRODUIT (Marque = IBM)
IdPro Nom Marque Prix
P PS1 IBM 1000
R PS2 IBM 3000
IUT de Nice - Cours SGBD1 79
JOINTURE
La jointure de deux relations R1 et R2 est une relation
R3 dont les n-uplets sont obtenus en concatnant les n-
uplets 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
cartsien des deux relations suivi d'une restriction
La condition de liaison doit tre du type :
<attribut1> :: <attribut2>
o : attribut1 1re relation et attribut2 2me relation
:: est un oprateur de comparaison (galit ou ingalit)
IUT de Nice - Cours SGBD1 80
La jointure permet de composer 2 relations l'aide
d'un critre de liaison
R1(A, B, C) R2(U, V)
A B C U V
A1 B1 10 10 V1
A2 B2 10 20 V2
A3 B3 20 30 V3
A4 B4 30
R1 R2 (R1.C = R2.U)
A B C U V
A1 B1 10 10 V1
A1 B2 10 10 V1
A3 B3 20 20 V2
A4 B4 30 30 V3
IUT de Nice - Cours SGBD1 81
Jointure naturelle
Jointure o l'oprateur de comparaison est l'galit
dans le rsultat on fusionne les 2 colonnes dont les valeurs sont
gales
La jointure permet d'enrichir une relation
Requte 5 :
Donnez pour chaque vente la rfrence du produit, sa
dsignation, son prix, le numro de client, la date et la
quantit vendue
VENTE As V PRODUIT As P
IdCli IdPro Date Qte IdPro Dsignation Prix
X P 1/1/98 1 P PS 100
Y Q 2/1/98 1 Q Mac 100
Z P 3/1/98 1
VENTE PRODUIT (V.IdPro=P.IdPro)
Idcli IdPro Date Qte Dsignation Prix
X P 1/1/98 1 PS 100
Y Q 2/1/98 1 Mac 100
Z P 3/1/98 1 PS 100
La normalisation conduit dcomposer ; la jointure
permet de recomposer
IUT de Nice - Cours SGBD1 82
Auto-jointure
jointure d'une relation par elle-mme
Requte 6 :
Quels sont les noms des clients qui habitent la mme
ville que John ?
CLIENT As C1 CLIENT As C2
IdCli Nom Ville IdCli Nom Ville
X Smith Nice X Smith Nice
Y Blake Paris Y Blake Paris
Z John Nice Z John Nice
R1 = CLIENT CLIENT (C1.Ville = C2.Ville)
R1
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John
IUT de Nice - Cours SGBD1 83
R1
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John
R2 = R1 (C2.Nom = John)
R2
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice Z John
Z John Nice Z John
R3 = R2 (C1.Nom)
R3
C1.Nom
Smith
John
IUT de Nice - Cours SGBD1 84
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 (a
1
, a
2
, , a
n
) appartient R3 si
(a
1
, a
2
, , a
n,
b
1
, b
2
, , b
m
) appartient R1
pour tous (b
1
, b
2
, , b
m
) R2.
On notera :
R3 = R1 R2
la division de R1 par R2
IUT de Nice - Cours SGBD1 85
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 SPORT
Elve Sport

Sport
toto judo judo
tata danse foot
toto foot danse
toto danse
RES = INSCRIPT SPORT
RES
Elve
toto
IUT de Nice - Cours SGBD1 86
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)
IUT de Nice - Cours SGBD1 87
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)
IUT de Nice - Cours SGBD1 88
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
IUT de Nice - Cours SGBD1 89
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
IUT de Nice - Cours SGBD1 90
Arbre algbrique
une question peut tre reprsente par un arbre
Quels sont les clients de Nice ayant achet un produit de
marque 'Apple' ?
CLIENT C

(ville='Nice')
x (C.no-pro=P.no-pro)
PRODUIT P
(marque='Apple')
(no-cli)
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
IUT de Nice - Cours SGBD1 91
Chapitre 5 Les langages de requte,
QBE, SQL
I Les langages associs au modle
relationnel
II QBE (Query By Example)
III SQL (Structured Query Language)
IUT de Nice - Cours SGBD1 92
I Les langages associs au modle
relationnel
Langages assertionnels pour dcrire et manipuler les
BD relationnelles
ils permettent de spcifier les ensembles de donnes
slectionner ou mettre jour partir de proprits des
valeurs (qualification), sans dire comment retrouver les
donnes : dire QUOI sans dire COMMENT
Deux classes de langages correspondant la manire
de considrer une relation : comme un ensemble, ou
comme un prdicat
Langages du
modle relationnel
PREDICATIFS
Bass sur le Calcul
des Prdicats
ENSEMBLISTES
Bass sur lAlgbre
Relationnelle
(Pas de variables)
IUT de Nice - Cours SGBD1 93
Langages Prdicatifs
Variables tuples
Calcul relationnel de tuples
Variables domaines
Calcul relationnel de domaines
ALPHA
Dfini par Codd
Non implant
QUEL
Systme
INGRES
(Berkeley)
DATALOG
BD dductives
QBE
Souvent offert au
dessus de SQL
Langages Ensemblistes
ALGBRIQUE
Sert de rfrence tous les
langages relationnels
SQL
Paraphrasage du langage Algbrique
Standard daccs aux BDR, norme ISO
IUT de Nice - Cours SGBD1 94
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 | IdCli | Nom | Ville |
| x | P. | |
VENTE | IdCli | IdPro | Date | Qte |
| x | p1 | | |
x est une variable domaine (valeur exemple)
IUT de Nice - Cours SGBD1 95
II QBE (Query By Example)
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 ?
CLIENT | IdCli | nom | ville |
| | P.toto | Nice |
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 96
1 Oprations de recherche
Recherche simple
Q1 Donner les nos des produits vendus
VENTE | IdCli | IdPro | date | qte |
| | P.p | | |
QBE limine automatiquement les doublons
pour obtenir les doublons il faut spcifier ALL.
VENTE | IdCli | IdPro | date | qte |
| | P.ALL.p | | |
Q2 Donner tous les renseignements sur tous les clients
CLIENT | IdCli | nom | ville |
| P.x | P.toto | P.rome |
on peut abrger en plaant P. en tte
CLIENT | IdCli | nom | ville |
P. | | | |
IUT de Nice - Cours SGBD1 97
Recherche qualifie
Q3 Donner les nos des produits de marque Apple et cotant
moins de 8000 F.
PRODUIT | IdPro | nom | marque | prix |
| P.p | | Apple | <8000 |
Q4 Donner les noms des clients de Nice ou Rome
CLIENT | IdCli | nom | ville |
| P.x | | Nice |
| P.y | | Rome |
Le ou est exprim en utilisant 2 lignes (2 exemples)
Q5 Donner les nos des clients qui ont achet la fois le
produit p1 et le produit p2
VENTE | IdCli | IdPro | date | qte |
| P. x | p1 | | |
| x | p2 | | |
Recherche avec tri
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
IUT de Nice - Cours SGBD1 98
Recherche utilisant un lien
Q7 Donner les noms des clients qui ont achet le produit p1
CLIENT | IdCli | nom | ville |
| x | P.toto | |
VENTE | IdCli | IdPro | date | qte |
| x | p1 | | |
la valeur exemple x est utilise comme un lien entre CLIENT et
VENTE
Recherche utilisant plusieurs liens
Q8 Donner les noms des clients qui ont achet au moins un
produit de marque Apple
CLIENT | IdCli | nom | ville |
| x | P.toto | |
PRODUIT | IdPro | nom | marque | prix |
| p | | Apple | |
VENTE | IdCli | IdPro | date | qte |
| x | p | | |
IUT de Nice - Cours SGBD1 99
Recherche utilisant la ngation
Q9 Donner les noms des clients qui n'ont pas achet le produit
p1
CLIENT | IdCli | nom | ville |
| x | P.toto | |
VENTE | IdCli | IdPro | date | qte |
| x | p1 | | |
Notez l'oprateur ngation () portant sur la ligne de VENTE
Recherche utilisant un lien dans une seule table
Q10 Donner les nos des clients qui ont achet au moins un
produit achet par le client c1
VENTE | IdCli | IdPro | date | qte |
| P. x | p | | |
| c1 | p | | |
Recherche utilisant une bote condition
Q11 Donner les nos des produits achets par plus qu'un seul
client
VENTE | IdCli | IdPro | date | qte |
| x | P. p | | |
| y | p | | |
| CONDITION BOX |
| x y |
Lorsque la condition est importante ou si l'on veut simplifier
l'criture d'une requte on peut utiliser une bote condition
IUT de Nice - Cours SGBD1 100
2 Fonctions de calcul
QBE fournit un ensemble de fonctions de calcul
prdfinies :
CNT.ALL CNT.UNQ.ALL
SUM.ALL SUM.UNQ.ALL
AVG.ALL AVG.UNQ.ALL
MAX.ALL
MIN.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.
Recherche simple utilisant une fonction
Q12 Donner le nombre total de clients
CLIENT | IdCli | nom | ville |
| P.CNT.ALL.x | | |
Q13 Donner le nombre total de clients ayant achet des
produits
VENTE | IdCli | IdPro | date | qte |
| P.CNT.UNQ.ALL.x | | | |
IUT de Nice - Cours SGBD1 101
Recherche qualifie utilisant une fonction
Q14 Donner le nombre de ventes du produit p1
VENTE | IdCli | IdPro | date | qte |
| P.CNT.ALL.x | p1 | | |
Q15 Donner la qte totale vendue du produit p1
VENTE | IdCli | IdPro | date | qte |
| | p1 | | P.SUM.ALL.qte |
Fonction dans la bote condition
Q16 Donner les nos des produits moins chers que tous ceux de
marque Apple
PRODUIT | IdPro | nom | marque | prix |
| P.p | | | val |
| | | Apple | prix |
| CONDITION BOX |
| val < MIN.ALL.prix |
Recherche avec regroupement
Q17 Pour chaque produit vendu, donner le no de produit et la
quantit totale vendue de ce produit
VENTE | IdCli | IdPro | date | qte |
| |P.G.p | | P.SUM.ALL.qte |
G. est l'oprateur de regroupement
IUT de Nice - Cours SGBD1 102
3 Oprations de mise jour
Les oprateurs de mise jour sont :
- UPDATE (modification)
- INSERT (insertion)
- DELETE (suppression)
Le nom des oprateurs apparat sous le nom de la
relation abrg par U. , I. ou D.
Modification d'un seul enregistrement
L'enregistrement modifier est identifi par la valeur
de sa cl primaire
Les valeurs de cl primaire ne peuvent pas tre
modifies
Q18 Changer la ville du client c1 par Nice
CLIENT | IdCli | nom | ville |
U. | c1 | | Nice |
Q19 Augmenter de 100F le prix du produit p1
PRODUIT | IdPro | nom | marque | prix |
| p1 | | | val |
U. | p1 | | | val + 100 |
IUT de Nice - Cours SGBD1 103
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 | IdPro | nom | marque | prix |
| p | | Apple | val |
U. | p | | | 2 val |
Q21 Mettre 0 toutes les qts achetes par les clients de Nice
CLIENT | IdCli | nom | ville |
| x | | Nice |
VENTE | IdCli | IdPro | date | qte |
U. | x | | | 0 |
Insertion d'un nouvel enregistrement
Q22 Ajouter le client (c20, 'Duduche', 'Nice') dans la table
CLIENT
CLIENT | IdCli | nom | ville |
I. | c20 | Duduche | 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
IUT de Nice - Cours SGBD1 104
Insertion de plusieurs enregistrements
Q23 La table TEMP a une seule colonne IdPro. Introduire dans
TEMP les nos de tous les produits achets par le client c1
TEMP | IdPro |
I. | p |
VENTE | IdCli | IdPro | date | qte |
| c1 | p | | |
Suppression d'un seul enregistrement
Q24 Supprimer le client c1
CLIENT | IdCli | nom | ville |
D. | c1 | | |
La suppression n'est pas possible si le client figure dans la table
VENTE (intgrit rfrentielle)
Suppression de plusieurs enregistrements
Q25 Supprimer tous les clients de Nice
CLIENT | IdCli | nom | ville |
D. | | | Nice |
A nouveau la suppression n'est possible qu'en respect de l'intgrit
rfrentielle avec VENTE
IUT de Nice - Cours SGBD1 105
4 Dictionnaire de donnes QBE
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
COLUMNS (TNAME, CNAME, TYPE, LENGTH, ...)
informations sur les colonnes de toutes les tables de la BD
Le DD peut tre interrog et mis jour avec le
langage de manipulation de donnes
IUT de Nice - Cours SGBD1 106
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.
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
NOMENCLATURE ENSEMBLE SOUS-ENSEMBLE
A
A
C
C
E
B
C
E
F
G
A B
A C
C E
C F
E G
A E
A F
A G
C G
Fermeture transitive
A
B C
F
G
E
IUT de Nice - Cours SGBD1 107
QBE permet d'exprimer des questions de type
fermeture transitive
Q26 Donner les sous-ensembles au 2ime niveau de
l'ensemble A
NOMENCLATURE | ensemble | sous-ens |
| A | u |
| u | P.v |
Pour rechercher les sous-ensembles de 3ime niveau il
faut ajouter une ligne :
NOMENCLATURE | ensemble | sous-ens |
| A | u |
| u | v |
| 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 | ensemble | sous-ens |
| A | P.u(3L) |
(3L) signifie "third level"
QBE permet aussi d'obtenir les sous-ensembles de dernier
niveau l'aide du mot cl LAST
IUT de Nice - Cours SGBD1 108
III SQL (Structured Query Language)
Introduit par IBM, volution du langage SEQUEL,
commercialis tout d'abord par ORACLE
SQL est devenu le langage standard pour dcrire et
manipuler les BDR
Les commandes SQL :
- De dfinition des donnes :
CREATE
DROP
ALTER
- De manipulation des donnes :
SELECT
INSERT
UPDATE
DELETE
- De contrle des donnes :
Contrle des accs concurrents
COMMIT
ROLLBACK
Contrle des droits daccs
GRANT
REVOKE
IUT de Nice - Cours SGBD1 109
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'
- en mode intgr dans un L3G hte
(COBOL, ADA, C, FORTRAN )
pour dvelopper des applications
Les constantes dans les requtes SQL peuvent tre
remplaces par des variables du programme hte ; les
rsultats doivent tre transmis dans des variables
Ex. : SQL danc C
EXEC SQL SELECT C.ville INTO :laVille
FROM client C
WHERE C.IdCli = :unIdCli ;
les variables du programme sont prcdes par (:)
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
IUT de Nice - Cours SGBD1 110
1 Importance du langage SQL
Standard d'accs aux serveurs de donnes
relationnels, norme ISO
SQL est le langage commun de nombreux systmes
commercialiss
SQL est l'interface logiciel/logiciel entre les
applications et les BDR
Applications
ORACLE DB2 INGRES
SYBASE INFORMIX
SQL
IUT de Nice - Cours SGBD1 111
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
IUT de Nice - Cours SGBD1 112
2 Dfinition des donnes
CRATION DE TABLES
La commande CREATE TABLE cre la dfinition d'une
table
Syntaxe :
CREATE TABLE table
(
-- dfinition des colonnes
colonne type [ NOT NULL [UNIQUE] ]
[ DEFAULT valeur ]
[ PRIMARY KEY ]
[ REFERENCES table ]
[ CHECK condition ] ,
... ,
-- contraintes de table
[ PRIMARY KEY (liste de colonnes) ],
[ UNIQUE (liste de colonnes) ] ,
... ,
[ FOREIGN KEY (liste de colonnes) REFERENCES
table
[ ON DELETE {RESTRICT | CASCADE | SET NULL} ]
[ ON UPDATE {RESTRICT | CASCADE | SET NULL} ] ,
... ,
[ CHECK condition ] ,
...
)
IUT de Nice - Cours SGBD1 113
Principaux types de donnes
CHAR(n)
SMALLINT
INTEGER
DECIMAL(n,m)
DATE
Contraintes d'intgrit
NOT NULL valeur null impossible
UNIQUE unicit d'un attribut
PRIMARY KEY cl primaire
FOREIGN KEY cl trangre
CHECK 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
IUT de Nice - Cours SGBD1 114
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 rendre nul les attributs rfrenant
par ex. si on modifie la rfrence d'un produit
dans la table PRODUIT, toutes les rfrences
correspondantes seront modifies dans la table
VENTE
RESTRICT rejet de la mise jour
cest loption par dfaut
IUT de Nice - Cours SGBD1 115
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) NOT NULL
REFERENCES client ,
IdPro CHAR(6) NOT NULL ,
date DATE NOT NULL ,
qte SMALLINT
CHECK (qte BETWEEN 1 AND 10) ,
-- contrainte de table
PRIMARY KEY (IdCli, IdPro, date) ,
FOREIGN KEY (IdPro) REFERENCES produit
ON DELETE CASCADE ON UPDATE CASCADE
)
IUT de Nice - Cours SGBD1 116
CRATION D'INDEX
La commande CREATE INDEX permet de crer des
index multi-colonne
Syntaxe :
CREATE [UNIQUE] INDEX index
ON table (colonne [ASC|DESC], ...)
L'option UNIQUE permet d'assurer l'unicit d'une cl
Ex.: CREATE UNIQUE INDEX index1 ON client(Nom)
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
IUT de Nice - Cours SGBD1 117
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)
IUT de Nice - Cours SGBD1 118
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
IUT de Nice - Cours SGBD1 119
3 Manipulation des donnes
SELECT, INSERT, UPDATE et DELETE sont les 4
commandes de manipulation des donnes en SQL
Ex. :
Recherche SELECT
SELECT P.prix
FROM produit P
WHERE P.IdPro = 'p1'
Ajout INSERT
INSERT
INTO client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')
Mise jour UPDATE
UPDATE produit P
SET P.prix = P.prix * 1.20
WHERE P.IdPro = 'p2'
Suppression DELETE
DELETE
FROM produit P
WHERE P.IdPro = 'p4'
IUT de Nice - Cours SGBD1 120
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
Expression des projections
Q1 Donner les noms, marques et prix des produits
SELECT P.nom, P.marque, P.prix
FROM produit P
Synonyme de nom de table (ou alias)
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
IUT de Nice - Cours SGBD1 121
Q2 Donner les diffrentes marques de produit
SELECT DISTINCT P.marque
FROM 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 P.IdPro, P.prix * 1.20
FROM 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
Une toile (*) permet de lister tous les attributs
IUT de Nice - Cours SGBD1 122
Expression des restrictions
Q5 Donner les noms des produits de marque IBM
SELECT P.nom
FROM produit P
WHERE P.marque = 'IBM'
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
Un prdicat compos est construit laide des
connecteurs AND, OR et NOT
IUT de Nice - Cours SGBD1 123
Exemples
Q6 Lister les clients dont le nom comporte la lettre A en 2
ime
position
SELECT *
FROM client C
WHERE 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 produit P
WHERE P.prix BETWEEN 5000 AND 12000
Le prdicat BETWEEN teste l'appartenance un intervalle
Q8 Lister les produits de marque IBM, Apple ou Dec
SELECT *
FROM produit P
WHERE P.marque IN ('IBM', 'Apple', 'Dec')
Le prdicat IN teste l'appartenance une liste de valeurs
Q9 Lister les produits dont le prix est inconnu
SELECT *
FROM produit P
WHERE P.prix IS NULL
IUT de Nice - Cours SGBD1 124
La valeur NULL signifie qu'une donne est inconnue
IUT de Nice - Cours SGBD1 125
Q10 Lister les produits de marque IBM dont le prix est infrieur
12000F
SELECT *
FROM produit P
WHERE P.marque = 'IBM' AND P.prix < 12000
Le connecteur AND relie les 2 prdicats de comparaison
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 ?
OR
F V ?
NOT
F F F F F F V ? F V
V F V ? V V V V V F
? F ? ? ? ? V ? ? ?
V = vrai, F = faux, ? = inconnu
IUT de Nice - Cours SGBD1 126
Tri du rsultat d'un SELECT
La clause ORDER BY permet de spcifier les colonnes
dfinissant les critres de tri
Le tri se fera d'abord selon la premire colonne
spcifie, puis selon la deuxime colonne etc...
Exemple
Q11 Lister les produits en les triant par marques et l'intrieur
d'une marque par prix dcroissants
SELECT *
FROM produit P
ORDER BY P.marque, P.prix DESC
L'ordre de tri est prcis par ASC (croissant) ou DESC
(dcroissant) ; par dfaut ASC
IUT de Nice - Cours SGBD1 127
Expression des jointures
Le produit cartsien s'exprime simplement en incluant
plusieurs tables aprs la clause FROM
La condition de jointure est exprime aprs WHERE
Exemples :
Q12 Donner les rfrences et les noms des produits vendus
SELECT P.IdPro, P.nom
FROM produit P , vente V
WHERE P.IdPro = V.IdPro
Q13 Donner les noms des clients qui ont achet le produit de
nom 'PS1'
SELECT C.nom
FROM client C , produit P, vente V
WHERE V.IdCli = C.IdCli
AND V.IdPro = P.IdPro
AND P.nom = 'PS1'
IUT de Nice - Cours SGBD1 128
Auto-jointure
Q14 Donner les noms des clients de la mme ville que John
SELECT C2.nom
FROM client C1 , client C2
WHERE 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
IUT de Nice - Cours SGBD1 129
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 C.IdCli, C.nom, C.ville
V.IdPro, V.date, V.qte
FROM client C NATURAL LEFT JOIN vente V
IUT de Nice - Cours SGBD1 130
Sous-requtes
SQL permet l'imbrication de sous-requtes au niveau de
la clause WHERE
d'o le terme "structur" dans Structured Query Language
Les sous-requtes sont utilises :
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 !!
IUT de Nice - Cours SGBD1 131
Exemple
Q16 Donner les noms des clients qui ont achet le produit 'p1'
Avec sous-requte
SELECT C.nom
FROM client C
WHERE IdCli IN
(
SELECT V.IdCli
FROM vente V
WHERE P.IdPro = 'p1'
)
Avec jointure
SELECT C.nom
FROM client C , vente V
WHERE C.IdCli = V.IdCli
AND V.IdPro = 'p1'
De prfrence, utiliser la jointure
IUT de Nice - Cours SGBD1 132
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 C.nom
FROM produit P
WHERE 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 P.nom
FROM produit P
WHERE 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
)
)
IUT de Nice - Cours SGBD1 133
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 V.IdCli
FROM vente V
WHERE 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 V.IdCli
FROM vente V
WHERE V.qte >= ANY
(
SELECT W.qte
FROM vente W
WHERE W.IdCli = 'c1'
)
IUT de Nice - Cours SGBD1 134
Les prdicats ALL et ANY sont redondants, ils peuvent
s'exprimer avec EXISTS
x ANY
( SELECT y
FROM t
WHERE p )

EXISTS
( SELECT *
FROM t
WHERE p AND x t.y )
x ALL
( SELECT y
FROM t
WHERE p )

NOT EXISTS
( SELECT *
FROM t
WHERE p AND NOT ( x t.y ) )
O est un prdicat de comparaison (=, <>, <, <=, >, >=)
IUT de Nice - Cours SGBD1 135
Expression des unions
SQL1 permet d'exprimer l'opration d'union en
connectant des SELECT par des UNION
Q21 Donner les nos des produits de marque IBM ou ceux
achets par le client no 'c1'
SELECT P.IdPro
FROM produit P
WHERE P.marque = 'IBM'
UNION
SELECT P.IdPro
FROM vente V
WHERE V.IdCli = 'c1'
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)
IUT de Nice - Cours SGBD1 136
Fonctions de calculs
SQL fournit des fonctions de calcul oprant sur
l'ensemble des valeurs d'une colonne de table
COUNT nombre de valeurs
SUM somme des valeurs
AVG moyenne des valeurs
MAX plus grande valeur
MIN plus petite valeur
Q22 Donner le nombre total de clients
SELECT COUNT ( IdCli )
FROM client
Q23 Donner le nombre total de clients ayant achet des
produits
SELECT COUNT ( DISTINCT IdCli )
FROM 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
IUT de Nice - Cours SGBD1 137
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 SUM ( V.qte )
FROM vente V , produit P
WHERE 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 P1.nom
FROM produit P1
WHERE P1.prix <
(
SELECT AVG ( P2.prix )
FROM produit P2
)
Cet exemple montre un "singleton select " pour
calculer la moyenne des prix
IUT de Nice - Cours SGBD1 138
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 V.IdPro, SUM ( V.qte )
FROM vente V
GROUP BY V.IdPro
Q27 Donner la quantit totale achete par chaque client (0 pour
ceux qui n'ont rien achet)
SELECT C.IdCli, SUM ( V.qte )
FROM client C NATURAL LEFT JOIN vente V
GROUP BY C.IdCli
IUT de Nice - Cours SGBD1 139
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 P.marque, AVG ( P.prix )
FROM produit P
GROUP BY P.marque
HAVING AVG ( P.prix ) < 5000
Q29 Donner les rfrences des produits achets en qte > 10
par plus de 50 clients
SELECT P.marque, AVG ( P.prix )
FROM vente V
WHERE V.qte > 10
GROUP BY V.IdPro
HAVING COUNT (*) > 50
IUT de Nice - Cours SGBD1 140
La forme gnrale de SELECT
SELECT [DISTINCT] liste d'attributs, expressions
FROM liste de tables ou vues
WHERE qualification
GROUP BY attributs de partitionnement
HAVING qualification de groupe
ORDER BY liste de colonnes [ ASC | DESC ]
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 P.IdPro, P.prix, P.marque,
'Qte max vendue = ', MAX ( V.qte)
FROM produit P , vente V
WHERE P.IdPro = V.IdPro
AND P.marque IN ('IBM', 'Apple', 'Dec')
AND V.qte > 10
GROUP BY P.IdPro, P.prix, P.marque
HAVING SUM ( V;qte ) > 500
IUT de Nice - Cours SGBD1 141
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
IUT de Nice - Cours SGBD1 142
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
IUT de Nice - Cours SGBD1 143
Insertion d'une seule ligne
Q31 Ajouter le client ('c100', 'Duduche', 'Nice') dans la table
client
INSERT
INTO client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')
Insertion de plusieurs lignes
Q32 Ajouter dans une table temp de mme schma que la
table Vente, toutes les ventes qui sont antrieures au 01-
Jan-1994
INSERT
INTO temp (IdCli, IdPro, date, qte)
SELECT V.no_cli, V.IdPro, V.date, V.qte
FROM vente V
WHERE V.date < '01-jan-1994'
IUT de Nice - Cours SGBD1 144
La commande UPDATE
La commande UPDATE permet de changer des valeurs
d'attributs de lignes existantes
UPDATE table
SET liste d'affectations
[ WHERE 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 produit
SET prix = prix * 1.2
Q34 Augmenter de 50% les prix des produits achets par des
clients de Nice
UPDATE produit
SET prix = prix * 1.5
WHERE EXISTS
(
SELECT *
FROM vente V , client C
WHERE V.IdCli = C.IdCli
AND C.ville = 'Nice'
)
IUT de Nice - Cours SGBD1 145
La commande DELETE
La commande DELETE permet d'enlever des lignes
dans une table
DELETE
FROM table
[ WHERE 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 vente
WHERE date < '01-jan-1994'
Q36 Supprimer les ventes des clients de Nice antrieures au
01-mar-1994
DELETE
FROM vente
WHERE date < '01-mar-1994'
AND IdCli IN
(
SELECT C.IdCli
FROM client C
WHERE C.ville = 'Nice'
)
IUT de Nice - Cours SGBD1 146
4 Contrle des donnes
Contrle des accs concurrents
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
IUT de Nice - Cours SGBD1 147
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
IUT de Nice - Cours SGBD1 148
Contrle des droits d'accs
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]
Les privilges qui peuvent tre passs sont :
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
IUT de Nice - Cours SGBD1 149
Le bnficiaire peut tre :
soit PUBLIC (tous les utilsateurs)
soit un utilisateur ou un groupe d'utilisateurs
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
Aucun utilisateur ne peut passer un privilge qu'il ne
dtient pas
La commande REVOKE
La commande REVOKE permet de retirer des droits
un utilisateur ou groupe d'utilisateurs
REVOKE privilges ON table FROM bnficiaire
IUT de Nice - Cours SGBD1 150
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 prix-cach AS
SELECT P.IdPro, P.nom, P.marque
FROM produit P
CREATE VIEW stat-vente ( IdPro, tot-qte )
AS SELECT V.IdPro, SUM ( V.qte )
FROM vente V
GROUP BY V.IdPro
IUT de Nice - Cours SGBD1 151
La commande CREATE VIEW
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
IUT de Nice - Cours SGBD1 152
Intrt des vues
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
IUT de Nice - Cours SGBD1 153
IUT de Nice - Cours SGBD1 154
Chapitre 6 TECHNIQUES DES SGBD
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 GESTION DE TRANSACTIONS
II REPRISE APRS PANNE
III SCURIT
IV INTGRIT
V MTHODES DACCS
IUT de Nice - Cours SGBD1 155
I 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
IUT de Nice - Cours SGBD1 156
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.
IUT de Nice - Cours SGBD1 157
La vie d'une transaction
Vie sans histoire
La transaction s'excute normalement jusqu' la fin.
Elle se termine par une instruction de validation
COMMIT en SQL
Nous dirons que cette transaction est valide.
Toutes les modifications faites sur la base par cette
transaction sont considres comme dfinitives.
Un assassinat
Un vnement extrieur vient interrompre
l'excution de la transaction de faon irrmdiable
Cet arrt peut provenir, soit d'une panne, soit d'une action
dlibre de la part du SGBD qui dcide de supprimer telle
ou telle transaction (c'est le cas lorsqu'il dtecte un
interblocage).
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 158
La gestion des transactions
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
IUT de Nice - Cours SGBD1 159
Les problmes de concurrence d'accs
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
IUT de Nice - Cours SGBD1 160
2. ECRITURE-ECRITURE ET PERTE DE MISE A JOUR
T2 vient "craser" par une autre criture celle effectue
par T1
Temps Transaction T1 Etat de la
base
Transaction T2
t1 lire A A = 10 -
t2 - lire A
t3 A := A + 10 -
t4 - -
t5 - A := A + 50
t6 crire A A = 20 -
t7 - A = 60 crire A
IUT de Nice - Cours SGBD1 161
3. ECRITURE-LECTURE ET LECTURES IMPROPRES
T2 lit une valeur modifie par T1 et ensuite T1 est
annule
Temps Transaction T1 Etat de la
base
Transaction T2
t1 lire A A=10 -
t2 A := A+ 20 -
t3 crire A A = 30 -
t4 - lire A
t5 **annulation**
t6 - -
IUT de Nice - Cours SGBD1 162
4. LECTURE-ECRITURE ET LECTURES NON
REPRODUCTIBLES
T1 modifie la valeur de A entre deux lectures de T2
Temps Transaction T1 Etat de la
base
Transaction T2
t1 lire A A=10 -
t2 - lire A
t3 A := A + 10 -
t4 crire A A = 20 -
t5 - -
t6 - 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.
IUT de Nice - Cours SGBD1 163
Verrouillage
Il repose sur les deux actions :
verrouiller (A) : acqurir un contrle de l'objet A
librer (A) : librer l'objet A
Un objet A est typiquement un n-uplet de la BD
Il y a deux types de verrous :
Verrous exclusifs (X locks)
ou verrous dcriture
Verrous partags (S locks)
ou verrous de lecture
IUT de Nice - Cours SGBD1 164
Protocole daccs aux donnes
1. Aucune transaction ne peut effectuer une lecture ou
une mise jour d'un objet si elle n'a pas acquis au
pralable un verrou S ou X sur cet objet
2. Si une transaction ne peut obtenir un verrou dj
dtenu par une autre transaction T2, alors elle doit
attendre jusqu ce que le verrou soit libr par T2
3. Les verrous X sont conservs jusqu la fin de la
transaction (COMMIT ou ROLLBACK)
4. En gnral les verrous S sont galement conservs
jusqu cette date
IUT de Nice - Cours SGBD1 165
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".
L'interblocage (ou verrou mortel)
Ti attend Tj , Tj attend Ti : il y a interblocage
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.
A B
Ti
Tj
IUT de Nice - Cours SGBD1 166
2 techniques pour traiter le problme d'interblocage :
Prvention des interblocages
Lorsqu'une demande d'acquisition de verrou ne peut
tre satisfaite on fait passer un test aux deux
transactions impliques, savoir celle qui demande le
verrou, Ti, et celle qui le possde dj, Tj.
Si Ti et Tj passent le test alors Ti est autoris attendre
Tj, sinon l'une des deux transactions est annule pour
tre relance par la suite.
Dtection des interblocages
Les interblocages sont dtects en construisant
effectivement le graphe "qui attend quoi" et en y
recherchant les cycles.
Lorsqu'un cycle est dcouvert l'une des transactions est
choisie comme victime, elle est annule de manire
faire disparatre le cycle.
L'examen du graphe peut se faire
soit lorsqu'il y a attente de la part d'une transaction,
soit priodiquement
IUT de Nice - Cours SGBD1 167
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.
IUT de Nice - Cours SGBD1 168
Protocole de verrouillage deux phases
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.
IUT de Nice - Cours SGBD1 169
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).
Lecture non renouvelable
Supposons que la transaction T1 rcupre une ligne, que la transaction
T2 effectue ensuite une mise jour de cette ligne et que la transaction
T1 rcupre de nouveau la mme ligne. La transaction T1 a en fait
rcuprer la mme ligne deux fois mais a observ des valeurs
diffrentes de cette ligne.
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 .
IUT de Nice - Cours SGBD1 170
Niveaux disolation SQL
Linstruction SET TRANSACTION permet de dfinir le
niveau disolation de la prochaine transaction excuter
SET TRANSACTION READ UNCOMMITTED | READ
COMMITTED | REPEATABLE READ | SERIALIZABLE
Loption par dfaut est SERIALIZABLE
Niveau disolation lecture
salissante
lecture non
renouvelable
fantme
READ UNCOMMITTED
Lecture non valide
O O O
READ COMMITTED
Lecture valide
N O O
REPEATABLE READ
Lecture renouvelable
N N O
SERIALIZABLE
Srialisable
N N N
IUT de Nice - Cours SGBD1 171
II La reprise aprs panne
Le problme des pannes
Analysons un exemple :
temps
T1
T2
T3
T4
T5
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)
IUT de Nice - Cours SGBD1 172
Journalisation des transactions
L'activit des transactions est enregistre dans un
journal. gr par le SGBD
Nous supposons que ce journal n'est jamais dtruit totalement,
par exemple en grant deux copies du mme journal.
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.
IUT de Nice - Cours SGBD1 173
Redmarrage du SGBD
Nous supposons qu'il y a eu une sauvegarde totale de la base
au temps indiqu ci-dessous :
temps
T1
T2
T3
T4
T5
t
panne
Point de
sauvegarde
Pour remettre la base dans un tat cohrent, le SGBD doit :
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.
IUT de Nice - Cours SGBD1 174
III Scurit
Protection des donnes contre les accs non autoriss
Contrle d'accs ou autorisation
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.
Autorisation (GRANT en SQL)
Tout usager qui a le droit de transmettre des privilges
sur un objet peut utiliser la commande GRANT pour
transmettre ce privilge :
GRANT privilges ON objet TO liste d'usagers
[WITH GRANT OPTION]
Les privilges peuvent tre :
- lire (SELECT),
- insrer de nouveaux n-uplets (INSERT),
- modifier des valeurs (UPDATE),
- supprimer la totalit d'une relation (DROP),
- crer de nouvelles relations (CREATE).
L'option facultative WITH GRANT OPTION permet au
donneur d'autoriser le receveur transmettre d'autres les
privilges qu'il reoit.
Un usager peut recevoir un privilge de plusieurs sources
diffrentes.
IUT de Nice - Cours SGBD1 175
Rvocation (REVOKE en SQL)
Tout usager ayant donn un privilge peut tout
moment retirer ce privilge grce la commande
REVOKE :
REVOKE privilges ON objet FROM liste d'usagers
Les privilges sur l'objet mentionn sont retirs au receveur
moins que ce dernier ne les ait reus d'une autre source,
indpendante.
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.
IUT de Nice - Cours SGBD1 176
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
Texte chiffr
ou cryptogramme
dcryptage
Texte
en clair
cl de cryptage cl de dcryptage
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
Ex.: Paul souhaite envoyer le message M Jacques.
Paul utilise la cl publique C
jacques
de Jacques pour
crypter le message qu'il transmet Jacques.
Jacques dchiffre le message reu en lui appliquant
D
jacques
(C
jacques
(M)) , personne d'autre n'est capable
de dchiffrer le message C
jacques
(M).
IUT de Nice - Cours SGBD1 177
L'algorithme du MIT
1. choisir 2 nombres premiers, p et q, chacun plus grands que
10
100
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 = M
e
(mod n) la cl publique = (e,n)
pour dchiffrer : D = C
d
(mod 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 N I C E
M 14 9 3 5
M
3
2744 729 27 125
Texte chiffr C=M
3
(mod 33) 5 3 27 26
C
7
78125 2187 - -
C
7
(mod 33) 14 9 3 5
Texte en clair N I C E
IUT de Nice - Cours SGBD1 178
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.
IUT de Nice - Cours SGBD1 179
Gestion des contraintes d'intgrit
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
IUT de Nice - Cours SGBD1 180
Utilisation des dclencheurs (trigger)
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)
IUT de Nice - Cours SGBD1 181
V Mthodes daccs
Mthode d'accs par dispersion
L'adresse relative d'un article (ou d'un paquet contenant
l'article) est obtenu par une fonction de hachage
applique la cl
fonction
de dispersion
cl 1
cl 2
cl 3
h(cl3)=h(cl2)
h(cl1)
article 1
article 2
article 3
collision
Traitement des collisions lorsqu'un paquet est plein
adressage ouvert
prendre le premier paquet suivant ayant de la place libre
chanage
chaner un paquet de dbordement au paquet plein
rehachage
appliquer une deuxime fonction de hachage
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 182
Mthodes d'accs par indexage
L'adresse relative d'un article (ou d'un paquet contenant
l'article) est recherche partir de la cl dans une table
d'index
article 1
article 2
cl 1
cl 2
index
cl 1
cl 2
Principales mthodes d'accs indexes
ISAM
ARBRE B
elles se distinguent par le mode de placement des articles
et par l'organisation de l'index
IUT de Nice - Cours SGBD1 183
ISAM (Indexed Sequential Acces Method d'IBM)
8
16
35
1 - 3 - 8
9 - 10 - 16
18 - 24 - 35
paquet 1
paquet 2
paquet 3
Les articles sont rangs dans des paquets de taille
fixe par ordre croissant des cls
Chaque paquet correspond une entre en index
contenant le doublet :
(plus grande cl du paquet, adresse relative du paquet)
IUT de Nice - Cours SGBD1 184
ARBRE B
L'index est hirarchis en plusieurs niveaux
21 30
12 21 30
2 5 12 14 18 21 23 25 30 Niveau 1
Niveau 2
Niveau 3
L'index est compos de paquets de cls
2 types de pointeurs :
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
IUT de Nice - Cours SGBD1 185
Chapitre 7 Larchitecture client serveur
et ODBC
I- L'architecture client serveur
II- Les normes du client serveur
III- ODBC
1. Gnralits
2. Composants ODBC
3. Niveaux de conformit
4. Structure d'un programme OBDC
5. Fonctions de connexion et de dconnexion
6. Transactions dans ODBC
7. Envoi de requtes SQL
8. Rcupration des rsultats
9. Dtection des erreurs
10. Exemples d'application ODBC
IUT de Nice - Cours SGBD1 186
I L'architecture client serveur
L'architecture client serveur est caractrise par
une rpartition des programmes entre processus
client et processus serveur communiquant sur un
rseau.
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.
SERVEUR
CLIENT
REPONSE
REQUTE
IUT de Nice - Cours SGBD1 187
Serveur de bases de donnes
Ils offrent des services classiques d'accs une
base de donnes :
recherches, mises jour
confidentialit, intgrit
traitement des transactions
reprise aprs panne
Ils excutent des requtes SQL et des
procdures stockes pour le compte du client
Aujourd'hui, bass sur des SGBD relationnels
IUT de Nice - Cours SGBD1 188
Le middleware
Le middleware est ce logiciel du milieu qui
assure les dialogues entre clients et serveurs
souvent htrognes.
Ensemble des services logiciels construits au-
dessus d'un protocole de transport afin de
permettre l'change de requtes et des rponses
associes entre client et serveur de manire
transparente.
IUT de Nice - Cours SGBD1 189
Les systmes ouverts
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.
IUT de Nice - Cours SGBD1 190
API (Application Programming Interface)
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
Interface applicative
interface
APPLICATIO
N
SGBD
API Adaptateur
Transport
protocole
CLIENT SERVEUR
IUT de Nice - Cours SGBD1 191
API propritaire du SGBD
fourni par l'diteur du SGBD
permet uniquement l'accs la base pour
laquelle elle a t dveloppe
Exemples
OCI d'Oracle
DB-Lib de Sybase
SQL/Services de RDB
IUT de Nice - Cours SGBD1 192
API indpendante du SGBD
fourni par un constructeur indpendant du SGBD
permet l'accs des SGBD diffrents
Exemples
ODBC de Microsoft
IDAPI de Borland, Novell et IBM
IUT de Nice - Cours SGBD1 193
Les principaux serveurs SQL
ORACLE
DB2
SYBASE
CA-OPEN INGRES
INFORMIX
SQL SERVER
IUT de Nice - Cours SGBD1 194
II Les normes du client serveur
CLI (Call Level Interface)
interface applicative SQL
interface unique permettant l'accs des
SGBDR diffrents
travaux du SAG (SQL Access Group)
standard X/Open
IUT de Nice - Cours SGBD1 195
RDA (Remote Data Access)
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
IUT de Nice - Cours SGBD1 196
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)
IUT de Nice - Cours SGBD1 197
2. Composants ODBC
Composants ODBC
Application
Gestionnaire de pilotes
ODBC.DLL
Pilote Pilote Pilote
Source
de
donnes
Source
de
donnes
Source
de
donnes
API
IUT de Nice - Cours SGBD1 198
Application
Connexion un SGBD
Envoi de requtes SQL
Rcupration des rsultats
Gestion des erreurs
Gestion des transactions
Dconnexion
IUT de Nice - Cours SGBD1 199
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
IUT de Nice - Cours SGBD1 200
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 ...
IUT de Nice - Cours SGBD1 201
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
IUT de Nice - Cours SGBD1 202
Pilote
Deux types de pilotes
- Pilotes traitants (single-tier)
traitent les requtes SQL
destins des BD non-SQL
analyse, traduit les instructions SQL en
oprations lmentaires de fichier et les
transmet la source de donnes
- Pilotes transparents (multiple-tier)
transmettent les requtes SQL un serveur
qui les traitent
IUT de Nice - Cours SGBD1 203
Source de donnes
Donnes auxquelles un utilisateur souhaite
accder
Identifie par une entre dans le fichier
ODBC.INI
Chaque entre de nom de source dans
ODBC.INI spcifie des informations de
connexion
IUT de Nice - Cours SGBD1 204
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
Niveaux de conformit API
- Dfinit diffrents niveaux de fonctions de l'API
- Un pilote particulier prcise son niveau de
conformit API
Niveaux de conformit SQL
- Dfinit diffrents niveaux de grammaire SQL
IUT de Nice - Cours SGBD1 205
Niveaux de conformit API
Le niveau noyau (Core API)
Correspond au standard CLI de l'X/Open
Allocation et libration de descripteurs
d'environnement, de connexion et d'instruction
Fonction de connexion
Prparation et excution d'instruction SQL
Excution directe d'instructions SQL
Liaison pour des paramtres SQL et des
colonnes de rsultats
Validation ou annulation de transactions
Rcupration d'informations sur des erreurs
IUT de Nice - Cours SGBD1 206
Niveaux de conformit API
Le niveau 1 (Level 1 API)
Noyau +
Fonctions permettant d'obtenir des
informations issues du catalogue d'une base,
ainsi que des informations sur un pilote ou une
source de donnes
Le niveau 2 (Level 2 API)
Niveau 1 +
Fonctions de gestion des curseurs
IUT de Nice - Cours SGBD1 207
Niveaux de conformit SQL
Grammaire SQL minimale
LDD : CREATE et DROP TABLE
LMD : SELECT, INSERT, UPDATE, DELETE
Expressions simples dans les critres
Grammaire SQL noyau
SQL min +
LDD : ALTER TABLE, CREATE INDEX,
CREATE VIEW, GRANT, REVOKE
LMD : SELECT complet
Grammaire SQL tendue
SQL Noyau +
LMD : jointure externes, unions
Procdures stockes
IUT de Nice - Cours SGBD1 208
4. Structure d'un programme ODBC
Structure d'un programme ODBC
SQLAllocEnv
SQLAllocConnect
SQLConnect
SQLAllocStmt
SQLFreeStmt
SQLDisconnect
SQLFreeEnv
SQLFreeConnect
CLOSE option
DROP option
Envoi de requtes SQL
SQLFreeConnect
IUT de Nice - Cours SGBD1 209
5. Fonctions de connexion et de dconnexion
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
IUT de Nice - Cours SGBD1 210
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
IUT de Nice - Cours SGBD1 211
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 );
/* TRAITER LES REQUETES SQL */
// Terminer la connexion
SQLDisconnect(hdbc);
// Liberer les descripteurs
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
IUT de Nice - Cours SGBD1 212
6. Transactions dans ODBC
Deux modes de validation des instructions SQL :
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
IUT de Nice - Cours SGBD1 213
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+
IUT de Nice - Cours SGBD1 214
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.
IUT de Nice - Cours SGBD1 215
7. Envoi de requtes SQL
Deux manires pour soumettre une requte SQL:
Envoi pour excution directe
ce cas concerne les instructions qui ne seront
excutes qu'une seule fois
l'instruction est prpare et excute en une
seule tape au moyen d'un appel
SQLExecDirect
Envoi pour prparation puis demandes
d'excution
ce cas concerne les instructions qui seront
excutes plusieurs fois
l'instruction est prpare une seule fois en
faisant appel SQLPrepare
l'instruction est ensuite excute au moyen de
SQLExecute
rien n'empche d'excuter plusieurs fois la
mme instruction en utilisant SQLExecDirect,
mais c'est moins efficace
IUT de Nice - Cours SGBD1 216
Gestion d'une requte SQL
Gestion d'une requte SQL
oui non
oui
SQLAllocStmt
SQLFreeStmt
Slection ?
non
SQLExecDirect
SQLSetParam
SQLSetParam
SQLPrepare
SQLExecute
Nouvelle excution
Rcuprer les
rsultats
Requte en boucle ?
IUT de Nice - Cours SGBD1 217
Paramtres d'une requte SQL
Les paramtres d'une requte peuvent tre
associs des variables du programme, en
utilisant la fonction SQLSetParam
Fonctions de gestion des requtes SQL
SQLAllocStmt
dfinit un descripteur d'instruction et
l'associe une connexion
SQLFreeStmt
libre un descripteur d'instruction
si un curseur est associ l'instruction, il est
ferm
SQLExecDirect
prpare et excute directement une
instruction SQL
IUT de Nice - Cours SGBD1 218
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
IUT de Nice - Cours SGBD1 219
Terminer le traitement d'une instruction
SQL
La fonction SQLFreeStmt permet de librer les
ressources associes un descripteur
d'instruction
Elle possde quatre options:
SQL_CLOSE
Ferme le curseur ventuellement
Le descripteur d'instruction peut tre utilis
nouveau
SQL_DROP
Ferme le curseur ventuellement
Libre toutes les ressources associes au
descripteur d'instruction
SQL_UNBIND
Libre tous les buffers lis par SQLBindCol
SQL_RESET_PARAMS
Libre tous les buffers requis par
SQLBindParameter
IUT de Nice - Cours SGBD1 220
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);
/* RECUPERATION DES RESULTATS */
SQLFreeStmt(hstmt, SQL_UNBIND);
SQLFreeStmt(hstmt, SQL_DROP);
SQLFreeStmt(hstmt, SQL_CLOSE);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
IUT de Nice - Cours SGBD1 221
8. Rcupration des rsultats
Rcupration des rsultats
SQLBindCol
UPDATE, DELETE
ou INSERT
Dautres lignes ?
SQLFetch
SELECT
SQLRowCount
Type dinstruction ?
non
oui
IUT de Nice - Cours SGBD1 222
Liaison d'une colonne une zone
mmoire (BINDING)
L'association d'une zone mmoire une
colonne de l'ensemble rsultat se fait en
utilisant la fonction SQLBindCol
Paramtres de SQLBindCol
un descripteur d'instruction
le numro de la colonne rsultat
le type C de la colonne
l'adresse de la variable qui recevra les valeurs de
cette colonne
le nombre d'octets maximum de la zone mmoire
le nombre d'octets crits dans la zone mmoire
Rcuprer les lignes (FETCH)
Les lignes de l'ensemble rsultat sont
rcupres en utilisant la fonction SQLFetch
IUT de Nice - Cours SGBD1 223
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);
IUT de Nice - Cours SGBD1 224
9. Dtection des erreurs
Codes de retour des fonctions
SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_NO_DATA_FOUND aucune ligne
retrourne avec FETCH
SQL_ERROR
SQL_INVALID_HANDLE
SQL_STILL_EXECUTING
SQL_NEED_DATA
Rcuprer les messages d'erreurs
La fonction SQLError permet d'obtenir des
informations supplmentaires, lorsqu'une
fonction ODBC retourne le code SQL_ERROR
ou SQL_SUCCESS_WITH_INFO

Vous aimerez peut-être aussi