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 1


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 2


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 3


I Notions intuitives

Base de donnes

ensemble structur de donnes apparentes qui


modlisent un univers rel

Une BD est faite pour enregistrer des faits, des oprations au


sein d'un organisme
(administration, banque, universit, hpital, ...)

Les BD ont une place essentielle dans l'informatique

Systme de Gestion de Base de Donnes (SGBD)

DATA BASE MANAGEMENT SYSTEM (DBMS)

systme qui permet de grer une BD partage par


plusieurs utilisateurs simultanment

IUT de Nice - Cours SGBD1 4


Des fichiers aux Base de Donnes

Sparation des donnes et des programmes

FICHIER BASE DE DONNEES

Les donnes des fichiers sont Les donnes de la BD sont


dcrites dans les programmes 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 5


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 6


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 7


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 8


Indpendance physique
Pouvoir modifier les structures de stockage ou les
index sans que cela ait de rpercussion au niveau des
applications

Les disques, les mthodes daccs, les modes de


placement, le codage des donnes ne sont pas
apparents

Indpendance logique

Permettre aux diffrentes applications davoir des


vues diffrentes des mmes donnes

Permettre au DBA de modifier le schma logique sans


que cela ait de rpercussion au niveau des
applications

IUT de Nice - Cours SGBD1 9


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

CONCEPTUEL Schma logique


DICTIONNAIRE DE DONNEES

Schma physique
INTERNE STRUCTURE DE DONNEES

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

A B
1 n

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


instance de B

Par exemple :

employ dpartement

travaille
1 n

Un employ ne peut travailler que dans un seul


dpartement

IUT de Nice - Cours SGBD1 19


Lien hirarchique n:1

A B

n 1

Une instance de A peut tre associe plusieurs


instances de B

Inverse d'un lien 1:n

dpartement employ
emploie
n 1

Un dpartement emploie gnralement plusieurs


employs

IUT de Nice - Cours SGBD1 20


Lien maill n:m

A B

n m

Une instance de A peut tre associe plusieurs


instances de B et inversement

Par exemple :

employ projet

participe
n m

De ce schma, on dduit quun employ peut participer


plusieurs projets.

IUT de Nice - Cours SGBD1 21


Exemple de diagramme Entit Association

1 dpartement
est chef de employ

dirige travaille
n 1
a pour chef
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
Rseau
Liens 1:N
Liens N:M

Relationnel
Liens N:1
SGBDR

IUT de Nice - Cours SGBD1 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 : article (reprsente une entit)


arc : 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

S s1 s2 ..... sn

IUT de Nice - Cours SGBD1 25


Exemple de schma rseau :

CLIENTS PRODUITS

p
x

q
y
r

x, p
p

x x, q

y, p

y
y, r 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 : segment (regroupement de donnes)


arc : 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 IdCli Nom Ville


X Smith Paris
Y Jones Paris
Z Blake Nice

PRODUIT IdPro Nom Prix Qstock


P Auto 100 10
Q Moto 100 10
R Velo 100 10
S Pedalo 100 10

VENTE IdCli IdPro Date Qte


X P 1
X Q 2
X R 3
Y P 4
Y Q 5
Z Q 6

LES AVANTAGES DU MODLE RELATIONNEL

IUT de Nice - Cours SGBD1 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 Le modle relationnel

I. LES CONCEPTS

II. LES DPENDANCES


FONCTIONNELLES

III. LES RGLES D'INTGRIT

IV. LES FORMES NORMALES

IUT de Nice - Cours SGBD1 33


I LES CONCEPTS

LE DOMAINE

LA RELATION

LES N-UPLETS

LES ATTRIBUTS

LE SCHMA DUNE RELATION

LE SCHMA DUNE BDR

LA REPRSENTATION

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

1 LMENT ou n-uplet = 1 LIGNE

LIGNE U1 V1 W1 X1 Y1
1 lment

une relation est un ensemble on ne peut pas avoir 2 lignes


identiques

1 ATTRIBUT = 1 COLONNE

U1
U2
U3

COLONNE
1 attribut ou proprit

IUT de Nice - Cours SGBD1 41


Exemples :

- La relation ELEVE

ELEVE : NOM PRENOM NAISS


lment dupont Pierre 1/1/1992
durant Jacques 2/2/1994
duval Paul 3/03/81

- La relation INSCRIPT

INSCRIPT : NOM_ELV SPORT


lment Dupont judo
Dupont foot
Durant judo

- La relation TRAJET

TRAJET : VD VA
lment Nice paris
Paris rome
Rome nice

IUT de Nice - Cours SGBD1 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 n-
uplets diffrents

BCNF est plus fin que FN3 : BCNF FN3

