Sunteți pe pagina 1din 141

Licence MIDO - 3me anne

2014-2015

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

BIBLIOGRAPHIE
Ouvrages de rfrence utiliss pour le cours et disponibles la BU

T. Connoly, C. Begg et A. Strachan, Database Systems A Pratical


Approach to Desigh, Implementation and Management, 6me dition, 2014,
ISBN: 9780132943260
F. Brouad, R. Bruchez, C. Soutou, SQL, Syntex Informatique, Pearson,
2012, ISBN: 978-2-7440-7630-5, disponible la BU 005.72 SQL
R. Ramakrishnan et J. Gehrke, Database Management Systems, Second
Edition; McGraw-Hill, 2002, ISBN: 0-07-232206-3, disponible la BU
055.7 RAM
A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts,
McGraw-Hill, 6me dition, 2010, ISBN: 978-0073523323,
J.D. Ullman et J. Widom, A first Course in Database Systems, Prentice
Hall, 3eme dition, 2014, ISBN: 978-9332535206
Maude Manouvrier - Univ. Paris Dauphine

BIBLIOGRAPHIE
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


F. Brouard, C. Soutou, ULM 2 pour les bases de donnes : Modlisation,
normalisation, gnration, SQL, outils , Eyrolles, 2012
F. Brouard, C. Soutou , SQL (Synthse de cours et exercices corrigs). Pearson
Education 2008
R. Stephens, R. Plew, A. Jones, Adapt par Nicolas Larrousse , SQL, Coll.
Synthex, Pearson Education, 2012

Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction
Bases de donnes :
Collection homogne et structure d'informations ou de
donnes qui existent sur une longue priode de temps et qui
dcrivent les activits d'une ou plusieurs organisations
ensemble de donnes modlisant les objets d'une partie du
monde rel et servant de support une application informatique
Exemple 1 :
Organisation : une bibliothque
Donnes : les livres, les emprunts, les emprunteurs

Exemple 2 :
Organisation : une Universit
Donnes : les tudiants, les enseignants, les cours, etc.
Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction

SGBD (1/3)

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

Exemples : MySQL, PostgreSQL (utilis en TP), Oracle,


Microsoft SQLServer, etc.
Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction

SGBD (2/3)
Principales fonctionnalits dun SGBD :

Cration et mises jour de la structure de la base de


donnes (par le concepteur et/ou le DBA DataBase
Administrator)
Administration de la base de donnes : gestion des
utilisateurs, des droits daccs etc. (par ladministrateur
DBA)
Saisie et mises jour des donnes (par le concepteur
et/ou les utilisateurs)
Interrogation des donnes selon diffrents critres
et/ou en effectuant des calculs (par les utilisateurs)

Chap. I - Introduction

SGBD (3/3)
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
Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction

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
Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction

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)
Maude Manouvrier - Univ. Paris Dauphine

Chap. I - Introduction

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, Ca. - 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 ...
Maude Manouvrier - Univ. Paris Dauphine

10

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(s)
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
Maude Manouvrier - Univ. Paris Dauphine

11

Chap. II - Modlisation

Modlisation Entit/Association
(Format Merise)
Un automobiliste possde
entre zro et N voitures

Maude Manouvrier - Univ. Paris Dauphine

Une voiture a un et un
seul propritaire

12

Chap. II - Modlisation

Modlisation UML
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

13

Chap. II - Modlisation

Gnralisation/Spcialisation
(E/A - Merise)
Ensemble dentits
gnralisantes

Ensemble dentits
spcialises
Maude Manouvrier - Univ. Paris Dauphine

14

Chap. II - Modlisation

Hritage (UML)

Classe mre / Sur-classe

Classes drives ou filles / sous-classes

Maude Manouvrier - Univ. Paris Dauphine

15

Chap. II - Modlisation

Agrgat (E/A - Merise)

On peut nommer ou
non lagrgat

Maude Manouvrier - Univ. Paris Dauphine

16

Chap. II - Modlisation

Classe-Association (UML)

On peut nommer ou non


la classe-association

Maude Manouvrier - Univ. Paris Dauphine

17

Chap. II - Modlisation

Entit Faible (E/A - Merise)


Chaque salle a un
numro unique dans un
btiment donn
Appartient

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

Maude Manouvrier - Univ. Paris Dauphine

18

Chap. II - Modlisation

Association qualifie (UML)


Chaque salle a un
numro unique dans un
btiment donn
1
Appartient

Maude Manouvrier - Univ. Paris Dauphine

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

19

Chap. II - Modlisation

Composition (UML)

Maude Manouvrier - Univ. Paris Dauphine

20

Chap. II - Modlisation

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
Maude Manouvrier - Univ. Paris Dauphine

21

Chap. II - Modlisation

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. "
Maude Manouvrier - Univ. Paris Dauphine

22

Chap. II - Modlisation

Dpendances fonctionnelles

