Vous êtes sur la page 1sur 118

Licence MI2E- 3me anne

Mention Informatique
et Mention Mathmatiques Mineure Informatique
Bases de donnes relationnelles
Maude Manouvrier
Modlisation Entit/Association et UML (Vocabulaire)
Modle relationnel et passage au modle relationnel
Algbre relationnelle
Calcul relationnel
SQL / Embedded SQL / ODBC / JDBC
Dpendances fonctionnelles
Dcomposition de schma
Formes Normales
Maude Manouvrier - Univ. Paris Dauphine
Ouvrages de rfrence utiliss pour le cours :
T. Connoly, C. Begg et A. Strachan, Database Systems A Pratical
Approach to Desigh, Implementation and Management, 1998, ISBN: 0-
201-34287-1,
G. Gardarin, Bases de Donnes - objet/relationnel, Eyrolles, 1999, ISBN:
2-212-09060-9, disponible la BU 005.74 GAR
R. Ramakrishnan et J. Gehrke, Database Management Systems, Second
Edition; McGraw-Hill, 2000, ISBN: 0-07-232206-3, disponible la BU
055.7 RAM
A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts,
McGraw-Hill, 1996, ISBN: 0-07-114810-8, disponible la BU 005.7 DAT
J.D. Ullman et J. Widom, A first Course in Database Systems, Prentice
Hall, 1997, ISBN: 0-13-887647-9, disponible la BU 005.7 ULL
BIBLIOGRAPHIE
2
Maude Manouvrier - Univ. Paris Dauphine
Autres ouvrages de rfrence, disponibles la BU :
C.J. Date, An Introduction to Database Systems, Addison Wesley
C.J. Date, A Guide to SQL Standard, Addison Wesley
R.A. El Masri et S.B. Navathe, Fundamentals of Database Systems, Prentice Hall
Ouvrages pdagogiques contenant des exercices corrigs :
Philip J. Pratt, Initiation SQL - Cours et Exercices corrigs, Eyrolles, 2001
BU : 005.72 SQL
Christian Soutou, De UML SQL - Conception de bases de donnes, Eyrolles,
2002 BU : 005.72 SOU
F. Brouard, C. Soutou , SQL (Synthse de cours et exercices corrigs). Pearson
Education 2005 BU : 005.72 SQL
Christian Soutou, SQL Pour Oracle (avec exercices corrigs), Eyrolles, 2005
BU 005.72 SOU
Nicolas Larousse, Cration de bases de donnes, Coll. Synthex, Pearson
Education, 2006
BIBLIOGRAPHIE
3
Chap. I - Introduction
Base de donnes :
collection d'informations ou de donnes qui existent sur une longue
priode de temps [UW97] et qui dcrivent les activits d'une ou
plusieurs organisations [RG00]
ensemble de donnes modlisant les objets d'une partie du
monde rel et servant de support une application informatique
[Gar99]
SGBD : Systmes de Gestion de Bases de Donnes
(DataBase Management Systems - DBMS)
ensemble de logiciels systmes permettant aux utilisateurs
d'insrer, de modifier, et de rechercher efficacement des donnes
spcifiques dans une grande masse d'informations (pouvant
atteindre plusieurs milliards d'octets) partage par de multiples
utilisateurs [Gar99]
4
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
SGBD
Principaux composants :
Systme de gestion de fichiers
Gestionnaire de requtes
Gestionnaire de transactions
Principales fonctionnalits :
Contrle de la redondance dinformation
Partage des donnes
Gestion des autorisations daccs
Vrifications des contraintes dintgrit
Scurit et reprise sur panne
5
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Abstraction des donnes
Niveau interne ou physique :
plus bas niveau
indique comment (avec quelles structures de donnes) sont
stockes physiquement les donnes
Niveau logique ou conceptuel :
dcrit par un schma conceptuel
indique quelles sont les donnes stockes et quelles sont leurs
relations indpendamment de limplantation physique
Niveau externe ou vue :
propre chaque utilisateur
dcrit par un ou plusieurs schmas externes
6
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Instances et schma
Instances de base de donnes :
donnes de la base un instant donn
manipules par un langage de manipulation de
donnes (DML- Data Manipulation Language)
Schma de base de donnes :
description de la structure des donnes
ensemble de dfinitions exprimes en langage
de description de donnes (DDL - Data
Definition Language)
7
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Petit historique
1960 : systmes de gestion de fichiers
1970 : dbut des SGBD rseaux et hirarchiques proches des systmes de
gestion de fichiers pas dinterrogation sans savoir o est l'information
recherche ("navigation") et sans crire de programmes
1970 : papier fondateur de CODD sur la thorie des relations
fondement de la thorie des bases de donnes relationnelles
INGRES Berkeley - langage QUEL
System R IBM San Jose - langages SEQUEL et QBE
1980 : Apparition des SGBD relationnels sur le march (Oracle, Ingres,
Informix, Sybase, DB2 )
1990 : dbut des SBGD orients objet (Gemstone, O
2
, Orion, Objectstore,
Versant, Matisse...).
Aujourdhui : relationnel-objet, semi-structur, multimdia ...
8
Chap. I - Introduction
Maude Manouvrier - Univ. Paris Dauphine
Chap II - Modlisation
Mthodologie suivre pour modliser un problme
Dterminer les entits/classes et attributs :
entit/instance de classe = objet dcrit par de linformation
objet caractris uniquement par un identifiant = attribut
attribut multi-valu ou avec une association 1:N = entit ou instance
attacher les attributs aux ensemble dentits/classes qu'ils dcrivent le
plus directement
viter au maximum les identificateurs composites
Identifier les gnralisations-spcialisations/hritage
Dfinir les associations
liminer les associations redondantes
viter les associations n-aires
calculer les cardinalits de chaque association
9
Maude Manouvrier - Univ. Paris Dauphine
Modlisation Entit/Association
(Format Merise)
10
Chap. II - Modlisation
Un automobiliste possde
entre zro et N voitures
Une voiture a un et un
seul propritaire
Maude Manouvrier - Univ. Paris Dauphine
Modlisation UML
11
Chap. II - Modlisation
Un automobiliste possde
entre zro et N voitures
Une voiture a un et un
seul propritaire
Attention : petite libert prise avec UML, les attributs souligns ici ne correspondent
pas des attributs drivs mais aux identificateurs (pour ne pas les oublier lors du
passage au relationnel!!)
Maude Manouvrier - Univ. Paris Dauphine
12
Chap. II - Modlisation
Gnralisation/Spcialisation
(E/A - Merise)
Ensemble dentits
gnralisantes
Ensemble dentits
spcialises
Maude Manouvrier - Univ. Paris Dauphine
13
Chap. II - Modlisation
Hritage (UML)
Classe mre / Sur-classe
Classes drives ou filles / sous-classes
Maude Manouvrier - Univ. Paris Dauphine
14
Chap. II - Modlisation
Agrgat (E/A - Merise)
On peut nommer ou
non lagrgat
Maude Manouvrier - Univ. Paris Dauphine
15
Chap. II - Modlisation
Classe-Association (UML)
On peut nommer ou non
la classe-association
Maude Manouvrier - Univ. Paris Dauphine
16
Chap. II - Modlisation
Entit Faible (E/A - Merise)
Chaque salle a un
numro unique dans un
btiment donn
Ex. Salle 1 du btiment A
et Salle 1 du btiment C
Pour distinguer une salle
dune autre, il faut
connatre le btiment
auquel elle est rattache
Appartient
Maude Manouvrier - Univ. Paris Dauphine
17
Chap. II - Modlisation
Association qualifie (UML)
Chaque salle a un
numro unique dans un
btiment donn
Ex. Salle 1 du btiment A
et Salle 1 du btiment C
Pour distinguer une salle
dune autre, il faut
connatre le btiment
auquel elle est rattache
A
p
p
a
r
t
i
e
n
t
1
1
Maude Manouvrier - Univ. Paris Dauphine
18
Chap. II - Modlisation
Composition (UML)
Maude Manouvrier - Univ. Paris Dauphine
Contraintes
Contraintes dintgrit :
toutes rgles implicites ou explicites que doivent
suivre les donnes [Gar99]
Contraintes d'entit: toute entit doit possder un
identificateur
Contraintes de domaine : les valeurs de certains
attributs doivent tre prises dans un ensemble donn
Contraintes d'unicit : une valeur d'attribut ne peut pas
tre affecte deux fois deux entits diffrentes
Contraintes gnrales : rgle permettant de conserver
la cohrence de la base de manire gnrale
19
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Exemples de contraintes
Contraintes de domaine :
"La fonction dun enseignant lUniversit prend sa valeur
dans lensemble {vacataire, moniteur, ATER, MCF, Prof.,
PRAG, PAST}."
Contraintes d'unicit :
"Un dpartement, identifi par son numro, a un nom unique
(il ny a pas deux dpartements de mme nom)."
Contraintes gnrales :
"Un mme examen ne peut pas avoir lieu dans deux salles
diffrentes la mme date et la mme heure. "
20
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Dpendances fonctionnelles
Un attribut (ou un groupe d'attributs) Y dpend
fonctionnellement d'un attribut (ou groupe
d'attributs) X si :
tant donn une valeur de X, il lui correspond une
valeur unique de Y ( l'instant considr)
XY: Y dpend fonctionnellement de X
ou X dtermine Y
Dclaration des dpendances au niveau du schma
conceptuel
21
Chap. II - Modlisation
Maude Manouvrier - Univ. Paris Dauphine
Exemple de dpendances fonctionnelles
22
Chap. II - Modlisation
Marque, Type, Puissance, Anne Immatriculation
Type Marque
EnseignantID Nom, Prnom, Position
Nom, Prnom, Position, Enseignant_ID
Ex. Le type "Twingo" sera toujours
associ, dans la base de donnes, la
marque "Renault".
Immatriculation Marque, Type, Puissance, Anne
identificateur
Tous les autres attributs
Si un numro de tlphone est associ un seul enseignant :
Telephone Enseignant_ID
Maude Manouvrier - Univ. Paris Dauphine
Chap III - Modle relationnel
Domaine : ensemble de valeurs caractris par un nom
Relation : sous-ensemble du produit cartsien d'une liste de domaines
caractris par un nomunique
reprsente sous forme de table deux dimensions
colonne = un domaine du produit cartsien
un mme domaine peut apparatre plusieurs fois
ensemble de nuplets sans doublon
Attribut : une colonne dans une relation
caractris par un nom et dont les valeurs appartiennent un domaine
les valeurs sont atomiques
Nuplet : une ligne d'une relation
correspondant un enregistrement, c--d une entit/instance de classe
les nuplets d'une relation sont tous diffrents
23
Maude Manouvrier - Univ. Paris Dauphine
Exemple de relation
24
Chap. III - Modle relationnel
Nom dattribut
Nuplets ou tuples
La relation Enseignant
NSS Nom Prnom Fonction
273 Manouvrier Maude MCF

Maude Manouvrier - Univ. Paris Dauphine


Instances et schma
Instances de base de donnes :
les nuplets (les valeurs) contenus dans la base un
instant donn
Schma de base de donnes :
ensemble de schmas de relation
modlisation logique de la base de donnes laide
du modle relationnel
Schma de relation :
liste dattributs et leurs domaines
25
Chap. III - Modle relationnel
Maude Manouvrier - Univ. Paris Dauphine
Passage au relationnel
Transformation des ensembles dentits :
chaque ensemble d'entits/classes E
une relation R dont le schma est celui de l'ensemble
d'entits/classe
l'identificateur de E devient la cl de R
chaque ensemble d'entits faibles/association qualifie E
une relation R qui comprend tous les attributs de E +
l'identificateur de l'ensemble d'entits fortes/classe associ(e)
gnralisation-spcialisation/hritage
l'ensemble d'entits gnralisante/classe mre E une relation R
chaque ensemble d'entits E
i
spcialis/classe fille
une relation R
i
dans laquelle l'identifiant est de mme domaine
que l'identifiant de E
26
Chap. III - Modle relationnel
Maude Manouvrier - Univ. Paris Dauphine
Transformation des ensembles
dassociations E/A
Chap. III - Modle relationnel
Accident ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
27
Accidente lors
de la location
On peut choisir lun ou lautre comme cl primaire
Automobiliste ( Auto_ID, Nom, Prnom, Adresse)
Voiture (Immatriculation, Marque, Type, Puissance, Anne )
Comment faire le lien ?
Maude Manouvrier - Univ. Paris Dauphine
28
Chap. III - Modle relationnel
Accidente ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
Transformation des ensembles
dassociations UML
On peut choisir lun ou lautre comme cl primaire
Accidente lors de la location
Maude Manouvrier - Univ. Paris Dauphine
29
Chap. III - Modle relationnel
Transformation des ensembles
dassociations E/A
,
Automobiliste ( Auto_ID, Nom, Prnom, Adresse )
Voiture ( Immatriculation, Marque, Puissance, Type, Anne ) Voiture ( Immatriculation, Marque, Puissance, Type, Anne,
#Auto_ID )
NB : #Auto_ID fait rfrence Auto_ID de Automobiliste
ou 1:N
ou 0:1
Maude Manouvrier - Univ. Paris Dauphine
30
Chap. III - Modle relationnel
Automobiliste ( Auto_ID, Nom, Prnom, Adresse )
Voiture ( Immatriculation, Marque, Puissance, Type, Anne,
#Auto_ID )
NB : #Auto_ID fait rfrence Auto_ID de Automobiliste
Transformation des ensembles
dassociations UML
ou 1..*
ou 0..1
Maude Manouvrier - Univ. Paris Dauphine
31
Chap. III - Modle relationnel
Automobiliste ( Auto_ID, Nom, Prnom, Adresse )
Voiture ( Immatriculation, Marque, Puissance, Type, Anne )
Transformation des ensembles
dassociations E/A
Location ( #Auto_ID, #Immatriculation, Date ) ou
Location ( Loc_ID, #Auto_ID, #Immatriculation, Date )
ou 1:N
ou 0:1
ou 1:M
ou 0:1
Maude Manouvrier - Univ. Paris Dauphine
32
Chap. III - Modle relationnel
Automobiliste ( Auto_ID, Nom, Prnom, Adresse )
Voiture ( Immatriculation, Marque, Puissance, Type, Anne )
Location ( #Auto_ID, #Immatriculation, Date ) ou
Location ( Loc_ID, #Auto_ID, #Immatriculation, Date )
Transformation des ensembles
dassociations UML
ou 1..*
ou 0..1
ou 1..*
ou 0..1
Maude Manouvrier - Univ. Paris Dauphine
33
Chap. III - Modle relationnel
NB : #Personne_ID dans
Enseignant et Etudiant font
rfrence Personne_ID dans
Personne
Transformation des concepts
Gnralisation-Spcialisation / Hritage
Enseignant ( #Personne_ID, Position )
Etudiant ( #Personne_ID, Adresse,
Ville ...)
Personne ( Personne_ID,
Nom,Prnom, Tlphone ... )
Solution possible (une autre sera
donne en cours) :
Maude Manouvrier - Univ. Paris Dauphine
34
Chap. III - Modle relationnel
Transformation des entits faibles E/A
Btiment ( Btiment_ID, ... )
NB : Une salle est identifie par le
couple (Numro,#Btiment_ID)
#Btiment_ID fait rfrence
Btiment_ID de Btiment
Salle ( Numro, #Btiment_ID, Capacit)
Maude Manouvrier - Univ. Paris Dauphine
35
Chap. III - Modle relationnel
Transformation des associations
qualifies UML
Btiment ( Btiment_ID, ... )
Salle ( Numro, #Btiment_ID, Capacit)
NB : Une salle est identifie par le
couple (Numro,#Btiment_ID) ;
#Btiment_ID fait rfrence
Btiment_ID de Btiment
1
Maude Manouvrier - Univ. Paris Dauphine
36
Chap. III - Modle relationnel
Voi
Voiture ( Immatriculation, Marque,
Puissance, Type, Anne )
Moteur (Numro, #Immatriculation,
Chevaux)
PotEchappement (Num_Srie,
#Immatriculation, DateInstallation)
Transformation de la composition
UML
Maude Manouvrier - Univ. Paris Dauphine
Dpendances fonctionnelles
Ne pas oublier de dfinir les DF :
37
Chap. III - Modle
relationnel
Accidente ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
Immatriculation Marque, Type, Puissance, Anne
Type Marque
Voiture ( Immatriculation, Marque, Puissance, Type, Anne,
Auto_ID )
Immatriculation Auto_ID
+ les Dpendances fonctionnelles de Voiture
Location ( Auto_ID, Immatriculation, Date )
Pas de dpendance non triviale
Auto_ID Immatriculation et Immatriculation Auto_ID
Auto_ID Nom, Prnom, Adresse
Auto_ID Immatriculation
Maude Manouvrier - Univ. Paris Dauphine
Intgrit structurelle
Unicit des cls
ensemble minimal d'attributs dont la connaissance des
valeurs permet d'identifier un nuplet unique de la relation
considre
R a pour cl K si : t
1
, t
2
nuplets dune instance de R
t
1
.K = t
2
.K
Contraintes de rfrence
contrainte rfrentielle : contrainte d'intgrit portant sur
une relation R qui consiste imposer que la valeur d'un
groupe d'attributs apparaissent comme valeur de cl dans
une autre relation
cl trangre : un groupe d'attributs qui doit apparatre
comme cl dans une autre relation
38
Chap. III - Modle
relationnel
Maude Manouvrier - Univ. Paris Dauphine
Cl /Cl minimale /Surcl
39
Chap. III - Modle
relationnel
Accident ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
Cls primaires possibles : Auto_ID ou Immatriculation
Surcl : (Auto_ID, Immatriculation) + dautres attributs
Voiture ( Immatriculation, Marque, Puissance, Type, Anne,
Auto_ID )
Cl primaire : Immatriculation
Surcl : (Immatriculation, Marque, Puissance, Type, Anne,Auto_ID)
Location ( Auto_ID, Immatriculation, Date )
Cl primaire : (Auto_ID, Immatriculation, Date)
Maude Manouvrier - Univ. Paris Dauphine
Intgrit structurelle
Valeur nulle
valeur conventionnelle introduite dans une relation pour
reprsenter une information inconnue ou inapplicable
tout attribut peut prendre une valeur nulle except les
attributs de la cl primaire (contrainte dentit)
Contraintes de domaine
contrainte d'intgrit qui impose qu'une colonne d'une
relation doit comporter des valeurs vrifiant une assertion
logique
40
Chap. III - Modle
relationnel
Maude Manouvrier - Univ. Paris Dauphine
Langages dinterrogation
Algbre relationnelle
Pour comprendre comment le SGBD excute les requtes
Calcul relationnel variable nuplet
La base logique du langage SQL
Calcul relationnel variable domaine
La base logique pour les langages de requtes graphiques
SQL (Structured Query Langage)
Ces langages sont quivalents : ils permettent de
dsigner les mmes ensembles de donnes
41
Chap. III - Modle
relationnel
Maude Manouvrier - Univ. Paris Dauphine
Chap IV - Algbre relationnelle
Oprations unaires :
slection des nuplets satisfaisant un certain prdicat
Etudiant(Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,
Tlphone, Fax, Email, NumAnnes)
o
(Ville= Paris )
(Etudiant)
o
(Ville= Paris ) . (NumAnnes > 2)
(Etudiant)
projection : limination de certains attributs dune relation
H
Nom,Prnom
(Etudiant)
H
Nom,Prnom
( o
(Ville= Paris )
(Etudiant) )
42
Maude Manouvrier - Univ. Paris Dauphine
Exemples de rsultats doprations unaires
43
Relation Enseignant
:
Rsultat de la slection o
(grade= MCF )
(Enseignant) :
Rsultat de la projection
H
Nom,Prnom
(Enseignant) :
Rsultat de la requte
H
Nom,Prnom
(o
(grade= MCF )
(Enseignant)) :
Maude Manouvrier - Univ. Paris Dauphine
Oprations binaires
Union : rassemblement des nuplets de 2 relations compatibles
Enseignant( Enseignant_ID, Dpartement_ID, Nom, Prnom, Grade,
Tlphone, Fax, Email )
H
Nom,Prnom
(Etudiant) H
Nom,Prnom
(Enseignant)
Diffrence : des nuplets de 2 relations compatibles
H
Nom,Prnom
(Enseignant) - H
Nom,Prnom
(Etudiant)
Produit cartsien : combinaison des nuplets de 2 relations
Dpartement(Dpartement_ID, Nom_Dpartement)
Produit cartsien de Enseignant Departement a pour schma :
(Enseignant_ID, Enseignant.Dpartement_ID, Nom, Prnom, Grade,
Tlphone, Fax, Email, Dpartement.Dpartement_ID,
Nom_Dpartement)
44
Chap. IV - Algbre
relationnelle
Maude Manouvrier - Univ. Paris Dauphine
Exemple dunion et de diffrence
45
Chap. IV - Algbre
relationnelle
H
Nom,Prnom
(Etudiant) H
Nom,Prnom
(Enseignant) :
H
Nom,Prnom
(Enseignant) - H
Nom,Prnom
(Etudiant) :
Maude Manouvrier - Univ. Paris Dauphine
Produit cartsien
46
Chap. IV - Algbre
relationnelle
NSS Nom Prnom Grade Dept
12345 Manouvrier Maude MCF 1
45678 Toto Titi Prof 2

La relation Enseignant
Dept_ID Nom_Dept_
1 Info
2 Math

La relation Dpartement
NSS Nom Prnom Grade Dept Dept_ID Nom_Dept
12345 Manouvrier Maude MCF 1 1 Info
45678 Toto Titi Prof 2 1 Info
12345 Manouvrier Maude MCF 1 2 Math
45678 Toto Titi Prof 2 2 Math
La relation Enseignant Dpartement
Maude Manouvrier - Univ. Paris Dauphine
Autres oprations
47
Chap. IV - Algbre
relationnelle
Renommage :
H
A,B,
(r
AA, B B,
)
Intersection :
r s = r - (r - s)
Thta-jointure :
r
O
s = o
O
(r s)
Jointure naturelle : r(R) et s(S) avec R S = {A
1
,A
2
, , A
n
}
r s = H
R S
(o
(r.A1=s.A1) . (r.A2=s.A2) . . (r.An=s.An)
(r s))
Maude Manouvrier - Univ. Paris Dauphine
Exemple de renommage et dintersection
48
Chap. IV - Algbre
relationnelle
H
Last_Name,First_Name
(Enseignant
Nom Last_Name, Prnom First_Name
) :
H
Nom,Prnom
(Enseignant) H
Nom,Prnom
(Etudiant) :
Maude Manouvrier - Univ. Paris Dauphine
Exemple de produit cartsien
Chap. IV - Algbre
relationnelle
La relation Enseignant :
La relation Departement :
Enseignement Departement :
49
Maude Manouvrier - Univ. Paris Dauphine
Exemple de jointure
Chap. IV - Algbre
relationnelle
La relation Enseignant :
La relation Departement :
Enseignement
Departement_ID
Departement :
50
Maude Manouvrier - Univ. Paris Dauphine
Division
51
Chap. IV - Algbre
relationnelle
Requte qui contient le terme pour tous
Soient r(R) et s(S) avec S _ R
la relation r s a pour schma R - S
un nuplet t appartient r s si :
t e H
R - S
(r)
t
s
nuplet de s, - t
r
dans r qui satisfait :
t
r
(S) = t
s
(S)
t
r
(R-S) = t
r s = H
R - S
(r) - H
R - S
[ ( H
R - S
(r) s ) - H
R - S, S
(r) ]
Maude Manouvrier - Univ. Paris Dauphine
Division
52
Chap. IV - Algbre
relationnelle
La relation Enseignement :
La relation
Inscription :
H
Etudiant_ID, Enseignement_ID, Departement_ID
(Inscription) H
Enseignement_ID, Departement_ID
(Enseignement) :
Maude Manouvrier - Univ. Paris Dauphine
Contraintes et DF
53
Chap. IV - Algbre
relationnelle
Expressions des contraintes dintgrit rfrentielle :
H
Dpartement_ID
(Enseignant) _ H
Dpartement_ID
(Dpartement)
H
Dpartement_ID
(Dpartement) - H
Dpartement_ID
(Enseignant) = C
Expressions des dpendances fonctionnelles :
XYr et t
1
, t
2
e r on a :
H
x
(t
1
) = H
x
(t
2
) H
Y
(t
1
) = H
Y
(t
2
)
Maude Manouvrier - Univ. Paris Dauphine
Chap V - Calcul relationnel
Langage dclaratif (ou non-procdural): le quoi
Algbre relationnelle (procdural) : le comment
Calcul variable nuplet :
{ t | P(t) } avec P(t) tel que :
r(t) : t est un nuplet de r
t.att
1
= valeur
1
t.att
1
> s.att
2
...
{t | Etudiant(t) . (t.Ville= Paris ) . (t.NumAnnes > 2)}
{t.Nom, t.Prnom | Etudiant(t) . (t.Ville= Paris) }
54
Maude Manouvrier - Univ. Paris Dauphine
Quantificateurs
55
Chap. V - Calcul variable nuplet
-t (Q(t)) : il existe un nuplet dans la base qui vrifie Q(t)
t (Q(t)) : pour tous les nuplets, Q(t) est vrai
Variable lie
Variable libre
Expression saine
Expression non saine
Maude Manouvrier - Univ. Paris Dauphine
Expression des oprateurs algbriques
56
Chap. V - Calcul variable nuplet
o
O
(r) :
H
A1,A2, , An
(r) :
r s :
r - s :
r s :
r s :
r s :
Maude Manouvrier - Univ. Paris Dauphine
Division
57
Chap. V - Calcul variable nuplet
Division :
Livre(ISBN, Titre, Editeur)
Emprunt(EmpruntID, ISBN, DateEmprunt,EtudiantID)
Etudiant(EtudiantID, Nom, Prenom)
Quels sont les noms et prnoms des tudiants ayant emprunt tous les livres ?
{ t.Nom, t.Prenom / Etudiant(t) . [ u e Livre
( - v Emprunt(v) .
(v.Etudiant_ID=t.Etudiant_ID) . (v.ISBN=u.ISBN )
)
]
}
La requte retourne les valeurs des att. Nom et Prenom des nuplets t de la relation Etudiant tq :
{ t.Nom, t.Prenom / Etudiant(t) . [ u ( Livre(u) ) v
( - v Emprunt(v) .
(v.Etudiant_ID=t.Etudiant_ID) . (v.ISBN=u.ISBN )
) ]
]
}
Quel que soit un nuplet u
dans Livre (i.e. quel que soit
un livre)
Quel que soit u, u nest pas
dans Livre ou (u est dans
Livre et ) il existe v
Il existe un nuplet v dans Emprunt
associant le livre u ltudiant t
Maude Manouvrier - Univ. Paris Dauphine
Calcul variable domaine
58
Chap. V - Calcul relationnel
{<x
1
,x
2
, x
n
> | P( x
1
,x
2
, , x
n
)}
avec x
1
,x
2
, x
n
variable domaine et P formule
Exemples :
Marin(MiD, Nom, Grade, Date-Nais)
Bateau(Bid, Bnom,Couleur)
Reservation(Mid,Bid,Date)
Nom et grade des marins : { < n, g > \ - id, dn Marin(id,n,g,dn) }
Marins ayant rserv tous les bateaux :
{ < i, n, g, dn > \ Marin(i,n,g,dn) . [ b, bn, c Bateau(b,bn,c)
v (- m, br, d Reservation(m,br,d) . (m = i) . (br = b) ) ] }
Maude Manouvrier - Univ. Paris Dauphine
QBE
59
Chap. V - Calcul relationnel
Query By Exemple :
langage de requte graphique
mise en uvre du calcul variable domaine
Oracle Query Builder
Etape 1 : slection des
relations de la requte
Maude Manouvrier - Univ. Paris Dauphine
QBE
60
Chap. V - Calcul relationnel
Etape 2 :
slection des
attributs de
la requte
Maude Manouvrier - Univ. Paris Dauphine
QBE
61
Chap. V - Calcul relationnel
Etape 3 :
possibilit
dappliquer
des fonction
dagrgation
sur les nuplets
rsultats
Maude Manouvrier - Univ. Paris Dauphine
Expression des contraintes en logique
des prdicats
62
Chap. V - Calcul relationnel
Agence(nom_banque,ville ...)
Emprunt(num_emprunt,nom_banque,num_client, montant ...)
Compte(nom_banque,num_client,num_compte,solde ...)
Chaque emprunteur possde un compte en banque dans l'agence
dont le solde est au minimum gal la moiti de son emprunt
{ ( -e Emprunt(e) . ( -c Compte(c)
. (c.num_client=e.num_client)
. (c.nom_banque = e.nom_banque)
. ( c.solde > (e.montant / 2)
)
)
}
Maude Manouvrier - Univ. Paris Dauphine
Chap VI - Algbre relationnelle tendue
Projection gnralise :
ajout dexpressions arithmtiques dans une projection
H
Nom_Client, (Crdit - Dbit)
(Compte_en_Banque )
Jointure externe (outer-join) :
jointure externe gauche : ]
jointure externe droite : [
jointure externe : ][
R ] S R S et conservation des attributs des nuplets de
R qui ne joignent avec aucun nuplet de S (les valeurs des
attributs de S sont mises NULL)
63
Maude Manouvrier - Univ. Paris Dauphine
64
Chap. VI - Algbre relationnelle tendue
Nom_Employ Ville
Tom Marseille
Jerry Paris
Alex Limoges
Marthe Perpignan
Nom_Employ Filiale Salaire
Tom SUD_EST 10000
Jerry IDF 25000
Sophie IDF 15000
Marthe SUD_OUEST 12000
Nom_Employ Ville Filiale Salaire
Tom Marseille SUD_EST 10000
Jerry Paris IDF 25000
Alex Limoges NULL NULL
Marthe Perpignan SUD_OUEST 12000
Nom_Employ Ville Filiale Salaire
Tom Marseille SUD_EST 10000
Jerry Paris IDF 25000
Sophie NULL IDF 15000
Marthe Perpignan SUD_OUEST 12000
Personnel Employ
Personnel
]
Employ
Personnel
[
Employ
Maude Manouvrier - Univ. Paris Dauphine
Fonction dagrgation
65
Somme des places disponibles dans lUniversit
Sum
Capacit
(Salle )
Nombre moyen de places disponibles dans les salles de lUniversit
Avg
Capacit
(Salle)
Nombre dtudiants lUniversit
Count
Etudiant_ID
(Etudiant)
Capacit de la plus petite salle
Min
Capacit
(Salle)
Nombre denseignants par dpartements :
Nom_Dpartement
Count
Enseignant_ID
(Enseignant Dpartement)
Chap. VI - Algbre relationnelle tendue
Maude Manouvrier - Univ. Paris Dauphine
Mise jour de la base
66
Insertion
Salle Salle {( B , 038 , 15)}
Suppression
Salle Salle - o
Salle s 10
(Salle)
Mise jour : utilisation de la projection gnralise
r H
Etudiant_ID
[o
(Nom= Dupont ). (Prnom= Jacques )
(Etudiant)]
Etudiant o
(Etudiant.Etudiant_ID <> r.Etudiant_ID)
(Etudiant)

H
Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,
Tlphone 45 12 45 86 , Fax, Email, NumAnnes
[o
(Etudiant.Etudiant_ID =r.Etudiant_ID)
(Etudiant) ]
Chap. VI - Algbre relationnelle tendue
Mise jour du
tlphone
Maude Manouvrier - Univ. Paris Dauphine
Vue
67
Table virtuelle dont le schma et les instances sont drivs de
la base relle par une requte et qui est utilise pour :
Cacher certaines informations un groupe dutilisateurs
Faciliter laccs certaines donnes
create view nom_vue as < requte >
Exemple :
create view Info_Non_Confidentielle_Etudiant
as H
Etudiant_ID, Nom, Prnom, Email
(Etudiant)
Chap. VI - Algbre relationnelle tendue
Maude Manouvrier - Univ. Paris Dauphine
Chap VII - SQL
Structured Query Language
SQL2 : standard adopt en 1992
SQL3 : extension de SQL2 avec "gestion" dobjets
SQL:
Langage de Manipulation de Donnes (DML) :
interroger et modifier les donnes de la base
Langage de Dfinition de Donnes (DDL) : dfinir le
schma de la base de donnes
Langage de contrle daccs aux donnes
68
Maude Manouvrier - Univ. Paris Dauphine
Bibliographie
SQL2 - Application Oracle, Access et RDB
Pierre DELMAL, 2me Edition, De Boeck Universit, 1998
BU: 005.74 SQL
SQL Pour Oracle (avec exercices corrigs)
Christian Soutou, Eyrolles, 2005 BU: 005.72 SOU
Initiation SQL (cours et exercices corrigs)
Philip J. Pratt, Eyrolles,2001 BU : 005.72 SQL
SQL (cours et exercices corrigs)
Frdric Brouad et Christian Soutou, Coll. Synthex, Pearson
Education, 2005 BU : 005.72 SQL
Oracle PL/SQL - Prcis & concis
Steven Feuerstein, Bill Pribyl et Chip Dawes, O Reilly, 2000
69
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
DML
70
SELECT [DISTINCT] *
FROM table_1 [synonyme_1], table_2 [synonyme_1],
[WHERE prdicat_1
AND [ou OR] prdicat_2 ]
SELECT [DISTINCT] exp_1 [AS nom_1], exp_2 ...
FROM table_1 [synonyme_1], table_2 [synonyme_1],
[WHERE prdicat_1
AND [ou OR] prdicat_2 ]
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
DML
71
SELECT Nom, Prnom
FROM Etudiant
WHERE Ville = Paris ;
SELECT Nom, Prnom
FROM Etudiant
WHERE Ville = Paris
AND Nom
LIKE _AR%;
SELECT Nom, Prnom
FROM Etudiant
WHERE Fax IS NULL;
Chap. VII - SQL
SELECT Intitul,
(NbSeances*3) AS NbHeures
FROM Cours
WHERE (NbSeances*3)
BETWEEN 24 AND 27 ;
SELECT Nom, Prnom
FROM Enseignant
WHERE Dpartement_ID IN
( INFO , MATH , ECO )
Maude Manouvrier - Univ. Paris Dauphine
DML
72
Prdicats du WHERE de la forme :
exp1 = exp2 exp op ANY (SELECT )
exp1 != exp2 exp op ALL (SELECT )
exp1 > exp2 avec op tel que =, !=, <, > ...
exp1 < exp2
exp1 <= exp2 exp IN (SELECT )
exp1 >= exp2 exp NOT IN (SELECT )
exp1 BETWEEN exp2 AND exp3
exp1 LIKE exp2
exp1 IN (exp2, exp3, )
exp1 NOT IN (exp2, exp3, )
exp1 IS NULL
exp1 IS NOT NULL
Chap. VII - SQL
SELECT Intitul,
FROM Cours
WHERE NbSeances <=
( SELECT AVG(NbSeances)
FROM Cours);
Maude Manouvrier - Univ. Paris Dauphine
DML
73
Chap. VII - SQL
Clause EXISTS :
Retourne VRAI si au moins un nuplet est renvoy par la requte
FAUX si aucun nuplet nest retourn.
La valeur NULL na aucun effet sur le boolen rsultat
SELECT Nom, Prnom
FROM Enseignant E
WHERE NOT EXISTS
( SELECT *
FROM Reservation_Salle S
WHERE S.Enseignant_ID = E.Enseignant_ID
);
Maude Manouvrier - Univ. Paris Dauphine
DML
74
Chap. VII - SQL
Fonctions de groupe :
COUNT, MIN, MAX, AVG, SUM, ORDER BY, GROUP BY
SELECT COUNT(*)
FROM Etudiant ;
SELECT AVG(Capacit), SUM(Capacit)
FROM Salle ;
SELECT Dpartement_ID, Nom, Prnom
FROM Enseignant
ORDER BY Dpartement_ID DESC, Nom, Prnom ;
SELECT Dpartement_ID, COUNT(*)
FROM Rservation_Salle
GROUP BY Dpartement_ID HAVING COUNT(*) >=4 ;
Maude Manouvrier - Univ. Paris Dauphine
DML
75
Chap. VII - SQL
Jointure :
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant E, Dpartement D
WHERE E.Dpartement_ID = D.Dpartement_ID ;
Jointure externe : sous Oracle
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant E, Dpartement D
WHERE E.Dpartement_ID = D.Dpartement_ID (+);
Sil existe des enseignants attach aucun dpartement, la valeur de
Dpartement_ID sera NULL.
En SQL2 : [RIGHT | LEFT | FULL] OUTER JOIN
Maude Manouvrier - Univ. Paris Dauphine
DML
76
Chap. VII - SQL
Oprateurs ensemblistes :
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
INTERSECT
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
UNION
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
ORDER BY Nom,Prnom
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
MINUS
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = MATH
MINUS = EXCEPT en standard SQL2
Maude Manouvrier - Univ. Paris Dauphine
DML
77
Chap. VII - SQL
Division :
Livre(ISBN, Titre, Editeur)
Emprunt(EmpruntID,ISBN, DateEmprunt,EtudiantID)
Etudiant(EtudiantID,Nom, Prenom)
Quels livres ont t emprunts par tous les tudiants?
{t.Titre / Livre(t) . [ u ( Etudiant (u) ) v
(- v Emprunt(v) .
(v.Etudiant_ID=u.Etudiant_ID) . (v.ISBN=t.ISBN )
)
]
}
SELECT t.Titre FROM Livre t WHERE NOT EXISTS
( SELECT * FROM Etudiant u WHERE NOT EXISTS
( SELECT * FROM Emprunt v
WHERE u.EtudiantID=v.EtudiantID AND
v.ISBN=t.ISBN
)
) ;
{t.Titre / Livre(t) . [ - u Etudiant (u) .
(- v Emprunt(v) .
(v.Etudiant_ID=u.Etudiant_ID) . (v.ISBN=t.ISBN )
)
]
}
Il ny a pas de mot-cl
"quel que soit " en SQL2
Maude Manouvrier - Univ. Paris Dauphine
DML
78
Chap. VII - SQL
Insertion
INSERT INTO table(col1, col2, coln)
VALUES (val1, val2, valn)
INSERT INTO table(col1, col2, coln)
SELECT
Suppression
DELETE FROM table
WHERE prdicat
Mise jour
UPDATE table
SET col1 = exp1, col2 = exp2 WHERE prdicat
Transactions : COMMIT, ROLLBACK [TO], SAVE POINT
Sous Oracle
Maude Manouvrier - Univ. Paris Dauphine
DDL
79
Chap. VII - SQL
CREATE TABLE table (col1 type 1 [NOT NULL] ,
col2 type2 [NOT NULL]
)
Contraintes :
CONSTRAINT nom_contrainte
PRIMARY KEY (liste attributs cl primaire)
| NOT NULL immdiatement aprs la dclaration de lattribut
| CHECK (condition) aprs la dclaration de lattribut
| UNIQUE aprs la dclaration de lattribut
| FOREIGN KEY (cl trangre)
REFERENCES nom_table (liste-colonne)
CREATE TABLE table
AS SELECT ...
Maude Manouvrier - Univ. Paris Dauphine
DDL
80
Chap. VII - SQL
CREATE TABLE Enseignant
(
Enseignant_ID integer,
Departement_ID integer NOT NULL,
Nom varchar(25) NOT NULL,
Prenom varchar(25) NOT NULL,
Grade varchar(25)
CONSTRAINT CK_Enseignant_Grade
CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')),
Telephone varchar(10) DEFAULT NULL,
Fax varchar(10) DEFAULT NULL,
Email varchar(100) DEFAULT NULL,
CONSTRAINT PK_Enseignant PRIMARY KEY (Enseignant_ID),
CONSTRAINT "FK_Enseignant_Departement_ID"
FOREIGN KEY (Departement_ID)
REFERENCES Departement (Departement_ID)
ON UPDATE RESTRICT ON DELETE RESTRICT
);
Contrainte
de domaine
Dfinition de la
cl primaire
Dfinition dune cl
trangre
81
CREATE TABLE Reservation
(
Reservation_ID integer,
Batiment varchar(1) NOT NULL,
Numero_Salle varchar(10) NOT NULL,
Enseignement_ID integer NOT NULL,
Departement_ID integer NOT NULL,
Enseignant_ID integer NOT NULL,
Date_Resa date NOT NULL DEFAULT CURRENT_DATE,
Heure_Debut time NOT NULL DEFAULT CURRENT_TIME,
Heure_Fin time NOT NULL DEFAULT '23:00:00',
Nombre_Heures integer NOT NULL,
CONSTRAINT PK_Reservation PRIMARY KEY (Reservation_ID),
CONSTRAINT "FK_Reservation_Salle" FOREIGN KEY (Batiment,Numero_Salle) REFERENCES
Salle (Batiment,Numero_Salle) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT "FK_Reservation_Enseignement" FOREIGN KEY (Enseignement_ID,Departement_ID)
REFERENCES Enseignement (Enseignement_ID,Departement_ID) ON UPDATE RESTRICT ON
DELETE RESTRICT,
CONSTRAINT "FK_Reservation_Enseignant" FOREIGN KEY (Enseignant_ID) REFERENCES
Enseignant (Enseignant_ID) ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT CK_Reservation_Nombre_Heures CHECK (Nombre_Heures >=1),
CONSTRAINT CK_Reservation_HeureDebFin
CHECK (Heure_Debut < Heure_Fin)
);
Maude Manouvrier - Univ. Paris Dauphine
DDL
82
Chap. VII - SQL
CREATE ASSERTION <nom contrainte>
[ {BEFORE COMMIT |
AFTER {INSERT | DELETE | UPDATE[OF (Attributs)]} ON
<Relation>} ]
CHECK <Condition>
[FOR [EACH ROW OF] <Relation> ]
CREATE ASSERTION CA_Place_Universit
BEFORE COMMIT
CHECK( (SELECT SUM(Capacit) FROM Salle)
>= (SELECT COUNT(*) FROM Etudiant)
)
Maude Manouvrier - Univ. Paris Dauphine
DDL
83
Chap. VII - SQL
CREATE [OR REPLACE] TRIGGER nom {BEFORE | AFTER}
vnement_dclencheur ON nom_table
[FOR EACH ROW]
[WHEN (condition) ]
bloc PL/SQL sous Oracle
| inst_de_suppr | inst_de_modif | instr_d_ajout | ERROR en SQL2
vnement_dclencheur = INSERT, UPDATE, DELETE
Dclencheur de niveau instruction : pas de clause FOR EACH ROW
Dclencheur de niveau ligne : variables liens :new et :old
INSERT : valeurs insrer dans :new.nom_colonne
UPDATE : valeur originale dans :old.nom_colonne, nouvelle valeur dans
:new.nom_colonne
DELETE : valeur en cours de suppression :old.nom_colonne
Maude Manouvrier - Univ. Paris Dauphine
DDL
84
Chap. VII - SQL
CREATE OR REPLACE TRIGGER Enseignant_Actif
BEFORE DELETE ON Enseignant
FOR EACH ROW
declare
counter number;
begin
SELECT count(*) INTO counter
FROM Enseignements
WHERE Enseignant_ID = :old.Enseignant_ID;
if counter > 0 then
raise_application_error (-20800, Enseignant actif ne
pouvant tre supprim');
end if;
end;
Maude Manouvrier - Univ. Paris Dauphine
DDL
85
Chap. VII - SQL
CREATE OR REPLACE TRIGGER UPD_salaire_personnel
BEFORE UPDATE salaire ON Personnel
FOR EACH ROW
WHEN (:old.salaire > :new.salaire)
declare
salaire_diminution EXCEPTION;
begin
raise salaire_diminution ;
when salaire_diminution then
raise_application_error(-20001, Le salaire ne peut pas
diminuer )
end;
Maude Manouvrier - Univ. Paris Dauphine
DDL
86
Sous PostgreSQL :
Chap. VII - SQL
CREATE OR REPLACE FUNCTION GetSalleCapaciteSuperieurA(int)
RETURNS SETOF Salle
AS '
SELECT * FROM Salle WHERE Capacite > $1;
'
LANGUAGE SQL;
SELECT * FROMGetSalleCapaciteSuperieurA(300) ;
87
CREATE OR REPLACE FUNCTION FunctionTriggerReservation()
RETURNS trigger AS
' DECLARE
resa Reservation.Reservation_ID%TYPE;
BEGIN
SELECT INTO resa Reservation_ID
FROMReservation
WHERE
IF FOUND THEN RAISE EXCEPTION ''Rservation impossible, salle
occupe la date et aux horaires demands'';
ELSE RETURN NEW;
END IF;
END;'
LANGUAGE 'plpgsql';
DDL
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
DDL
88
Sous PostgreSQL :
Chap. VII - SQL
CREATE TRIGGER InsertionReservation
BEFORE INSERT ON Reservation
FOR EACH ROW
EXECUTE PROCEDURE
FunctionTriggerReservation();
Maude Manouvrier - Univ. Paris Dauphine
DDL
89
Chap. VII - SQL
ALTER TABLE table
ADD (col1 type1, col2 type2 )
| MODIFY (col1 type1, col2 type2 )
| DROP PRIMARY KEY
| DROP CONSTRAINT nom_contrainte
DROP TABLE table
CREATE VIEW vue (col1, col2)
AS SELECT
DROP VIEW vue
CREATE [UNIQUE] INDEX nom_index ON table (col1,col )
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
90
Chap. VII - SQL
Utilisation de commandes SQL lintrieur dun langage hte :
Commandes SQL remplace par des appel de fonctions du
langage hte par le prcompilateur.
Commandes SQL reconnues par EXEC SQL
/* dclaration de variables htes */
EXEC SQL BEGIN DECLARE SECTION
char d_name[20];
char d_id;
EXEC SQL END DECLARE SECTION
...
EXEC SQL INSERT INTO Department
VALUES (:d_id, :d_name);
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
91
Chap. VII - SQL
Gestion des erreurs :
EXEC INCLUDE SQLCA;
...
EXEC SQL WHENEVER SQLERROR GOTO erreur
...
erreur :
printf(``erreur : les transactions en
cours vont tre annules'\n'');
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
Maude Manouvrier - Univ. Paris Dauphine
Embedded SQL
92
Chap. VII - SQL
Gestion de curseur :
/* Dclaration d'un curseur pour manipuler la
table Department */
EXEC SQL DECLARE c1 CURSOR FOR
SELECT * FROM Department ;
/* Ouverture du curseur */
EXEC SQL OPEN c1;
/* Lecture de la premire ligne de la table */
EXEC SQL FETCH c1 INTO :d_id, :d_name ;
printf(``Nom du dpartement %s, identifiant :
%s\n'',d_name, d_id);
/* fermeture du curseur */
EXEC SQL CLOSE c1;
Maude Manouvrier - Univ. Paris Dauphine
Middleware daccs
aux bases de donnes
93
Chap. IV - SQL
Architecture logicielle dfinissant une interface standard daccs
aux SGBD
A chaque SGBD correspond un pilote (driver)
Indpendance vis vis du SGBD par simple configuration du
pilote
Possibilit pour un mme programme dinterroger diffrentes
bases de donnes dans diffrents SGBD
1. Java DataBase Connectivity (JDBC)
2. Open DataBase Connectivity (ODBC) - Middleware propritaire
(Windows)
Maude Manouvrier - Univ. Paris Dauphine
JDBC/ODBC
94
Chap. IV - SQL
Appel des fonctions de l API :
lien entre lapplication et le gestionnaire de pilotes
Pilote = librairie qui contient les appels
JDBC/ODBC et traduit les requtes en requtes
propres au SGBD
Gestionnaire de pilotes (ODBC) = librairie qui
charge les pilotes associs chaque source de
donnes (BD + SGBD)
Maude Manouvrier - Univ. Paris Dauphine
JDBC
95
Chap. IV - SQL
Exemple de programme Java sur la base exemple :
import java.sql.*; // Tout ce qui est ncessaire pour JDBC
import java.text.*; // Pour formater les dates
import java.util.*;
public class TestJDBCPostgresql
{
Connection db=null; // Variable de connexion
Statement sql=null; // Variable pour un ordre SQL
DatabaseMetaData dbmd; // Mta-donnes ncessaires
// au pilote.
Maude Manouvrier - Univ. Paris Dauphine
JDBC
96
Chap. IV - SQL
public TestJDBCPostgresql(String argv[])
throws ClassNotFoundException, SQLException,
java.io.IOException
{ String database = argv[0];
String username = argv[1];
String password = argv[2];
// Rcupration du pilote du SGBD (ici PostgreSQL)
Class.forName("org.postgresql.Driver");
// Connexion la base de donnes
db = DriverManager.getConnection("jdbc:postgresql:"
+database, username,
password);
// Si AUTOCOMMIT=true => le SGBD excute COMMIT
// aprs chaque requte
// Si AUTOCOMMIT= false => le SGBD attend un COMMIT
// explicite
db.setAutoCommit(false);
Maude Manouvrier - Univ. Paris Dauphine
JDBC
97
Chap. IV - SQL
dbmd = db.getMetaData(); // Rcuparation des mta-donnes
// Pour tester que la connexion est OK
System.out.println("Connection to SGBD
+ dbmd.getDatabaseProductName()+ " version
+ dbmd.getDatabaseProductVersion()+ " database "
+ dbmd.getURL()+ " \nusing " + dbmd.getDriverName()
+ " version "+ dbmd.getDriverVersion()+ " " +
"successful.\n");
// Cration dun ordre SQL pour crer une relation
sql = db.createStatement();
String sqlText = "CREATE TABLE ";
System.out.println("Executing this command: "+sqlText+"\n");
sql.executeUpdate(sqlText);
// Ne pas oublier le COMMIT si AUTOCOMMIT = false
db.commit();
// Code quivalent pour un INSERT, UPDATE, DELETE
Maude Manouvrier - Univ. Paris Dauphine
JDBC
98
Chap. IV - SQL
// Exemple de requte de slection
ResultSet rset = sql.executeQuery("SELECT Capacit FROM
Reservation " + "WHERE Batiment='B' " + "AND
Numero_Salle='022'");
// Parcours des nuplets rsultat
while (rset.next()) {
System.out.println("Nom de la table : (gnralement vide
bug du driver)"
+ rset.getMetaData().getTableName(1));
System.out.println("Type de la colonne : "
+ rset.getMetaData().getColumnTypeName(1));
System.out.println("Nom de la colonne : "
+ rset.getMetaData().getColumnName(1) + "\n";
//Numrotation des colonnes partir de 1 (et non de 0!!)
System.out.println("Capacit de la salle B020 : "
+ rset.getInt(1) + "\n");
Maude Manouvrier - Univ. Paris Dauphine
JDBC
99
Chap. IV - SQL
// Cration dun ordre SQL paramtr
// Code SQL de la requte
sqlText = "INSERT INTO Salle VALUES (?,?,?)";
// Prparation de lordre SQL non encore excut
//car il manque des paramtres
PreparedStatement ps = db.prepareStatement(sqlText);
String [] NumBatiment = {"A", "B", "C", "P", "D"};
String [] NumSalle = {"208", "026", "405", "340", "120"};
int lenNB = NumBatiment.length;
for (int i=0, c=30 ; (i<lenNB) && (c<35) ;c++,i++)
{ps.setString(1,NumBatiment[i]); // Paramtre 1
ps.setString(2,NumSalle[i]); // Paramtre 2
ps.setInt(3,c); // Paramtre 3
ps.executeUpdate(); // Excution de lordre SQL
}
// Ne pas oublier le COMMIT!!
db.commit();
ps.close(); // Fermeture de la prparation de lordre
Maude Manouvrier - Univ. Paris Dauphine
ODBC
100
Chap. VII - SQL
Appel des fonctions de l API ODBC :
lien entre lapplication et le gestionnaire de
pilotes
Gestionnaire de pilotes = DLL qui charge les pilotes
associs chaque source de donnes (BD + SGBD)
Pilote = DLL qui contient les appels ODBC et traduit
les requtes en requtes propres au SGBD
ODBC
101
Chap. VII - SQL
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
ODBC
102
Chap. VII - SQL
Exemple de programme en C sous Visual C++ :
#include <stdio.h>
#include <conio.h>
#include <afxdb.h> // MFC ODBC database classes
char *cBASE ; /* Nom de la source de donnes */
char *cLOGIN ; /* Login utilisateur */
char *cPASSWD ; /* Mot de passe utilisateur */
void main()
{
HENV d_env; /* Descripteur d'environnement */
HDBC d_connex; /* Descripteur de connexion */
HSTMT curseur; /* Curseur */
RETCODE retcode; /* Code de retour de fonction */
ODBC
103
Chap. VII - SQL
UCHAR ucLastName[20],ucCity[20];
SDWORD ceLastName,ceCity;
char *cREQUETESQL; /* Variable recevant une requte SQL */
/* Saisie du nom de la source de donnes */
cBASE=(char*)malloc(20);
printf("Nom de la base de donnees :"); scanf("%s",cBASE);
/* Saisie du login */
cLOGIN=(char*)malloc(20); printf("Login :");
scanf("%s",cLOGIN);
/* Saisie du password */
cPASSWD=(char*)malloc(20); printf("Mot de passe : ");
/* Pour ne pas afficher le mot de passe l'cran */
int iPosCaractere=0; fflush(stdin);
do { if((cPASSWD[iPosCaractere]=_getch())!='\r')
printf("*");
} while(cPASSWD[iPosCaractere++]!='\r' && iPosCaractere <20);
cPASSWD[--iPosCaractere]='\0';
Maude Manouvrier - Univ. Paris Dauphine
ODBC
104
Chap. VII - SQL
/* Cration d'un environnement ODBC */
retcode = SQLAllocEnv(&d_env);
/* Si la cration d'un environnement ODBC est correcte */
if (retcode == SQL_SUCCESS)
{
/* Cration d'une connexion ODBC */
retcode = SQLAllocConnect(d_env, &d_connex);
/* Si la connexion ODBC s'est bien passe */
if (retcode == SQL_SUCCESS)
{
/* Initialisation du temps de connexion 5 secondes. */
SQLSetConnectOption(d_connex, SQL_LOGIN_TIMEOUT, 5);
/* Connexion une source de donnes */
retcode = SQLConnect(d_connex,(unsigned char*)cBASE,SQL_NTS,(unsigned
char*)cLOGIN,SQL_NTS,(unsigned char*)cPASSWD,SQL_NTS);
Longueur de la chane ou on indique que la chane se termine par le code NULL
Maude Manouvrier - Univ. Paris Dauphine
ODBC
105
Chap. VII - SQL
/* Si la connexion la source de donnes s'est bien passe */
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Connection a la base (source de donnes).\n");
/* Pause dans l'affichage */
printf("Taper une touche pour continuer \n"); getchar();
/* Allocation mmoire du curseur et association du curseur la
source de donnes identifie par d_connex. */
retcode = SQLAllocStmt(d_connex, &curseur);
/* Si l'allocation mmoire du curseur est correcte */
if (retcode == SQL_SUCCESS)
{ /* Cration de la requte SQL */
cREQUETESQL = "SELECT Nom, Ville FROM Etudiant";
/* Execution directe de la requte sur la base */
retcode = SQLExecDirect(curseur, (unsigned char*)cREQUETESQL,
SQL_NTS);
printf("EXECUTION DE LA REQUETE, CODE ERREUR %d, CODE DE SUCCES
%d \n",retcode,SQL_SUCCESS);
Maude Manouvrier - Univ. Paris Dauphine
ODBC
106
Chap. VII - SQL
/* Tant le parcours du curseur est valide */
while (retcode == SQL_SUCCESS)
{
/* Parcourt de l'enregistrement rsultat de la requte */
retcode = SQLFetch(curseur);
/* Si le parcourt est incorrect */
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Erreur %d\n",SQL_ERROR);
}
/* Si le parcourt des enregistrements est correct */
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* rcupration des donnes des colonnes 1 et 2 de la table
rsultat */
SQLGetData(curseur, 1, SQL_C_CHAR, ucLastName, 30, &ceLastName);
SQLGetData(curseur, 2, SQL_C_CHAR, ucCity, 30, &ceCity);
/* Affichage du rsultat */
printf("Etudiant : %s %s\n",ucLastName,ucCity);
Maude Manouvrier - Univ. Paris Dauphine
Maude Manouvrier - Univ. Paris Dauphine
Chap VIII - Dpendances fonctionnelles
Dpendance fonctionnelle sur R
A
1
, A
2
, , A
n
B
"Si deux nuplets de R ont mmes valeurs pour les attributs de A
1
, A
2
, ,
A
n
alors ils ont mme valeur pour les attributs de B.
Une dpendance A
1
, A
2
, , A
n
B
1
, B
2
, , B
m
est :
triviale : si lensemble B
1
, B
2
, , B
m
est sous-ensemble de
A
1
, A
2
, , A
n
non triviale : si au moins un B
i
nappartient pas
lensemble de A
1
, A
2
, , A
n
compltement non triviale : si aucun des B
i
nappartient
lensemble de A
1
, A
2
, , A
n
107
Maude Manouvrier - Univ. Paris Dauphine
Rgles
108
Chap. VIII - DF
Axiomes de Amstrong :
Rflexivit : si Y _ X alors X Y
Augmentation : Si X Y alors Z XZ YZ
Transitivit :
Si A B et B C alors A C
On dduit :
Union : {X Y, X Z} |= {X YZ}
Pseudo-transitivit :
{X Y,WY Z} |= {XW Z}
Dcomposition :
Si X Y et Z _ Y alors X Z
Maude Manouvrier - Univ. Paris Dauphine
Fermeture
109
Chap. VIII - DF
Fermeture dune famille de dpendances fonctionnelles
F
+
= {X Y \ F |= X Y }
Fermeture dun ensemble dattributs X par rapport
une famille de dpendances fonctionnelles F
[X]
+
= {A \ F |= X A}
Lemme
La dpendance fonctionnelle X Y peut tre dduite
des axiomes dAmstrong si Y _ [X]
+
Maude Manouvrier - Univ. Paris Dauphine
Equivalence et Couverture
110
Chap. VIII - DF
Deux familles de dpendances fonctionnelles F et G sont
quivalentes si F
+
= G
+
Si F
+
c G
+
alors G est une couverture de F
Une famille de dpendances fonctionnelles F est
minimale si :
1. En partie droite de toute dpendance de F, il ny a quun seul
attribut
2. Il ny a pas de dpendance fonctionnelle X A dans F telle que
(F \ {X A }) soit quivalente F
3. Il ny a pas de dpendance fonctionnelle X A et Z c X tels que
(F \ {X A }) {Z A } soit quivalente F
Attention: pas dunicit des couvertures minimales
Maude Manouvrier - Univ. Paris Dauphine
Cl
111
Chap. VIII - DF
Soit R(A
1
, A
2
, , A
n
) et F une famille de DF sur R
Un sous-ensemble X de {A
1
, A
2
, , A
n
} est une cl
minimale de R si
La dpendance fonctionnelle X A
1
, A
2
, , A
n
e F
+
Y c X, on a pas Y A
1
, A
2
, , A
n
Si X nest pas un ensemble minimal alors X est une surcl
Les dpendances fonctionnelles permettent de dduire les cls
des relations
Maude Manouvrier - Univ. Paris Dauphine
Chap IX - Dcomposition de schma
Dcomposition sans perte dinformation (Lossless jointure)
La dcomposition de R en R
1
, R
2
, .., R
n
est sans perte
dinformation si et seulement si r, instance de R :
r = H
R
1
(r) H
R
2
(r) ... H
R
n
(r)
Dcomposition sans perte de dpendances
La dcomposition de R, munie dune famille de
dpendances F, en R
1
, R
2
, .., R
n
est sans perte de
dpendance si et seulement si :
F
+
= F
+
R
1
F
+
R
2
... F
+
R
n
avec F
+
R
i
= {X Y, XY _ R
i
}
112
Maude Manouvrier - Univ. Paris Dauphine
Dcomposition SPI
113
Chap. IX - Dcomposition

? ) (
1[ =
_
i
R
n
i
r r
? ) (
1[ =
_
i
R
n
i
r r
) ( de issu gnrique nuplet un , ,..., Soit
1 2 1 [ =

i
R
n
i n
r ) a ,a (a t
[
[
[
e
e
e

n
R
n
R
R
r t
r t
r t
t
) (
...
) (
) ( avec
t ... t t de partir construit est
2
1
2
1
n 2 1
? que - ce - Est r t e
r
Maude Manouvrier - Univ. Paris Dauphine
Dcomposition SPD
114
Chap. IX - Dcomposition
Association dune famille F
i
chaque sous-
relation R
i
Calcul des F
i
partir de F
+
:
X Y e F
+
et XY _ R
i
X Y e F
i
Perte de dpendances
- X Y e F tq X Y e
+

i
F
X] [
] ) [( par ent itrativem calcul ] [
j i
R R X X X
i
F

+ +

Maude Manouvrier - Univ. Paris Dauphine


Chap X - Formes normales
Forme normale de Boyce-Codd (BCNF)
Un schma de relation est BCNF si et seulement si :
DF lmentaires telles que une cl dtermine un attribut
Un schma de relation est BCNF si :
X ADF non triviale, A. X :
X est une (sur)cl et Anest pas un attribut de cl
La forme normale BCNF vite la redondance dinformation
La dcomposition de schma BCNF sans perte dinformation ne
prserve pas les dpendances fonctionnelles
115
Maude Manouvrier - Univ. Paris Dauphine
3me forme normale
116
Chap. X - Formes normales
Un schma de relation est 3NF si :
A, attribut e une cl,
Ane dpend pas dun ensemble dattributs qui nest pas une cl
(i.e. pas de dpendance transitive ni de dpendance partielle)
X Aest partielle si X est une partie de cl et Ane lest pas
X Aest transitive si ni X ni Ane sont des parties de cl
Si K est cl alors K X Aest une chane non triviale
Un schma R, munie dune famille F de DF, est 3NF si :
X A, DF non triviale de F :
X est une surcl ou Aappartient une cl
Maude Manouvrier - Univ. Paris Dauphine
3me forme normale
117
Chap. X - Formes normales
La 3NF nlimine pas le redondance dinformation
Objectif principaux de la dcomposition de schma :
BCNF
Non perte dinformation
Non perte de dpendance
On prfrera sacrifier la forme normale BCNF
et avoir une 3NF SPI-SPD
Maude Manouvrier - Univ. Paris Dauphine
1re, 2me et 3me formes normales
118
Chap. X - Formes normales
Un schma de relation R est 1NF si :
attribut de R, il contient une valeur atomique
Un schma de relation R est 2NF si et seulement si :
le schma est en 1NF
A, attribut e une cl, A ne dpend pas dune partie de cl
c--d ( - une dpendance fonctionnelle partielle )
Un schma de relation R est 3NF si :
le schma est 2NF
( - une dpendance fonctionnelle transitive )