Contre-exemple

une relation en 3FN qui n'est pas BCNF

CODEPOSTAL (ville, rue, code)


on vrifie qu'elle est FN3, elle n'est pas BCNF car la cl = (ville,
rue) (ou (code, ville) ou (code, rue)), et code ville

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


I Les formulaires

2 types de formulaires :

de prsentation des donnes

Ils permettent de saisir, ou modifier les donnes


dune ou plusieurs tables sous une forme
visuellement agrable

de distribution

ils ne sont attachs aucune table, et servent


uniquement de page de menu pour orienter
lutilisateur vers dautres formulaires ou tats

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

En-tte de groupe Catgorie : O

IdPro Dsignation Marque Qstock


Dtail 10 Ps Ibm 10
20 Imac Apple 20
30 Aptiva Ibm 10

Pied de groupe Sous totaux : 40

Pied de page Jeudi 12 fvrier 1998 Page 1 sur 1

Pied dtat Total gnral : 200

IUT de Nice - Cours SGBD1 65


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 Lalgbre relationnelle

I. Les oprations

II. Le langage algbrique

IUT de Nice - Cours SGBD1 69


I Les oprations

LAlgbre relationnelle est une collection doprations

OPRATIONS

- oprandes : 1 ou 2 relations

- rsultat : une relation

DEUX TYPES DOPRATIONS

OPRATIONS ENSEMBLISTES

UNION
INTERSECTION
DIFFRENCE

OPRATIONS SPCIFIQUES

PROJECTION
RESTRICTION
JOINTURE
DIVISION

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

R3 = R1 R2

R3
A B
0 1
2 3
4 5

IUT de Nice - Cours SGBD1 71


INTERSECTION

Lintersection entre deux relations R1 et R2 de mme


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

On notera :
R3 = R1 R2

R1 R2
A B A B
0 1 0 1
2 3 4 5

R3 = R1 R2

R3
A B
0 1

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

R3 = R1 R2

R3
A B
2 3

IUT de Nice - Cours SGBD1 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 n-
uplets identiques

On notera :
R2 = R1 (Ai, Aj, ... , Am)
la projection d'une relation R1 sur les attributs
Ai, Aj, , Am

La projection permet dliminer des attributs dune


relation

Elle correspond un dcoupage vertical :

A1 A2 A3 A4

IUT de Nice - Cours SGBD1 74


Requte 1 :

Quels sont les rfrences et les prix des produits ?

PRODUIT (IdPro, Nom, Marque, Prix)

IdPro Nom Marque Prix


P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000

PRODUIT (IdPro, Prix)

IdPro Prix
P 1000
Q 2000
R 3000
S 4000

IUT de Nice - Cours SGBD1 75


Requte 2 :

Quelles sont les marques des produits ?

PRODUIT (IdPro, Nom, Marque, Prix)

IdPro Nom Marque Prix


P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000

PRODUIT (Marque)

Marque
IBM
Apple
Microsoft

Notez llimination des doublons..

IUT de Nice - Cours SGBD1 76


RESTRICTION

La restriction d'une relation R1 est une relation R2 de


mme schma n'ayant que les n-uplets de R1 rpondant
la condition nonce

On notera :

R2 = R1 (condition)
la restriction d'une relation R1 suivant le critre
"condition"

o "condition" est une relation d'galit ou d'ingalit


entre 2 attributs ou entre un attribut et une valeur

La restriction permet d'extraire les n-uplets qui


satisfont une condition

Elle correspond un dcoupage horizontal :

A1 A2 A3 A4

IUT de Nice - Cours SGBD1 77


Requte 3 :

Quelles sont les produits de marque IBM ?

PRODUIT (IdPro, Nom, Marque, Prix)

IdPro Nom Marque Prix


P PS1 IBM 1000
Q Mac Apple 2000
R PS2 IBM 3000
S Word Microsoft 4000

PRODUIT (Marque = IBM)

IdPro Nom Marque Prix


P PS1 IBM 1000
R PS2 IBM 3000

IUT de Nice - Cours SGBD1 78


JOINTURE

La jointure de deux relations R1 et R2 est une relation


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

On notera :
R3 = R1 R2 (condition)
la jointure de R1 avec R2 suivant le critre condition

Le schma de la relation rsultat de la jointure est la


concatnation des schmas des oprandes (s'il y a
des attributs de mme nom, il faut les renommer)

Les n-uplets de R1 R2 (condition) sont tous les


couples (u1,u2) d'un n-uplet de R1 avec un n-uplet de
R2 qui satisfont "condition"

La jointure de deux relations R1 et R2 est le produit


cartsien des deux relations suivi d'une restriction