Un attribut (ou un ensemble d'attributs) Y dpend


fonctionnellement d'un attribut (ou ensemble
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
23

Chap. II - Modlisation

Exemple de dpendances fonctionnelles


identificateur

Tous les autres attributs

Immatriculation Marque, Type, Puissance, Anne


Marque, Type, Puissance, Anne Immatriculation
Type Marque Ex. Le type "Twingo" sera toujours
associ, dans la base de donnes, la
marque "Renault".

EnseignantID Nom, Prnom, Position


Nom, Prnom, Position, Enseignant_ID
Si un numro de tlphone est associ un seul enseignant :

Telephone Enseignant_ID
24

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


suite de valeurs d'attribut dcrivant une entit/instance de classe
les nuplets d'une relation sont tous diffrents
Maude Manouvrier - Univ. Paris Dauphine

25

Chap. III - Modle relationnel

Exemple de relation
Nom dattribut

NSS
273

Nom
Prnom Fonction
Manouvrier Maude
MCF

La relation Enseignant
Nuplets ou tuples

Maude Manouvrier - Univ. Paris Dauphine

26

Chap. III - Modle relationnel

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
Maude Manouvrier - Univ. Paris Dauphine

27

Chap. III - Modle relationnel

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 Ei spcialis/classe fille


une relation Ri dans laquelle l'identifiant est de mme domaine
que l'identifiant de E
28
Maude Manouvrier - Univ. Paris Dauphine

Chap. III - Modle relationnel

Transformation des ensembles


dassociations E/A

Accidente lors
de la location

Automobiliste ( Auto_ID, Nom, Prnom, Adresse)


Accident ( Auto_ID, Nom, Prnom, Adresse,
Voiture
(Immatriculation,
Type, Puissance,
Immatriculation,
Marque,Marque,
Type, Puissance,
Anne )Anne )
Comment On
faire
le choisir
lien ? lun ou lautre comme cl primaire
peut
Maude Manouvrier - Univ. Paris Dauphine

29

Chap. III - Modle relationnel

Transformation des ensembles


dassociations UML

Accidente lors de la location

Accidente ( Auto_ID, Nom, Prnom, Adresse,


Immatriculation, Marque, Type, Puissance, Anne )
On peut choisir lun ou lautre comme cl primaire
Maude Manouvrier - Univ. Paris Dauphine

30

Chap. III - Modle relationnel

Transformation des ensembles


dassociations E/A
ou 1:N
ou 0:1

Automobiliste ( Auto_ID, Nom, Prnom, Adresse )


Voiture ( Immatriculation, Marque, Puissance, Type, Anne,
Anne )
#Auto_ID )
,
NB : #Auto_ID fait rfrence Auto_ID de Automobiliste
Maude Manouvrier - Univ. Paris Dauphine

31

Chap. III - Modle relationnel

Transformation des ensembles


dassociations UML

ou 1..*
ou 0..1

Automobiliste ( Auto_ID, Nom, Prnom, Adresse )

Voiture ( Immatriculation, Marque, Puissance, Type, Anne,


#Auto_ID )
NB : #Auto_ID fait rfrence Auto_ID de Automobiliste
Maude Manouvrier - Univ. Paris Dauphine

32

Chap. III - Modle relationnel

Transformation des ensembles


dassociations E/A

ou 1:N
ou 0:1

ou 1:M
ou 0:1

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 )
Maude Manouvrier - Univ. Paris Dauphine

33

Chap. III - Modle relationnel

Transformation des ensembles


dassociations UML
ou 1..*
ou 0..1

ou 1..*
ou 0..1

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 )
Maude Manouvrier - Univ. Paris Dauphine

34

Chap. III - Modle relationnel

Transformation des concepts


Gnralisation-Spcialisation / Hritage
Solution possible (une autre sera
donne en cours) :

Personne ( Personne_ID,
Nom,Prnom, Tlphone ... )
Enseignant ( #Personne_ID, Position )
Etudiant ( #Personne_ID, Adresse,
Ville ...)
NB : #Personne_ID dans
Enseignant et Etudiant font
rfrence Personne_ID dans
Personne
Maude Manouvrier - Univ. Paris Dauphine

35

Chap. III - Modle relationnel

Transformation des entits faibles E/A


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
Maude Manouvrier - Univ. Paris Dauphine

36

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) ;
1

#Btiment_ID fait rfrence


Btiment_ID de Btiment

Maude Manouvrier - Univ. Paris Dauphine

37

Chap. III - Modle relationnel

Transformation de la composition
UML
Voiture ( Immatriculation, Marque,
Puissance, Type, Anne )
Voi
Moteur (Numro, #Immatriculation,
Chevaux)

