Vous êtes sur la page 1sur 224

Cours SGBD 1

Concepts et langages des


Bases de Donnes Relationnelles

SUPPORT DE COURS

IUT de Nice Dpartement INFORMATIQUE

IUT de Nice - Cours SGBD1

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

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

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

Des fichiers aux Base de Donnes

Sparation des donnes et des programmes

FICHIER

BASE DE DONNEES

Les donnes des fichiers sont


dcrites dans les programmes

Les donnes de la BD sont


dcrites hors des programmes
dans la base elle-mme

Description
fichier
Description
unique

Description
fichier

Programmes

Programmes

La multiplication des fichiers entranait la redondance des


donnes, ce qui rendait difficile les mises jour.
D'o l'ide d'intgration et de partage des donnes

IUT de Nice - Cours SGBD1

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

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

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

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

III Larchitecture ANSI/SPARC


proposition en 75 de l ANSI/SPARC
(Standard Planning And Requirement Comitte)

3 niveaux de reprsentation des donnes

EXTERNE

Vue 1

Vue 2

Schma logique
DICTIONNAIRE DE DONNEES

CONCEPTUEL

Schma physique
STRUCTURE DE DONNEES

INTERNE

SGBD
Niveaux de reprsentation des donnes

IUT de Nice - Cours SGBD1

10

Le niveau externe
Le concept de vue permet d'obtenir l'indpendance
logique
La modification du schma logique nentrane pas la
modification des applications
(une modification des vues est cependant ncessaire)

Chaque vue correspond la perception dune partie des


donnes, mais aussi des donnes qui peuvent tre
synthtises partir des informations reprsentes dans
la BD (par ex. statistiques)

Le niveau conceptuel
il contient la description des donnes et des
contraintes dintgrit (Dictionnaire de Donnes)
le schma logique dcoule dune activit de
modlisation

Le niveau interne
il correspond aux structures de stockage et aux
moyens daccs (index)

IUT de Nice - Cours SGBD1

11

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

12

IV Notion de modlisation des donnes

UNIVERS REEL
Modles smantiques
Orients conception
Entit-Association, Merise
MODELE
CONCEPTUEL
MCD
Modles de BD
Hirarchique, Rseau
Relationnel
SCHEMA
LOGIQUE

Les modles de BD sont souvent trop limits pour


pouvoir reprsenter directement le monde rel
Mthodologies de conception prsentes en ACSI,
SGBD2

IUT de Nice - Cours SGBD1

13

Le modle Entit-Association
EA en franais, ER en anglais (pour Entity Relationship)
Formalisme retenu par l'ISO pour dcrire l'aspect
conceptuel des donnes laide dentits et
dassociations

Le concept dentit

Reprsentation dun objet matriel ou immatriel


Par exemple un employ, un projet, un bulletin de paie
Nom de lentit
Liste des proprits

Les 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
IUT de Nice - Cours SGBD1

14

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

15

Les associations

Reprsentation dun lien entre deux entits ou plus

une association peut avoir des proprits particulires

Par exemple, la date demprunt dun livre

adhrent

exemplaire
emprunter
date demprunt

IUT de Nice - Cours SGBD1

16

Les cardinalits

La cardinalit dune association pour une entit


constituante est constitue dune borne minimale et
dune borne maximale :
Minimale : nombre minimum de fois quune
occurrence de lentit participe aux occurrences de
lassociation, gnralement 0 ou 1
Maximale : nombre maximum de fois quune
occurrence de lentit participe aux occurrences de
lassociation, gnralement 1 ou n
Par exemple :
adhrent

exemplaire
emprunter
0,3

date demprunt

0,1

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.

IUT de Nice - Cours SGBD1

17

Les cardinalits maximum sont ncessaires pour


concevoir le schma de la base de donnes
Les cardinalits minimums sont ncessaires pour
exprimer les contraintes dintgrit

En notant uniquement les cardinalits maximum,


on distingue 3 type de liens :
Lien fonctionnel 1:n
Lien hirarchique n:1
Lien maill n:m

IUT de Nice - Cours SGBD1

18

Lien fonctionnel

1:n

B
1

Une instance de A ne peut tre associe qu' une seule


instance de B

Par exemple :
employ

dpartement
travaille
n

Un employ ne peut travailler que dans un seul


dpartement

IUT de Nice - Cours SGBD1

19

Lien hirarchique n:1

B
n

Une instance de A peut tre associe plusieurs


instances de B
Inverse d'un lien 1:n

dpartement

employ
emploie
n

Un dpartement emploie gnralement plusieurs


employs

IUT de Nice - Cours SGBD1

20

Lien maill

n:m

B
n

Une instance de A peut tre associe plusieurs


instances de B et inversement

Par exemple :
employ

projet
participe
m

De ce schma, on dduit quun employ peut participer


plusieurs projets.

IUT de Nice - Cours SGBD1

21

Exemple de diagramme Entit Association

est chef de

travaille

dirige
a pour chef

dpartement

employ
n

n
participe
m
projet

IUT de Nice - Cours SGBD1

22

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

IUT de Nice - Cours SGBD1

SGBDR

23

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

24

LE MODLE RSEAU

Schma logique reprsent par un GRAPHE


noeud
arc

: article (reprsente une entit)


: lien hirarchique 1:N

Exemple de shma rseau


CLIENT

PRODUIT

VENTE

Diagramme de Bachman

Langage navigationnel pour manipuler les donnes

Implmentation d'un lien par une liste circulaire :


r

R
L
S

IUT de Nice - Cours SGBD1

s1

s2

25

..... sn

Exemple de schma rseau :


CLIENTS

PRODUITS
p

q
y

x, p

x, q
q
y, p

y
y, r

Reprsentation dune association N:M par 2 liens


CODASYL

IUT de Nice - Cours SGBD1

26

LE MODLE HIRARCHIQUE

Schma logique reprsent par un ARBRE


noeud
arc

: segment (regroupement de donnes)


: lien hirarchique 1:N

Exemple de shma hirarchique


CLIENT
CLIENT
PRODUIT
PRODUIT

VENTE

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

27

LE MODLE RELATIONNEL
En 1970, CODD prsente le modle relationnel
Schma logique reprsent par des RELATIONS
LE SCHMA RELATIONNEL
Le schma relationnel est l'ensemble des RELATIONS
qui modlisent le monde rel
Les relations reprsentent les entits du monde rel
(comme des personnes, des objets, etc.) ou les
associations entre ces entits
Passage d'un schma conceptuel E-A un schma
relationnel
- une entit est reprsente par la relation :
nom_de_l'entit (liste des attributs de l'entit)
- une association M:N est reprsente par la relation :
nom_de_l'association (
liste des identifiants des entits participantes,
liste des attributs de l'association)

IUT de Nice - Cours SGBD1

28

Ex . :
CLIENT (IdCli, nom, ville)
PRODUIT (IdPro, nom, prix, qstock)
VENTE (IdCli, IdPro, date, qte)
Reprsentation des donnes sous forme de tables :
CLIENT

PRODUIT

VENTE

IdCli

Nom

Ville

Smith

Paris

Jones

Paris

Blake

Nice

IdPro

Nom

P
Q
R
S

Auto
Moto
Velo
Pedalo

IdCli

IdPro

X
X
X
Y
Y
Z

P
Q
R
P
Q
Q

Prix

Qstock
100
100
100
100

Date

10
10
10
10

Qte
1
2
3
4
5
6

LES AVANTAGES DU MODLE RELATIONNEL


IUT de Nice - Cours SGBD1

29

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

30

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

31

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

32

Chapitre 2

I.

Le modle relationnel

LES CONCEPTS

II. LES DPENDANCES


FONCTIONNELLES
III. LES RGLES D'INTGRIT
IV. LES FORMES NORMALES

IUT de Nice - Cours SGBD1

33

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

34

LE DOMAINE

ensemble de valeurs atomiques d'un certain type


smantique
Ex. :
NOM_VILLE = { Nice, Paris, Rome }
les domaines sont les ensembles de valeurs possibles
dans lesquels sont puises les donnes
deux ensembles peuvent avoir les mmes valeurs
bien que smantiquement distincts
Ex. :
NUM_ELV = { 1, 2, , 2000 }
NUM_ANNEE = { 1, 2, , 2000 }

IUT de Nice - Cours SGBD1

35

LA RELATION

sous ensemble du produit cartsien de plusieurs