La condition de liaison doit tre du type :

<attribut1> :: <attribut2>

o : attribut1 1re relation et attribut2 2me relation


:: est un oprateur de comparaison (galit ou ingalit)

IUT de Nice - Cours SGBD1 79


La jointure permet de composer 2 relations l'aide
d'un critre de liaison

R1(A, B, C) R2(U, V)
A B C U V
A1 B1 10 10 V1
A2 B2 10 20 V2
A3 B3 20 30 V3
A4 B4 30

R1 R2 (R1.C = R2.U)

A B C U V
A1 B1 10 10 V1
A1 B2 10 10 V1
A3 B3 20 20 V2
A4 B4 30 30 V3

IUT de Nice - Cours SGBD1 80


Jointure naturelle

Jointure o l'oprateur de comparaison est l'galit


dans le rsultat on fusionne les 2 colonnes dont les valeurs sont
gales

La jointure permet d'enrichir une relation

Requte 5 :

Donnez pour chaque vente la rfrence du produit, sa


dsignation, son prix, le numro de client, la date et la
quantit vendue

VENTE As V PRODUIT As P
IdCli IdPro Date Qte IdPro Dsignation Prix
X P 1/1/98 1 P PS 100
Y Q 2/1/98 1 Q Mac 100
Z P 3/1/98 1

VENTE PRODUIT (V.IdPro=P.IdPro)

Idcli IdPro Date Qte Dsignation Prix


X P 1/1/98 1 PS 100
Y Q 2/1/98 1 Mac 100
Z P 3/1/98 1 PS 100

La normalisation conduit dcomposer ; la jointure


permet de recomposer

IUT de Nice - Cours SGBD1 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 Smith Nice X Smith Nice
Y Blake Paris Y Blake Paris
Z John Nice Z John Nice

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

R1
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John

IUT de Nice - Cours SGBD1 82


R1
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice X Smith
X Smith Nice Z John
Y Blake Paris Y Blake
Z John Nice X Smith
Z John Nice Z John

R2 = R1 (C2.Nom = John)

R2
C1.IdCli C1.Nom Ville C2.IdCli C2.Nom
X Smith Nice Z John
Z John Nice Z John

R3 = R2 (C1.Nom)

R3
C1.Nom
Smith
John

IUT de Nice - Cours SGBD1 83


DIVISION

Soit deux relations


R1 (A1, A2, , An, B1, B2, , Bm)
R2 (B1, B2, , Bm)

Si le schma de R2 est un sous-schma de R1.

La division de R1 par R2 est une relation R3 dont :

- le schma est le sous-schma complmentaire de R2


par rapport R1

- un n-uplet (a1, a2, , an) appartient R3 si


(a1, a2, , an, b1, b2, , bm) appartient R1
pour tous (b1, b2, , bm) R2.

On notera :

R3 = R1 R2

la division de R1 par R2

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 Sport
toto judo judo
tata danse foot
toto foot danse
toto 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

I Les langages associs au modle


relationnel

II QBE (Query By Example)

III SQL (Structured Query Language)

IUT de Nice - Cours SGBD1 91


I Les langages associs au modle
relationnel

Langages assertionnels pour dcrire et manipuler les


BD relationnelles

ils permettent de spcifier les ensembles de donnes


slectionner ou mettre jour partir de proprits des
valeurs (qualification), sans dire comment retrouver les
donnes : dire QUOI sans dire COMMENT

Deux classes de langages correspondant la manire


de considrer une relation : comme un ensemble, ou
comme un prdicat

Langages du
modle relationnel

ENSEMBLISTES PREDICATIFS

Bass sur lAlgbre Bass sur le Calcul


Relationnelle des Prdicats
(Pas de variables)

IUT de Nice - Cours SGBD1 92


Langages Ensemblistes

ALGBRIQUE SQL

Sert de rfrence tous les Paraphrasage du langage Algbrique


langages relationnels
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 Systme BD dductives Souvent offert au
Non implant INGRES dessus de SQL
(Berkeley)

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

VENTE | IdCli | IdPro | Date | Qte |


| x | p1 | | |

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


| | P.toto | Nice |

P. signifie "print" ; il indique le but de la question

toto est une valeur exemple, i.e. un exemple de rponse


possible (les valeurs exemples sont soulignes)

Nice (non soulign) est une constante

Les variables domaines sont dsignes par des


valeurs exemples soulignes
elles servent pour tablir des liens entre des lignes
si aucun lien n'est ncessaire, comme dans l'exemple ci-dessus, on
peut omettre la valeur exemple (P.toto peut tre rduit P.)

Une variable non imprime non prcdee de P. est


implicitement quantifie par "il existe"