PotEchappement (Num_Srie,
#Immatriculation, DateInstallation)

Maude Manouvrier - Univ. Paris Dauphine

38

Chap. III - Modle


relationnel

Dpendances fonctionnelles

Ne pas oublier de dfinir les DF :


Accidente ( Auto_ID, Nom, Prnom, Adresse,
Immatriculation, Marque, Type, Puissance, Anne )
Auto_ID Nom, Prnom, Adresse
Immatriculation Marque, Type, Puissance, Anne
Type Marque
Auto_ID Immatriculation et Immatriculation Auto_ID

Voiture ( Immatriculation, Marque, Puissance, Type, Anne,


Auto_ID )
Auto_ID Immatriculation
Immatriculation Auto_ID
+ les Dpendances fonctionnelles de Voiture

Location ( Auto_ID, Immatriculation, Date )


Pas de dpendance non triviale
Maude Manouvrier - Univ. Paris Dauphine

39

Chap. III Modle relationnel

Cl
Attribut (ou ensemble dattributs) permettant didentifier de
manire unique les nuplets de la relation
Exemples :
Lattribut ISBN pour une relation Livre
Lattribut NumroImmatriculation pour une relation Voiture
Lattribut NumroCarte pour une relation Emprunteur
Par dfaut : Cration
automatiquement

dun

attribut

numrique

sincrmentant

Cl artificielle
(surrogate key)

Une cl est unique (pas deux fois la mme valeur) et a


forcment une valeur (pas de valeur null)

Maude Manouvrier - Univ. Paris Dauphine

40

Chap. III - Modle


relationnel

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 : t1, t2 nuplets dune instance de R
t1.K t2.K

Cl primaire de R : une cl minimale parmi toutes les


cls minimales possibles de R

Contraintes dintgrit rfrentielle


contrainte d'intgrit portant sur une relation R et
imposant la valeur d'une suite d'attributs d'apparatre
comme valeur de cl dans une autre relation
Maude Manouvrier - Univ. Paris Dauphine

41

Chap. III Modle relationnel

Cl trangre (1/5)
Attribut (ou ensemble dattributs) dune relation qui fait (font)
rfrence la cl primaire dune autre relation
A quoi cela sert ?

Exemple dune mauvaise relation :

Problmes :
Rptition des noms, prnoms, dates de naissances, ISBN, etc.
autant de fois quil y a demprunts = Redondance dinformation
Comment identifier les nuplets ?

Ne pas mettre toutes les donnes dans une seule relation !!!

Maude Manouvrier - Univ. Paris Dauphine

42

Chap. III Modle relationnel

Cl trangre (2/5)
La solution ? Diviser les donnes en plusieurs relations
Division en 3 relations associes : Personne, Emprunt et Livre
Stockage unique des informations de chaque livre

Stockage unique des informations de chaque emprunteur

Stockage unique des informations de chaque emprunt


[PK]

Maude Manouvrier - Univ. Paris Dauphine

43

Chap. III Modle relationnel

Cl trangre (3/5)
Relation Livre

Relation Emprunt

Relation Personne

Lattribut livre_id de la relation Emprunt est une cl trangre qui fait


rfrence lattribut livre_id de la relation Livre
Lattribut personne_id de la relation Emprunt est une cl trangre qui
fait rfrence lattribut personne_id de la relation Personne
Maude Manouvrier - Univ. Paris Dauphine

44

Chap. III Modle relationnel

Cl trangre (4/5)
Intgrit rfrentielle : Ensemble de rgles garantissant la
cohrence (l'intgrit) des donnes rparties dans plusieurs
relations
Insertion dans la relation Emprunt : autorise uniquement si on
spcifie une valeur personne_id qui existe dans la relation Personne et
une valeur livre_id qui existe dans la relation Livre
Suppression dun nuplet/Mise jour de la valeur de cl primaire dans
la relation Personne :
o Non autorise si un nuplet dans Emprunt fait rfrence au
nuplet supprim/mis jour dans Personne
o Ou autorise mais avec suppression/mise jour en cascade des
nuplets correspondant dans Emprunt
45
Maude Manouvrier - Univ. Paris Dauphine

Chap. III Modle relationnel

Cl trangre (5/5)
Insertion dans la relation o est dfinie la cl trangre : autorise
uniquement si on spcifie une valeur de cl trangre qui existe
dans la relation rfrence
Suppression dun nuplet/mise jour de la valeur de la cl
primaire dans la relation rfrence :
o Non autorise si un nuplet de la relation rfrenant fait
rfrence au nuplet supprim dans la relation rfrence
o Ou autorise mais
avec suppression/mise jour en cascade des nuplets
correspondant dans la table rfrenant ou avec
affectation dune valeur NULL
avec affectation dune valeur NULL ou dune valeur
par dfaut la cl trangre des nuplets
correspondants dans la relation rfrenant
Maude Manouvrier - Univ. Paris Dauphine

46

Chap. III - Modle


relationnel

Cl /Cl minimale /Surcl

Accident ( Auto_ID, Nom, Prnom, Adresse,


Immatriculation, Marque, Type, Puissance, Anne )
Cls minimales possibles : Auto_ID ou Immatriculation
Surcl : (Auto_ID et/ou Immatriculation) + dautres attributs

Voiture ( Immatriculation, Marque, Puissance, Type, Anne,


Auto_ID )
Cl minimale (et primaire) : Immatriculation
Surcl : (Immatriculation, Marque, Puissance, Type, Anne,Auto_ID)

Location ( Auto_ID, Immatriculation, Date )


Cl minimale (et primaire) : (Auto_ID, Immatriculation, Date)
Maude Manouvrier - Univ. Paris Dauphine

47

Chap. III - Modle


relationnel

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 imposant qu'un attribut d'une relation
comporte des valeurs vrifiant une assertion logique

Maude Manouvrier - Univ. Paris Dauphine

48

Chap. II - Modlisation

Contraintes

Contraintes dintgrit :
toutes rgles implicites ou explicites que doivent
suivre les donnes
Contraintes didentit: tout nuplet doit possder une
valeur de cl primaire unique
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
Maude Manouvrier - Univ. Paris Dauphine

49

Chap. II Modle relationnel

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 "
"La date de dbut demprunt doit tre antrieure la date de
fin demprunt"
Maude Manouvrier - Univ. Paris Dauphine

50

Cration dune base de donnes


tape N1 : Concevoir la base de donnes
= Rflchir ce que va contenir la base de donnes et
comment structurer les donnes
= Modlisation de la base de donnes
Modle conceptuel de donnes
(Modle Entit/Association ou UML - hors programme)
Dmarche :

tablir la liste des donnes devant tre stockes dans la


base
Dfinir la structure des donnes
Maude Manouvrier - Univ. Paris Dauphine

51

Cration dune base de donnes

tape N2 : Dfinir le modle relationnel


= le schma des relations de la base de donnes
Dmarche :
Pour chaque relation :
Dfinir les diffrents attributs
Dfinir la cl primaire
Pour chaque attribut de chaque relation
Dfinir le type et le domaine
Prciser les proprits (taille, format, etc.)
Quand il y a plusieurs relations : dfinir les cls
trangres
Maude Manouvrier - Univ. Paris Dauphine

52

Cration dune base de donnes

Quelques rgles

Bien rflchir aux schmas des relations et vrifier quils sont


corrects avant dy insrer des donnes
Utiliser des noms de relations et dattributs comprhensibles (penser
aux utilisateurs!!)
Choisir le type de donnes adquate pour chaque attribut
Ne pas crer dattribut de trop grande taille
Ne pas crer dattribut ayant des valeurs trop variables (ex. Age)
Spcifier toutes les contraintes de domaines (en particulier quand
lensemble de valeurs est limit), dunicit etc.
Prfrer les cls primaires de type entier et en particulier des cls
artificielles

Maude Manouvrier - Univ. Paris Dauphine

53

Cration dune base de donnes

Exemple 1:
On veut crer une base de donnes stockant des enseignants
(avec leur nom, prnom etc.) et des dpartements, chaque
enseignant appartenant un et un seul dpartement.
Modle relationnel correspondant :
Departement(Dept_ID,Nom_Dept)
Nom_Dept est unique et non NULL
Enseignant(Ens_ID,
#Dep_ID, Grade)

NUMEN,

Nom,

Prnom

#Dept_ID est une cl trangre faisant


rfrence la cl primaire de Departement
Grade {"Professeur", "MCF", "ATER" }
Email peut prendre la valeur NULL
Maude Manouvrier - Univ. Paris Dauphine

54

Cration dune base de donnes

Relation Departement

Relation Enseignant

Maude Manouvrier - Univ. Paris Dauphine

55

Cration dune base de donnes

Exemple 2:
On veut crer une base de donnes grant des noncs
dexamens et des exercices.
Quelles sont les diffrences entre les modles relationnels ?
Modle relationnel 1 :
Examen(Exam_ID, Date, Heure)
Exercice(Exo_ID, Enonc)
Contenu_Exam(#Exam_ID, #Exo_ID, Numero_Ordre)

Modle relationnel 2 :
Examen(Exam_ID, Date, Heure)
Exercice(Exo_ID, Enonc, #Exam_ID)
Maude Manouvrier - Univ. Paris Dauphine

56

Cration dune base de donnes

Exemple 3:
Relation Salle

Relation Reservation

Reservation contient une cl


trangre 2 attributs faisant
rfrence la cl primaire de
Salle

Langages dinterrogation
Algbre relationnelle
Oprations utilises par le SGBD pour valuer les requtes

Calcul relationnel variable nuplet


Fondement logique du langage SQL

Calcul relationnel variable domaine


Fondement logique des langages de requtes graphiques

SQL (Structured Query Langage)


Ces langages sont quivalents : ils permettent de
dsigner les mmes ensembles de donnes
Maude Manouvrier - Univ. Paris Dauphine

58

Requtes et langage dinterrogation


Diffrents types de requte :
o Requtes dinterrogation (Data Manipulation Language)
o Requtes dinsertion, de mise jour et de suppression des
donnes (Data Manipulation Language)
o Requtes de dfinition de schma (Data Definition
Language)
Requtes dinterrogation :
Entre : une ou plusieurs relations [+ prdicats]
Sortie : une relation temporaire (en mmoire)
Maude Manouvrier - Univ. Paris Dauphine

59

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)

(Ville= Paris ) (Etudiant)


(Ville= Paris ) (NumAnnes 2) (Etudiant)
projection : limination de certains attributs dune relation
Nom,Prnom(Etudiant)

Nom,Prnom( (Ville= Paris ) (Etudiant) )

Maude Manouvrier - Univ. Paris Dauphine

60

Exemples de rsultats doprations unaires


Relation Enseignant
:

Rsultat de la slection (grade= MCF ) (Enseignant) :

Rsultat de la projection
Nom,Prnom(Enseignant) :

Maude Manouvrier - Univ. Paris Dauphine

Rsultat de la requte
Nom,Prnom ((grade= MCF ) (Enseignant)) :

61

Chap. IV - Algbre
relationnelle

Oprations binaires

Union : { nuplet de 2 relations schma-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 : concatnation couples nuplets de 2 relations


Dpartement(Dpartement_ID, Nom_Dpartement)

Schma du Produit Cartsien de Enseignant Departement :


(Enseignant_ID, Enseignant.Dpartement_ID, Nom, Prnom, Grade,
Tlphone, Fax, Email, Dpartement.Dpartement_ID,
Nom_Dpartement)
62
Maude Manouvrier - Univ. Paris Dauphine

Chap. IV - Algbre
relationnelle

Exemple dunion et de diffrence

Nom,Prnom(Etudiant) Nom,Prnom(Enseignant) :

Nom,Prnom(Enseignant) - Nom,Prnom(Etudiant) :

Maude Manouvrier - Univ. Paris Dauphine

63

Chap. IV - Algbre
relationnelle

Produit cartsien

NSS
12345
45678

Nom
Prnom
Manouvrier Maude
Toto
Titi

Grade
MCF
Prof

Dept
1
2

La relation Enseignant
Dept_ID
1
2

Nom_Dept_
Info
Math

La relation Dpartement
NSS
12345
45678
12345
45678

Nom
Manouvrier
Toto
Manouvrier
Toto

Prnom
Maude
Titi
Maude
Titi

Grade
MCF
Prof
MCF
Prof

Dept
1
2
1
2

Dept_ID
1
1
2
2

Nom_Dept
Info
Info
Math
Math

La relation Enseignant Dpartement


Maude Manouvrier - Univ. Paris Dauphine

64

Chap. IV - Algbre
relationnelle

Autres oprations

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))
Maude Manouvrier - Univ. Paris Dauphine

65

Chap. IV - Algbre
relationnelle

Exemple de renommage et dintersection


Last_Name,First_Name(Enseignant Nom Last_Name, Prnom First_Name ) :

Nom,Prnom(Enseignant) Nom,Prnom(Etudiant) :

Maude Manouvrier - Univ. Paris Dauphine

66

Chap. IV - Algbre
relationnelle

Exemple de produit cartsien

La relation Enseignant :

La relation Departement :

Enseignement Departement :

Maude Manouvrier - Univ. Paris Dauphine

67

Chap. IV - Algbre
relationnelle

Exemple de jointure

La relation Enseignant :

La relation Departement :

Enseignement Departement_ID Departement :

Maude Manouvrier - Univ. Paris Dauphine

68

Chap. IV - Algbre
relationnelle

Division

Certaines requtes contenant 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 R - S (r)
ts nuplet de s, tr dans 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) ]


Maude Manouvrier - Univ. Paris Dauphine

69

Chap. IV - Algbre
relationnelle

Division

La relation Enseignement :

La relation
Inscription :

Etudiant_ID, Enseignement_ID, Departement_ID (Inscription) Enseignement_ID, Departement_ID (Enseignement) :

Maude Manouvrier - Univ. Paris Dauphine

70

Chap. IV - Algbre
relationnelle

Contraintes et DF

Expressions des contraintes dintgrit rfrentielle :


Dpartement_ID(Enseignant) Dpartement_ID(Dpartement)

Dpartement_ID(Enseignant) - Dpartement_ID(Dpartement) =

Expressions des dpendances fonctionnelles :

XY r et t1, t2 r on a :
t1.X = t2.X t1.Y = t2.Y

Maude Manouvrier - Univ. Paris Dauphine

71

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.att1 = valeur1
t.att1 > s.att2 ...

{t | Etudiant(t) (t.Ville= Paris ) (t.NumAnnes 2)}


{t.Nom, t.Prnom | Etudiant(t) (t.Ville= Paris) }
Maude Manouvrier - Univ. Paris Dauphine

72

Chap. V - Calcul variable nuplet

Quantificateurs

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

73

Chap. V - Calcul variable nuplet

Expression des oprateurs algbriques


(r) :

A1,A2, , An (r) :
rs:

r-s:
rs:

rs:
rs:
Maude Manouvrier - Univ. Paris Dauphine

74

Chap. V - Calcul variable nuplet

Division :

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 ?
La requte retourne les valeurs des att. Nom et Prenom des nuplets t de la relation Etudiant tq :

Quel que soit un nuplet u si


Quel que soit u, u nest pas
{{ t.Nom,
t.Nom, t.Prenom
t.Prenom // Etudiant(t)
(u) ) v cest
Etudiant(t)
[[
u
u Livre
( Livre(u)
un nuplet de Livre (i.e.
dans Livre ou (u est dans
quel que soit un livre) alors
( ( vEmprunt(v)
v Emprunt(v)
Livre et ) il existe v

(v.Etudiant_ID=t.Etudiant_ID)
(v.Etudiant_ID=t.Etudiant_ID)
(v.ISBN=u.ISBN
(v.ISBN=u.ISBN ))
)) ]
]]
}}
Il existe un nuplet v dans Emprunt
associant le livre u ltudiant t
Maude Manouvrier - Univ. Paris Dauphine