domaines
R D1 D2 ... Dn
D1, D2, ... , Dn sont les domaines de R
n est le degr ou larit de R
Ex.:
Les domaines :
NOM_ELV = { dupont, durant }
PREN_ELV = { pierre, paul, jacques }
DATE_NAISS = {Date entre 1/1/1990 et 31/12/2020}
NOM_SPORT = { judo, tennis, foot }
La relation ELEVE
ELEVE NOM_ELV PREN_ELV DATE_NAISS
ELEVE = { (dupont, pierre, 1/1/1992),
(durant, jacques, 2/2/1994) }
La relation INSCRIPT
INSCRIPT NOM_ELV NOM_SPORT
INSCRIPT = { (dupont, judo), (dupont, foot),
(durant, judo)
}

IUT de Nice - Cours SGBD1

36

LES N-UPLETS

un lment d'une relation est un n-uplet de valeurs


(tuple en anglais)
un n-uplet reprsente un fait
Ex.:
Dupont pierre est un lve n le 1 janvier1992
dupont est inscrit au judo

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

37

LES ATTRIBUTS

Chaque composante d'une relation est un attribut


Le nom donn un attribut est porteur de sens
Il est en gnral diffrent du nom de domaine
Plusieurs attributs peuvent avoir le mme domaine
Ex. :
La relation TRAJET :
TRAJET NOM_VILLE NOM_VILLE
Dans laquelle la premire composante reprsente la ville de
dpart VD, la deuxime composante la ville darrive VA dun
trajet.

IUT de Nice - Cours SGBD1

38

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

39

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

40

LA REPRSENTATION

1 RELATION = 1 TABLE
U1

V1

W1

X1

Y1

U2

V2

W2

X2

Y2

U3

V3

W3

X3

Y3

X1

Y1

1 LMENT ou n-uplet = 1 LIGNE


LIGNE
1 lment

U1

V1

W1

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

41

Exemples :
- La relation ELEVE
ELEVE :
lment

NOM

PRENOM

NAISS

dupont

Pierre

1/1/1992

durant

Jacques

2/2/1994

duval

Paul

3/03/81

- La relation INSCRIPT
INSCRIPT :
lment

NOM_ELV

SPORT

Dupont

judo

Dupont

foot

Durant

judo

- La relation TRAJET
TRAJET :
lment

IUT de Nice - Cours SGBD1

VD

VA

Nice

paris

Paris

rome

Rome

nice

42

Fentre Cration de Table dAccess

Affichage dune table dans Access


Slecteur denregistrement

Boutons de dplacement
IUT de Nice - Cours SGBD1

43

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 :

XY

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

44

La cl dune relation

attribut (ou groupe minimum d'attributs) qui dtermine


tous les autres
Ex.:
PRODUIT (no_prod, nom, prixUHT)
no_prod (nom, prixUHT)
no_prod est une cl

Une cl dtermine un n-uplet de faon unique


Pour trouver la cl d'une relation, il faut examiner
attentivement les hypothses sur le monde rel
Une relation peut possder plusieurs cls, on les
appelle cls candidates
Ex.:
dans la relation PRODUIT, nom est une cl candidate (
condition qu'il n'y ait jamais 2 produits de mme nom)

IUT de Nice - Cours SGBD1

45

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

46

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

47

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

48

INTGRIT DE CL

Les valeurs de cls primaires doivent tre :


- uniques
- non NULL
Unicit de cl
Unicit des n-uplets

Valeur NULL
valeur conventionnelle pour reprsenter une
information inconnue
dans toute extension possible d'une relation, il ne peut
exister 2 n-uplets ayant mme valeur pour les attributs
cls
sinon 2 cls identiques dtermineraient 2 lignes identiques
(d'aprs la dfinition dune cl), ce qui est absurde

IUT de Nice - Cours SGBD1

49

INTGRIT RFRENCIELLE

Les valeurs de cls trangres sont 'NULL' ou sont des


valeurs de la cl primaire auxquelles elles font rfrence

Relations dpendantes

LES DPENDANCES :
Liaisons de un plusieurs exprimes par des attributs
particuliers: cls trangres ou cls secondaires

IUT de Nice - Cours SGBD1

50

Les contraintes de rfrence ont un impact important


pour les oprations de mises jour, elles permettent
dviter les anomalies de mises jour
Exemple :
CLIENT (no_client, nom, adresse)
ACHAT (no_produit, no_client, date, qte)
Cl trangre no_client dans ACHAT
insertion tuple no_client = X dans ACHAT
vrification si X existe dans CLIENT
suppression tuple no_client = X dans CLIENT
soit interdire si X existe dans ACHAT
soit supprimer en cascade tuple X dans ACHAT
soit modifier en cascade X = NULL dans ACHAT
modification tuple no_client = X en X dans CLIENT
soit interdire si X existe dans ACHAT
soit modifier en cascade X en X dans ACHAT

IUT de Nice - Cours SGBD1

51

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

52

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

53

La dcomposition

Objectif:
- dcomposer les relations du schma relationnel
sans perte dinformations
- obtenir des relations canoniques ou de base du
monde rel
- aboutir au schma relationnel normalis
Le schma de dpart est le schma universel de la
base
Par raffinement successifs ont obtient des sous
relations sans perte dinformations et qui ne seront
pas affectes lors des mises jour (non redondance)

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

54

1re 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

55

2me 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

56

3me 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

57

3me 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 nuplets diffrents
BCNF est plus fin que FN3 : BCNF FN3
Contre-exemple
une relation en 3FN qui n'est pas BCNF
CODEPOSTAL (ville, rue, code)
on vrifie qu'elle est FN3, elle n'est pas BCNF car la cl = (ville,
rue) (ou (code, ville) ou (code, rue)), et code ville

IUT de Nice - Cours SGBD1

58

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

59

Les formulaires

2 types de formulaires :
de prsentation des donnes
Ils permettent de saisir, ou modifier les donnes
dune ou plusieurs tables sous une forme
visuellement agrable
de distribution
ils ne sont attachs aucune table, et servent
uniquement de page de menu pour orienter
lutilisateur vers dautres formulaires ou tats

IUT de Nice - Cours SGBD1

60

Formulaire rudimentaire

Fentre Conception de Formulaire dAccess

IUT de Nice - Cours SGBD1

61

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

62

Cration dun formulaire de prsentation


1) Dfinir la proprit Source de donnes (table ou
requte)
Cliquer ici avec le bouton droit, puis slectionner Proprits

Bote des proprits du formulaire

Slectionner longlet Donnes

Dfinir la proprit Source (table ou requte)

IUT de Nice - Cours SGBD1

63

2) Insrer dans le formulaire les Zones


de texte lies aux champs de la
Source de donnes
a) Slectionner loutil Zone de texte
b) Insrer la Zone de texte avec son Etiquette associe

c) Dfinir la proprit Source contrle de la Zone de texte

Pour afficher la fentre des proprits dun contrle,


cliquer dessus avec le bouton droit de la souris

IUT de Nice - Cours SGBD1

64

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
Ennttrreepprriissee M
MIIC
CR
RO
O

En-tte de groupe Catgorie :


Dtail

Pied de groupe

IdPro
10
20
30

Dsignation
Ps
Imac
Aptiva

Sous totaux :

Marque
Ibm
Apple
Ibm

Qstock
10
20
10
40

Pied de page

Pied dtat

Total gnral :

IUT de Nice - Cours SGBD1

Jeudi 12 fvrier 1998

65

Page 1 sur 1

200

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

66

2) Dfinir Trier et grouper

IUT de Nice - Cours SGBD1

67

3) Placer les champs dans les diffrentes section


de ltat

IUT de Nice - Cours SGBD1

68

Chapitre 4

I.

Lalgbre relationnelle

Les oprations

II. Le langage algbrique

IUT de Nice - Cours SGBD1

69

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

70

UNION

L'union de deux relations R1 et R2 de mme schma est


une relation R3 de schma identique qui a pour n-uplets
les n-uplets de R1 et/ou R2
On notera :

R3 = R1 R2
R1
A

B
0
2

R2
A

1
3

B
0
4

1
5

R3 = R1 R2

R3
A

B
0
2
4

IUT de Nice - Cours SGBD1

71

1
3
5

INTERSECTION

Lintersection entre deux relations R1 et R2 de mme


schma est une relation R3 de schma identique ayant
pour n-uplets les n-uplets communs R1 et R2
On notera :

R3 = R1 R2
R1
A

B
0
2

R2
A

1
3

B
0
4

1
5

R3 = R1 R2

R3
A

B
0

IUT de Nice - Cours SGBD1

72

DIFFRENCE

La diffrence entre deux relations R1 et R2 de mme


schma est une relation R3 de schma identique ayant
pour n-uplets les n-uplets de R1 n'appartenant pas R2
On notera :

R3 = R1 R2
R1
A

B
0
2

R2
A

1
3

B
0
4

1
5

R3 = R1 R2

R3
A

B
2

IUT de Nice - Cours SGBD1

73

PROJECTION

La projection d'une relation R1 est la relation R2


