8/2/2019 CoursBDRelationnelles_L3
1/118
Licence MI2E- 3me anne
Mention Informatique
et Mention Mathmatiques Mineure Informatique
Bases de donnes relationnelles
Maude ManouvrierModlisation Entit/Association et UML (Vocabulaire)
Modle relationnel et passage au modle relationnel
Algbre relationnelle
Calcul relationnel SQL /EmbeddedSQL / ODBC / JDBC
Dpendances fonctionnelles
Dcomposition de schma
Formes Normales
8/2/2019 CoursBDRelationnelles_L3
2/118
Maude Manouvrier - Univ. Paris Dauphine
Ouvrages de rfrence utiliss pour le cours :
T. Connoly, C. Begg et A. Strachan,Database Systems A PraticalApproach 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
8/2/2019 CoursBDRelationnelles_L3
3/118
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,
2002BU : 005.72 SOU
F. Brouard, C. Soutou , SQL (Synthse de cours et exercices corrigs). Pearson
Education 2005BU : 005.72 SQL
Christian Soutou, SQL Pour Oracle (avec exercices corrigs), Eyrolles, 2005BU 005.72 SOU
Nicolas Larousse, Cration de bases de donnes, Coll. Synthex, Pearson
Education, 2006
BIBLIOGRAPHIE
3
8/2/2019 CoursBDRelationnelles_L3
4/118
Chap. I - Introduction
Base de donnes :
collection d'informations ou de donnes qui existent sur une longuepriode 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 donnesspcifiques dans une grande masse d'informations (pouvant
atteindre plusieurs milliards d'octets) partage par de multiples
utilisateurs [Gar99]4
Maude Manouvrier - Univ. Paris Dau hine
8/2/2019 CoursBDRelationnelles_L3
5/118
Maude Manouvrier - Univ. Paris Dauphine
SGBD
Principaux composants :
Systme de gestion de fichiersGestionnaire de requtes
Gestionnaire de transactions
Principales fonctionnalits :Contrle de la redondance dinformation
Partage des donnes
Gestion des autorisations daccsVrifications des contraintes dintgrit
Scurit et reprise sur panne
5
Chap. I - Introduction
8/2/2019 CoursBDRelationnelles_L3
6/118Maude 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
8/2/2019 CoursBDRelationnelles_L3
7/118Maude 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 dedonnes (DML -Data Manipulation Language)
Schma de base de donnes :
description de la structure des donnes
ensemble de dfinitions exprimes en langagede description de donnes (DDL - DataDefinition Language)
7
Chap. I - Introduction
C i
8/2/2019 CoursBDRelationnelles_L3
8/118Maude 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, O2, Orion, Objectstore,Versant, Matisse...).
Aujourdhui : relationnel-objet, semi-structur, multimdia ...
8
Chap. I - Introduction
8/2/2019 CoursBDRelationnelles_L3
9/118Maude Manouvrier - Univ. Paris Dau hine
Chap II - ModlisationMthodologie 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 association9
Chap II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
10/118Maude 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
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
11/118Maude Manouvrier - Univ. Paris Dauphine
Modlisation UML
11
Chap. II Modlisation
Un automobiliste possdeentre zro et N voitures
Une voiture a un et unseul 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!!)
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
12/118Maude Manouvrier - Univ. Paris Dauphine
12
Chap. II Modlisation
Gnralisation/Spcialisation
(E/A - Merise)
Ensemble dentits
gnralisantes
Ensemble dentits
spcialises
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
13/118Maude Manouvrier - Univ. Paris Dauphine
13
Chap. II Modlisation
Hritage (UML)
Classe mre / Sur-classe
Classes drives ou filles / sous-classe
Chap. II - Modlisation
A t (E/A M i )
8/2/2019 CoursBDRelationnelles_L3
14/118Maude Manouvrier - Univ. Paris Dauphine
14
p
Agrgat (E/A - Merise)
On peut nommer ou
non lagrgat
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
15/118
Maude Manouvrier - Univ. Paris Dauphine15
p
Classe-Association (UML)
On peut nommer ou non
la classe-association
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
16/118
Maude Manouvrier - Univ. Paris Dauphine16
p
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
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
17/118
Maude Manouvrier - Univ. Paris Dauphine17
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
Appartient
1
1
Chap. II - Modlisation
C i i ( )
8/2/2019 CoursBDRelationnelles_L3
18/118
Maude Manouvrier - Univ. Paris Dauphine18
Composition (UML)
C t i tChap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
19/118
Maude Manouvrier - Univ. Paris Dauphine
ContraintesContraintes 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 diffrentesContraintes gnrales : rgle permettant de conserver
la cohrence de la base de manire gnrale
19
Chap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
20/118
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
Dpendances fonctionnellesChap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
21/118
Dpendances fonctionnelles
Un attribut (ou un groupe d'attributs) Y dpend
fonctionnellement d'un attribut (ou grouped'attributs)Xsi :
tant donn une valeur deX, il lui correspond une
valeur unique de Y ( l'instant considr)
XY : Ydpend fonctionnellement deX
ouXdtermine YDclaration des dpendances au niveau du schma
conceptuel21
E l d d d f ti llChap. II - Modlisation
8/2/2019 CoursBDRelationnelles_L3
22/118
Exemple de dpendances fonctionnelles
22
Marque, Type, Puissance, Anne Immatriculation
TypeMarque
EnseignantIDNom, Prnom, Position
Nom, Prnom, Position, Enseignant_ID
Ex. Le type "Twingo" sera toujours
associ, dans la base de donnes, la
marque "Renault".
ImmatriculationMarque, Type, Puissance, Anne
identificateur Tous les autres attributs
Si un numro de tlphone est associ un seul enseignant :
Telephone Enseignant_ID
Chap III - Modle relationnel
8/2/2019 CoursBDRelationnelles_L3
23/118
Maude Manouvrier - Univ. Paris Dau hine
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 nom unique
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 diffrents23
Chap. III - Modle relationnel
8/2/2019 CoursBDRelationnelles_L3
24/118
Maude Manouvrier - Univ. Paris Dau hine
Exemple de relation
24
Nom dattribut
Nuplets outuples
La relationEnseignant
NSS Nom Prnom Fonction
273 Manouvrier Maude MCF
Instances et schmaChap. III - Modle relationnel
8/2/2019 CoursBDRelationnelles_L3
25/118
Maude Manouvrier - Univ. Paris Dau hine
Instances et schma
Instances de base de donnes :
les nuplets (les valeurs) contenus dans la base uninstant 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
Passage au relationnelChap. III - Modle relationnel
8/2/2019 CoursBDRelationnelles_L3
26/118
Maude Manouvrier - Univ. Paris Dauphine
Passage au relationnelTransformation des ensembles dentits :
chaque ensemble d'entits/classesE
une relation R dont le schma est celui de l'ensembled'entits/classe
l'identificateur de E devient la cl de R
chaque ensemble d'entits faibles/association qualifieE
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 mreE
une relationR chaque ensemble d'entitsEi spcialis/classe fille une relation Ri dans laquelle l'identifiant est de mme domaineque l'identifiant de E
26
Chap. III - Modle relationnel
8/2/2019 CoursBDRelationnelles_L3
27/118
Maude Manouvrier - Univ. Paris Dau hine
Transformation des ensemblesdassociations E/A
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 ?
Chap. III - Modle relationnel
T f i d bl
8/2/2019 CoursBDRelationnelles_L3
28/118
Maude Manouvrier - Univ. Paris Dau hine28
Accidente ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
Transformation des ensemblesdassociations UML
On peut choisir lun ou lautre comme cl primaire
Accidente lors de la location
Chap. III - Modle relationnel
T f i d bl
8/2/2019 CoursBDRelationnelles_L3
29/118
Maude Manouvrier - Univ. Paris Dau hine29
Transformation des ensemblesdassociations 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
Chap. III - Modle relationnel
T f ti d bl
8/2/2019 CoursBDRelationnelles_L3
30/118
Maude Manouvrier - Univ. Paris Dau hine30
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 ensemblesdassociations UML
ou 1..*ou 0..1
Chap. III - Modle relationnel
T f ti d bl
8/2/2019 CoursBDRelationnelles_L3
31/118
Maude Manouvrier - Univ. Paris Dau hine31
Automobiliste ( Auto_ID, Nom, Prnom, Adresse )
Voiture ( Immatriculation, Marque, Puissance, Type, Anne )
Transformation des ensemblesdassociations 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
Chap. III - Modle relationnel
T f ti d bl
8/2/2019 CoursBDRelationnelles_L3
32/118
Maude Manouvrier - Univ. Paris Dau hine32
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 ensemblesdassociations UML
ou 1..*
ou 0..1
ou 1..*
ou 0..1
Chap. III - Modle relationnel
Transformation des concepts
8/2/2019 CoursBDRelationnelles_L3
33/118
Maude Manouvrier - Univ. Paris Dau hine33
NB : #Personne_ID dansEnseignant et Etudiant font
rfrence Personne_ID dans
Personne
Transformation des conceptsGnralisation-Spcialisation / Hritage
Enseignant ( #Personne_ID, Position )Etudiant ( #Personne_ID, Adresse,
Ville ...)
Personne ( Personne_ID,
Nom,Prnom, Tlphone ... )
Solution possible (une autre seradonne en cours) :
Chap. III - Modle relationnel
T f ti d tit f ibl E/A
8/2/2019 CoursBDRelationnelles_L3
34/118
Maude Manouvrier - Univ. Paris Dau hine34
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)
Chap. III - Modle relationnel
T f ti d i ti
8/2/2019 CoursBDRelationnelles_L3
35/118
Maude Manouvrier - Univ. Paris Dau hine35
Transformation des associationsqualifies 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
Chap. III - Modle relationnel
Transformation de la composition
8/2/2019 CoursBDRelationnelles_L3
36/118
Maude Manouvrier - Univ. Paris Dau hine36
Voi
Voiture ( Immatriculation, Marque,
Puissance, Type, Anne )
Moteur (Numro, #Immatriculation,
Chevaux)
PotEchappement (Num_Srie,
#Immatriculation, DateInstallation)
Transformation de la compositionUML
Dpendances fonctionnellesChap. III - Modle
relationnel
8/2/2019 CoursBDRelationnelles_L3
37/118
Maude Manouvrier - Univ. Paris Dauphine
p
Ne pas oublier de dfinir les DF :
37
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 )ImmatriculationAuto_ID
+ les Dpendances fonctionnelles de Voiture
Location ( Auto_ID, Immatriculation, Date )
Pas de dpendance non triviale
Auto_ID Immatriculation et ImmatriculationAuto_ID
Auto_ID Nom, Prnom, Adresse
Auto_ID Immatriculation
Intgrit structurelleChap. III - Modle
relationnel
8/2/2019 CoursBDRelationnelles_L3
38/118
Maude Manouvrier - Univ. Paris Dauphine
g Unicit des cls
ensemble minimal d'attributs dont la connaissance des
valeurs permet d'identifier un nuplet unique de la relationconsidre
R a pour clKsi : t1, t2 nuplets dune instance deRt1.K t2.K
Contraintes de rfrence
contrainte rfrentielle : contrainte d'intgrit portant surune relation R qui consiste imposer que la valeur d'ungroupe d'attributs apparaissent comme valeur de cl dans
une autre relation
cl trangre : un groupe d'attributs qui doit apparatrecomme cl dans une autre relation
38
Cl /Cl minimale /SurclChap. III - Modle
relationnel
8/2/2019 CoursBDRelationnelles_L3
39/118
Maude Manouvrier - Univ. Paris Dauphine 39
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)
Intgrit structurelleChap. III - Modle
relationnel
8/2/2019 CoursBDRelationnelles_L3
40/118
Maude Manouvrier - Univ. Paris Dauphine
g
Valeur nulle
valeur conventionnelle introduite dans une relation pourreprsenter 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
Langages dinterrogationChap. III - Modlerelationnel
8/2/2019 CoursBDRelationnelles_L3
41/118
Maude Manouvrier - Univ. Paris Dauphine
g g g
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 donnes41
Chap IV - Algbre relationnelle
8/2/2019 CoursBDRelationnelles_L3
42/118
Maude Manouvrier - Univ. Paris Dau hine
p gOprations unaires :
slection des nuplets satisfaisant un certain prdicat
Etudiant(Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,Tlphone, Fax, Email, NumAnnes)
(Ville= Paris ) (Etudiant)
(Ville= Paris ) (NumAnnes 2) (Etudiant)
projection : limination de certains attributs dune relation
Nom,Prnom(Etudiant)
Nom,Prnom( (Ville= Paris ) (Etudiant) )
42
Exemples de rsultats doprations unaires
8/2/2019 CoursBDRelationnelles_L3
43/118
Maude Manouvrier - Univ. Paris Dau hine43
RelationEnseignant
:
Rsultat de la slection (grade=MCF) (Enseignant) :
Rsultat de la projection
Nom,Prnom(Enseignant) :Rsultat de la requte
Nom,Prnom ((grade=MCF) (Enseignant)) :
Oprations binairesChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
44/118
Maude Manouvrier - Univ. Paris Dau hine
Union : rassemblement des nuplets de 2 relations compatibles
Enseignant( Enseignant_ID, Dpartement_ID, Nom, Prnom, Grade,
Tlphone, Fax, Email )
Nom,Prnom(Etudiant) Nom,Prnom(Enseignant)
Diffrence : des nuplets de 2 relations compatibles
Nom,Prnom(Enseignant) - 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
Exemple dunion et de diffrence
Chap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
45/118
Maude Manouvrier - Univ. Paris Dau hine
Exemple dunion et de diffrence
45
Nom,Prnom(Etudiant) Nom,Prnom(Enseignant) :
Nom,Prnom(Enseignant) - Nom,Prnom(Etudiant) :
Produit cartsienChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
46/118
Maude Manouvrier - Univ. Paris Dauphine46
NSS Nom Prnom Grade Dept
12345 Manouvrier Maude MCF 1
45678 Toto Titi Prof 2
La relationEnseignant
Dept_ID Nom_Dept_
1 Info
2 Math
La relationDpartement
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 Math45678 Toto Titi Prof 2 2 Math
La relationEnseignantDpartement
Autres oprationsChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
47/118
Maude Manouvrier - Univ. Paris Dauphine47
Renommage :
A,B, (r AA, B B, ) Intersection :
r s = r - ( r - s ) Thta-jointure :
r s = (r s) Jointure naturelle : r(R) et s(S) avec R S = {A1,A2, , An}
r s = R S ((r.A1=s.A1) (r.A2=s.A2) (r.An=s.An) (r s))
Exemple de renommage et dintersection
Chap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
48/118
Maude Manouvrier - Univ. Paris Dauphine
Exemple de renommage et d intersection
48
Last_Name,First_Name(Enseignant Nom Last_Name, Prnom First_Name ) :
Nom,Prnom(Enseignant) Nom,Prnom(Etudiant) :
Exemple de produit cartsienChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
49/118
Maude Manouvrier - Univ. Paris Dauphine
La relationEnseignant:
La relationDepartement:
EnseignementDepartement:
49
Exemple de jointureChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
50/118
Maude Manouvrier - Univ. Paris Dauphine
La relationEnseignant:
La relationDepartement:
EnseignementDepartement_IDDepartement:
50
DivisionChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
51/118
Maude Manouvrier - Univ. Paris Dauphine51
Requte qui contient le terme pour tous
Soient r(R) et s(S) avec S R
la relation r s a pour schma R - Sun nuplet tappartient r s si :
t
R - S (r) ts nuplet de s, trdans r qui satisfait :
tr(S) = ts(S)
tr(R-S) = t
r s = R - S (r) - R - S [ ( R - S (r) s ) - R - S, S (r) ]
DivisionChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
52/118
Maude Manouvrier - Univ. Paris Dauphine52
La relationEnseignement:
La relationInscription :
Etudiant_ID, Enseignement_ID, Departement_ID (Inscription) Enseignement_ID, Departement_ID (Enseignement) :
Contraintes et DFChap. IV - Algbrerelationnelle
8/2/2019 CoursBDRelationnelles_L3
53/118
Maude Manouvrier - Univ. Paris Dauphine53
Expressions des contraintes dintgrit rfrentielle :
Dpartement_ID(Enseignant) Dpartement_ID(Dpartement)
Dpartement_ID(Dpartement) - Dpartement_ID(Enseignant) =
Expressions des dpendances fonctionnelles :
XYr et t1, t2 r on a :
x(t1) =x(t2)Y(t1) =Y(t2)
Chap V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
54/118
Maude Manouvrier - Univ. Paris Dauphine
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 rt.att1 = valeur1
t.att1 > s.att2 ...
{t | Etudiant(t) (t.Ville=Paris ) (t.NumAnnes 2)}{t.Nom, t.Prnom | Etudiant(t) (t.Ville=Paris) }
54
QuantificateursChap. V - Calcul variable nuplet
8/2/2019 CoursBDRelationnelles_L3
55/118
Maude Manouvrier - Univ. Paris Dauphine 55
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
Expression des oprateurs algbriques
Chap. V - Calcul variable nuplet
8/2/2019 CoursBDRelationnelles_L3
56/118
Maude Manouvrier - Univ. Paris Dauphine
Expression des oprateurs algbriques
56
(r) :
A1,A2, , An (r) :
r s :
r - s :
r s :
r s :
r s :
DivisionChap. V - Calcul variable nupletDivision :
8/2/2019 CoursBDRelationnelles_L3
57/118
Maude Manouvrier - Univ. Paris Dau hine57
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 Livre ( v Emprunt(v)
(v.Etudiant_ID=t.Etudiant_ID) (v.ISBN=u.ISBN ))
]
}
La requte retourne les valeurs des att. Nomet Prenomdes nuplets tde la relation Etudianttq :
{ 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 udans Livre (i.e. quel que soi
un livre)
Quel que soit u, u nest pas
dans Livre ou (u est dans
Livre et ) il existe v
Il existe un nuplet vdans Emprunt
associant le livre u ltudiantt
Calcul variable domaineChap. V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
58/118
Maude Manouvrier - Univ. Paris Dauphine 58
{ | P( x1 ,x2 , , xn )}
avecx1,x2, xn variable domaine etP formule
Exemples :
Marin(MiD, Nom, Grade, Date-Nais)Bateau(Bid, Bnom,Couleur)Reservation(Mid,Bid,Date)
Nom et grade des marins : { \ 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, dReservation(m,br,d) (m = i) (br =b) ) ] }
QBEChap. V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
59/118
Maude Manouvrier - Univ. Paris Dauphine 59
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
QBEChap. V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
60/118
Maude Manouvrier - Univ. Paris Dauphine 60
Etape 2 :
slection desattributs de
la requte
QBEChap. V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
61/118
Maude Manouvrier - Univ. Paris Dauphine 61
Etape 3 :
possibilitdappliquer
des fonction
dagrgation
sur les nupletsrsultats
Expression des contraintes en logiqueChap. V - Calcul relationnel
8/2/2019 CoursBDRelationnelles_L3
62/118
des prdicats
62
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)
)
)
}
Chap VI - Algbre relationnelle tendue
8/2/2019 CoursBDRelationnelles_L3
63/118
Maude Manouvrier - Univ. Paris Dauphine
Projection gnralise :
ajout dexpressions arithmtiques dans une projectionNom_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 deR qui ne joignent avec aucun nuplet de S (les valeurs des
attributs de S sont mises NULL)63
Chap. VI - Algbre relationnelle tendue
N E l Vill N E l Fili l S l i
Personnel Employ
8/2/2019 CoursBDRelationnelles_L3
64/118
Maude Manouvrier - Univ. Paris Dauphine 64
Nom_Employ Ville
Tom Marseille
Jerry Paris
Alex LimogesMarthe Perpignan
Nom_Employ Filiale Salaire
Tom SUD_EST 10000
Jerry IDF 25000
Sophie IDF 15000Marthe 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 25000Sophie NULL IDF 15000
Marthe Perpignan SUD_OUEST 12000
Personnel
]
Employ
Personnel
[
Employ
Fonction dagrgationChap. VI - Algbre relationnelle tendue
8/2/2019 CoursBDRelationnelles_L3
65/118
Maude Manouvrier - Univ. Paris Dau hine65
Somme des places disponibles dans lUniversit
SumCapacit(Salle ) Nombre moyen de places disponibles dans les salles de lUniversit
AvgCapacit (Salle)
Nombre dtudiants lUniversit
CountEtudiant_ID (Etudiant) Capacit de la plus petite salle
MinCapacit(Salle)
Nombre denseignants par dpartements :
Nom_Dpartement CountEnseignant_ID(Enseignant Dpartement)
Mise jour de la baseChap. VI - Algbre relationnelle tendue
8/2/2019 CoursBDRelationnelles_L3
66/118
Maude Manouvrier - Univ. Paris Dau hine66
Insertion
Salle Salle {( B , 038 , 15)} Suppression
Salle Salle - Salle 10 (Salle) Mise jour : utilisation de la projection gnralise
rEtudiant_ID [(Nom= Dupont ) (Prnom= Jacques ) (Etudiant)]Etudiant (Etudiant.Etudiant_ID r.Etudiant_ID) (Etudiant)
Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,
Tlphone 45 12 45 86 , Fax, Email, NumAnnes[(Etudiant.Etudiant_ID =r.Etudiant_ID) (Etudiant) ]
Mise jour dutlphone
VueChap. VI - Algbre relationnelle tendue
8/2/2019 CoursBDRelationnelles_L3
67/118
Maude Manouvrier - Univ. Paris Dau hine67
Table virtuelle dont le schma et les instances sont drivs dela 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 Etudiant_ID, Nom, Prnom, Email (Etudiant)
Chap VII - SQL
St t d Q L
8/2/2019 CoursBDRelationnelles_L3
68/118
Maude Manouvrier - Univ. Paris Dauphine
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
Bibliographie SQL2 Application Oracle Access et RDB
Chap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
69/118
Maude Manouvrier - Univ. Paris Dauphine
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, 2005BU: 005.72 SOU
Initiation SQL (cours et exercices corrigs)
Philip J. Pratt, Eyrolles,2001BU : 005.72 SQL
SQL (cours et exercices corrigs)
Frdric Brouad et Christian Soutou, Coll. Synthex, Pearson
Education, 2005BU : 005.72 SQL
Oracle PL/SQL - Prcis & concis
Steven Feuerstein, Bill Pribyl et Chip Dawes, O Reilly, 2000
69
DMLChap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
70/118
Maude Manouvrier - Univ. Paris Dau hine70
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 ]
DMLChap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
71/118
Maude Manouvrier - Univ. Paris Dau hine71
SELECT Nom, Prnom
FROM EtudiantWHERE Ville = Paris ;
SELECT Nom, Prnom
FROM Etudiant
WHERE Ville = Paris
AND Nom
LIKE _AR% ;
SELECT Nom, PrnomFROM Etudiant
WHERE Fax IS NULL;
SELECT Intitul,
(NbSeances*3) AS NbHeuresFROM Cours
WHERE (NbSeances*3)
BETWEEN 24 AND 27 ;
SELECT Nom, Prnom
FROM Enseignant
WHERE Dpartement_ID IN
( INFO , MATH , ECO )
DMLPrdicats du WHERE de la forme :
Chap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
72/118
Maude Manouvrier - Univ. Paris Dau hine72
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 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
SELECT Intitul,
FROM Cours
WHERE NbSeances
8/2/2019 CoursBDRelationnelles_L3
73/118
Maude Manouvrier - Univ. Paris Dau hine73
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, PrnomFROM Enseignant E
WHERE NOT EXISTS
( SELECT *
FROM Reservation_Salle SWHERE S.Enseignant_ID = E.Enseignant_ID
);
DMLChap. VII - SQL
Fonctions de groupe :
COUNT MIN MAX AVG SUM ORDER BY GROUP BY
8/2/2019 CoursBDRelationnelles_L3
74/118
Maude Manouvrier - Univ. Paris Dau hine74
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 ;
DMLChap. VII - SQL
J i t
8/2/2019 CoursBDRelationnelles_L3
75/118
Maude Manouvrier - Univ. Paris Dau hine75
Jointure :
SELECT Nom, Prnom, Nom_DpartementFROM Enseignant E, Dpartement D
WHERE E.Dpartement_ID = D.Dpartement_ID ;
Jointure externe : sous OracleSELECT 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 deDpartement_ID sera NULL.
En SQL2 : [RIGHT | LEFT | FULL] OUTER JOIN
DMLChap. VII - SQL
Oprateurs ensemblistes :
8/2/2019 CoursBDRelationnelles_L3
76/118
Maude Manouvrier - Univ. Paris Dau hine76
SELECT Nom,Prnom FROM Enseignant WHERE Dpartement_ID = INFO
INTERSECTSELECT 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
DMLChap. VII - SQL
Division :Livre(ISBN, Titre, Editeur)
8/2/2019 CoursBDRelationnelles_L3
77/118
Maude Manouvrier - Univ. Paris Dau hine77
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
DMLChap. VII - SQL
Insertion
8/2/2019 CoursBDRelationnelles_L3
78/118
Maude Manouvrier - Univ. Paris Dau hine78
INSERT INTO table(col1, col2, coln)
VALUES (val1, val2, valn)
INSERT INTO table(col1, col2, coln)
SELECT
Suppression
DELETE FROM tableWHERE prdicat
Mise jour
UPDATE table
SET col1 = exp1, col2 = exp2 WHERE prdicat
Transactions : COMMIT, ROLLBACK [TO], SAVE POINT
Sous Oracle
DDLChap. VII - SQL
CREATE TABLE table (col1 type 1 [NOT NULL] ,
l2 t 2 [NOT NULL]
8/2/2019 CoursBDRelationnelles_L3
79/118
Maude Manouvrier - Univ. Paris Dau hine79
col2 type2 [NOT NULL]
)
Contraintes :
CONSTRAINTnom_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 ...
DDLChap. VII - SQL
CREATE TABLE Enseignant
(
8/2/2019 CoursBDRelationnelles_L3
80/118
Maude Manouvrier - Univ. Paris Dau hine80
(
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 cltrangre
CREATE TABLE Reservation
(
Reservation_ID integer,
Batiment varchar(1) NOT NULL,
Numero Salle varchar(10) NOT NULL
8/2/2019 CoursBDRelationnelles_L3
81/118
81
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)
);
DDLChap. VII - SQL
CREATE ASSERTION
[ {BEFORE COMMIT |
8/2/2019 CoursBDRelationnelles_L3
82/118
Maude Manouvrier - Univ. Paris Dau hine82
[ {BEFORE COMMIT |
AFTER {INSERT | DELETE | UPDATE[OF (Attributs)]} ON
} ]
CHECK
[FOR [EACH ROW OF] ]
CREATE ASSERTION CA_Place_Universit
BEFORE COMMIT
CHECK( (SELECT SUM(Capacit) FROM Salle)
>= (SELECT COUNT(*) FROM Etudiant))
DDLChap. VII - SQL
CREATE [OR REPLACE] TRIGGER nom {BEFORE | AFTER}
t d l h ON t bl
8/2/2019 CoursBDRelationnelles_L3
83/118
83
vnement_dclencheur ON nom_table
[FOR EACH ROW]
[WHEN (condition) ]
bloc PL/SQLsous Oracle
| inst_de_suppr | inst_de_modif | instr_d_ajout | ERROR en SQL2
vnement_dclencheur = INSERT, UPDATE, DELETE
Dclencheur deniveau instruction : pas de clause FOR EACH ROW
Dclencheur deniveau 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
DDLChap. VII - SQL
CREATE OR REPLACE TRIGGER Enseignant_Actif
BEFORE DELETE ON E i t
8/2/2019 CoursBDRelationnelles_L3
84/118
Maude Manouvrier - Univ. Paris Dau hine84
BEFORE DELETE ON Enseignant
FOR EACH ROW
declare
counter number;
begin
SELECT count(*) INTO counter
FROM EnseignementsWHERE Enseignant_ID = :old.Enseignant_ID;
if counter > 0 then
raise_application_error (-20800, Enseignant actif ne
pouvant tre supprim');end if;
end;
DDLChap. VII - SQL
CREATE OR REPLACE TRIGGER UPD salaire personnel
8/2/2019 CoursBDRelationnelles_L3
85/118
Maude Manouvrier - Univ. Paris Dau hine85
_ _p
BEFORE UPDATE salaire ON Personnel
FOR EACH ROWWHEN (:old.salaire > :new.salaire)
declare
salaire_diminution EXCEPTION;
beginraise salaire_diminution ;
when salaire_diminution then
raise_application_error(-20001, Le salaire ne peut pas
diminuer)
end;
DDLSous PostgreSQL :
Chap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
86/118
Maude Manouvrier - Univ. Paris Dau hine86
CREATE OR REPLACE FUNCTIONGetSalleCapaciteSuperieurA(int)
RETURNS SETOF Salle
AS '
SELECT * FROM Salle WHERE Capacite > $1;
'
LANGUAGE SQL;
SELECT*FROMGetSalleCapaciteSuperieurA(300) ;
CREATE OR REPLACE FUNCTIONFunctionTriggerReservation()
RETURNS trigger AS
' DECLARE
DDLChap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
87/118
87
'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';
Maude Manouvrier - Univ. Paris Dau hine
DDLSous PostgreSQL :
Chap. VII - SQL
8/2/2019 CoursBDRelationnelles_L3
88/118
Maude Manouvrier - Univ. Paris Dau hine88
CREATE TRIGGER InsertionReservation
BEFORE INSERT ON Reservation
FOR EACH ROW
EXECUTE PROCEDURE
FunctionTriggerReservation();
DDLChap. VII - SQL
ALTER TABLE table
ADD (col1 type1 col2 type2 )
8/2/2019 CoursBDRelationnelles_L3
89/118
Maude Manouvrier - Univ. Paris Dau hine89
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 )
Embedded SQLChap. VII - SQL
Utilisation de commandes SQL lintrieur dun langage hte :
8/2/2019 CoursBDRelationnelles_L3
90/118
Maude Manouvrier - Univ. Paris Dau hine90
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 SECTIONchar d_name[20];char d_id;EXEC SQL END DECLARE SECTION...
EXEC SQL INSERT INTO DepartmentVALUES (:d_id, :d_name);
Embedded SQLChap. VII - SQL
Gestion des erreurs :
8/2/2019 CoursBDRelationnelles_L3
91/118
Maude Manouvrier - Univ. Paris Dau hine91
EXEC INCLUDE SQLCA;
...EXEC SQL WHENEVER SQLERROR GOTO erreur
...
erreur :
printf(``erreur : les transactions encours vont tre annules'\n'');
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
Embedded SQLChap. VII - SQL
Gestion de curseur :
/* D l ti d' i l l
8/2/2019 CoursBDRelationnelles_L3
92/118
Maude Manouvrier - Univ. Paris Dau hine92
/* 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;
Middleware daccsaux bases de donnes
Chap. IV - SQL
A hit t l i i ll dfi i t i t f t d d d
8/2/2019 CoursBDRelationnelles_L3
93/118
Maude Manouvrier - Univ. Paris Dauphine 93
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)
JDBC/ODBCChap. IV - SQL
Appel des fonctions de l API :
8/2/2019 CoursBDRelationnelles_L3
94/118
Maude Manouvrier - Univ. Paris Dauphine 94
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)
JDBC
Chap. IV - SQL
8/2/2019 CoursBDRelationnelles_L3
95/118
Maude Manouvrier - Univ. Paris Dauphine 95
Exemple de programme Java sur la base exemple :import java.sql.*; // Tout ce qui est ncessaire pour JDBCimport java.text.*; // Pour formater les datesimport java.util.*;
public class TestJDBCPostgresql
{Connection db=null; // Variable de connexionStatement sql=null; // Variable pour un ordre SQLDatabaseMetaData dbmd; // Mta-donnes ncessaires
// au pilote.
JDBCChap. IV - SQL
public TestJDBCPostgresql(String argv[])throws ClassNotFoundException, SQLException,
8/2/2019 CoursBDRelationnelles_L3
96/118
Maude Manouvrier - Univ. Paris Dauphine 96
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 donnesdb = 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// explicitedb.setAutoCommit(false);
JDBCChap. IV - SQL
dbmd = db.getMetaData(); // Rcuparation des mta-donnes
// Pour tester que la connexion est OK
8/2/2019 CoursBDRelationnelles_L3
97/118
Maude Manouvrier - Univ. Paris Dauphine 97
// qSystem.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 relationsql = db.createStatement();
String sqlText = "CREATE TABLE ";
System.out.println("Executing this command: "+sqlText+"\n");
sql.executeUpdate(sqlText);
// Ne pas oublier le COMMIT si AUTOCOMMIT = falsedb.commit();
// Code quivalent pour un INSERT, UPDATE, DELETE
JDBCChap. IV - SQL
// Exemple de requte de slectionResultSet rset = sql.executeQuery("SELECT Capacit FROM
i " " i ' ' " "
8/2/2019 CoursBDRelationnelles_L3
98/118
Maude Manouvrier - Univ. Paris Dauphine 98
Reservation " + "WHERE Batiment='B' " + "AND
Numero_Salle='022'");// Parcours des nuplets rsultat
while (rset.next()) {System.out.println("Nom de la table : (gnralement videbug 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");
JDBCChap. IV - SQL
// Cration dun ordre SQL paramtr
// Code SQL de la requte
8/2/2019 CoursBDRelationnelles_L3
99/118
Maude Manouvrier - Univ. Paris Dauphine 99
sqlText = "INSERT INTO Salle VALUES (?,?,?)";
// Prparation de lordre SQL non encore excut//car il manque des paramtresPreparedStatement 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
8/2/2019 CoursBDRelationnelles_L3
100/118
Maude Manouvrier - Univ. Paris Dauphine 100
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
8/2/2019 CoursBDRelationnelles_L3
101/118
ODBC
Chap. VII - SQL
Exemple de programme en C sous Visual C++ :
8/2/2019 CoursBDRelationnelles_L3
102/118
Maude Manouvrier - Univ. Paris Dauphine 102
p p g
#include #include #include // MFC ODBC database classes
char *cBASE ; /* Nom de la source de donnes */char *cLOGIN ; /* Login utilisateur */
char *cPASSWD ; /* Mot de passe utilisateur */
void main(){HENVd_env; /* Descripteur d'environnement */HDBC d_connex; /* Descripteur de connexion */HSTMT curseur; /* Curseur */RETCODE retcode; /* Code de retour de fonction */
ODBCChap. VII - SQL
UCHAR ucLastName[20],ucCity[20];SDWORD ceLastName,ceCity;char *cREQUETESQL; /* Variable recevant une requte SQL */
8/2/2019 CoursBDRelationnelles_L3
103/118
103
/* 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
8/2/2019 CoursBDRelationnelles_L3
104/118
104
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,(unsignedchar*)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
ODBCChap. 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");
8/2/2019 CoursBDRelationnelles_L3
105/118
105
p ( ( ) \ );
/* 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
ODBCChap. VII - SQL
/* Tant le parcours du curseur est valide */
while (retcode == SQL_SUCCESS){/* Parcourt de l'enregistrement rsultat de la requte */
8/2/2019 CoursBDRelationnelles_L3
106/118
106
g q
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
Chap VIII - Dpendances fonctionnelles Dpendance fonctionnelle sur R
A1 A2 A B
8/2/2019 CoursBDRelationnelles_L3
107/118
Maude Manouvrier - Univ. Paris Dauphine
A1, A2, , An B
"Si deux nuplets de R ont mmes valeurs pour les attributs de A1, A2, ,An alors ils ont mme valeur pour les attributs de B.
Une dpendance A1, A2, , An B1, B2, , Bm est :
triviale : si lensemble B1, B2, , Bm est sous-ensemble deA1, A2, , An
non triviale : si au moins un Bi nappartient pas
lensemble de A1, A2, , An
compltement non triviale : si aucun des Bi nappartient
lensemble de A1, A2, , An107
8/2/2019 CoursBDRelationnelles_L3
108/118
FermetureChap. VIII - DF
Fermeture dune famille de dpendances fonctionnelles
F+ {X Y \ F | X Y }
8/2/2019 CoursBDRelationnelles_L3
109/118
Maude Manouvrier - Univ. Paris Dauphine 109
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] +
Equivalence et CouvertureChap. VIII - DF
Deux familles de dpendances fonctionnelles F et G sont
quivalentes si F+ = G+
Si F+ G+ l G t d F
8/2/2019 CoursBDRelationnelles_L3
110/118
Maude Manouvrier - Univ. Paris Dauphine 110
Si F+ 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
attribut2. 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 X tels que
(F \ {X A }) {Z A } soit quivalente F
Attention: pas dunicit des couvertures minimales
8/2/2019 CoursBDRelationnelles_L3
111/118
Chap IX - Dcomposition de schma Dcomposition sans perte dinformation (Lossless jointure)
La dcomposition de R en R1, R2, .., Rn est sans perte
8/2/2019 CoursBDRelationnelles_L3
112/118
p 1, 2, , n p
dinformation si et seulement si r, instance de R :
r = R1(r) R2
(r) ... Rn(r)
Dcomposition sans perte de dpendances
La dcomposition de R, munie dune famille de
dpendances F, en R1, R2, .., Rn est sans perte de
dpendance si et seulement si :
F+
= F+
R1 F+
R2 ... F+
Rn avec F+
Ri = {XY, XY Ri}
112
Dcomposition SPI
Chap. IX - Dcomposition
?)(1iR
n
i rrr
8/2/2019 CoursBDRelationnelles_L3
113/118
Maude Manouvrier - Univ. Paris Dauphine 113
i
?)(1 iRni rr
)(deissugnriquenupletun,,...,Soit 121 iR
n
in r)a,a(at
nRn
R
R
rt
rt
rtt
)(...
)(
)(avect...ttdepartirconstruitest
2
1
2
1
n21
?que-ce-Est rt
r
Dcomposition SPD
Chap. IX - Dcomposition
Association dune famille Fi chaque sous-
relation R
8/2/2019 CoursBDRelationnelles_L3
114/118
Maude Manouvrier - Univ. Paris Dauphine 114
relationRi
Calcul des Fi partir de F+ :
XY F+ et XY Ri
XY Fi
Perte de dpendances
XY FtqXY
iF
X][
])[(parentitrativemcalcul][ ji RRXXXiF
Chap X - Formes normalesForme normale de Boyce-Codd (BCNF)
Un schma de relation est BCNF si et seulement si :
8/2/2019 CoursBDRelationnelles_L3
115/118
Maude Manouvrier - Univ. Paris Dauphine
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 A DF non triviale, A X :X est une (sur)cl et A nest pas un attribut de cl
La forme normale BCNF vite la redondance dinformation
La dcomposition de schma BCNF sans perte dinformation neprserve pas les dpendances fonctionnelles
115
3me forme normale
Chap. X - Formes normales
Un schma de relation est 3NF si :
A, attribut une cl,
8/2/2019 CoursBDRelationnelles_L3
116/118
Maude Manouvrier - Univ. Paris Dauphine 116
A ne dpend pas dun ensemble dattributs qui nest pas une cl
(i.e. pas de dpendance transitive ni de dpendance partielle)
XA est partielle si X est une partie de cl et A ne lest pas
XA est transitive si ni X ni A ne sont des parties de cl Si K est cl alors K X A est 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 A appartient une cl
3me forme normale
Chap. X - Formes normales
La 3NF nlimine pas le redondance dinformation
8/2/2019 CoursBDRelationnelles_L3
117/118
Maude Manouvrier - Univ. Paris Dauphine 117
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
1re, 2me et 3me formes normales
Chap. X - Formes normales
Un schma de relation R est 1NF si :
tt ib t d R il ti t ale r atomiq e
8/2/2019 CoursBDRelationnelles_L3
118/118
Maude Manouvrier - Univ. Paris Dauphine 118
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 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 )