75

Chap. V - Calcul relationnel

Calcul variable domaine


{<x1,x2, xn> | P( x1 ,x2 , , xn )}
avec x1,x2, xn 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)
( m, br, d Reservation(m,br,d) (m = i) (br = b) ) ] }
Maude Manouvrier - Univ. Paris Dauphine

76

Chap. V - Calcul relationnel

QBE
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

77

Chap. V - Calcul relationnel

QBE
Etape 2 :
slection des
attributs de
la requte

Maude Manouvrier - Univ. Paris Dauphine

78

Chap. V - Calcul relationnel

QBE
Etape 3 :
possibilit
dappliquer
des fonction
dagrgation
sur les nuplets
rsultats

Maude Manouvrier - Univ. Paris Dauphine

79

Chap. V - Calcul relationnel

Expression des contraintes en logique


des prdicats
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)
)
)
}

80

Chap VI - Algbre relationnelle tendue


Projection gnralise :
ajout dexpressions arithmtiques dans une projection
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)
Maude Manouvrier - Univ. Paris Dauphine

81

Chap. VI - Algbre relationnelle tendue

Personnel
Nom_Employ
Tom
Jerry
Alex
Marthe

Personnel
]
Employ

Employ
Ville
Marseille
Paris
Limoges
Perpignan