obtenue en supprimant les attributs de R1 non
mentionns puis en liminant ventuellement les nuplets identiques
On notera :

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

IUT de Nice - Cours SGBD1

A2

A3

74

A4

Requte 1 :
Quels sont les rfrences et les prix des produits ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro

Nom

Marque

P
Q
R
S

PS1
Mac
PS2
Word

IBM
Apple
IBM
Microsoft

Prix
1000
2000
3000
4000

PRODUIT (IdPro, Prix)

IdPro
P
Q
R
S

IUT de Nice - Cours SGBD1

75

Prix
1000
2000
3000
4000

Requte 2 :
Quelles sont les marques des produits ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro

Nom

Marque

P
Q
R
S

PS1
Mac
PS2
Word

IBM
Apple
IBM
Microsoft

PRODUIT (Marque)

Marque
IBM
Apple
Microsoft

Notez llimination des doublons..

IUT de Nice - Cours SGBD1

76

Prix
1000
2000
3000
4000

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

IUT de Nice - Cours SGBD1

A2

A3

77

A4

Requte 3 :
Quelles sont les produits de marque IBM ?
PRODUIT (IdPro, Nom, Marque, Prix)
IdPro

Nom

Marque

P
Q
R
S

PS1
Mac
PS2
Word

IBM
Apple
IBM
Microsoft

Prix
1000
2000
3000
4000

PRODUIT (Marque = IBM)

IdPro

Nom

Marque

P
R

PS1
PS2

IBM
IBM

IUT de Nice - Cours SGBD1

78

Prix
1000
3000

JOINTURE

La jointure de deux relations R1 et R2 est une relation


R3 dont les n-uplets sont obtenus en concatnant les nuplets de R1 avec ceux de R2 et en ne gardant que
ceux qui vrifient la condition de liaison
On notera :

R3 = R1 R2 (condition)
la jointure de R1 avec R2 suivant le critre condition
Le schma de la relation rsultat de la jointure est la
concatnation des schmas des oprandes (s'il y a
des attributs de mme nom, il faut les renommer)
Les n-uplets de R1 R2 (condition) sont tous les
couples (u1,u2) d'un n-uplet de R1 avec un n-uplet de
R2 qui satisfont "condition"
La jointure de deux relations R1 et R2 est le produit

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

79

La jointure permet de composer 2 relations l'aide


d'un critre de liaison

R1(A, B, C)
A
A1
A2
A3
A4

R2(U, V)
B

B1
B2
B3
B4

10
10
20
30

10
20
30

V1
V2
V3

R1 R2 (R1.C = R2.U)

A
A1
A1
A3
A4

IUT de Nice - Cours SGBD1

B
B1
B2
B3
B4

C
10
10
20
30

80

10
10
20
30

V1
V1
V2
V3

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


X
Y
Z

P
Q
P

1/1/98
2/1/98
3/1/98

Qte
1
1
1

IdPro Dsignation Prix


P
Q

PS
Mac

100
100

VENTE PRODUIT (V.IdPro=P.IdPro)

Idcli IdPro
X
Y
Z

P
Q
P

Date
1/1/98
2/1/98
3/1/98

Qte Dsignation Prix


1 PS
1 Mac
1 PS

100
100
100

La normalisation conduit dcomposer ; la jointure


permet de recomposer

IUT de Nice - Cours SGBD1

81

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
Y
Z

Nice
Paris
Nice

X
Y
Z

Nice
Paris
Nice

Smith
Blake
John

Smith
Blake
John

R1 = CLIENT CLIENT (C1.Ville = C2.Ville)

R1
C1.IdCli

C1.Nom

Ville

C2.IdCli C2.Nom

X
X
Y
Z
Z

Smith
Smith
Blake
John
John

Nice
Nice
Paris
Nice
Nice

X
Z
Y
X
Z

IUT de Nice - Cours SGBD1

82

Smith
John
Blake
Smith
John

R1
C1.IdCli

C1.Nom

Ville

C2.IdCli C2.Nom

X
X
Y
Z
Z

Smith
Smith
Blake
John
John

Nice
Nice
Paris
Nice
Nice

X
Z
Y
X
Z

Smith
John
Blake
Smith
John

R2 = R1 (C2.Nom = John)

R2
C1.IdCli

C1.Nom

Ville

C2.IdCli C2.Nom

X
Z

Smith
John

Nice
Nice

Z
Z

R3 = R2 (C1.Nom)

R3
C1.Nom
Smith
John

IUT de Nice - Cours SGBD1

83

John
John

DIVISION

Soit deux relations


R1 (A1, A2, , An, B1, B2, , Bm)
R2 (B1, B2, , Bm)
Si le schma de R2 est un sous-schma de R1.
La division de R1 par R2 est une relation R3 dont :
- le schma est le sous-schma complmentaire de R2
par rapport R1
- un n-uplet (a1, a2, , an) appartient R3 si
(a1, a2, , an, b1, b2, , bm) appartient R1
pour tous (b1, b2, , bm) R2.
On notera :

R3 = R1 R2
la division de R1 par R2

IUT de Nice - Cours SGBD1

84

la division permet de rechercher dans une relation les


sous n-uplets qui sont complts par tous ceux d'une
autre relation
Elle permet de rpondre des questions qui sont
formules avec le quantificateur universel :
"pour tout ..."
Requte 6 :
Quels sont les lves qui sont inscrits tous les sports ?
INSCRIPT

SPORT

Elve

Sport

toto
tata
toto
toto

judo
danse
foot
danse

Sport
judo
foot
danse

RES = INSCRIPT SPORT


RES
Elve
toto

IUT de Nice - Cours SGBD1

85

II

Le langage algbrique

Le langage algbrique permet de formuler une question


par une suite d'oprations de l'algbre relationnelle
Requtes sur le schma CLIENT, PRODUIT, VENTE
CLIENT (IdCli, nom, ville)
PRODUIT (IdPro, dsignation, marque, prix)
VENTE (IdCli, IdPro, date, qte)