Une variable peut tre quantifie par "quel-que-soit" en


tapant ALL. devant son nom

La disjonction (ou) est exprime en utilisant 2 lignes (2


exemples)

IUT de Nice - Cours SGBD1 95


1 Oprations de recherche

Recherche simple

Q1 Donner les nos des produits vendus

VENTE | IdCli | IdPro | date | qte |


| | P.p | | |

QBE limine automatiquement les doublons


pour obtenir les doublons il faut spcifier ALL.

VENTE | IdCli | IdPro | date | qte |


| | P.ALL.p | | |

Q2 Donner tous les renseignements sur tous les clients

CLIENT | IdCli | nom | ville |


| P.x | P.toto | P.rome |

on peut abrger en plaant P. en tte

CLIENT | IdCli | nom | ville |


P. | | | |

IUT de Nice - Cours SGBD1 96


Recherche qualifie

Q3 Donner les nos des produits de marque Apple et cotant


moins de 8000 F.

PRODUIT | IdPro | nom | marque | prix |


| P.p | | Apple | <8000 |

Q4 Donner les noms des clients de Nice ou Rome

CLIENT | IdCli | nom | ville |


| P.x | | Nice |
| P.y | | Rome |

Le ou est exprim en utilisant 2 lignes (2 exemples)

Q5 Donner les nos des clients qui ont achet la fois le


produit p1 et le produit p2

VENTE | IdCli | IdPro | date | qte |


| P. x | p1 | | |
| x | p2 | | |

Recherche avec tri

Q6 Donner les noms des clients tris par villes et noms

CLIENT | IdCli | nom | ville |


| | P.AO(2).toto | P.AO(1).nice |

il faut spcifier AO. ou DO. pour obtenir des rsultats tris par
ordre croissant ou dcroissant ; on peut prciser le champ majeur
lorsque le tri s'effectue sur plusieurs champs

IUT de Nice - Cours SGBD1 97


Recherche utilisant un lien

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

CLIENT | IdCli | nom | ville |


| x | P.toto | |

VENTE | IdCli | IdPro | date | qte |


| x | p1 | | |

la valeur exemple x est utilise comme un lien entre CLIENT et


VENTE

Recherche utilisant plusieurs liens

Q8 Donner les noms des clients qui ont achet au moins un


produit de marque Apple

CLIENT | IdCli | nom | ville |


| x | P.toto | |

PRODUIT | IdPro | nom | marque | prix |


| p | | Apple | |

VENTE | IdCli | IdPro | date | qte |


| x | p | | |

IUT de Nice - Cours SGBD1 98


Recherche utilisant la ngation

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

CLIENT | IdCli | nom | ville |


| x | P.toto | |

VENTE | IdCli | IdPro | date | qte |


| x | p1 | | |

Notez l'oprateur ngation () portant sur la ligne de VENTE

Recherche utilisant un lien dans une seule table

Q10 Donner les nos des clients qui ont achet au moins un
produit achet par le client c1

VENTE | IdCli | IdPro | date | qte |


| P. x | p | | |
| c1 | p | | |

Recherche utilisant une bote condition

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

VENTE | IdCli | IdPro | date | qte |


| x | P. p | | |
| y | p | | |

| CONDITION BOX |
| xy |

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 CNT.UNQ.ALL
SUM.ALL SUM.UNQ.ALL
AVG.ALL AVG.UNQ.ALL
MAX.ALL
MIN.ALL

- ALL. est toujours spcifi

- L'option UNQ. signifie "liminer les doublons avant


d'appliquer la fonction"

- Les valeurs nulles sont limines, sauf pour CNT.

Recherche simple utilisant une fonction

Q12 Donner le nombre total de clients

CLIENT | IdCli | nom | ville |


| P.CNT.ALL.x | | |

Q13 Donner le nombre total de clients ayant achet des


produits

VENTE | IdCli | IdPro | date | qte |


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

IUT de Nice - Cours SGBD1 100


Recherche qualifie utilisant une fonction

Q14 Donner le nombre de ventes du produit p1

VENTE | IdCli | IdPro | date | qte |


| P.CNT.ALL.x | p1 | | |

Q15 Donner la qte totale vendue du produit p1

VENTE | IdCli | IdPro | date | qte |


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

Fonction dans la bote condition

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

PRODUIT | IdPro | nom | marque | prix |


| P.p | | | val |
| | | Apple | prix |

| CONDITION BOX |
| val < MIN.ALL.prix |

Recherche avec regroupement

Q17 Pour chaque produit vendu, donner le no de produit et la


quantit totale vendue de ce produit

VENTE | IdCli | IdPro | date | qte |


| |P.G.p | | P.SUM.ALL.qte |