Nom_Employ
Tom
Jerry
Alex
Marthe

Personnel
[
Employ

Maude Manouvrier - Univ. Paris Dauphine

Nom_Employ
Tom
Jerry
Sophie
Marthe

Nom_Employ
Tom
Jerry
Sophie
Marthe
Ville
Marseille
Paris
Limoges
Perpignan

Ville
Marseille
Paris
NULL
Perpignan

Filiale
SUD_EST
IDF
IDF
SUD_OUEST

Filiale
SUD_EST
IDF
NULL
SUD_OUEST

Filiale
SUD_EST
IDF
IDF
SUD_OUEST

Salaire
10000
25000
15000
12000

Salaire
10000
25000
NULL
12000

Salaire
10000
25000
15000
12000

82

Chap. VI - Algbre relationnelle tendue

Fonction dagrgation
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

Maude Manouvrier - Univ. Paris Dauphine

CountEnseignant_ID(Enseignant Dpartement)

83

Chap. VI - Algbre relationnelle tendue

Mise jour de la base


Insertion
Salle Salle {("B", "038", 15)}

Suppression
Salle Salle - Capacit 10 (Salle)

Mise jour : utilsation de la projection gnralise


r Etudiant_ID [(Nom= Dupont

) (Prnom= Jacques ) (Etudiant)]

Etudiant (Etudiant.Etudiant_ID <> r.Etudiant_ID) (Etudiant)

Mise jour du
tlphone

Etudiant_ID, Nom, Prnom, Rue, Ville, Code-Postal,


Tlphone " 06 45 12 45 86 ", Fax, Email, NumAnnes

[(Etudiant.Etudiant_ID =r.Etudiant_ID) (Etudiant) ]


Maude Manouvrier - Univ. Paris Dauphine

84

Chap. VI - Algbre relationnelle tendue

Vue
Relation virtuelle de schma et instances drivs de la base
par une requte. 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)
Maude Manouvrier - Univ. Paris Dauphine