Requte 8 :
Donner les no des produits de marque Apple et de prix <
5000 F
R1 = PRODUIT (marque = Apple')
R2 = PRODUIT (prix < 5000)
R3 = R1R2
RESUL = R3 (IdPro)

IUT de Nice - Cours SGBD1

86

Requte 9 :
Donner les no des clients ayant achet un produit de marque
Apple
R1 = PRODUIT (marque = 'Apple')
R2 = R1VENTE (R1.IdPro = VENTE.IdPro)
RESUL = R2 (IdCli)

IUT de Nice - Cours SGBD1

87

Requte 10 :
Donner les no des clients n'ayant achet que des produits de
marque Apple
R1 = VENTEPRODUIT (VENTE.IdPro = PRODUIT.IdPro)
R2 = R1 (marque = 'Apple')
R3 = R2 (IdCli)
R4 = R1 (marque 'Apple')
R5 = R4 (IdCli)
RESUL = R3 R5

IUT de Nice - Cours SGBD1

88

Requte 11 :
Donner les no des clients ayant achet tous les produits de
marque Apple
R1 = PRODUIT (marque = 'Apple')
R2 = R1 (IdPro)
R3 = VENTE (IdCli, IdPro)
R4 = R3 R2

IUT de Nice - Cours SGBD1

89

Arbre algbrique

une question peut tre reprsente par un arbre


Quels sont les clients de Nice ayant achet un produit de
marque 'Apple' ?
(no-cli)

(marque='Apple')

x (C.no-pro=P.no-pro)

(ville='Nice')

PRODUIT P

CLIENT C

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

90

Chapitre 5

Les langages de requte,


QBE, SQL

Les langages associs au modle


relationnel

II

QBE (Query By Example)

III SQL (Structured Query Language)

IUT de Nice - Cours SGBD1

91

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

ENSEMBLISTES

PREDICATIFS

Bass sur lAlgbre


Relationnelle
(Pas de variables)

IUT de Nice - Cours SGBD1

Bass sur le Calcul


des Prdicats

92

Langages Ensemblistes

ALGBRIQUE

SQL

Sert de rfrence tous les


langages relationnels

Paraphrasage du langage Algbrique


Standard daccs aux BDR, norme ISO

Langages Prdicatifs

Variables tuples

Variables domaines

Calcul relationnel de tuples

Calcul relationnel de domaines

ALPHA

QUEL

DATALOG

QBE

Dfini par Codd


Non implant

Systme
INGRES
(Berkeley)

BD dductives

Souvent offert au
dessus de SQL

IUT de Nice - Cours SGBD1

93

Exemple dune requte dans les 4 langages


ALGBRIQUE, SQL, ALPHA, et QBE
Donner les noms des clients qui ont achet le produit
'p1' ?
ALGBRIQUE
R1 = CLIENTVENTE (CLIENT.IdCli=VENTE.IdCli)
R2 = R1 (IdPro = 'p1')
R3 = R2 (Nom)

SQL
SELECT C.Nom
FROM client C, vente V
WHERE C.IdCli = V.IdCli
AND V.IdPro = 'p1'

ALPHA
RANGE OF v IS vente
-- v est une variable tuple
GET client.Nom :
-- qualification
v (v.IdCli = client.IdCli v.IdPro = 'p1')

QBE
CLIENT

| IdCli
| x

| Nom
| P.

VENTE

| IdCli
|
x

| IdPro
| p1

| Ville
|
| Date
|

|
|
| Qte |
|
|

x est une variable domaine (valeur exemple)

IUT de Nice - Cours SGBD1

94

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
| P.toto

| ville
|
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

95

1 Oprations de recherche

Recherche simple

Q1 Donner les nos des produits vendus


VENTE

| IdCli
|

| IdPro
| P.p

| date
|

| qte
|

|
|

QBE limine automatiquement les doublons


pour obtenir les doublons il faut spcifier ALL.

VENTE

| IdCli
|

| IdPro
| P.ALL.p

| date
|

| qte |
|
|

Q2 Donner tous les renseignements sur tous les clients


CLIENT

| IdCli
| P.x

| nom
| P.toto

| ville
| P.rome

|
|

| ville
|

|
|

on peut abrger en plaant P. en tte


CLIENT

| IdCli
P. |

IUT de Nice - Cours SGBD1

| nom
|

96

Recherche qualifie

Q3 Donner les nos des produits de marque Apple et cotant


moins de 8000 F.
PRODUIT

| IdPro
| P.p

| nom
|

| marque | prix
|
| Apple
| <8000 |

Q4 Donner les noms des clients de Nice ou Rome


CLIENT

| IdCli
| P.x
| P.y

| nom
|
|

| ville
|
|
Nice
|
|
Rome |

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
| P. x
|
x

| IdPro
|
p1
|
p2

| date
|
|

| qte |
|
|
|
|

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

97

Recherche utilisant un lien

Q7 Donner les noms des clients qui ont achet le produit p1


CLIENT

| IdCli
|
x

VENTE

| IdCli
|
x

| nom
| P.toto
| IdPro
|
p1

| ville
|
| date
|

| qte
|

|
|
|
|

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
|
x

| nom
| P.toto

PRODUIT

| IdPro
|
p

| nom
|

VENTE

| IdCli
|
x

| IdPro
|
p

IUT de Nice - Cours SGBD1

98

| ville
|

|
|

| marque | prix |
| Apple |
|
| date
|

| qte |
|
|

Recherche utilisant la ngation

Q9 Donner les noms des clients qui n'ont pas achet le produit
p1
CLIENT

| IdCli
|
x

| nom
| P.toto

VENTE

| IdCli
|
x

| IdPro
|
p1

| ville
|
| date
|

|
|

| qte |
|
|

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
| P. x
|
c1

| IdPro
|
p
|
p

| date
|
|

| qte |
|
|
|
|

Recherche utilisant une bote condition

Q11 Donner les nos des produits achets par plus qu'un seul
client
VENTE

| IdCli
|
x
|
y
|
|

| IdPro
| P. p
|
p

| date
|
|

CONDITION BOX
xy

| qte |
|
|
|
|

|
|

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

99

2 Fonctions de calcul
QBE fournit un ensemble de fonctions de calcul
prdfinies :
CNT.ALL
SUM.ALL
AVG.ALL
MAX.ALL
MIN.ALL

CNT.UNQ.ALL
SUM.UNQ.ALL
AVG.UNQ.ALL

- ALL. est toujours spcifi


- L'option UNQ. signifie "liminer les doublons avant
d'appliquer la fonction"
- Les valeurs nulles sont limines, sauf pour CNT.

Recherche simple utilisant une fonction

Q12 Donner le nombre total de clients


CLIENT

| IdCli
| P.CNT.ALL.x

| nom
|

| ville
|

|
|

Q13 Donner le nombre total de clients ayant achet des


produits
VENTE

| IdCli
| P.CNT.UNQ.ALL.x

IUT de Nice - Cours SGBD1

100

| IdPro | date
|
|

| qte |
|
|

Recherche qualifie utilisant une fonction

Q14 Donner le nombre de ventes du produit p1


VENTE

| IdCli
| P.CNT.ALL.x

| IdPro
| p1

| date
|

| qte |
|
|

Q15 Donner la qte totale vendue du produit p1


VENTE

| IdCli
|

| IdPro
|
p1

| date | qte
|
|
| P.SUM.ALL.qte |

Fonction dans la bote condition

Q16 Donner les nos des produits moins chers que tous ceux de
marque Apple
PRODUIT

| IdPro
| P.p
|

| nom
|
|

| marque | prix
|
|
| 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
|P.G.p

| date
|

G. est l'oprateur de regroupement

IUT de Nice - Cours SGBD1

101

| qte
|
| P.SUM.ALL.qte |

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
U.

| IdCli
|
c1

| nom
|

| ville
| Nice

|
|

Q19 Augmenter de 100F le prix du produit p1


PRODUIT
U.

IUT de Nice - Cours SGBD1

| IdPro
| p1
| p1

| nom
|
|

102

| marque | prix
|
|
val
|
| val + 100

|
|
|

Modification de plusieurs enregistrements


Les enregistrements modifier sont spcifis par une
valeur exemple (non une constante) de cl primaire

Q20 Doubler le prix de tous les produits Apple


PRODUIT
U.

| IdPro
|
p
|
p

| nom
|
|

| marque | prix
| Apple |
val
|
| 2 val

|
|
|

Q21 Mettre 0 toutes les qts achetes par les clients de Nice
CLIENT

| IdCli
| x

| nom
|

VENTE

| IdCli
| x

| IdPro
|

U.

| ville
| Nice
| date
|

|
|

| qte
|
0

|
|

Insertion d'un nouvel enregistrement

Q22 Ajouter le client (c20, 'Duduche', 'Nice') dans la table


CLIENT
CLIENT
I.

| IdCli | nom
| c20 | Duduche

| ville
| Nice

|
|

Le nouvel enregistrement doit avoir une valeur de cl primaire non


nulle, et distincte de toutes les valeurs de cls primaires existantes
dans la table

IUT de Nice - Cours SGBD1

103

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
I.
VENTE

| IdPro
|
p
| IdCli
| c1

|
|
| IdPro
|
p

| date
|

| qte |
|
|

Suppression d'un seul enregistrement

Q24 Supprimer le client c1


CLIENT
D.

| IdCli
| c1

| nom
|

| ville
|

|
|

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
D.

| IdCli
|

| nom
|

| ville
| Nice

|
|

A nouveau la suppression n'est possible qu'en respect de l'intgrit


rfrentielle avec VENTE

IUT de Nice - Cours SGBD1

104

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

105

5 Fermeture transitive
La fermeture transitive permet d'enrichir une relation
2 attributs de mme domaine, avec tous les couples
qui se dduisent par transitivit
Si on a (a, b) et (b, c) alors on ajoute (a, c)
Ex.
NOMENCLATURE
A
B

C
E

ENSEMBLE

SOUS-ENSEMBLE

A
A
C
C
E

B
C
E
F
G

G
Fermeture transitive

A
A
C
C
E
A
A
A
C

B
C
E
F
G
E
F
G
G

La fermeture transitive ne peut pas tre exprime par une


expression constante de l'algbre relationnelle
elle peut tre effectue par une srie de jointure/projection/union,
mais le nbre d'oprations effectuer dpend du contenu de la relation

IUT de Nice - Cours SGBD1

106

QBE permet d'exprimer des questions de type


fermeture transitive
Q26 Donner les sous-ensembles au 2ime niveau de
l'ensemble A
NOMENCLATURE

| ensemble
|
A
|
u

| sous-ens
|
u
|
P.v

|
|
|

Pour rechercher les sous-ensembles de 3ime niveau il


faut ajouter une ligne :
NOMENCLATURE

| ensemble
|
A
|
u
|
v

| sous-ens
|
u
|
v
|
P.w

|
|
|
|

Pour rechercher les sous-ensembles de niveau n, il faut n


lignes ; QBE fournit un raccourci en permettant d'indiquer
le nombre de niveau :
NOMENCLATURE

| ensemble
|
A

| sous-ens
|
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

107

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

108

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

109

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

SQL
ORACLE
SYBASE

IUT de Nice - Cours SGBD1

DB2

INGRES
INFORMIX

110

Plusieurs niveaux de normalisation


- SQL1 : norme de base
- SQL2 : extension de SQL1
meilleur support des rgles du relationnel
types de donnes plus varis
- SQL3 : intgration du modle objet

Quels sont les avantages de la normalisation ?


Rduction des cots de formation
Portabilit des applications
Prennit des applications
Communication facilite entre systmes

IUT de Nice - Cours SGBD1

111

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

112

,
,

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

113

Toute opration de mise jour violant une des


contraintes spcifies sera rejete
Le systme garantit l'intgrit des donnes
SQL2 permet de spcifier les actions entreprendre
pour le maintien de l'intgrit rfrentielle, lors d'une
suppression ou d'une modification d'un tuple rfrenc
CASCADE

cascader les suppressions ou


modifications
par ex. si on supprime un produit dans la table
PRODUIT, toutes les ventes correspondantes
seront supprimes dans la table VENTE

SET NULL

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

IUT de Nice - Cours SGBD1

rejet de la mise jour


cest loption par dfaut

114

Exemple
CREATE TABLE client
(
,
IdCli
CHAR(4) PRIMARY KEY
nom
CHAR(20)
,
ville
CHAR(30)
CHECK (ville IN ('Nice', 'Paris', 'Rome') ,
)
CREATE TABLE produit
(
IdPro
CHAR(6) PRIMARY KEY
nom
CHAR(30) NOT NULL UNIQUE
marque CHAR(30)
prix
DEC(6,2)
qstock
SMALLINT
CHECK (qstock BETWEEN 0 AND 100)

,
,
,
,
,

-- contrainte de table
CHECK (marque <> 'IBM' OR qstock < 10)
)
CREATE TABLE vente
(
IdCli
CHAR(4)
IdPro
date
qte

CHAR(6)
DATE
SMALLINT

NOT NULL
REFERENCES client
NOT NULL
NOT NULL

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

115

,
,
,
,
,

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

116

MODIFICATION DU SCHMA

La modification du schma n'est pas prvue dans SQL1


; cependant la plupart des systmes permettent la
suppression ou la modification d'une table l'aide des
commandes :
DROP TABLE
ALTER TABLE
Ex.:
ALTER TABLE client
ADD COLUMN teleph CHAR(16)

IUT de Nice - Cours SGBD1

117

DICTIONNAIRE DE DONNES

Le dictionnaire de donnes contient la description de


tous les objets (relations, index, ...) de la BD
Le DD est dcrit sous forme de tables systmes
Par exemple, on peut citer dans DB2 :
SYSTABLES (NAME, CREATOR, COLCOUNT, ...)
description des tables
SYSCOLUMNS (NAME, TBNAME, COLTYPE, ...)
description des colonnes

Le DD peut tre consult de la mme manire que les


tables de base avec le langage d'interrogation
il faut toutefois connatre les noms et les schmas des
tables systmes

IUT de Nice - Cours SGBD1

118

3 Manipulation des donnes


SELECT, INSERT, UPDATE et DELETE sont les 4
commandes de manipulation des donnes en SQL
Ex. :
Recherche SELECT
SELECT
FROM
WHERE

P.prix
produit P
P.IdPro = 'p1'

Ajout INSERT
INSERT
INTO
VALUES

client (IdCli, nom, ville)


('c100', 'Duduche', 'Nice')

Mise jour UPDATE


UPDATE
SET
WHERE

produit P
P.prix = P.prix * 1.20
P.IdPro = 'p2'

Suppression DELETE
DELETE
FROM produit P
WHERE P.IdPro = 'p4'

IUT de Nice - Cours SGBD1

119

LA COMMANDE SELECT

La commande SELECT permet de rechercher des


donnes partir de plusieurs tables ; le rsultat est
prsent sous forme d'une table rponse

Expression des projections


Q1 Donner les noms, marques et prix des produits
SELECT
FROM

P.nom, P.marque, P.prix


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

120

Q2 Donner les diffrentes marques de produit


SELECT
FROM

DISTINCT P.marque
produit P

Contrairement lalgbre relationnelle, SQL n'limine


pas les doublons
Pour liminer les doublons il faut spcifier DISTINCT

Q3 Donner les rfrences des produits et leurs prix majors


de 20%
SELECT
FROM

P.IdPro, P.prix * 1.20


produit P

Il est possible d'effectuer des oprations arithmtiques


(+, -, *, /) sur les colonnes extraites

Q4 Donner tous les renseignements sur les clients


SELECT
FROM

*
client

Une toile (*) permet de lister tous les attributs

IUT de Nice - Cours SGBD1

121

Expression des restrictions


Q5 Donner les noms des produits de marque IBM
SELECT
FROM
WHERE

P.nom
produit P
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

122

Exemples
Q6 Lister les clients dont le nom comporte la lettre A en 2ime
position
SELECT
FROM
WHERE

*
client C
C.nom LIKE '_A%'

Le prdicat LIKE compare une chane avec un modle


(_) remplace n'importe quel caractre
(%) remplace n'importe quelle suite de caractres

Q7 Lister les produits dont le prix est compris entre 5000F et


12000F
SELECT
FROM
WHERE

*
produit P
P.prix BETWEEN 5000 AND 12000

Le prdicat BETWEEN teste l'appartenance un intervalle

Q8 Lister les produits de marque IBM, Apple ou Dec


SELECT
FROM
WHERE

*
produit P
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
WHERE

IUT de Nice - Cours SGBD1

*
produit P
P.prix IS NULL

123

La valeur NULL signifie qu'une donne est inconnue

IUT de Nice - Cours SGBD1

124

Q10 Lister les produits de marque IBM dont le prix est infrieur
12000F
SELECT
FROM
WHERE

*
produit P
P.marque = 'IBM' AND P.prix < 12000

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
?

F
F
F
F

V
F
V
?

?
F
?
?

OR
F
V
?

F
F
V
?

V
V
V
V

?
?
V
?

NOT
F
V
?

V = vrai, F = faux, ? = inconnu


IUT de Nice - Cours SGBD1

125

V
F
?

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
ORDER BY

*
produit P
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

126

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
FROM
WHERE

P.IdPro, P.nom
produit P , vente V
P.IdPro = V.IdPro

Q13 Donner les noms des clients qui ont achet le produit de
nom 'PS1'
SELECT
FROM
WHERE

IUT de Nice - Cours SGBD1

C.nom
client C , produit P, vente V
V.IdCli = C.IdCli
AND V.IdPro = P.IdPro
AND P.nom = 'PS1'

127

Auto-jointure
Q14 Donner les noms des clients de la mme ville que John
SELECT
FROM
WHERE

C2.nom
client C1 , client C2
C1.ville = C2.ville
AND C1.nom = 'John'
AND C2.nom <> 'John'

Cet exemple utilise, pour le couplage des villes, la


jointure de la table Client avec elle-mme (auto-jointure)

Pour pouvoir distinguer les rfrences ville dans les 2


copies, il faut introduire 2 alias diffrents C1 et C2 de la
table client

IUT de Nice - Cours SGBD1

128

Jointures externes
La jointure externe permet de retenir lors d'une jointure
les lignes d'une table qui n'ont pas de correspondant
dans l'autre table, avec des valeurs nulles associes
On distingue jointure externe gauche, droite et complte
selon que l'on retient les lignes sans correspondant des
2 tables ou seulement d'une
SQL2 offre la possibilit de spcifier les jointures
externes au niveau de la clause FROM selon la syntaxe
suivante :
FROM table1 [NATURAL] [{LEFT|RIGHT}] JOIN table2

[ON ( liste de colonnes = liste de colonnes) ]


NATURAL signifie jointure naturelle, c.a.d l'galit des
attributs de mme nom
Q15 Lister tous les clients avec le cas chant leurs achats
SELECT
FROM

IUT de Nice - Cours SGBD1

C.IdCli, C.nom, C.ville


V.IdPro, V.date, V.qte
client C NATURAL LEFT JOIN vente V

129

Sous-requtes
SQL permet l'imbrication de sous-requtes au niveau de
la clause WHERE
d'o le terme "structur" dans Structured Query Language

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

130

Exemple
Q16 Donner les noms des clients qui ont achet le produit 'p1'

Avec sous-requte

SELECT
FROM
WHERE

Avec jointure

SELECT
FROM
WHERE

C.nom
client C
IdCli IN
(
SELECT V.IdCli
FROM vente V
WHERE P.IdPro = 'p1'
)

C.nom
client C , vente V
C.IdCli = V.IdCli
AND V.IdPro = 'p1'

De prfrence, utiliser la jointure

IUT de Nice - Cours SGBD1

131

Requtes quantifies
Le prdicat EXISTS
Il permet de tester si le rsultat d'une sous-requte est
vide ou non
Q17 Donner les noms des produits qui n'ont pas t achet
SELECT
FROM
WHERE

C.nom
produit P
NOT EXISTS
( SELECT *
FROM
vente V
WHERE V.IdPro = P.IdPro )

Il permet de rpondre des questions quantifies par


"pour tout..." :
x | P(x) ( x | P(x) )
Q18 Donner les noms des produits qui ont t achets par tous
les clients de Nice
SELECT
FROM
WHERE

IUT de Nice - Cours SGBD1

P.nom
produit P
NOT EXISTS
(
SELECT *
FROM
client C
WHERE C.ville = 'Nice'
AND NOT EXISTS
(
SELECT *
FROM
vente V
WHERE C.IdCli = V.IdCli
AND V.IdPro = P.IdPro
)
)

132

Le prdicat ALL ou ANY


Ils permettent de tester si un prdicat de comparaison
est vrai pour tous (ALL) ou au moins un (ANY) des
rsultats d'une sous-requte
Q19 Donner les nos des clients ayant achet un produit en
quantit suprieure chacune des quantits de produits
achetes par le client 'c1'
SELECT
FROM
WHERE

V.IdCli
vente V
V.qte >= ALL
(
SELECT W.qte
FROM
vente W
WHERE W.IdCli = 'c1'
)

Q20 Donner les nos des clients ayant achet un produit en


quantit suprieure au moins l'une des quantits de
produits achetes par le client 'c1'
SELECT
FROM
WHERE

IUT de Nice - Cours SGBD1

V.IdCli
vente V
V.qte >= ANY
(
SELECT W.qte
FROM
vente W
WHERE W.IdCli = 'c1'
)

133

Les prdicats ALL et ANY sont redondants, ils peuvent


s'exprimer avec EXISTS
x ANY
(
SELECT
FROM
WHERE

y
t
p

EXISTS
(
SELECT
FROM
WHERE

*
t
p AND x t.y )

x ALL
(
SELECT
FROM
WHERE

y
t
p

NOT EXISTS
(
SELECT
FROM
WHERE

*
t
p AND NOT ( x t.y )

O est un prdicat de comparaison (=, <>, <, <=, >, >=)

IUT de Nice - Cours SGBD1

134

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
FROM
WHERE

P.IdPro
produit P
P.marque = 'IBM'

UNION
SELECT
FROM
WHERE

P.IdPro
vente V
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

135

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
FROM

COUNT ( IdCli )
client

Q23 Donner le nombre total de clients ayant achet des


produits
SELECT
FROM

COUNT ( DISTINCT IdCli )


vente

On peut faire prcder l'argument du mot cl


DISTINCT pour indiquer que les valeurs redondantes
doivent tre limines avant application de la fonction

IUT de Nice - Cours SGBD1

136

La fonction spciale COUNT (*) compte toutes les


lignes dans une table
Les valeurs nulles ne sont pas prises en compte, sauf
pour COUNT(*)
Si l'argument est un ensemble vide, COUNT renvoie
la valeur 0, les autres fonctions renvoyant la valeur
NULL
Exemples :
Q24 Donner le nombre total de 'PS1' vendus
SELECT
FROM
WHERE

SUM ( V.qte )
vente V , produit P
P.IdPro = V.IdPro
AND P.nom = 'PS1'

Q25 Donner les noms des produits moins chers que la


moyenne des prix de tous les produits
SELECT
FROM
WHERE

P1.nom
produit P1
P1.prix <
(
SELECT
FROM
)

AVG ( P2.prix )
produit P2

Cet exemple montre un "singleton select " pour


calculer la moyenne des prix

IUT de Nice - Cours SGBD1

137

La clause GROUP BY
La clause GROUP BY permet de partitionner une table
en plusieurs groupes
Toutes les lignes d'un mme groupe ont la mme
valeur pour la liste des attributs de partitionnement
spcifis aprs GROUP BY
Les fonctions de calcul oprent sur chaque groupe de
valeurs
Exemples :
Q26 Donner pour chaque rfrence de produit la quantit totale
vendue
SELECT
FROM
GROUP BY

V.IdPro, SUM ( V.qte )


vente V
V.IdPro

Q27 Donner la quantit totale achete par chaque client (0 pour


ceux qui n'ont rien achet)
SELECT
FROM
GROUP BY

IUT de Nice - Cours SGBD1

C.IdCli, SUM ( V.qte )


client C NATURAL LEFT JOIN vente V
C.IdCli

138

La clause HAVING
La clause HAVING permet de spcifier une condition de
restriction des groupes
Elle sert liminer certains groupes, comme WHERE
sert liminer des lignes
Exemples
Q28 Donner les noms des marques dont le prix moyen des
produits est < 5000F
SELECT
FROM
GROUP BY
HAVING

P.marque, AVG ( P.prix )


produit P
P.marque
AVG ( P.prix ) < 5000

Q29 Donner les rfrences des produits achets en qte > 10


par plus de 50 clients
SELECT
FROM
WHERE
GROUP BY
HAVING

IUT de Nice - Cours SGBD1

P.marque, AVG ( P.prix )


vente V
V.qte > 10
V.IdPro
COUNT (*) > 50

139

La forme gnrale de SELECT


SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

[DISTINCT] liste d'attributs, expressions


liste de tables ou vues
qualification
attributs de partitionnement
qualification de groupe
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
FROM
WHERE
GROUP BY
HAVING

IUT de Nice - Cours SGBD1

P.IdPro, P.prix, P.marque,


'Qte max vendue = ', MAX ( V.qte)
produit P , vente V
P.IdPro = V.IdPro
AND P.marque IN ('IBM', 'Apple', 'Dec')
AND V.qte > 10
P.IdPro, P.prix, P.marque
SUM ( V;qte ) > 500

140

Du seul point de vue logique, on peut considrer que le


rsultat d'un SELECT est construit suivant les tapes :

1. FROM
la clause FROM est value de manire produire
une nouvelle table, produit cartsien des tables dont
le nom figure aprs FROM

2. WHERE
le rsultat de l'tape 1 est rduit par limination de
toutes les lignes qui ne satisfont pas la clause
WHERE

3. GROUP BY
le rsultat de l'tape 2 est partitionn selon les
valeurs des colonnes dont le nom figure dans la
clause GROUP BY
dans l'exemple ci-dessus, les colonnes sont P.IdPro, P;prix et
P.marque ; en thorie il suffirait de prendre uniquement
P.IdPro comme colonne dfinissant les groupes (puisque le
prix et la marque sont dtermins par le no de produit)

SQL oblige de faire apparatre dans la clause


GROUP BY toutes les colonnes qui sont mentionnes
dans la clause SELECT

4. HAVING
les groupes ne satisfaisant pas la condition HAVING
sont limins du rsultat de l'tape 3

5. SELECT
chacun des groupes gnre une seule ligne du
rsultat

IUT de Nice - Cours SGBD1

141

La commande INSERT

La commande INSERT permet d'ajouter de nouvelles


lignes une table
INSERT
INTO
table [ (liste de colonnes) ]
{VALUES (liste de valeurs) | requte}

Dans le cas o la liste de colonnes n'est pas spcifie


tous les attributs de la table cible doivent tre fournis
dans l'ordre de dclaration
Si seulement certaines colonnes sont spcifies, les
autres sont insres avec la valeur NULL
Une insertion partir d'une requte permet d'insrer
plusieurs lignes dans la table cible partir d'une autre
table

IUT de Nice - Cours SGBD1

142

Insertion d'une seule ligne


Q31 Ajouter le client ('c100', 'Duduche', 'Nice') dans la table
client
INSERT
INTO
VALUES

client (IdCli, nom, ville)


('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 01Jan-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

143

La commande UPDATE

La commande UPDATE permet de changer des valeurs


d'attributs de lignes existantes
UPDATE
SET
[ WHERE

table
liste d'affectations
qualification ]

L'absence de clause WHERE signifie que les


changements doivent tre appliqus toutes les
lignes de la table cible
Exemples
Q33 Augmenter de 20% les prix de tous les produits
UPDATE
SET

produit
prix = prix * 1.2

Q34 Augmenter de 50% les prix des produits achets par des
clients de Nice
UPDATE
SET
WHERE

IUT de Nice - Cours SGBD1

produit
prix = prix * 1.5
EXISTS
(
SELECT *
FROM vente V , client C
WHERE V.IdCli = C.IdCli
AND C.ville = 'Nice'
)

144

La commande DELETE

La commande DELETE permet d'enlever des lignes


dans une table
DELETE
FROM
[ WHERE

table
qualification ]

L'absence de clause WHERE signifie que toutes les


lignes de la table cible sont enleves
Exemples
Q35 Supprimer les ventes antrieures au 01-jan-1994
DELETE
FROM
WHERE

vente
date < '01-jan-1994'

Q36 Supprimer les ventes des clients de Nice antrieures au


01-mar-1994
DELETE
FROM
WHERE

IUT de Nice - Cours SGBD1

vente
date < '01-mar-1994'
AND IdCli IN
(
SELECT C.IdCli
FROM client C
WHERE C.ville = 'Nice'
)

145

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

146

La commande COMMIT

La commande COMMIT termine une transaction avec


succs ; toutes les mises jour de la transaction sont
valides
On dit que la transaction est valide
Tous ses effets sont alors connus des autres
transactions s'excutant concurremment

La commande ROLLBACK

La commande ROLLBACK termine une transaction


avec chec ; toutes les mises jour de la transaction
sont annules (tout se passe comme si la transaction
n'avait jamais exist)
On dit que la transaction est annule
Aucune des oprations effectues par cette
transaction n'est connue des autres transactions

IUT de Nice - Cours SGBD1

147

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

148

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

149

5 Les vues
Une vue est une table virtuelle calcule partir des
tables de base par une requte
Une vue apparat l'utilisateur comme une table
relle, cependant les lignes d'une vue ne sont pas
stockes dans la BD (uniquement sa dfinition est
enregistre dans le DD)
Les vues assurent l'indpendance logique
Elles peuvent tre utilises pour cacher des donnes
sensibles, ou pour montrer des donnes statistiques
Ex.:
CREATE VIEW
SELECT
FROM

prix-cach AS
P.IdPro, P.nom, P.marque
produit P

CREATE VIEW
stat-vente ( IdPro, tot-qte )
AS SELECT
V.IdPro, SUM ( V.qte )
FROM
vente V
GROUP BY V.IdPro

IUT de Nice - Cours SGBD1

150

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

151

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

152

IUT de Nice - Cours SGBD1

153

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.

GESTION DE TRANSACTIONS

II

REPRISE APRS PANNE

III SCURIT
IV INTGRIT
V

MTHODES DACCS

IUT de Nice - Cours SGBD1

154

Gestion de transactions

La notion de transaction

Unit logique de traitement qui est :


- soit compltement excute
- soit compltement abandonne

Une transaction est une unit atomique de traitement


Une transaction fait passer la base de donnes d'un
tat cohrent un autre tat cohrent
Si une transaction ne va pas son terme pour une
raison ou pour une autre, la base est restaure dans
l'tat o elle se trouvait avant que la transaction ne
dmarre

IUT de Nice - Cours SGBD1

155

Exemple du banquier :
le transfert d'une somme S dun compte C1 vers un
compte C2
(1) dbut-transaction
(2) lire C1
(3) C1 := C1 - S
(4) crire C1
(5) lire C2
(6) C2 := C2 + S
(7) crire C2
(8) fin-transaction
Cette transaction est constitue dun ensemble dactions
lmentaires, mais elle doit tre traite comme une seule
opration.
Autrement dit le gestionnaire des transactions doit assurer que
toutes les actions de la transaction sont excutes, ou bien
quaucune ne lest.

IUT de Nice - Cours SGBD1

156

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

157

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

158

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

159

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
A = 10

Transaction T2

t1

lire A

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

160

3. ECRITURE-LECTURE ET LECTURES IMPROPRES


T2 lit une valeur modifie par T1 et ensuite T1 est
annule

Temps Transaction T1
t1

lire A

t2

A := A+ 20

t3

crire A

t4

t5

**annulation**

t6

IUT de Nice - Cours SGBD1

Etat de la
base
A=10

Transaction T2
-

A = 30

lire A

161

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
A=10

Transaction T2

t1

lire A

t2

lire A

t3

A := A + 10

t4

crire A

t5

t6

lire A

A = 20

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

162

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

163

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

164

Phnommes indsirables

La privation
Une transaction risque d'attendre un objet indfiniment
si chaque fois que cet objet est libr, il est pris par
une autre transaction.
Pour traiter ce problme, on peut organiser sur chaque verrou
une file d'attente avec une politique "premire arrive",
"premire servie".

L'interblocage (ou verrou mortel)


Ti
A

B
Tj

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.

IUT de Nice - Cours SGBD1

165

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

166

Srialisabilit

Une excution entrelace donne dun ensemble de


transactions est considre correcte si elle est
srialisable cest--dire, si elle produit le mme rsultat
quune certaine excution en srie des mmes
transactions sexcutant lune aprs lautre
Ordonnancement
Etant donn un ensemble de transactions, toute
excution de ces transactions (entrelace ou non) est
appel un ordonnancement

Thorme de verrouillage deux phases :


Si toutes les transactions satisfont le protocole de
verrouillage deux phases , tous les ordonnancements
entrelacs sont alors srialisables.

IUT de Nice - Cours SGBD1

167

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

168

Niveaux disolation

Tout protocole qui nest pas compltement srialisable


ne peut tre considr sr, cependant, les systme
autorisent des transactions sexcutant un niveau
disolation non sr qui pourrait violer la srialisabilit de
trois faons particulires :
Lecture salissante
Supposons que la transaction T1 effectue une mise jour sur une
certaine ligne, que la transaction T2 rcupre ensuite cette ligne et que
la transaction T1 se termine par un ROLLBACK. La transaction T2 a
alors observ une ligne qui nexiste plus, et dans un certain sens na
jamais exist (car la transaction T1 na en fait jamais t excute).

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

169

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
READ UNCOMMITTED

lecture
lecture non fantme
salissante renouvelable
O
O
O

Lecture non valide

READ COMMITTED

Lecture valide

REPEATABLE READ
Lecture renouvelable

SERIALIZABLE
Srialisable

IUT de Nice - Cours SGBD1

170

II

La reprise aprs panne

Le problme des pannes

Analysons un exemple :

T1
T2
T3
T4
T5

temps
t
panne

Une panne se produit au temps t


Les deux transactions T3 et T5 sont en cours d'excution
Les transactions T1, T2 et T4 s'taient termines
correctement avant la panne
Les effets de T1, T2 et T4 doivent survivre la panne
Ceux de T3 et T5 doivent tre limins.
Que faut-il faire ?

dfaire le travail de T3 et T5

refaire, totalement ou partiellement, le travail de T1, T2 et


T4 partir d'un tat de la base conserv au pralable
(bien que l'on ait gard une trace du fait que T1,T2 et T4 ont atteint
leur point de confirmation, il pourra se faire que la panne a dtruit
les modifications effectues par T1,T2 et T4 sur la base)

IUT de Nice - Cours SGBD1

171

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

172

Redmarrage du SGBD
Nous supposons qu'il y a eu une sauvegarde totale de la base
au temps indiqu ci-dessous :

T1
T2
T3
T4
T5

temps
Point de
sauvegarde

t
panne

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

173

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

174

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

175

Cryptographie

La cryptographie a pour but de stocker ou de transporter


l'information sous une forme telle que seuls les usagers
en possession de la cl de dcryptage sont susceptibles
de la comprendre.
Texte
en clair

cryptage

dcryptage

Texte
en clair

Texte chiffr
ou cryptogramme
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 Cjacques de Jacques pour


crypter le message qu'il transmet Jacques.

Jacques dchiffre le message reu en lui appliquant


Djacques(Cjacques(M)) , personne d'autre n'est capable
de dchiffrer le message Cjacques(M).

IUT de Nice - Cours SGBD1

176

L'algorithme du MIT
1. choisir 2 nombres premiers, p et q, chacun plus grands que
10100
2. calculer n=p.q et z=(p-1)(q-1)
3. choisir un nombre d premier avec z
4. chercher un nombre e tel que e.d=1(modz)
Dcouper le texte en une suite de blocs de telle sorte que chaque bloc
de texte en clair M soit un nombre tel que 0<=M<n
pour crypter :

C = Me(mod n)

pour dchiffrer : D = Cd (mod n)

la cl publique = (e,n)
la cl prive = d

La scurit de la mthode rside dans la difficult dcomposer de trs


grands nombres en facteurs premiers.

Ex.:
p=3, q=11, n=33, z=20, d=7, e=3
Texte en clair
M
M3
Texte chiffr C=M3(mod 33)
C7
C7(mod 33)
Texte en clair

IUT de Nice - Cours SGBD1

N
14
2744
5
78125
14
N

177

I
9
729
3
2187
9
I

C
3
27
27
3
C

E
5
125
26
5
E

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

178

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

179

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

180

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
h(cl3)=h(cl2)

cl 1
cl 2

fonction
de dispersion

article 2
collision

h(cl1)

article 1

cl 3
article 3

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

181

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

index
cl 1

cl 1

cl 2

cl 2

article 2

article 1

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

182

ISAM (Indexed Sequential Acces Method d'IBM)

1 - 3 - 8
paquet 1
8
9 - 10 - 16

16

paquet 2

35

18 - 24 - 35
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

183

ARBRE B
L'index est hirarchis en plusieurs niveaux
21 30

12

Niveau 3

21

12

30

14

18 21

Niveau 2

23 25

30

Niveau 1

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

184

Chapitre 7

I-

Larchitecture client serveur


et ODBC

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

185

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.

REQUTE

SERVEUR

CLIENT
REPONSE

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.

IUT de Nice - Cours SGBD1

186

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

187

Le middleware

Le middleware est ce logiciel du milieu qui


assure les dialogues entre clients et serveurs
souvent htrognes.
Ensemble des services logiciels construits audessus d'un protocole de transport afin de
permettre l'change de requtes et des rponses
associes entre client et serveur de manire
transparente.

IUT de Nice - Cours SGBD1

188

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

189

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

CLIENT

SERVEUR
protocole

APPLICATIO
N
interface

SGBD

API

Adaptateur
Transport

Interface applicative

IUT de Nice - Cours SGBD1

190

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

191

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

192

Les principaux serveurs SQL


ORACLE
DB2
SYBASE
CA-OPEN INGRES
INFORMIX
SQL SERVER

IUT de Nice - Cours SGBD1

193

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

194

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

195

III ODBC
1. Gnralits
Open Data Base Connectivity
Implmentation du standard CLI
Accs normalis des SGBD relationnels
diffrents (Oracle, DB2 ...)
Accs mme des pseudo-SGBD, ou des
tableurs, ou encore des gestionnaires de fichiers
Interoprabilit avec des sources de donnes
htrognes
Avec ODBC, il est possible de dvelopper une
application sans se soucier de la source de
donnes qui sera utilise en exploitation
API C (SDK ODBC) et classes C++ (MFC)

IUT de Nice - Cours SGBD1

196

2. Composants ODBC

Application

API
Gestionnaire de pilotes

ODBC.DLL

Pilote

Source
de
donnes

Pilote

Source
de
donnes

Composants ODBC

IUT de Nice - Cours SGBD1

197

Pilote

Source
de
donnes

Application
Connexion un SGBD
Envoi de requtes SQL
Rcupration des rsultats
Gestion des erreurs
Gestion des transactions
Dconnexion

IUT de Nice - Cours SGBD1

198

Gestionnaire de pilotes
Charge dynamiquement les pilotes
correspondant aux sources de donnes
auxquelles l'application souhaite se connecter
Consulte le fichier ODBC.INI pour retrouver le
pilote
Transmet les requtes au pilote
Transmet les rsultats l'application
Pour accder un nouveau SGBD, il suffit
d'installer un pilote spcifique ce SGBD (aucun
changement dans l'application)
Une application peut tablir plusieurs connexions
diffrentes sources de donnes

IUT de Nice - Cours SGBD1

199

Fichier ODBC.INI
Dfinit des sources de donnes
Exemple
[ODBC Data Sources]
iut1=Oracle73 Ver 2.5 (32 bit)
...
[iut1]
Driver32=C:\ORANT\ODBC250\sqo32_73.dll

La section [ODBC Data Sources] donne le nom


de chaque source disponible et le pilote associ
A chaque source correspond une section
particulire donnant des informations
supplmentaires : le nom du serveur, le
protocole utilis pour les communications ...

IUT de Nice - Cours SGBD1

200

Administrateur ODBC
ajoute les sources de donnes dans le fichier
ODBC.INI en utilisant l'utilitaire ODBC
Administrator
installe les pilotes ODBC
tablit les connexions avec des BD physiques

IUT de Nice - Cours SGBD1

201

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

202

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

203

3. Niveaux de conformit
En principe, une application ODBC devrait
pouvoir interoprer avec n'importe quelle source
de donnes.
Mais en pratique, les pilotes et les sources de
donnes associes n'offrent pas tous les mmes
possibilits de fonctionalits de l'API et de
requtes SQL

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

204

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

205

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

206

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

207

4. Structure d'un programme ODBC


SQLAllocEnv
SQLAllocConnect
SQLConnect
SQLAllocStmt
Envoi de requtes SQL
SQLFreeConnect
SQLFreeStmt
CLOSE option
DROP option
SQLDisconnect
SQLFreeConnect
SQLFreeEnv

Structure d'un programme ODBC

IUT de Nice - Cours SGBD1

208

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

209

SQLConnect
charge un pilote et tablit une connexion entre
l'application et une source de donnes

SQLDisconnect
termine une connexion entre l'application et
une source de donnes

SQLFreeConnect
libre un descripteur de connexion

SQLFreeEnv
libre un descripteur d'environnement

IUT de Nice - Cours SGBD1

210

Programmation
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
HENV henv; // descripteur d'environnement
HDBC hdbc; // descripteur de connexion
// Allouer un descripteur d'environnement
SQLAllocEnv(&henv);
// Allouer un descripteur de connexion
SQLAllocConnect(henv, &hdbc);
// Etablir la connexion
SQLConnect( hdbc, "oracle", SQL_NTS,
"scott", SQL_NTS,
"tiger", SQL_NTS );

/* TRAITER LES REQUETES SQL

// Terminer la connexion
SQLDisconnect(hdbc);
// Liberer les descripteurs
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);

IUT de Nice - Cours SGBD1

211

*/

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

212

SQLConnectOptions
permet de spcifier diffrentes options de
connexion, en particulier le mode de validation
il faut utiliser SQLConnectOptions avant
d'tablir la connexion

SQLTransact
termine une transaction
soit en la validant \verb+SQL_COMMIT+
soit en l'annulant \verb+SQL_ROLLBACK+

IUT de Nice - Cours SGBD1

213

Programmation
SQLAllocEnv(&henv);
SQLAllocConnect(henv, &hdbc);
SQLSetConnectOption(hdbc,
SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);
SQLConnect( hdbc, "oracle", SQL_NTS,
"scott", SQL_NTS, "tiger", SQL_NTS

);

/* mise a jour no 1 */
/* mise a jour no 2 */
/* mise a jour no 3 */
SQLTransact(henv, hdbc, SQL_COMMIT);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);

L'appel
SQLTransact(henv, hdbc, SQL_COMMIT)
permet de valider en bloc les 3 mises jour
effectues dans le contexte de la connexion hdbc.

IUT de Nice - Cours SGBD1

214

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

215

Gestion d'une requte SQL


SQLAllocStmt
non

Requte en boucle ?

oui
SQLPrepare

SQLSetParam

SQLSetParam

SQLExecDirect

SQLExecute
oui

Rcuprer les
rsultats

Slection ?
non
Nouvelle excution
SQLFreeStmt

Gestion d'une requte SQL

IUT de Nice - Cours SGBD1

216

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

217

SQLPrepare
prpare une instruction SQL

SQLExecute
excute une instruction SQL prpare en
utilisant les valeurs courantes des ventuels
paramtres
on utilise cette fonction lorsqu'on doit
excuter plusieurs fois la mme instruction
dans l'application, dans ce cas, l'instruction
n'est prpare qu'une seule fois

SQLSetParam
permet d'associer un paramtre d'une
instruction SQL, une variable contenant la
valeur du paramtre
l'utilisation de cette fonction est dconseill
depuis ODBC v2.0 o elle a t remplace
par SQLBindParameter mais qui est une
fonction du niveau 1

IUT de Nice - Cours SGBD1

218

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

219

Programmation
rc = SQLAllocEnv(&henv);
rc = SQLAllocConnect(henv, &hdbc);
rc = SQLConnect(hdbc, "oracle", SQL_NTS,
"scott", SQL_NTS, "tiger", SQL_NTS);
rc = SQLAllocStmt(hdbc, &hstmt);
rc = SQLExecDirect(hstmt,
"select * from employe", SQL_NTS);

/* 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

220

8. Rcupration des rsultats

Type dinstruction ?

UPDATE, DELETE
ou INSERT

SELECT

SQLBindCol
SQLRowCount

SQLFetch
Dautres lignes ?
oui
non

Rcupration des rsultats

IUT de Nice - Cours SGBD1

221

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

222

Programmation
rc = SQLExecDirect(hstmt,
"select no, nom from employe", SQL_NTS);
rc = SQLBindCol(hstmt, 1,
SQL_C_FLOAT, &no, 0, &cbno);
rc = SQLBindCol(hstmt, 2,
SQL_C_CHAR, &nom, 20+1 , &cbnom);
while (1) {
rc = SQLFetch(hstmt);
if (rc == SQL_NO_DATA_FOUND) break;
if (rc != SQL_SUCCES) {
printf("\n**Erreur fatale...\n");
break;
}
printf("%f %20s", no, nom);
}
SQLFreeStmt(hstmt, SQL_UNBIND);
SQLFreeStmt(hstmt, SQL_CLOSE);

IUT de Nice - Cours SGBD1

223

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

IUT de Nice - Cours SGBD1

224