G. est l'oprateur de regroupement

IUT de Nice - Cours SGBD1 101


3 Oprations de mise jour

Les oprateurs de mise jour sont :

- UPDATE (modification)

- INSERT (insertion)

- DELETE (suppression)

Le nom des oprateurs apparat sous le nom de la


relation abrg par U. , I. ou D.

Modification d'un seul enregistrement

L'enregistrement modifier est identifi par la valeur


de sa cl primaire

Les valeurs de cl primaire ne peuvent pas tre


modifies

Q18 Changer la ville du client c1 par Nice

CLIENT | IdCli | nom | ville |


U. | c1 | | Nice |

Q19 Augmenter de 100F le prix du produit p1

PRODUIT | IdPro | nom | marque | prix |


| p1 | | | val |
U. | p1 | | | val + 100 |

IUT de Nice - Cours SGBD1 102


Modification de plusieurs enregistrements

Les enregistrements modifier sont spcifis par une


valeur exemple (non une constante) de cl primaire

Q20 Doubler le prix de tous les produits Apple

PRODUIT | IdPro | nom | marque | prix |


| p | | Apple | val |
U. | p | | | 2 val |

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

CLIENT | IdCli | nom | ville |


| x | | Nice |

VENTE | IdCli | IdPro | date | qte |


U. | x | | | 0 |

Insertion d'un nouvel enregistrement

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


CLIENT

CLIENT | IdCli | nom | ville |


I. | c20 | Duduche | Nice |

Le nouvel enregistrement doit avoir une valeur de cl primaire non


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

IUT de Nice - Cours SGBD1 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 | IdPro |
I. | p |

VENTE | IdCli | IdPro | date | qte |


| c1 | p | | |

Suppression d'un seul enregistrement

Q24 Supprimer le client c1

CLIENT | IdCli | nom | ville |


D. | c1 | | |

La suppression n'est pas possible si le client figure dans la table


VENTE (intgrit rfrentielle)

Suppression de plusieurs enregistrements

Q25 Supprimer tous les clients de Nice

CLIENT | IdCli | nom | ville |


D. | | | Nice |

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


rfrentielle avec VENTE

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

A A B
A C
C E
B C C F
E G
E F

G
A B
Fermeture transitive
A C
C E
C F
E G
A E
A F
A G
C 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 | sous-ens |


| A | u |
| u | P.v |

Pour rechercher les sous-ensembles de 3ime niveau il


faut ajouter une ligne :

NOMENCLATURE | ensemble | sous-ens |


| A | u |
| u | v |
| v | P.w |

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


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

NOMENCLATURE | ensemble | sous-ens |


| A | P.u(3L) |

(3L) signifie "third level"

QBE permet aussi d'obtenir les sous-ensembles de dernier


niveau l'aide du mot cl LAST

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

SYBASE INFORMIX

IUT de Nice - Cours SGBD1 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 rejet de la mise jour


cest loption par dfaut

IUT de Nice - Cours SGBD1 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) NOT NULL
REFERENCES client ,
IdPro CHAR(6) NOT NULL ,
date DATE NOT NULL ,
qte SMALLINT
CHECK (qte BETWEEN 1 AND 10) ,
-- contrainte de table
PRIMARY KEY (IdCli, IdPro, date) ,
FOREIGN KEY (IdPro) REFERENCES produit
ON DELETE CASCADE ON UPDATE CASCADE
)

IUT de Nice - Cours SGBD1 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 P.prix
FROM produit P
WHERE P.IdPro = 'p1'

Ajout INSERT

INSERT
INTO client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')

Mise jour UPDATE

UPDATE produit P
SET P.prix = P.prix * 1.20
WHERE P.IdPro = 'p2'

Suppression DELETE

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

IUT de Nice - Cours SGBD1 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 P.nom, P.marque, P.prix


FROM produit P

Synonyme de nom de table (ou alias)

On peut introduire dans la clause FROM un synonyme


(alias) un nom de table en le plaant immdiatement
aprs le nom de la table

Les noms de table ou les synonymes peuvent tre


utiliss pour prfixer les noms de colonnes dans le
SELECT

Les prfixes ne sont obligatoires que dans des cas


particuliers (par ex. pour une auto-jointure) ; leur emploi
est cependant conseill pour la clart

Un alias est utilis par SQL comme une variable de


parcours de table (dite variable de corrlation) dsignant
tout instant une ligne de la table

IUT de Nice - Cours SGBD1 120


Q2 Donner les diffrentes marques de produit

SELECT DISTINCT P.marque


FROM produit P

Contrairement lalgbre relationnelle, SQL n'limine


pas les doublons