85

Chap VII - SQL


Structured Query Language (normalis en 1986)
SQL2/SQL92 : standard adopt en 1992
SQL3/SQL99 : extension de SQL2 avec "gestion" dobjets, dclencheurs
SQL2003: auto-incrmentation des cls, colonne calcule, prise en compte de
XML,
SQL2008: correction de certains dfauts et manques (fonctions, types,
curseurs)
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 (DCL) : pour dfinir les privilges
daccs des utilisateurs
Langage de contrle des transactions (TCL) : pour grer les transactions.
Maude Manouvrier - Univ. Paris Dauphine

86

Chap. VII - SQL

DML
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 ]

Maude Manouvrier - Univ. Paris Dauphine

87

Chap. VII - SQL

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;
Maude Manouvrier - Univ. Paris Dauphine

DML
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 )

88

Chap. VII - SQL

DML

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
SELECT Intitul,
exp1 LIKE exp2
FROM Cours
exp1 IN (exp2, exp3, )
WHERE NbSeances <=
exp1 NOT IN (exp2, exp3, )
( SELECT AVG(NbSeances)
exp1 IS NULL
FROM Cours);
exp1 IS NOT NULL
Maude Manouvrier - Univ. Paris Dauphine

89

Chap. VII - SQL

DML

Clause EXISTS :
Retourne VRAI si au moins un nuplet est retourn 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

90

Chap. VII - SQL

DML

Fonctions statistique et de groupage :


COUNT, MIN, MAX, AVG, SUM, EVERY,
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

91

Chap. VII - SQL

DML

Fonctions statistique et de groupage :


EVERY retourne un boolen qui est vrai si toutes les occurrences sont vraies

SELECT date_resa, COUNT(*) FROM Reservation


GROUP BY date_resa
HAVING EVERY(date_resa <= CURRENT_DATE)
SELECT date_resa , COUNT(*) FROM Reservation
GROUP BY date_resa
HAVING EVERY(date_resa >= CURRENT_DATE)
SELECT EVERY(date_resa >= CURRENT_DATE)
FROM Reservation
SELECT EVERY(date_resa <= CURRENT_DATE)
FROM Reservation
Maude Manouvrier - Univ. Paris Dauphine

92

Chap. VII - SQL

DML

Jointure : forme gnrale


SELECT Nom, Prnom, Nom_Departement
FROM Enseignant E, Departement D
WHERE E.Departement_ID = D.Departement_ID ;

Jointure interne :
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant INNER JOIN Dpartement
ON Enseignant.Departement_ID = Departement.Departement_ID ;

Maude Manouvrier - Univ. Paris Dauphine

93

Chap. VII - SQL

DML

Jointure externe :
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant LEFT OUTER JOIN Departement ON
Enseignant.Departement_ID = Derpartement.Departement_ID ;
Sil existe des enseignants attach aucun dpartement, la valeur de
Dpartement_ID sera NULL.
En SQL2 : [RIGHT | LEFT | FULL] OUTER JOIN

Jointure naturelle :
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant NATURAL JOIN Dpartement

Produit cartsien:
SELECT Nom, Prnom, Nom_Dpartement
FROM Enseignant CROSS JOIN Dpartement
Maude Manouvrier - Univ. Paris Dauphine

94

Chap. VII - SQL

DML

Oprateurs ensemblistes : sous Oracle


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

95

Chap. VII - SQL

Division :

DML

Livre(ISBN, Titre, Editeur)


Emprunt(EmpruntID,ISBN, DateEmprunt,EtudiantID)
Etudiant(EtudiantID,Nom, Prenom)
Quels livres ont t emprunts par tous les tudiants?
{t.Titre
Etudiant
(u) (u) ) v
{t.Titre/ /Livre(t)
Livre(t)[ [uu
( Etudiant
((vvEmprunt(v)
Emprunt(v)
(v.Etudiant_ID=u.Etudiant_ID)
(v.Etudiant_ID=u.Etudiant_ID)(v.ISBN=t.ISBN
(v.ISBN=t.ISBN) )
))
]]
Il ny a pas de mot-cl
}}
"quel que soit " en SQL2
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
)
);
Maude Manouvrier - Univ. Paris Dauphine

96

Chap. VII - SQL

DML

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


Maude Manouvrier - Univ. Paris Dauphine

97

Chap. VII - SQL

DDL

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