Pour liminer les doublons il faut spcifier DISTINCT

Q3 Donner les rfrences des produits et leurs prix majors


de 20%

SELECT P.IdPro, P.prix * 1.20


FROM produit P

Il est possible d'effectuer des oprations arithmtiques


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

Q4 Donner tous les renseignements sur les clients

SELECT *
FROM client

Une toile (*) permet de lister tous les attributs

IUT de Nice - Cours SGBD1 121


Expression des restrictions

Q5 Donner les noms des produits de marque IBM

SELECT P.nom
FROM produit P
WHERE P.marque = 'IBM'

La condition de recherche (qualification) est spcifie


aprs la clause WHERE par un prdicat

Un prdicat simple peut-tre :

- un prdicat dgalit ou dingalit (=, <>, <, >, <=, >=)

- un prdicat LIKE

- un prdicat BETWEEN

- un prdicat IN

- un test de valeur NULL

- un prdicat EXISTS

- un prdicat ALL ou ANY

Un prdicat compos est construit laide des


connecteurs AND, OR et NOT

IUT de Nice - Cours SGBD1 122


Exemples

Q6 Lister les clients dont le nom comporte la lettre A en 2ime


position

SELECT *
FROM client C
WHERE C.nom LIKE '_A%'

Le prdicat LIKE compare une chane avec un modle


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

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


12000F

SELECT *
FROM produit P
WHERE P.prix BETWEEN 5000 AND 12000

Le prdicat BETWEEN teste l'appartenance un intervalle

Q8 Lister les produits de marque IBM, Apple ou Dec

SELECT *
FROM produit P
WHERE P.marque IN ('IBM', 'Apple', 'Dec')

Le prdicat IN teste l'appartenance une liste de valeurs

Q9 Lister les produits dont le prix est inconnu

SELECT *
FROM produit P
WHERE P.prix IS NULL

IUT de Nice - Cours SGBD1 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 produit P
WHERE P.marque = 'IBM' AND P.prix < 12000

Le connecteur AND relie les 2 prdicats de comparaison

USER

Le mot rserv USER dsigne l'usager courant

Valeurs nulles

La valeur NULL est une valeur particulire signifiant


qu'une donne est manquante, sa valeur est inconnue

Dans une expression arithmtique, si l'un des


termes est null, alors l'expression entire prend la
valeur NULL

Un prdicat de comparaison (=, <>, <, <=, >, >=)


prend la valeur logique "inconnu" si l'un des
termes de la comparaison est NULL

AND F V ? OR F V ? NOT
F F F F F F V ? F V
V F V ? V V V V V F
? F ? ? ? ? V ? ? ?

V = vrai, F = faux, ? = inconnu

IUT de Nice - Cours SGBD1 125


Tri du rsultat d'un SELECT
La clause ORDER BY permet de spcifier les colonnes
dfinissant les critres de tri

Le tri se fera d'abord selon la premire colonne


spcifie, puis selon la deuxime colonne etc...

Exemple

Q11 Lister les produits en les triant par marques et l'intrieur


d'une marque par prix dcroissants

SELECT *
FROM produit P
ORDER BY P.marque, P.prix DESC

L'ordre de tri est prcis par ASC (croissant) ou DESC


(dcroissant) ; par dfaut ASC

IUT de Nice - Cours SGBD1 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 P.IdPro, P.nom


FROM produit P , vente V
WHERE P.IdPro = V.IdPro

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

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

IUT de Nice - Cours SGBD1 127


Auto-jointure

Q14 Donner les noms des clients de la mme ville que John

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

Cet exemple utilise, pour le couplage des villes, la


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

Pour pouvoir distinguer les rfrences ville dans les 2


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

IUT de Nice - Cours SGBD1 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 C.IdCli, C.nom, C.ville


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

IUT de Nice - Cours SGBD1 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 C.nom
FROM client C
WHERE IdCli IN
(
SELECT V.IdCli
FROM vente V
WHERE P.IdPro = 'p1'
)

Avec jointure

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

De prfrence, utiliser la jointure

IUT de Nice - Cours SGBD1 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 C.nom
FROM produit P
WHERE NOT EXISTS
( SELECT *
FROM vente V
WHERE V.IdPro = P.IdPro )

Il permet de rpondre des questions quantifies par


"pour tout..." : x | P(x) ( x | P(x) )

Q18 Donner les noms des produits qui ont t achets par tous
les clients de Nice

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

IUT de Nice - Cours SGBD1 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 V.IdCli
FROM vente V
WHERE V.qte >= ALL
(
SELECT W.qte
FROM vente W
WHERE W.IdCli = 'c1'
)

Q20 Donner les nos des clients ayant achet un produit en


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

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

IUT de Nice - Cours SGBD1 133


Les prdicats ALL et ANY sont redondants, ils peuvent
s'exprimer avec EXISTS

x ANY
( SELECT y
FROM t
WHERE p )

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

x ALL
( SELECT y
FROM t
WHERE p )

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

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

IUT de Nice - Cours SGBD1 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 P.IdPro
FROM produit P
WHERE P.marque = 'IBM'

UNION

SELECT P.IdPro
FROM vente V
WHERE V.IdCli = 'c1'

L'union limine les doublons, pour obtenir les


doublons il faut spcifier ALL aprs UNION

UNION est une opration binaire, on peut crire :


(x UNION y) UNION z ou x UNION (y UNION z)

Les parenthses sont ncessaires dans certains cas,


par ex. :

(x UNION ALL y) UNION z

n'est pas quivalent

x UNION ALL (y UNION z)

IUT de Nice - Cours SGBD1 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 COUNT ( IdCli )


FROM client

Q23 Donner le nombre total de clients ayant achet des


produits

SELECT COUNT ( DISTINCT IdCli )


FROM vente

On peut faire prcder l'argument du mot cl


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

IUT de Nice - Cours SGBD1 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 SUM ( V.qte )


FROM vente V , produit P
WHERE P.IdPro = V.IdPro
AND P.nom = 'PS1'

Q25 Donner les noms des produits moins chers que la


moyenne des prix de tous les produits

SELECT P1.nom
FROM produit P1
WHERE P1.prix <
(
SELECT AVG ( P2.prix )
FROM produit P2
)

Cet exemple montre un "singleton select " pour


calculer la moyenne des prix

IUT de Nice - Cours SGBD1 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 V.IdPro, SUM ( V.qte )


FROM vente V
GROUP BY V.IdPro

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


ceux qui n'ont rien achet)

SELECT C.IdCli, SUM ( V.qte )


FROM client C NATURAL LEFT JOIN vente V
GROUP BY C.IdCli

IUT de Nice - Cours SGBD1 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 P.marque, AVG ( P.prix )


FROM produit P
GROUP BY P.marque
HAVING AVG ( P.prix ) < 5000

Q29 Donner les rfrences des produits achets en qte > 10


par plus de 50 clients

SELECT P.marque, AVG ( P.prix )


FROM vente V
WHERE V.qte > 10
GROUP BY V.IdPro
HAVING COUNT (*) > 50

IUT de Nice - Cours SGBD1 139


La forme gnrale de SELECT

SELECT [DISTINCT] liste d'attributs, expressions


FROM liste de tables ou vues
WHERE qualification
GROUP BY attributs de partitionnement
HAVING qualification de groupe
ORDER BY liste de colonnes [ ASC | DESC ]

Exemple

Q30 Donner les nos, les prix, les marques et la quantit


maximum vendue de tous les produits IBM, Apple ou Dec
dont la quantit totale vendue est suprieure 500 et dont
les quantits vendues sont > 10

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


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

IUT de Nice - Cours SGBD1 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 client (IdCli, nom, ville)
VALUES ('c100', 'Duduche', 'Nice')

Insertion de plusieurs lignes

Q32 Ajouter dans une table temp de mme schma que la


table Vente, toutes les ventes qui sont antrieures au 01-
Jan-1994

INSERT
INTO temp (IdCli, IdPro, date, qte)
SELECT V.no_cli, V.IdPro, V.date, V.qte
FROM vente V
WHERE V.date < '01-jan-1994'

IUT de Nice - Cours SGBD1 143


La commande UPDATE
La commande UPDATE permet de changer des valeurs
d'attributs de lignes existantes

UPDATE table
SET liste d'affectations
[ WHERE qualification ]

L'absence de clause WHERE signifie que les


changements doivent tre appliqus toutes les
lignes de la table cible

Exemples

Q33 Augmenter de 20% les prix de tous les produits

UPDATE produit
SET prix = prix * 1.2

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

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

IUT de Nice - Cours SGBD1 144


La commande DELETE
La commande DELETE permet d'enlever des lignes
dans une table

DELETE
FROM table
[ WHERE qualification ]

L'absence de clause WHERE signifie que toutes les


lignes de la table cible sont enleves

Exemples

Q35 Supprimer les ventes antrieures au 01-jan-1994

DELETE
FROM vente
WHERE date < '01-jan-1994'

Q36 Supprimer les ventes des clients de Nice antrieures au


01-mar-1994

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

IUT de Nice - Cours SGBD1 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 prix-cach AS


SELECT P.IdPro, P.nom, P.marque
FROM produit P

CREATE VIEW stat-vente ( IdPro, tot-qte )