98

Chap. VII - SQL

DDL

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
Contrainte
de domaine
CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')),
Telephone
varchar(10) DEFAULT NULL,
Fax
varchar(10) DEFAULT NULL,
Email
varchar(100) DEFAULT NULL,
Dfinition de la
CONSTRAINT PK_Enseignant PRIMARY KEY (Enseignant_ID),
cl primaire
CONSTRAINT "FK_Enseignant_Departement_ID"
FOREIGN KEY (Departement_ID)
Dfinition dune cl
REFERENCES Departement (Departement_ID)
trangre
ON UPDATE RESTRICT ON DELETE RESTRICT
);
99

Maude Manouvrier - Univ. Paris Dauphine

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)
10
);

Chap. VII - SQL

DDL

MATCH SIMPLE/PARTIAL/FULL:
CREATE TABLE inscription(
inscription_id serial NOT NULL,
etudiant_id integer,
enseignement_id integer,
master_id integer,
CONSTRAINT pk_inscription PRIMARY KEY (inscription_id ),
CONSTRAINT "FK_Inscription_Enseignement"
FOREIGN KEY (enseignement_id, master_id)
REFERENCES enseignement (enseignement_id, master_id)
MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT "FK_Inscription_Etudiant" FOREIGN KEY (etudiant_id)
REFERENCES etudiant (etudiant_id) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT "UN_Inscription" UNIQUE (etudiant_id ,
enseignement_id , master_id )
)

Maude Manouvrier - Univ. Paris Dauphine

10

Chap. VII - SQL

DDL

MATCH SIMPLE/PARTIAL/FULL :

MATCH SIMPLE (par dfaut) :


violation si toutes les valeurs sont la fois divergentes et renseignes
INSERT INTO INSCRIPTION VALUES (3,2,NULL,NULL) OK
INSERT INTO INSCRIPTION VALUES (4,2,3,NULL) OK
mme si pas denseignement_id 3 dans la table enseignement
INSERT INTO INSCRIPTION VALUES (5,2,NULL,1) OK
INSERT INTO INSCRIPTION VALUES (6,2,3,4) KO
car la cl (enseignement_id, master_id)=(3, 4) n'est pas prsente dans la table enseignement

MATCH PARTIAL : violation si une seule des valeurs divergent


INSERT INTO INSCRIPTION VALUES (4,2,3,NULL) KO
car pas denseignement_id 3 dans la table enseignement

MATCH FULL : violation si toutes les valeurs divergent ou si une colonne est renseigne et
lautre non
INSERT INTO INSCRIPTION VALUES (3,2,NULL,NULL) OK
INSERT INTO INSCRIPTION VALUES (4,2,1,NULL) KO
mme si enseignement_id 1 existe dans la table enseignement

Maude Manouvrier - Univ. Paris Dauphine

10

Chap. VII - SQL

DDL

Hritage de table (norme SQL99) :


CREATE TABLE Personne
( PID Integer,
Nom
varchar(25) NOT NULL,
Prenom
varchar(25) NOT NULL,
CONSTRAINT PK_Personne PRIMARY KEY (PID),
)

Tables hrites de Personne :


CREATE TABLE Etudiant UNDER Personne
( NumCarte varchar(25) NOT NULL)

CREATE TABLE Enseignant UNDER Personne


( Grade
varchar(25)
CONSTRAINT CK_Enseignant_Grade
CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF'))
)
Maude Manouvrier - Univ. Paris Dauphine

10

Chap. VII - SQL

DDL

Colonne calcule (norme SQL2003) :


CREATE TABLE Etudiant
(
Etudiant_ID integer,
Ville
varchar(25),
Nom
varchar(25) NOT NULL,
Prenom
varchar(25) NOT NULL,
Date_Naissance date NOT NULL,
Rue
varchar(50) DEFAULT NULL,
CP
varchar(9) DEFAULT NULL,
Adresse GENERATED ALWAYS AS (rue || || CP || || Ville)
Telephone
varchar(10) DEFAULT NULL,
Fax
varchar(10) DEFAULT NULL,
Email
varchar(100) DEFAULT NULL,
CONSTRAINT PK_Etudiant PRIMARY KEY (Etudiant_ID)
);
Maude Manouvrier - Univ. Paris Dauphine

10

Chap. VII - SQL

DDL

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

10

Chap. VII - SQL

DDL

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

10

Chap. VII - SQL

DDL

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

10

Chap. VII - SQL

DDL

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

10

Chap. VII - SQL

DDL

Sous PostgreSQL :
CREATE OR REPLACE FUNCTION GetSalleCapaciteSuperieurA(int)
RETURNS SETOF Salle
AS '
SELECT * FROM Salle WHERE Capacite > $1;
'
LANGUAGE SQL;
SELECT * FROM GetSalleCapaciteSuperieurA(300) ;

Maude Manouvrier - Univ. Paris Dauphine

10

Chap. VII - SQL

DDL

CREATE OR REPLACE FUNCTION FunctionTriggerReservation()


RETURNS trigger AS
' DECLARE
resa Reservation.Reservation_ID%TYPE;
BEGIN
SELECT INTO resa Reservation_ID
FROM Reservation
WHERE
IF FOUND THEN RAISE EXCEPTION ''Rservation impossible, salle
occupe la date et aux horaires demands'';
ELSE RETURN NEW;
END IF;
END;'
LANGUAGE 'plpgsql';
11
Maude Manouvrier - Univ. Paris Dauphine

Chap. VII - SQL

DDL

Sous PostgreSQL :