AS SELECT V.IdPro, SUM ( V.qte )
FROM vente V
GROUP BY V.IdPro

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

I GESTION DE TRANSACTIONS

II REPRISE APRS PANNE

III SCURIT

IV INTGRIT

V MTHODES DACCS

IUT de Nice - Cours SGBD1 154


I Gestion de transactions

La notion de transaction

Unit logique de traitement qui est :

- soit compltement excute

- soit compltement abandonne

Une transaction est une unit atomique de traitement

Une transaction fait passer la base de donnes d'un


tat cohrent un autre tat cohrent

Si une transaction ne va pas son terme pour une


raison ou pour une autre, la base est restaure dans
l'tat o elle se trouvait avant que la transaction ne
dmarre

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


base
t1 lire A A = 10 -
t2 - lire A
t3 A := A + 10 -
t4 - -
t5 - A := A + 50
t6 crire A A = 20 -
t7 - A = 60 crire A

IUT de Nice - Cours SGBD1 160


3. ECRITURE-LECTURE ET LECTURES IMPROPRES

T2 lit une valeur modifie par T1 et ensuite T1 est


annule

Temps Transaction T1 Etat de la Transaction T2


base
t1 lire A A=10 -

t2 A := A+ 20 -

t3 crire A A = 30 -

t4 - lire A

t5 **annulation**

t6 - -

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


base
t1 lire A A=10 -
t2 - lire A
t3 A := A + 10 -
t4 crire A A = 20 -
t5 - -
t6 - lire A

De nombreuses solutions ont t proposes pour


traiter le problme des accs concurrents.

Un exemple important est le protocole appel


verrouillage deux phases qui est un des plus utiliss.

IUT de Nice - Cours SGBD1 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 lecture lecture non fantme


salissante renouvelable
READ UNCOMMITTED O O O
Lecture non valide
READ COMMITTED N O O
Lecture valide
REPEATABLE READ N N O
Lecture renouvelable
SERIALIZABLE N N N
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 t
sauvegarde 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 cryptage dcryptage Texte


en clair 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) la cl publique = (e,n)

pour dchiffrer : D = Cd (mod n) la cl prive = d

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


grands nombres en facteurs premiers.

Ex.:

p=3, q=11, n=33, z=20, d=7, e=3

Texte en clair N I C E
M 14 9 3 5
M3 2744 729 27 125
Texte chiffr C=M3(mod 33) 5 3 27 26
C7 78125 2187 - -
C7(mod 33) 14 9 3 5
Texte en clair N I C E

IUT de Nice - Cours SGBD1 177


IV Intgrit

Contrle de la validit des donnes

Contrainte dintgrit

Une contrainte d'intgrit est une assertion qui doit tre


vrifie par des donnes des instants dtermins.

Les contraintes d'intgrit permettent de prciser


davantage la partie intentionnelle (smantique) de la
base de donnes.

Une base de donnes est cohrente vis vis des


contraintes qui sont exprimes, si ces contraintes sont
respectes par les donnes de la base.

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
article 2
cl 1 h(cl3)=h(cl2)
collision
fonction h(cl1)
cl 2 de dispersion 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

article 2
cl 1 cl 1

cl 2 cl 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
16 9 - 10 - 16
35 paquet 2

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

12 21 30 Niveau 2

2 5 12 14 18 21 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 Larchitecture client serveur
et ODBC

I- L'architecture client serveur

II- Les normes du client serveur

III- ODBC

1. Gnralits

2. Composants ODBC

3. Niveaux de conformit

4. Structure d'un programme OBDC

5. Fonctions de connexion et de dconnexion

6. Transactions dans ODBC

7. Envoi de requtes SQL

8. Rcupration des rsultats

9. Dtection des erreurs

10. Exemples d'application ODBC

IUT de Nice - Cours SGBD1 185


I L'architecture client serveur

L'architecture client serveur est caractrise par


une rpartition des programmes entre processus
client et processus serveur communiquant sur un
rseau.

REQUTE
CLIENT SERVEUR

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


dessus d'un protocole de transport afin de
permettre l'change de requtes et des rponses
associes entre client et serveur de manire
transparente.

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

interface 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 Pilote Pilote

Source Source Source


de de de
donnes donnes donnes

Composants ODBC

IUT de Nice - Cours SGBD1 197


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 oui
Requte en boucle ?

SQLSetParam SQLPrepare

SQLSetParam
SQLExecDirect
SQLExecute

oui
Slection ?

Rcuprer les non


rsultats
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 ?

SELECT UPDATE, DELETE


ou INSERT

SQLBindCol

SQLFetch SQLRowCount

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

Vous aimerez peut-être aussi