CREATE TRIGGER InsertionReservation


BEFORE INSERT ON Reservation
FOR EACH ROW
EXECUTE PROCEDURE
FunctionTriggerReservation();

Maude Manouvrier - Univ. Paris Dauphine

11

Chap. VII - SQL

DDL

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

11

Chap. VII - SQL

Embedded SQL

Utilisation de commandes SQL lintrieur dun langage hte :


Commandes SQL remplaces par des appels 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

11

Chap. VII - SQL

Embedded 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

11

Chap. VII - SQL

Embedded 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

11

Chap. IV - SQL

Middleware daccs
aux bases de donnes

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

11

Chap. IV - SQL

JDBC/ODBC

Appel des fonctions de lAPI :


lien entre lapplication et le gestionnaire de pilotes
Pilote = librairie contenant les appels JDBC/ODBC
et traduisant les requtes en requtes propres au
SGBD
Gestionnaire de pilotes (ODBC) = librairie
chargeant les pilotes associs chaque source de
donnes (BD + SGBD)

Maude Manouvrier - Univ. Paris Dauphine

11

Chap. IV - SQL

JDBC
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;
//
Statement
sql=null; //
DatabaseMetaData dbmd;
//
//

Maude Manouvrier - Univ. Paris Dauphine

Variable de connexion
Variable pour un ordre SQL
Mta-donnes ncessaires
au pilote.

11

Chap. IV - SQL

JDBC

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

11

Chap. IV - SQL

JDBC

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

12

Chap. IV - SQL

JDBC

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

12

Chap. IV - SQL

JDBC

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

12

Chap. VII - SQL

ODBC
Appel des fonctions de lAPI ODBC :

lien entre application et gestionnaire de pilotes


Gestionnaire de pilotes = DLL chargeant les pilotes
associs chaque source de donnes (BD + SGBD)
Pilote = DLL contenant les appels ODBC et traduisant
les requtes en requtes propres au SGBD

Maude Manouvrier - Univ. Paris Dauphine

123

Chap. VII - SQL

Maude Manouvrier - Univ. Paris Dauphine

ODBC

124

Chap. VII - SQL

ODBC
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;
HDBC d_connex;
HSTMT curseur;
RETCODE retcode;
Maude Manouvrier - Univ. Paris Dauphine

/*
/*
/*
/*

Descripteur d'environnement
Descripteur de connexion
Curseur
Code de retour de fonction

*/
*/
*/
*/

125

Chap. VII - SQL

ODBC

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

126

Chap. VII - SQL

ODBC

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

127

Chap. VII - SQL

ODBC

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

128

Chap. VII - SQL

ODBC

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

129

Chap VIII - Dpendances fonctionnelles


Dpendance fonctionnelle sur R
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 de
A1, 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, , An
Maude Manouvrier - Univ. Paris Dauphine

130

Chap. VIII - DF

Rgles

Axiomes de Amstrong :
Rflexivit : si Y X alors X Y
Augmentation : Si X Y alors Z XZ YZ
Transitivit :
Si X Y et Y Z alors X Z

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

131

Chap. VIII - DF

Fermeture

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

132

Chap. VIII - DF

Equivalence et Couverture

Deux familles de dpendances fonctionnelles F et G sont


quivalentes si F+ = G+

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


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 X tels que


(F \ {X A }) {Z A } soit quivalente F

Attention: pas dunicit des couvertures minimales


Maude Manouvrier - Univ. Paris Dauphine

133

Chap. VIII - DF

Cl

Soit R(A1, A2, , An) et F une famille de DF sur R


Un sous-ensemble X de {A1, A2, , An} est une cl
minimale de R si
La dpendance fonctionnelle X A1, A2, , An F+

Y X, on a pas Y A1, A2, , An


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

134

Chap IX - Dcomposition de schma


Dcomposition sans perte dinformation (Lossless jointure)
La dcomposition de R en R1, R2, .., Rn est sans perte
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 FRi = {X Y, XY Ri
et X Y F+}
135

Chap. IX - Dcomposition

Dcomposition SPI

n
i 1

n
i 1

(
r
)
?
R
i

(
r
)
?
R

Soit t (a1,a2 ,..., an ), un nuplet gnrique issu de in1R (r )

t est construit partir de t1 t 2...t n


avec t1 R (r )

t 2 R ( r )
2

...

Est - ce - que t r ?

t n R ( r )
n

Maude Manouvrier - Univ. Paris Dauphine

136

Chap. IX - Dcomposition

Dcomposition SPD
Association dune famille Fi chaque sousrelation Ri
Calcul des Fi partir de F+ :

X Y F+ et XY Ri X Y Fi
Perte de dpendances
X Y F tq X Y [ X ]

Fi

[ X ] F calcul itrativement par X [( X Ri ) R j ]


i

Maude Manouvrier - Univ. Paris Dauphine

137

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 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 ne
prserve pas les dpendances fonctionnelles
Maude Manouvrier - Univ. Paris Dauphine

138

Chap. X - Formes normales

3me forme normale


Un schma de relation est 3NF si :
A, attribut une cl,
A ne dpend pas dun ensemble dattributs qui nest pas une cl
(i.e. pas de dpendance transitive ni de dpendance partielle)

X A est partielle si X est une partie de cl et A ne lest pas


X A 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
Maude Manouvrier - Univ. Paris Dauphine

139

Chap. X - Formes normales

3me forme normale


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

140

Chap. X - Formes normales

1re, 2me et 3me 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 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 )
Maude Manouvrier - Univ. Paris Dauphine

141

S-ar putea să vă placă și