Вы находитесь на странице: 1из 102

Laurent BRISSON

Dpartement LUSSI
laurent.brisson@telecom-bretagne.eu

Systme dinformation et bases


de donnes
UV Mineure Informatique
Support de TD et de TP Automne 2013

[BASES DE DONNEES RELATIONNELLES]

v3.3

Ce support de cours est diffus sous licence Creative Commons BY NC SA.


http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
Vous tes libres :

de reproduire, distribuer et communiquer cette cration au public


de modifier cette cration

Selon les conditions suivantes :


Paternit : Vous devez citer le nom de l'auteur original de la manire indique par l'auteur de l'oeuvre ou le
titulaire des droits qui vous confre cette autorisation (mais pas d'une manire qui suggrerait qu'ils vous
soutiennent ou approuvent votre utilisation de l'oeuvre).
Pas d'Utilisation Commerciale : Vous n'avez pas le droit d'utiliser cette cration des fins commerciales.
Partage des Conditions Initiales l'Identique : Si vous modifiez, transformez ou adaptez cette cration, vous
n'avez le droit de distribuer la cration qui en rsulte que sous un contrat identique celui-ci.

Laurent BRISSON

[BASES DE DONNEES RELATIONNELLES]

v3.3

SOMMAIRE

1. Organisation du module

iii

2. Grilles dvaluation critries

vii

3. De la gestion des donnes aux systmes dinformation

4. TD Modle relationnel et intgrit des donnes

5. TD Introduction au langage SQL

15

6. TP Le langage SQL

19

7. TD Thorie de la normalisation

28

8. TP Transactions

37

9. TD Modlisation conceptuelle

49

10. TD Mapping objet-relationnel

53

11. TP Introduction Hibernate

56

12. Projet Gestion dune bibliothque

70

13. Projet Guide de dmarrage

74

14. Guide de prise en main dOracle

86

Laurent BRISSON

ii

[BASES DE DONNEES RELATIONNELLES]

ORGANISATION DU MODULE
DESCRIPTION GNRALE DE L'ENSEIGNEMENT
L'enseignement ddi la gestion de donnes persistantes et la prsentation des systmes de
gestion de bases de donnes relationnels sinscrit donc clairement dans le contexte technique de
linformatique. Lobjectif de ces cours est de comprendre les principes de la gestion de donnes
persistantes1, dans un contexte de volumtrie importante, ce quon appelle aussi le passage
lchelle (scaling en anglais).
En effet, la prise en compte de cette volumtrie, difficile traiter dans un contexte scolaire, est un
lment dterminant pour les solutions mises en uvre. Dans le contexte des bases de donnes, on
suppose, contrairement ce qui est usuellement fait en algorithmique, que les donnes ne tiennent
pas en mmoire2 ou prsentent des contraintes fortes en terme de stockage (comparez la taille des
disques durs et celle des mmoires). Cette hypothse, et le fait que le temps daccs la mmoire de
masse est beaucoup plus important que le temps daccs la mmoire vive, explique que les
performances des traitements sur une base de donnes dpendent davantage du nombre dentres
sorties entre la mmoire et le disque (ou quivalent), que du nombre doprations ralises en
mmoire.
Compte tenu de cette situation, le programme de cours constitue la fois une formation
lutilisation dune base de donnes relationnelle (conception de donnes [2, ch16, p439-458][5],
transactions ACID [4, ch14, p463-479].) et des standards de la gestion de donnes (SQL [7]), mais
aussi une rflexion plus gnrale sur la nature des problmes lis la gestion de donnes
persistantes dans les systmes d'information, et quelques-unes des limites des solutions et standards
actuels. Cette rflexion doit permettre aux tudiants de ne pas rester bloqus sur la technologie du
moment, (technologie relationnelle) mme si elle est aujourdhui omniprsente, et de savoir
transposer leur raisonnement des variations autour du problme plus global de la gestion de
donnes .
En terme de comptences, cet enseignement participe l'acquisition, par les tudiants de la capacit
analyser la problmatique Data d'un systme, d'identifier une solution, de la mettre en uvre et
de l'valuer. La figure 1, ci-dessous, vous permet de situer ces objectifs (FIG INF 301, FIP INF 210)

1 Ce terme dsigne le fait que les donnes persistent lexcution des applications qui les manipulent.
2 Un champ de recherche en bases de donnes sintresse la problmatique des BD grande mmoire dans
lesquelles le volume des donnes ne dpasse pas la capacit de la mmoire.

Laurent BRISSON

iii

v3.3

[BASES DE DONNEES RELATIONNELLES]


selon ces quatre dimensions, sachant que l'objectif de ce cours correspond aux fondamentaux, et
que les niveaux Maitrise et Expertise pourront tre acquis plus tard, via des enseignements plus
avancs ou des projets scolaires, personnels ou professionnels.

Objectif de
formation

Maitriser la gestion des donnes persistantes d'un systme


Fondamentaux

Analyse de la
problmatique

Analyse qualitative de la
problmatique data d'un
systme

Identification
d'une solution

Connaitre un SGBD R et
justifier son choix par
rapport une solution de
type fichier

Mise en uvre
d'une solution

valuation de la
solution

Crer un schma adapt


au problme, administrer
simplement ce schma et
ses donnes, dvelopper
une application simple
Tester le schma
(contraintes
essentiellement) via des
requtes et via
l'application

Maitrise
Analyse qualitative et
quantitative de la
problmatique
donnes d'un systme
Connaitre au moins 2 types
de modles (relationnel,
objet, OLAP) et de
systmes et faire un choix
justifi en relation avec les
exigences qualitatives et
quantitatives

Expertise
Identification de
nouvelles exigences
non couvertes
prcdemment
Auto acquisition de
connaissances sur des
solutions potentielles
et les systmes associs
(composants,
architecture)

Installer le systme et
l'intgrer aux autres
composants ncessaires

Mettre en uvre les


composants
slectionns au sein de
l'architecture du
systme-cible

Mettre en uvre une


approche systmatique de
tests des aspects qualitatifs
et quantitatifs identifis

Mettre en uvre une


approche de type
benchmark

Figure 1 : Positionnement des objectifs de l'enseignement de bases de donnes

Laurent BRISSON

iv

v3.3

[BASES DE DONNEES RELATIONNELLES]


PDAGOGIE
Lenseignement de ce module Bases de donnes relationnelles est fond sur la pratique et le
travail en groupe. Il est constitu de :

13h30 de travaux dirigs


10h30 de travaux pratiques
9h de projet en BE encadr

La pdagogie mise en uvre dans le cadre de ce module est fonde sur un apprentissage actif. Vous
pouvez remarquer quil ny a aucun cours magistral, ce qui ne veut pas dire que vous allez apprendre
moins mais que vous allez devoir apprendre par vous-mme.
Les cours magistraux ont donc disparu, mais des focus sur des notions prcises seront donc possibles
en petits groupes, sur votre demande.
EVALUATION
La note de contrle continu de ce module est obtenue au moyen lors dune valuation orale portant
sur les objectifs de lUV (voir grilles dvaluation ci-aprs) en se basant sur le travail ralis lors du
projet.
DROULEMENT DES SANCES
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

5 septembre matin - Introduction de lUV Mineure Informatique [TD 1h30]


8 octobre matin - Modle relationnel et intgrit des donnes [TD 1h30]
8 octobre aprs-midi - SQL [TD 1h30]
8 octobre aprs-midi - SQL 1re partie [TP 1h30]
15 octobre aprs-midi - SQL 2me partie [TP 3h00]
22 octobre matin - Normalisation [TD 3h]
8 novembre matin - Transactions [TP 3h]
12 novembre matin - Modlisation conceptuelle [TD 3h]
26 novembre matin - Contrle continu [1h30]
26 novembre matin - Kick-off projet [BE 1h30]
26 novembre aprs-midi - Projet [BE 3h]
4 dcembre matin - Projet [BE 3h]
10 dcembre matin - Mapping Objet-relationnel [TD 3h00]
10 dcembre aprs-midi - Introduction hibernate [TP 3h00]
17 dcembre matin - Projet [BE 1h30]
17 dcembre aprs-midi Contrle continu [CC 3h00]

Laurent BRISSON

v3.3

[BASES DE DONNEES RELATIONNELLES]

Laurent BRISSON

vi

v3.3

[BASES DE DONNEES RELATIONNELLES]


GRILLES DEVALUATION CRITERIEES

L'tudiant est capable d'illustrer les notions de SI et de SGBD, y compris relationnel.

Critre
Comprhension
gnrale d'un SI

Comprhension
gnrale d'un
SGBD

Comprhension
gnrale d'un
SGBD
Relationnel

A
Niveau B + L'tudiant a
un regard critique sur
l'exemple qu'il a fourni.
Il est capable d'en
dcrire les forces et les
faiblesses et de les
rapprocher de
problmatiques
d'ingnierie actuelles
(par exemple
architecture et
urbanisme, SI
dcisionnels ou
transactionnels).
Niveau B + L'tudiant a
des connaissances
gnrales sur la place
des SGBD au sein des
systmes d'information.

Niveau B + L'tudiant a
une visibilit sur
quelques modles
alternatifs aux SGBD
relationnels et sur leur
intrt.

B
Niveau C + L'tudiant
sait illustrer la notion
de SI par un exemple
de son choix. Il est
capable de dcrire
succinctement
quelques
composants de ce
systme et leurs
interactions.

C
L'tudiant peut
fournir les
dfinitions des
principaux termes
associs aux SI, les
commenter et
ragir des
exemples proposs.

D
L'tudiant ne peut
fournir les
dfinitions des
principaux termes
associs aux SI, les
commenter et ragir
des exemples
proposs.

Niveau C + L'tudiant
sait justifier
qualitativement
(volumtrie, partage,
complexit,
standardisation) le
recours une
solution de type
SGBD par rapport
un simple stockage
fichier.
Niveau C + L'tudiant
sait justifier l'intrt
du modle
relationnel en
s'appuyant sur le
principe
d'indpendance des
donnes.

L'tudiant peut
fournir une
dfinition d'un
SGBD, connait le
principe
d'indpendance des
donnes et peut
citer le nom de
quelques systmes
existants.

L'tudiant ne peut
pas fournir une
dfinition d'un
SGBD, ne connait
pas le principe
d'indpendance des
donnes ou ne peut
pas citer le nom de
quelques systmes
existants.

L'tudiant peut
dcrire ce qui
caractrise le
modle relationnel,
il connait la date de
son apparition et le
nom de quelques
SGBDR utiliss
aujourd'hui.

L'tudiant ne peut
pas dcrire ce qui
caractrise le
modle relationnel,
il ne connait pas la
date de son
apparition ou le nom
de quelques SGBDR
utiliss aujourd'hui.

Laurent BRISSON

vii

v3.3

[BASES DE DONNEES RELATIONNELLES]


L'tudiant est capable, d'exprimer sous forme d'une requte SQL de qualit* une question exprime en
franais.
Critre

A
L'tudiant russit
crire, de manire
cohrente avec la
question, toutes les
Cohrence requtes complexes
utilisant negation,
imbrication,
regroupement ou
auto-jointure.
Justification en
utilisant un autre
modle formel
Justification
(algbre relationnel
ou logique du 1er
ordre).
Minimalit

Qualit de
la syntaxe

B
L'tudiant russit
crire, de manire
cohrente avec la
question, la moiti des
requtes complexes
utilisant negation,
imbrication,
regroupement ou autojointure.

Justification complte
et comprhensible.

L'tudiant russit
crire, de manire
cohrente avec la
question, une requte
simple ncessitant une
jointure.

L'tudiant n'est pas


capable d'effectuer
une restriction ou
une jointure.

Justification
comprhensible mais
incomplte.

Simple affirmation ou
justification non
comprhensible.

L'tudiant a montr
L'tudiant crit
L'tudiant crit
qu'il sait crit
minimalement toutes minimalement la moiti
minimalement au
les requtes.
des requtes.
moins une requte.
Certains des mots cls
La syntaxe est
parfaitement
suivants sont mal
Certains des mots cls
respecte, y compris
utiliss ou (exclusif) ne
suivants sont mal
pour les commandes
sont pas dans l'ordre :
utiliss et ne sont pas
SELECT, UPDATE,
de modification de
dans l'ordre : GROUP
DELETE, INSERT,
schma, ou de
BY, HAVING, EXISTS, IN.
dfinition de droits
FROM, WHERE, LIKE,
d'accs.
ORDER BY.

L'tudiant crit
minimalement
aucune de ses
requtes.
Certains des mots
cls suivants sont mal
utiliss et ne sont pas
dans l'ordre : SELECT,
FROM, WHERE, LIKE,
ORDER BY.

Laurent BRISSON

viii

v3.3

[BASES DE DONNEES RELATIONNELLES]


L'tudiant est capable d'analyser et rsoudre les problmatiques d'intgrit et de confidentialit dans une
base de donnes relationnelle simple.
Critre

Avoir un regard
pertinent sur la
problmatique
d'intgrit et de
partage des
donnes

Niveau B + L'tudiant
est capable d'utiliser
les diffrents niveaux
d'isolation prvus par
SQL pour expliquer le
comportement du
SGBD.

Niveau C + L'tudiant
est capable d'illustrer
les notions lies
l'isolation :
srialisation,
verrouillage,
transactions bien
formes et
interblocage.

Niveau C + L'tudiant
est capable d'identifier
et justifier
formellement (au
Niveau B + L'tudiant
moyen des
est capable de
dpendances
justifier l'usage
fonctionnelles) la
complmentaire aux
totalit des
contraintes de cls
Maintenir
contraintes de cls
primaires et
l'intgrit de la
primaires d'un schma
base de donnes rfrentielles des
relationnel. Identifier
contraintes de non
et justifier
nullit et de
formellement la
contrainte sur valeur
prservation des
d'attribut (CHECK).
donnes et des
dpendances
fonctionnelles si
possible.

C
L'tudiant est
capable d'utiliser la
terminologie de
base des
transactions
(validation /
commit, abandon /
rollback) et illustrer
les proprits de
l'acronyme ACID.

L'tudiant est
capable d'illustrer la
problmatique
d'intgrit en
prsence de
redondance,
d'identifier et de
justifier
intuitivement la
moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

L'tudiant n'est pas


capable d'illustrer la
problmatique
d'intgrit en
prsence de
redondance ou ne
sait pas identifier et
justifier
intuitivement la
moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

L'tudiant ne
matrise pas la
terminologie de base
ou ne sait pas
illustrer les
proprits de
l'acronyme ACID.

Laurent BRISSON

ix

v3.3

[BASES DE DONNEES RELATIONNELLES]


L'tudiant est capable, partir dun texte inconnu d'une demi-page dcrivant les informations manipules
dans un cadre professionnel, de raliser un modle conceptuel de donnes cohrent* et la drivation
associe.
Critre

Element
L'tudiant ne fait
notation UML aucune erreur.

Identification
des concepts

Identification
des
associations

Choix des
cardinalits

Identification
de l'hritage

Rgles de
drivation

L'tudiant identifie tous


les concepts du
problme et leurs
proprits. Il peut
ventuellement avoir
ajout 1 ou 2 concepts
"superflus" et oubli
une ou deux proprits.
L'tudiant est capable
de dfinir correctement
toutes les associations
dans un cas complexe
(arit suprieure ou
gale 3, reflexivit,
notion de temps,
d'ordre ou de
hierarchie).

Un des lments de la
notation est erron.

Les erreurs
montrent que
plusieurs lments
de la notation ne
sont pas acquis mais
le schma conserve
toujours un sens.

Le schma possde
tellement d'erreurs
qu'il en perd son
sens ou l'tudiant
confond un
diagramme de
classe et un schma
conceptuel de
donnes.

L'tudiant identifie trop


de concepts superflus
ou a oubli un des
concepts du problme. Il
peut ventuellement
avoir oubli quelques
proprits.

Deux concepts du
problme sont
oublis ou toutes
les proprits sont
absentes.

La majeure partie
des concepts sont
errons.

L'tudiant est
capable de dfinir
les associations
binaires dans un cas
simple.

L'tudiant se
trompe dans les
concepts concerns
dans la majorit des
associations.

L'tudiant a fait des


erreurs dans les
cardinalits des
associations
binaires mais ne
confond
gnralement pas
les associations 1-N
et N-N.

L'tudiant a fait des


erreurs concernant
les cardinalits des
associations
binaires montrant
qu'il n'a pas saisi la
distinction entre les
associations 1-N et
N-N.
L'tudiant invente
au moins un lien
d'hritage qui
n'existe pas, ou en
a oubli la majorit.

L'tudiant est capable


de dfinir correctement
la majorit des
associations dans un cas
complexe (arit
suprieure ou gale 3,
reflexivit, notion de
temps, d'ordre ou de
hierarchie).
L'tudiant a fait des
erreurs dans les
L'tudiant est capable
cardinalits mais est
de dfinir correctement capable dans la majorit
toutes les cardinalits, des cas de diffrencier
une erreur d'tourderie les associations 1-1, 1-N
et N-N, et de choisir les
est accepte.
bonnes cardinalits
minimales.
L'tudiant identifie
L'tudiant identifie
correctement les liens
correctement l'hritage
d'hritage mais ne
et indique s'il est
prcise pas s'ils sont
inclusif ou exclusif.
inclusifs ou exclusifs.
L'tudiant fait des
erreurs en drivant
Toutes les drivations
l'hritage, une
sont correctes.
association 1-1 ou une
association ternaire.

L'tudiant identifie
correctement la
majorit des liens
d'hritages.
L'tudiant fait des
erreurs en drivant
une association 1-N
ou N-N.

L'tudiant fait des


erreurs en drivant
les associations 1-N
et N-N.

Laurent BRISSON

v3.3

[BASES DE DONNEES RELATIONNELLES]

L'tudiant est capable de produire une dcomposition en justifiant formellement de sa qualit* sur un
schma relationnel simple d'une vingtaine d'attributs maximums.

Critre

B
L'tudiant sait
L'tudiant sait traduire, traduire des
avec le bon formalisme, hypothses en une
Identifier les
des hypothses en une srie de
dpendances
srie de dpendances
dpendances
fonctionnelles
fonctionnelles
fonctionnelles, une
lmentaires.
faute d'tourderie
est admise.
Niveau B + L'tudiant
Niveau C + L'tudiant
sait dduire les cls
sait dduire les cls
composites d'une
Identifier les cls
d'une relation
relation partir d'un
d'une relation
partir d'un ensemble
ensemble de
de dpendances
dpendances
fonctionnelles.
fonctionnelles.

Qualifier une
relation

Appliquer un
algorithme de
dcomposition
sur une relation

Qualifier une
dcomposition

L'tudiant donne une


argumentation
complte pour justifier
la qualit des relations.
Niveau B + L'tudiant
sait utiliser l'algorithme
sur un ensemble de
dpendances
fonctionnelles
complexes (multiplicit
des couvertures
minimales, sources
multiples, etc.).
Niveau B + L'tudiant
maitrise la proprit de
prservation des
dpendances
fonctionnelles d'une
dcomposition et sait
l'illustrer sur un
exemple.

L'tudiant fait une


erreur
d'interprtation des
hypothses mais sait
exprimer une srie de
dpendances
fonctionnelles.

L'tudiant ne sait
pas dfinir une
srie de
dpendances
fonctionnelles.

L'tudiant est capable


L'tudiant ne
de dfinir la notion
comprend pas le
de cl de manire
concept de cl.
intuitive.

L'tudiant sait
justifier la qualit des
relations mais son
argumentation est
incomplte.

L'tudiant connait les


dfinitions des
formes normales
mais ne sait pas du
tout les appliquer.

L'tudiant ne
connait pas les
dfinitions des 3
premires formes
normales.

Niveau C + L'tudiant
connat les cas
limites d'utilisation
de l'algorithme
(garantie de la
prservation des
donnes, etc.).

L'tudiant sait
appliquer
l'algorithme sur un
exemple simple.

L'tudiant ne sait
pas appliquer ces
algorithmes.

Niveau C + L'tudiant
matrise la proprit
de prservation des
donnes d'une
dcomposition et sait
la justifier sur un
exemple.

L'tudiant sait
identifier une
dcomposition et
produire ses
instances partir de
l'instance de la
relation universelle.

L'tudiant ne sait
pas identifier une
dcomposition
d'une relation
universelle.

Laurent BRISSON

xi

v3.3

[BASES DE DONNEES RELATIONNELLES]

L'tudiant est capable de comprendre les aspects systmes (architecture, contraintes d'intgrit) lies la
problmatique de gestion des donnes.
Critre

Architecture
multiniveaux

L'tudiant utilise la
bonne terminologie et
son argumentation est
parfaite.

L'tudiant est capable


d'expliquer le rle de la
majorit des
composants.

L'tudiant sait illustrer


ce qu'est une
architecture multiniveaux et quelques
exemples pour
l'expliquer.

L'tudiant ne
comprend pas le
concept
d'architecture
multi-niveaux.

Contraintes
d'intgrit

L'tudiant sait justifier


pourquoi une
contrainte d'intgrit
doit tre prise en
compte un niveau
spcifique de
l'architecture.

L'tudiant est capable


de comprendre que les
contraintes d'intgrit
ne peuvent tre prise en
compte n'importe quel
niveau de l'architecture.

L'tudiant ne
comprend pas que les
contraintes d'intgrit
peuvent tre gres
diffrents niveaux de
l'architecture.

L'tudiant ne
comprend pas la
notion de
contrainte
d'intgrit.

L'tudiant est capable d'utiliser efficacement* une technique de programmation permettant de dvelopper
une application simple accdant une base de donnes relationnelle.
Critre

D
L'tudiant ne
comprend pas
comment le
programme
connait la base
de donnes
laquelle se
connecter.

Savoir se
connecter une
base de donnes
(BD, Schema,
Driver, port,
machine)

Niveau B + L'tudiant sait


expliquer comment crire
un programme accdant
plusieurs bases de
donnes relationnelles.

Niveau C +
L'tudiant sait
expliquer le rle
des diffrentes
informations
fournies pour la
connexion.

L'tudiant sait
identifier le code o
est spcifie la chaine
de connexion et ses
composantes.

Ecrire une
requte
dynamique en
JDBC (passage
des variables,
distinguer le
type)

Niveau C +
L'tudiant connait
Niveau B + L'tudiant
les diffrentes
connat l'intrt de passer classes de requtes
par la classe
(pas uniquement
PreparedStatement.
Statement) et sait
analyser les
exceptions.

L'tudiant est capable


d'expliquer quoi sert
la classe Statement
(ou une autre classe
permettant
d'interroger les
donnes) partir d'un
exemple de code
l'utilisant.

Ne connait
aucune des
classes
permettant
d'interroger une
base de donnes
en JDBC.

Analyser un
rsultat
(comprendre la
notion curseur,
rcuprer les
donnes)

Niveau C +
L'tudiant sait
utiliser la classe
Niveau B + L'tudiant
ResultSet, y
comprend la
compris pour des
correspondance entre
traitements
types relationnels et Java.
avancs (tests de
valeur NULL, par
exemple).

L'tudiant est capable


d'expliquer le terme
de curseur partir
d'un exemple de code
avec une requte
JDBC.

Ne connait pas le
terme de
curseur.

Laurent BRISSON

xii

v3.3

[DE LA GESTION DE DONNEES AUX SYSTEMES


D'INFORMATION]

v3.9

DE LA GESTION DE DONNEES AUX


SYSTEMES DINFORMATION
I.

CONTEXTE

Suite la seconde guerre mondiale, le dveloppement de linformatique a trs vite pos le problme de la
conservation et de laccs aux donnes. cette poque, un des principaux dfis tait la conservation et
1
l'intgrit des donnes : Il fallait viter quune panne de courant intervenant pendant un traitement laisse les
donnes stockes dans un tat inconnu, ou quun incendie dtruise dfinitivement les donnes accumules
(exigeant des solutions complexes au niveau de la sauvegarde). Le deuxime dfi rsidait dans les temps
d'accs, compte tenu des tailles mmoire : quelques centaines d'octets pour des donnes stockes qui
occupaient dj quelques mga octets (un catalogue de produits, 1 liste d'employs, 1 srie de virements
2
effectuer, etc.) .
Avec le dveloppement des systmes dexploitation temps partag, dans lesquels les utilisateurs accdaient
presque simultanment aux ressources, s'est pos le problme de la gestion de laccs concurrent aux
donnes par diffrents utilisateurs ou diffrentes applications, spcialement quand ceux-ci modifiaient les
donnes. Aujourdhui, les proprits exiges en cas d'accs concurrents sont bien connues et dsignes par
lacronyme ACID (Atomicit, Cohrence, Isolation, Durabilit). Elles caractrisent la notion de transaction. Le
cadre transactionnel a sans nul doute t un des lments fondateurs des systmes de gestion de bases de
donnes (SGBD) actuels [3, ch1, p1-10]. Dans les annes soixante, lapparition dordinateurs mainframe
intgrant directement dans leur systmes dexploitation des mcanismes transactionnels a rpondu aux
besoins de performances d'une informatique de gestion essentiellement caractrise par un trs fort dbit
transactionnel (nombre de transactions par seconde). Pousss par des acteurs riches et influents (tels les
banques) et leurs applications exigeantes en terme de dbit transactionnel (applications OLTP pour On Line
3
Transaction Processing), valus par des organismes indpendants , les grands constructeurs informatiques ont
affin les technologies associes, donnant naissance respectivement aux moniteurs transactionnels, un secteur
aujourd'hui encore extrmement actif.
Cependant, le cadre transactionnel ne traite pas tous les aspects lis au partage des donnes. Rapidement, le
principe d'indpendance des donnes (data independance) vient complter l'approche transactionnelle afin de
dissocier les questions de performances d'accs de celles de modlisation des donnes et de personnalisation.
La modlisation permet aux utilisateurs de manipuler des concepts volus (des ventes, des produits ) sans
connaitre comment les octets sont stocks sur le disque, tandis que la personnalisation leur permet de navoir

Encore aujourd'hui et titre individuel, vous souvenez vous de la dernire fois que vous avez perdu les
contacts de votre tlphone portable ? Imaginez s'il s'agit du fichier client d'une entreprise !
2

Pour mieux apprhender les volumes concerns, voir l'url


http://tisserant.org/cours/architectures/multiples.html
3

Le Transaction Processing Council a prcisment comme mission de concevoir de tels benchmarks


(www.tpc.org)
Laurent BRISSON et Philippe PICOUET

1/89

[DE LA GESTION DE DONNEES AUX SYSTEMES


D'INFORMATION]

v3.9

accs quaux donnes qui leur sont utiles. Ce principe a trouv son aboutissement avec les SGBD relationnels
(SGBDR), qui constituent encore aujourd'hui la principale famille de systmes de gestion de bases de donnes.
Ses fondements thoriques ont t dfinis dans les annes 70, puis implants partir des annes 1980, et
4
servent de rfrence la quasi-totalit des SGBD actuels [4, ch4, p85-101] . Soutenu par un langage
standardis, SQL [7], qui depuis son apparition en 1986, a considrablement volu pour prendre en compte
les besoins de lindustrie, le modle relationnel sest impos dans le domaine de la gestion de donnes
persistantes fortement structures (typiquement reprsentables sous la forme de tableaux). Moins
performants que les seuls moniteurs transactionnels, mais permettant de "comprendre" les donnes, ces
systmes constituent un des outils de base de toute application manipulant des donnes persistantes. Quil
sagisse de systmes commerciaux (parmi lesquels SQL server, Oracle, ou Sybase [6]) ou de systmes libres
(MySQL, PostgreSQL, etc.), la quasi-totalit des SGBD prsents dans les entreprises reposent sur le modle
relationnel et SQL. Au fil du temps, ces systmes, tout en respectant le standard SQL, ont mis en place des
environnements plus ou moins riches pour monitorer les donnes, tuner les performances du systme, grer
son volution au fil du temps, etc.
Depuis les annes 90, de nouveaux types d'applications sont apparus, aux exigences diffrentes : exigences
5
transactionnelles moins fortes par exemple, mais exigences de distribution ou de disponibilit bien plus fortes .
Du ct des donnes reprsenter, stocker et manipuler, de nouveaux modles sont galement apparus : XML
(eXtended Markup Language) s'est impos la fois comme un standard de reprsentation des documents
structurs (pas seulement des tableaux) et d'Internet ; RDF (Resource Description Framework) est un modle
permettant de reprsenter les annotations. Rcemment, le souhait de stocker des donnes issues de capteurs
a fait merger le besoin d'intgrer des probabilits dans les bases de donnes. Des contraintes matrielles ou
architecturales spcifiques posent galement de nouveaux enjeux (BD embarque sur une carte puce, base
de donnes dans le Cloud) en terme de performance ou de scurit.
Du ct des entreprises, les SGBD, outils techniques de gestion des donnes, sont totalement banaliss, mais la
gestion des donnes de l'entreprise reste, elle, tout fait actuelle. Les applications se sont multiplies, selon les
besoins des utilisateurs, le plus souvent sans rel contrle de leur cohrence avec le parc applicatif existant.
Dans une re industrielle o vitesse et restructurations (filialisations, regroupements, rachats, etc.) allaient
ensemble, la gestion dun parc dapplications htrognes utilisant des bases de donnes dsynchronises est
devenue un vritable enjeu pour les entreprises. Alors que le contexte conomique de concurrence exigeait
delles dadapter en permanence leur stratgie, les informations ncessaires pour dfinir cette stratgie taient
enfouies dans des bases de donnes parpilles, manipules par des logiciels mal matriss, peu flexibles,
pniblement mis jour au fil du temps, et dont les interdpendances avec dautres logiciels ntaient pas
connues. Dans cette jungle logicielle, les seuls rsums dinformation, les tableaux de bord , taient obtenus
en allant rcuprer les donnes au cur des bases de donnes, en esprant pour que ces donnes soient les
bonnes (la multiplication des bases introduisant des dsynchronisations douloureuses corriger). Les entrepts
de donnes (datawarehouse en anglais) constituent une approche base sur les donnes pour laide la
dcision dans lentreprise. Traites, corriges, consolides, les donnes de ces entrepts viennent alimenter les
tableaux de bords des dcideurs, tous les niveaux de lentreprise : les problmes de gestion de donnes pour
lanalyse (OLAP pour On Line Analysis Processing) ont progressivement pris le pas sur ceux de lOLTP, mais si le
contexte change, les donnes restent un lment cl de la survie de l'entreprise.
4

Auxquels il faut dsormais ajouter depuis quelques temps les bases de donnes NoSQL (Not only SQL),
fortement lies la gnralisation d'Internet et au dveloppement d'applications manipulant des volumes de
donnes encore inimaginables il y a 15 ans..
5

Voir les applications dsormais courantes telles que Google, Facebook, etc. En aout 2012, Facebook affirme
stocker 500 To de nouvelles donnes chaque jour (source zdnet.fr 23/8/2012).
Laurent BRISSON et Philippe PICOUET

2/89

[DE LA GESTION DE DONNEES AUX SYSTEMES


D'INFORMATION]

v3.9

De fait, la problmatique de la gestion de donnes, mme relle, s'est substitue celle de la gestion de
linformation d'entreprise, que l'on pourrait simplifier la gestion des donnes de l'entreprise vues sous
l'aspect mtier (finalement, il n'y a que depuis quelques dizaines d'annes que toutes ces donnes sont
informatises). Le terme de systme dinformation (SI) dsigne le systme constitu des ressources
humaines, des ressources matrielles et des procdures permettant d'acqurir, de stocker, de traiter et de
diffuser les lments d'information pertinents au fonctionnement d'une entreprise ou d'une organisation
(Office qubcois de la langue franaise, 2004). Tandis que, pendant les annes 90, les politiques de qualit,
orientes vers la satisfaction du client, viennent structurer les mtiers de lentreprise sous la forme de
processus (enchanement d'activits excuter pour rpondre un objectif et donner satisfaction son client,
interne ou externe lentreprise), la production et le transit de linformation au sein de lentreprise devient un
lment primordial de lorganisation du SI. Aprs de nombreuses annes ddies exclusivement aux donnes
et au dveloppement dapplications, larchitecture [2, ch2, p13-51] simpose petit petit comme lment
structurant du SI, dterminant en grande partie sa capacit voluer ou non au fil des volutions et des
restructurations. Le recensement des applications composant le systme dinformation (cartographie) et la
maitrise de leurs interactions est devenu un des premiers objectifs des Directions de Systmes dInformation
(DSI), qui ont peu peu remplac les services informatiques ddis au dveloppement et la maintenance des
annes 70-80. En sous-traitant lessentiel de leur dveloppement, et en utilisant massivement des progiciels,
tels que les progiciels de gestion intgrs (PGI, ou ERP an anglais pour Enterprise Resource Planning), ces DSI se
concentrent sur la maitrise du parc applicatif et la gestion de la sous-traitance, sur la qualit et le cot de ses
propres prestations vis--vis des services mtier de lentreprise (marketing, conception, construction, etc.)
devenus leurs clients et, plus rcemment encore, sur laccroissement de la flexibilit du systme
dinformation, c'est--dire, sur sa capacit voluer rapidement pour rpondre efficacement aux futurs
besoins de lentreprise.
C'est en prenant en considration ces exigences que doivent tre analyss les progrs de l'informatique, tant
en terme de technologies que de mthodes.

Laurent BRISSON et Philippe PICOUET

3/89

[DE LA GESTION DE DONNEES AUX SYSTEMES


D'INFORMATION]
II.

v3.9

DESCRIPTION GENERALE DE L'ENSEIGNEMENT

L'enseignement ddi la gestion de donnes persistantes et la prsentation des systmes de gestion de


bases de donnes relationnels sinscrit donc clairement dans le contexte technique de linformatique. Lobjectif
6
de ces cours est de comprendre les principes de la gestion de donnes persistantes , dans un contexte de
volumtrie importante, ce quon appelle aussi le passage lchelle (scaling en anglais).
En effet, la prise en compte de cette volumtrie, difficile traiter dans un cadre scolaire, est un lment
dterminant pour les solutions mises en uvre. Dans le contexte des bases de donnes, on suppose,
7
contrairement ce qui est usuellement fait en algorithmique, que les donnes ne tiennent pas en mmoire ou
prsentent des contraintes fortes en terme de stockage (comparez la taille des disques durs et celle des
mmoires). Cette hypothse, double du fait que le temps daccs la mmoire de masse est beaucoup plus
important que le temps daccs la mmoire vive, explique que les performances des traitements sur une base
de donnes dpendent davantage du nombre dentres sorties entre la mmoire et le disque (ou quivalent),
que du nombre doprations ralises en mmoire.
Compte tenu de cette situation, le programme de cours constitue la fois une formation lutilisation dune
base de donnes relationnelle (conception de donnes [2, ch16, p439-458][5], transactions ACID [4, ch14,
p463-479].) et des standards de la gestion de donnes (SQL [7]), mais aussi une rflexion plus gnrale sur la
nature des problmes lis la gestion de donnes persistantes dans les systmes d'information, et quelquesunes des limites des solutions et standards actuels. Cette rflexion doit permettre aux tudiants de ne pas
rester bloqus sur la technologie du moment, (technologie relationnelle) mme si elle est aujourdhui
omniprsente, et de savoir transposer leur raisonnement des variations autour du problme plus global de
la gestion de donnes .
En terme de comptences, cet enseignement participe l'acquisition, par les tudiants de la capacit
analyser la problmatique Data d'un systme, d'identifier une solution, de la mettre en uvre et de l'valuer.
La figure 1, ci-dessous, vous permet de situer ces objectifs (FIG INF 301, FIP INF 210) selon ces quatre
dimensions, sachant que l'objectif de ce cours correspond aux fondamentaux, et que les niveaux Maitrise et
Expertise pourront tre acquis plus tard, via des enseignements plus avancs ou des projets scolaires,
personnels ou professionnels.

Ce terme dsigne le fait que les donnes persistent lexcution des applications qui les manipulent.

Un champ de recherche en bases de donnes sintresse la problmatique des BD grande mmoire dans
lesquelles le volume des donnes ne dpasse pas la capacit de la mmoire.
Laurent BRISSON et Philippe PICOUET

4/89

[DE LA GESTION DE DONNEES AUX SYSTEMES


D'INFORMATION]

Objectif de
formation

v3.9

Maitriser la gestion des donnes persistantes d'un systme


Fondamentaux

Maitrise

Expertise

Analyse qualitative de la
problmatique data d'un
systme

Analyse qualitative et
quantitative de la
problmatique donnes
d'un systme

Identification de nouvelles
exigences non couvertes
prcdemment

Identification
d'une solution

Connaitre un SGBD R et
justifier son choix par rapport
une solution de type fichier

Connaitre au moins 2 types de


modles (relationnel, objet,
OLAP) et de systmes et faire
un choix justifi en regard des
exigences qualitatifs et
quantitatifs

Auto acquisition de
connaissances sur des
solutions potentielles et les
systmes associs
(composants, architecture)

Mise en uvre
d'une solution

Crer un schma adapt au


problme, administrer
simplement ce schma et
ses donnes, dvelopper
une application simple

Installer le systme et l'intgrer


aux autres composants
ncessaires

Mettre en uvre les


composants slectionns
au sein de l'architecture du
systme cible

Evaluation de la
solution

Tester le schma
(contraintes essentiellement)
via des requtes et via
l'application

Mettre en uvre une approche


systmatique de tests des
aspects qualitatifs et
quantitatifs identifis

Mettre en uvre une


approche de type
benchmark

Analyse de la
problmatique

Figure 1 : Positionnement des objectifs de l'enseignement de bases de donnes

III.

BIBLIOGRAPHIE

[1] Bases de donnes, Georges Gardarin, Eyrolles


[2] Bases de donnes : Concepts, utilisation et dveloppement, Jean-Luc Hainaut, Dunod
[3] Bases de donnes et systmes d'information. Le modle relationnel : langages, systmes et mthodes,
Nacer Boudjlida, Dunod
[4] Conception et architecture des bases de donnes, Shamkant Navathe, Ramez Elmasri, et Daniel Serain,
Pearson Education
[5] Conception et ralisation des bases de donnes : de UML SQL, Jacques Guyot, Editions systmes et
information
[6] Gestion et administration des bases de donnes : Applications Sybase et Oracle de Nacer Boudjlida, Dunod
[7] SQL (avec 1 cdrom) de Frdric Brouard, Rudi Bruchez, Christian Soutou, et Nicolas Larrousse, Pearson
Education
[8] Java persistence with Hibernate, de Christian Bauer et Gavin King, Manning

Laurent BRISSON et Philippe PICOUET

5/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

v2.6

TD MODLE RELATIONNEL ET INTGRIT DES


D O N N ES
SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
I.

Introduction .................................................................................................................................................... 2

II.

Notions de base sur le modle de donnes relationnel ................................................................................. 3

III.

Cas n1 : une relation unique ......................................................................................................................... 4

IV.

Cas n2 : dcomposition en deux relations .................................................................................................... 4

V.

Cas n3 : dcomposition en trois relations ..................................................................................................... 5

VI.

Bilan et auto-valuation ................................................................................................................................. 6

VII. Annexe : donnes des diffrents cas .............................................................................................................. 7

PR-REQUIS
Aucun

APPROFONDISSEMENTS
A la suite de ce TD, vous devez obligatoirement lire (ou relire) les documents suivants du support de cours :

Syllabus : de la gestion des donnes aux systmes dinformation


Support : Introduction aux bases de donnes relationnelles

Laurent BRISSON et Philippe PICOUET

6/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

I.

v2.6

INTRODUCTION

Considrons une entreprise dans laquelle on dsire stocker des donnes concernant les employs et les
dpartements dans lesquels travaillent ces employs. Nous allons tout au long de ce cas dtude examiner
diffrentes faons de reprsenter ces donnes au moyen de tableaux que nous allons manipuler avec votre
tableur favori. Ces exercices doivent vous permettre d'apprhender la modlisation de donnes persistantes et
de comprendre les difficults lies une reprsentation tabulaire des donnes, telles qu'elles le sont dans les
bases de donnes.
A lintrieur de lentreprise, quelques rgles de gestion sont mises en uvre. Vous devrez veiller les respecter
lors de cette tude :

Un employ peut appartenir plusieurs dpartements


Un employ na quun seul poste dans un mme dpartement
Un employ na quun seul manager mme sil occupe plusieurs postes

Les donnes stockes sont les suivantes :

EMPNO : numro de lemploy


ENAME : nom
JOB : poste
MANAGER : numro du manager
SALARY : salaire en
HIREDATE : date dembauche
COMMISSION : commission en
DEPTNO : numro du dpartement
DNAME : nom du dpartement
LOC : localisation du dpartement

Sur lespace Moodle du module vous trouverez les fichiers Excel suivants : cas1.xls et cas2a.xls et cas3.xls
Ces donnes sont galement prsentes en annexe, la fin de ce sujet.
Ce document est structur de la manire suivante :

la section 2 prsente quelques notions basiques sur la reprsentation relationnelle de donnes. Le


modle relationnel de donnes est celui qui est le plus utilis aujourd'hui dans les bases de donnes.
les sections 3, 4 et 5 permettent d'tudier diffrentes manires de structurer les donnes, et
d'apprhender leurs qualits respectives.
la section 6 vous permet de faire le bilan des acquis de ce TD.

Laurent BRISSON et Philippe PICOUET

7/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

II.

v2.6

NOTIONS DE BASE SUR LE MODLE DE DONNES RELATIONNEL

Le terme de "modle de donnes relationnel" dsigne une manire de structurer les informations sous la
forme de matrices que l'on appelle tables ou relations. Ce modle, trs simple, est de loin le plus rpandu dans
les Systmes de Gestion de Bases de Donnes (SGBD), qui sont ainsi dnomms SGBD relationnels.
Une base de donnes relationnelle est donc constitue dun ensemble de donnes structures sous forme de
relations.
Dfinition [Schma dune relation] Le schma d'une relation R est caractris par un nom et une liste
d'attributs A1, , An et se note R(A1, , An).
Exemple : Considrons les donnes des clients dune entreprise. On connait leur numro, leur nom, leur
adresse et leur numro de tlphone. Nous pouvons exprimer cela par la relation Client (Numro, Nom, Ville,
Tlphone) qui peut se reprsenter sous forme dune table, comme ci-dessous :
Attributs

Numro

Nom

Ville

Tlphone

2
6
22
54

DURANT
MARTIN
BERNARD
FONTAINE

BREST
PARIS
NICE
RENNES

02 12 34 56 78
04 98 76 54 32

Ligne ou tuple

Les attributs dune relation correspondent aux colonnes de la table. Les lignes dune relation sont galement
appeles tuples.
Dfinition [Domaine] On appelle domaine, lensemble des valeurs que peut prendre un attribut.
Exemple : Le domaine de lattribut Ville est lensemble des villes o se situent ses clients. Le domaine nest pas
limit aux valeurs actuellement prsentes dans la table.
Remarque Une relation est un ensemble au sens mathmatique, il ny a pas de notion dordre ni de doublons
(rptitions).
D'un point de vue formel, il est donc impossible davoir, dans une mme table, deux lignes identiques, ni mme
de connatre lordre dans lequel ces lignes sont stockes sur le disque. Nous verrons dans la suite de cet
enseignement comment cette rgle s'adapte aux SGBD rels !
Dans la prochaine section, nous allons examiner une premire reprsentation de l'tude de cas prsente
succinctement en section 1.

Laurent BRISSON et Philippe PICOUET

8/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

III.

v2.6

CAS N1 : UNE RELATION UNIQUE

Le fichier cas1.xls prsente de manire partielle une seule feuille de calcul avec la relation suivante :
TABLEAU_1(EMPNO, ENAME, JOB, SAL, MANAGER, HIREDATE, COMMISSION, DEPTNO, DNAME, LOC)
1.
2.

Cherchez le lieu de travail de lemploy DOE. Dans le pire des cas, combien de lignes devez-vous
parcourir ? Peut-il y avoir plusieurs lignes avec la mme valeur de lattribut ENAME ?
Faites les mises jour ncessaires pour renommer en REAL ESTATE le dpartement dans lequel
travaille lemploy TURNER. Dans le pire des cas, combien de lignes devez-vous parcourir en lecture ?
Combien de lignes avez-vous d modifier ? quoi ce dernier nombre correspond-il ?

Dfinition [Clef candidate] Une clef candidate est un attribut ou un ensemble dattributs identifiant de
manire unique chaque tuple dune relation.

Dfinition [Clef primaire] La clef candidate choisie comme identifiant de la relation est appele clef primaire.
Une clef primaire est unique et doit tre renseigne (elle ne peut pas prendre la valeur NULL).
Par convention, on souligne (dun trait plein) la cl primaire dune relation.
3.

Identifiez la ou les clefs candidates de la relation et choisissez une clef primaire.

Dfinition [Donne redondante] Une donne est considre redondante si elle se rpte sans apporter
dinformation supplmentaire.
4.

Considrer les 2 lignes concernant lemploy SCOTT. Cochez la (les) proposition(s) ci-dessous qui vous
semble(nt) exacte(s) en justifiant votre choix :
Les valeurs de EMPNO sont redondantes
Les valeurs de MGR sont redondantes
Les valeurs de JOB sont redondantes

IV.

CAS N2 : DCOMPOSITION EN DEUX RELATIONS

Dfinition [Clef trangre ou clef rfrentielle] On dit que l'ensemble K des attributs de R1 est clef trangre
et qu'elle rfrence R2 si les attributs K de R1 ont les mmes domaines que les attributs de la cl primaire de la
relation R2.
Par convention, on souligne (dun trait pointill) la clef rfrentielle dune relation.
Clefs primaires

Exemple :
Client

(Numro, Nom, Adresse, Tlphone)

Clef candidate

Produit (Numro, Dsignation, Prix)


Vente (Numro, NumroClient, NumroProduit, Date) o NumroClient rfrence Client(Numro) et
NumroProduit rfrence Produit(Numro)
Clefs rfrentielles
Laurent BRISSON et Philippe PICOUET

9/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

A.

v2.6

CAS N2A : UNE PREMIRE SOLUTION

Le fichier cas2a.xls prsente deux feuilles de calcul avec les tableaux suivants :
TABLEAU_1(EMPNO, ENAME, JOB, SAL, MANAGER, HIREDATE, COMMISSION, DNAME)
TABLEAU_2(DEPTNO, DNAME, LOC)
1.
2.
3.

Dans quelle mesure cette nouvelle structure de donnes peut-elle rduire les redondances
rencontres lors de ltude du cas n1 ?
Identifiez, pour chacune des deux relations, les clefs primaires et rfrentielles si elles existent.
Pouvez-vous renommer en REAL ESTATE le dpartement dans lequel travaille lemploy TURNER ?
Pourquoi ?

B.
1.

CAS N2B : VOTRE SOLUTION

Proposez une dcomposition en 2 relations corrigeant les relations du cas n2A afin de rsoudre le
problme que vous avez identifi. Faites valider votre proposition par un enseignant.

2.
3.

4.

V.

Cherchez le lieu de travail de lemploy DOE. Dans le pire des cas, combien de lignes devez-vous
parcourir ? Peut-il y avoir plusieurs lignes avec le mme ENAME ?
Faites les mises jour ncessaires pour renommer en REAL ESTATE le dpartement dans lequel
travaille lemploy TURNER. Dans le pire des cas, combien de lignes devez-vous parcourir en lecture ?
Combien de lignes avez-vous d modifier ? A quoi ce dernier nombre correspond-t-il ?
Quelles donnes peut-on encore considrer comme redondantes ?

CAS N3 : DCOMPOSITION EN TROIS RELATIONS

Le fichier cas3.xls prsente trois feuilles de calcul avec les tableaux suivants :
TABLEAU_1(EMPNO, ENAME, SAL, MANAGER, HIREDATE, COMMISSION)
TABLEAU_2(DEPTNO, DNAME, LOC)
TABLEAU_3(EMPNO, DEPTNO, JOB)
1.
2.
3.
4.
5.

6.

Identifiez, pour chacune des trois relations, les clefs primaires et rfrentielles si elles existent.
Remplissez les feuilles de calculs en vous aidant des donnes du cas n1.
Dans quelle mesure cette nouvelle structure de donnes peut-elle rduire les redondances
rencontres lors de ltude du cas n2B ?
Cherchez le lieu de travail de lemploy DOE. Dans le pire des cas, combien de lignes devez-vous
parcourir ? Peut-il y avoir plusieurs lignes avec le mme ENAME ?
Faites les mises jour ncessaires pour renommer en REAL ESTATE le dpartement dans lequel
travaille lemploy TURNER. Dans le pire des cas, combien de lignes devez-vous parcourir en lecture ?
Combien de lignes avez-vous d modifier ? A quoi ce dernier nombre correspond-t-il ?
Quelles donnes peut-on considrer comme redondantes ?

Laurent BRISSON et Philippe PICOUET

10/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

VI.

v2.6

BILAN ET AUTO-VALUATION
A.

FICHE DE SYNTHSE

Remplissez la fiche de synthse ci-dessous en considrant les critres suivants :


1.
2.

Consultation des donnes : la difficult effectuer la requte se compte en nombre de lignes lues afin
dobtenir la rponse la question pose.
Mise jour des donnes : la difficult effectuer la mise jour se compte en nombre de lignes concernes
afin deffectuer la modification.

Utilisez la lgende suivante pour remplir votre tableau :

- et -+ et ++

Situation de rfrence
Consultation ou mise jour plus complique
Consultation ou mise jour plus simple

Remplissez chaque case en comparant le changement par rapport au cas n1 :


Consultation

Mise jour

Cas n1
Cas n2B
Justifiez :

Cas n3
Justifiez :

Dans le contexte prsent en section I, quelle structure de donnes prsente dans les diffrents cas jugezvous la plus pertinente ? Justifiez votre rponse.

Laurent BRISSON et Philippe PICOUET

11/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

B.

v2.6

AUTO-VALUATION

La grille suivante sera utilise pour valuer votre comprhension des problmes dintgrit sur les donnes. A
lissu de ce TD vous devriez en tre au niveau C. A quel niveau vous situez-vous ?
Critre

Maintenir
l'intgrit
de la base
de
donnes

VII.

B
Niveau C + L'tudiant est
capable d'identifier et
Niveau B + L'tudiant justifier formellement
est capable de justifier (au moyen des
l'usage
dpendances
complmentaire aux
fonctionnelles) la totalit
des contraintes de cls
contraintes de cls
primaires et
primaires d'un schma
relationnel. Identifier et
rfrentielles des
contraintes de non
justifier formellement la
nullit et de contrainte prservation des
sur valeur d'attribut
donnes et des
(CHECK).
dpendances
fonctionnelles si
possible.

L'tudiant est capable


d'illustrer la
problmatique
d'intgrit en
prsence de
redondance,
d'identifier et de
justifier intuitivement
la moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

L'tudiant n'est pas


capable d'illustrer la
problmatique
d'intgrit en
prsence de
redondance ou ne sait
pas identifier et
justifier intuitivement
la moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

ANNEXE : DONNES DES DIFFRENTS CAS


A.

CAS N1

TABLEAU_1
EMPNO
7698
7499
7521
7654
7844
7904
7369
7540
7566
7788
7876
7902
7782
7839
7934
7900
7904
7788

ENAME
JOB
BLAKE
MANAGER
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
TURNER SALESMAN
DOE
CLERK
SMITH
CLERK
OMARI
ANALYST
JONES
MANAGER
SCOTT
ANALYST
ADAMS
CLERK
FORD
ANALYST
CLARK
MANAGER
KING PRESIDENT
MILLER
CLERK
JAMES
CLERK
DOE SALESMAN
SCOTT
ANALYST

MGR
7839
7698
7698
7698
7698
7566
7902
7566
7839
7566
7788
7566
7839
NULL
7782
7698
7566
7566

HIREDATE
05/01/2081
02/20/2081
02/22/2081
09/28/2081
09/08/2081
12/11/2099
12/17/2080
12/11/2099
04/02/2081
12/09/2081
01/12/2083
12/03/2081
06/09/2081
11/17/2081
01/23/2082
12/03/2081
12/11/2099
12/09/2081

SAL
2850
1600
1250
1250
1500
2500
800
2500
2975
3000
1100
3000
2450
5000
1300
950
2500
3000

COMM
NULL
300
500
1400
0
300
NULL
200
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
300
NULL

DEPTNO

40
30
30
30
30
20
20
20
20
20
20
20
10
10
10
40
30
10

DNAME
SALES
SALES
SALES
SALES
SALES
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
ACCOUNTING
ACCOUNTING
ACCOUNTING
SALES
SALES
ACCOUNTING

Laurent BRISSON et Philippe PICOUET

12/89

LOC
BOSTON
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
NEW YORK
NEW YORK
NEW YORK
BOSTON
CHICAGO
NEW YORK

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

B.

v2.6

CAS N2A

Tableau_1
EMPNO
7782
7788
7839
7934
7369
7788
7540
7566
7904
7876
7902
7904
7499
7521
7654
7698
7844
7900

ENAME
JOB
CLARK
MANAGER
SCOTT
ANALYST
KING PRESIDENT
MILLER
CLERK
SMITH
CLERK
SCOTT
ANALYST
OMARI
ANALYST
JONES
MANAGER
DOE
CLERK
ADAMS
CLERK
FORD
ANALYST
DOE SALESMAN
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
BLAKE
MANAGER
TURNER SALESMAN
JAMES
CLERK

MGR
7839
7566
NULL
7782
7902
7566
7566
7839
7566
7788
7566
7566
7698
7698
7698
7839
7698
7698

HIREDATE
06/09/2081
12/09/2081
11/17/2081
01/23/2082
12/17/2080
12/09/2081
12/11/2099
04/02/2081
12/11/2099
01/12/2083
12/03/2081
12/11/2099
02/20/2081
02/22/2081
09/28/2081
05/01/2081
09/08/2081
12/03/2081

SAL
2450
3000
5000
1300
800
3000
2500
2975
2500
1100
3000
2500
1600
1250
1250
2850
1500
950

COMM
NULL
NULL
NULL
NULL
NULL
NULL
200
NULL
300
NULL
NULL
300
300
500
1400
NULL
0
NULL

DNAME
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
SALES
SALES

Tableau_2

DEPTNO

10
20
30
40

DNAME
ACCOUNTING
RESEARCH
SALES
SALES

LOC
NEW YORK
DALLAS
CHICAGO
BOSTON

Laurent BRISSON et Philippe PICOUET

13/89

[TD MODLE RELATIONNEL ET INTGRIT DES DONNES]

C.

v2.6

CAS N3

Tableau_1
EMPNO

ENAME

MGR

HIREDATE

SAL

COMM

Tableau_2

DEPTNO

DNAME

LOC

Tableau_3
EMPNO

DEPTNO

JOB

Laurent BRISSON et Philippe PICOUET

14/89

[TD INTRODUCTION AU LANGAGE SQL]

v1.6

TD INTRODUCTION AU LANGAGE SQL


SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
I.

La base de donnes BIBLIOTHQUE ............................................................................................................... 2

II.

Structure gnrale dune requte .................................................................................................................. 2

III.

Interrogation dune table ............................................................................................................................... 3

IV.

Jointures entre plusieurs tables...................................................................................................................... 3

V.

Calculs et regroupement ................................................................................................................................ 4

PR-REQUIS
L'tudiant sait analyser un schma relationnel simple crit sous forme littrale

APPROFONDISSEMENTS
Apprhender la grille de critres d'valuation de requtes SQL

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON et Philippe PICOUET

15/89

[TD INTRODUCTION AU LANGAGE SQL]

I.

v1.6

LA BASE DE DONNES BIBLIOTHQUE

Les requtes SQL exprimer sont relatives la base de donnes BIBLIOTHEQUE constitue des relations dont le
schma est dcrit ci-dessous:
ABONNE(id, nom, prenom, telephone, code postal)
LIVRE(id, isbn, titre, auteur, annee_edition, prix)
EMPRUNT(id_livre, id_abonne, date-emprunt) : o id_livre rfrence LIVRE(id) et id_abonne rfrence
ABONNE(id)
Aucun historique n'est gr dans cette base : La table ABONNE contient les informations sur les abonns
actuels de la bibliothque, et la table LIVRE contient celles de tous les livres actuellement grs par la
bibliothque. La table EMPRUNT contient les emprunts en cours. Lorsquun livre est retourn, le tuple
correspondant dans la table EMPRUNT est effac.

Figure 1 - Schma logique de la base BIBLIOTHEQUE (sous forme graphique)

II.

STRUCTURE GNRALE DUNE REQUTE

Les requtes SQL respectent la structure gnrale prsente sur la Figure 2 - Structure gnrale d'une requte
SQL. Les paragraphes suivants vous guident pas pas pour dcouvrir les concepts les plus importants et
donnent des prcisions sur la syntaxe.

SELECT colonnes
FROM tables
[WHERE condition]
[GROUP BY colonnes [HAVING condition]]
[ORDER BY colonnes [ASC\DESC]]

Figure 2 - Structure gnrale d'une requte SQL

Remarque : les expressions entre crochets [ ] signifient que le mot clef est optionnel !

Laurent BRISSON et Philippe PICOUET

16/89

[TD INTRODUCTION AU LANGAGE SQL]

III.

v1.6

INTERROGATION DUNE TABLE

SELECT [DISTINCT] colonne_1, , colonne_n


FROM nom_table
WHERE condition
[ORDER BY colonne_x [ASC|DESC], colonne_y [ASC|DESC]]
Figure 3 - Interrogation d'une table

Exemple

Affichez le nom et le prnom de tous les abonns


SELECT nom, prenom FROM ABONNE
Affichez tous les livres crits par Voltaire
SELECT * FROM LIVRE WHERE auteur=Voltaire

Questions
1.
2.
3.

IV.

Affichez le titre et lauteur de tous les livres


Affichez le nom, le code postal et le numro de tlphone des abonns sur Paris (code postaux
dbutants par 75)
Affichez, sans doublon, lisbn et lauteur des livres selon lordre alphabtique des auteurs et des titres

JOINTURES ENTRE PLUSIEURS TABLES

Lorsque lon dsire rcuprer, de manire cohrente, des informations contenues dans plusieurs tables nous
devons utiliser loprateur de jointure.

SELECT [DISTINCT] colonne_1, , colonne_n


FROM table_1 [[AS] alias] [INNER] JOIN table_2 [[AS] alias]
ON table_1.nom_colonne = table_1.nom_colonne

Figure 4 - Jointure entre deux tables

Lexpression [[AS] alias] permet de renommer une table au moyen dun alias. Cette notation est utilise
pour faciliter la lecture dune requte et pour lever les ambigits lorsque plusieurs tables ont des attributs se
nommant de la mme faon.
Exemple

Donnez le nom des abonns ayant fait un emprunt


SELECT A.nom
FROM ABONNE A INNER JOIN EMPRUNT E ON A.id=E.id_abonne
Affichez les dates demprunt des exemplaires du livre Le petit prince
SELECT E.date-emprunt
FROM EMPRUNT E INNER JOIN LIVRE L ON E.id_livre=L.id
WHERE L.titre="Le petit prince"
Laurent BRISSON et Philippe PICOUET

17/89

[TD INTRODUCTION AU LANGAGE SQL]

v1.6

Questions
4.
5.
6.

Affichez le titre des livres emprunts par labonn n669


Affichez la liste des emprunts sur la ville de Brest (code postal 29200)
Affichez le nom et le prnom des abonns ayant emprunt Le petit prince

Pour aller plus loin


Il est important de comprendre que INNER JOIN correspond une jointure interne qui ne renvoie des lignes
que lorsquil y a au moins une ligne qui vrifie la contrainte dans chacune des tables : cette vrification est
effectue avant la jointure.
Par contre, le WHERE est une slection des lignes vrifiant la contrainte mais qui est, cette fois-ci, effectue
aprs la jointure (sil y en a une).

V.

CALCULS ET REGROUPEMENT

GROUP BY colonne_1, , colonne_n


HAVING condition
Figure 5 - Mots clefs pour le regroupement

Le mot clef GROUP BY permet de raliser des regroupements selon un ou plusieurs attributs. Il est donc ainsi
possible, au niveau du SELECT, de spcifier une fonction dagrgation (count, min, max, sum, avg etc.) qui
sappliquera lensemble des lignes regroupes.
A noter que le mot clef HAVING permet dexprimer une contrainte sur le regroupement (c'est--dire le rsultat
de la fonction). Le mot clef WHERE doit toujours tre utilis pour tester les valeurs dun tuple existant dans la
base.
Exemple

Affichez le nombre de livres actuellement emprunts


SELECT count(id_livre) FROM EMPRUNT
Affichez, pour chaque abonn ayant un emprunt en cours, le nombre de livres actuellement
emprunts
SELECT id_abonne, count(id_livre) FROM EMPRUNT GROUP BY id_abonne
Affichez, pour chaque abonn ayant plus de 2 emprunts en cours, le nombre de livres actuellement
emprunts
SELECT id_abonne, count(id_livre) FROM EMPRUNT
GROUP BY id_abonne HAVING count(id_livre) > 2

Questions
7.
8.
9.
10.

Affichez le prix total de tous les livres possds par bibliothque


Affichez le nombre dabonns par code postal
Affichez, par auteur, le nombre de livres possds par la bibliothque, qui ont t dits en 2009
Affichez le titre des livres de "Voltaire" prsents en plus de 3 exemplaires

Laurent BRISSON et Philippe PICOUET

18/89

[TP LE LANGAGE SQL]

v2.7

TP LE LANGAGE SQL
SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
Avant de dbuter .................................................................................................................................................... 2
I.

Pattern matching et tris .................................................................................................................................. 4

II.

Jointures ......................................................................................................................................................... 5

III.

Ngation et listes ............................................................................................................................................ 6

IV.

Aggrgation .................................................................................................................................................... 7

V.

Requtes complexes ....................................................................................................................................... 8

VI.

Sentraner se justifier .................................................................................................................................. 8

Grille dvaluation critrie .................................................................................................................................... 9

PR-REQUIS
me

Avant de venir en TP pour la 2

partie, vous devez avoir obligatoirement lu le cours suivant :

Requtes SQL avances

APPROFONDISSEMENTS
Le cours suivant est destin aider la rsolution des dernires requtes complexes.
SQL et logique du premier ordre

Merci de communiquer toute correction ou remarque sur ce document


philippe.picouet@telecom-bretagne.eu

Laurent BRISSON et Philippe PICOUET

19/89

[TP LE LANGAGE SQL]

v2.7

AVANT DE DBUTER
A.

DESCRIPTION DE LA BASE DE DONNES SOINS

Les requtes SQL exprimer sont relatives la base de donnes SOINS constitue des relations dont le schma
est dcrit de manire linaire ci-dessous (les identifiants des relations sont souligns, et les attributs qui
rfrencent une autre relation sont en gras).
MEDECIN (medecin_id, nom, prenom, adresse, tel, specialite)
PATIENT (patient_id, nom, prenom, numsecu, rattachement, medecin_referent)
o rattachement rfrence PATIENT(patient_id)
et medecin_referent rfrence MEDECIN(medecin_id)
VISITE (medecin, patient, date_visite, prix)
o medecin rfrence MEDECIN(medecin_id)
et patient rfrence PATIENT(patient_id)
PRESCRIPTION (prescription_id, medicament, medecin, patient, date_visite, duree, posologie, modalites)
o le triplet d'attributs (medecin, patient, date_visite) rfrence VISITE(medecin, patient, date_visite)
Notez que :

l'attribut rattachement de la relation PATIENT est renseign quand une personne (appele ayant droit)
bnficie de l'assurance maladie, non pas en son nom propre, mais par sa relation avec une autre
personne (appele assur) qui en bnficie. Par exemple, les enfants sont rattachs l'un de leurs
parents, ce qui leur donne droit l'assurance maladie.
l'attribut medecin_referent de la relation PATIENT dsigne le mdecin qu'un patient a choisi pour
suivre son dossier mdical.
les attributs duree et posologie seront traits de manire trs simple dans cet exemple : la dure
dsigne un nombre de jours de traitement et la posologie le nombre de prises par jour.

Avant de dmarrer les exercices, reprsentez graphiquement le schma logique dcrit linairement ci-dessus.

Laurent BRISSON et Philippe PICOUET

20/89

[TP LE LANGAGE SQL]

B.

v2.7

IMPORTANT : NIVEAUX DE DIFFICULTS

Les requtes de ce TP sont classes en 3 niveaux de difficult :

Requte facile (aucun symbole)


Requte moyenne (toile blanche)
Requte difficile (toile noire)

En fonction de votre connaissance initiale du langage, vous pouvez adopter des stratgies de parcours du TP
diffrentes.

Pour les dbutants : nous vous conseillons deffectuer dans un premier temps toutes les requtes
faciles du TP, puis celles de difficult moyenne pour finir par les plus difficiles. Si vous chouez une
requte, analysez votre erreur et demandez l'enseignant de vous proposer une autre requte du
mme style.
Pour ceux qui ont dj une certaine exprience de SQL : rien ne vous empche de shunter certaines
requtes. Sachez toutefois que chaque requte prsente toujours une difficult spcifique.
Pour tous : nous vous conseillons de faire ces requtes en gardant l'esprit la grille d'valuation que
nous vous avons fournie sur SQL. En particulier, si l'interprteur SQL dtecte les erreurs de syntaxe, il
ne vrifie par le critre de minimalit ou le fait que votre requte SQL rpond la requte pose.
Nous vous conseillons donc de vrifier votre requte en ralisant des requtes complmentaires qui
doivent vous permettre d'amliorer la qualit de votre production. De mme, nous vous suggrons de
vous entraner au critre d'explicabilit en expliquant une requte par section un binme voisin ou
un enseignant.

Le TP est long. Il exige donc que vous travaillez entre les sances, voire que vous le terminiez aprs les deux
sances. Le QCM qui est propos en ligne peut galement vous aider juger de votre niveau de maitrise de ce
langage.

C.

UTILISEZ LA DOCUMENTATION APPROPRIE !

Le langage SQL est en fait une norme internationale qui a suivi de nombreuses modifications. Nous en sommes
la version ISO/CEI 9075.
Cependant, il existe de nombreuses variantes (plus ou moins importantes) selon le SGBD que vous utilisez.
Voici les liens vers les documentations correspondantes :
ORACLE 10g : http://docs.oracle.com/cd/B19306_01/server.102/b14200/toc.htm
PostgreSQL 9.2 : http://www.postgresql.org/docs/9.2/interactive/index.html
MySQL 5.7 : http://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html

Laurent BRISSON et Philippe PICOUET

21/89

[TP LE LANGAGE SQL]

I.

v2.7

PATTERN MATCHING ET TRIS


A.

REQUTES

Remarque : avant de vous lancer dans une requte prenez le temps dobserver les enregistrements des
diffrentes tables. Par exemple, la requte suivante :
SELECT distinct medicament FROM prescription
vous permettra de comprendre comment les mdicaments sont orthographis afin deffectuer la requte
adquate.
1.

Affichez les prescriptions qui contiennent du doliprane .

2.

Affichez toutes les prescriptions de ventoline ordonnes par dure de traitement dcroissante.

3.

Affichez les prescriptions de ventoline ayant une dure suprieure 90 jours.

4.

Affichez les prescriptions de ventoline ayant une dure suprieure 90 jours ou une posologie
suprieure 6 prises/jour.

B.

Critre

Qualit
de la
syntaxe

AUTO-VALUATION

Savez-vous dcrire la structure globale dune requte SQL ? Essayez de faire un schma et de le
maintenir tout au long de ce TP afin de lenrichir des nouveaux mots-clefs que vous dcouvrirez.
Avez-vous compris la documentation concernant les mots-clefs utiliss dans ce premier exercice ?
La grille suivante sera utilise pour valuer la qualit de votre syntaxe. A quel niveau vous situezvous ?
A

La syntaxe est
parfaitement
respecte.

Certains des mots cls


suivants sont mal
utiliss et ne sont pas
dans l'ordre : GROUP
BY, HAVING, EXISTS, IN.

Certains des mots cls


suivants sont mal utiliss
ou (exclusif) ne sont pas
dans l'ordre : SELECT,
FROM, WHERE, LIKE,
ORDER BY.

Certains des mots cls


suivants sont mal utiliss
et ne sont pas dans
l'ordre : SELECT, FROM,
WHERE, LIKE, ORDER BY.

Laurent BRISSON et Philippe PICOUET

22/89

[TP LE LANGAGE SQL]

II.

v2.7

JOINTURES
A.

REQUTES

Quest-ce quune jointure naturelle ?


5.

Affichez pour chaque prescription le prix de la visite qui lui est associe.

6.

Affichez les noms des patients et les identifiants des mdecins quils ont visits le 15 janvier 2012.

Quelle table contient les informations concernant les ayant-droits ? Quelle table contient les informations
concernant les assurs ? Comment effectuer une jointure sur une table qui possde des rles multiples ?
7.

Affichez pour chaque ayant-droit, les numros de scurit sociale, nom et prnom de l'assur auquel il
est rattach.

8.

Affichez les noms des patients et de leur mdecin rfrent.

Par dfaut, la jointure ne conserve pas les tuples dont l'attribut de jointure a une valeur inconnue (NULL). On
parle de jointure interne (ou INNER JOIN). Comment s'appelle la jointure qui permet de conserver de tels
tuples ? Identifiez ensuite la syntaxe propre ce type de jointure.
9.

Affichez les noms des patients et de leur mdecin rfrent (en affichant galement les patients sans
mdecin rfrent).

10.

Affichez les noms des patients qui ont visit leur mdecin rfrent le 15 janvier 2012.

B.

Critre

AUTO-VALUATION

Savez-vous expliquer la diffrence entre une jointure et un produit cartsien ? Si ce nest pas le cas,
cherchez la rponse !
Que signifie le terme de minimalit utilis dans le critre dvaluation ci-dessous ? Quel est
lintrt dcrire des requtes minimales ?
Avez-vous, au cours de cet exercice, crit des requtes minimales ? A quel niveau vous situez-vous ?
Faites enfin le point sur les nouveaux mots-clefs de la syntaxe que vous avez utiliss dans cet exercice.
A

L'tudiant crit
L'tudiant crit
Minimalit minimalement toutes minimalement la
les requtes.
moiti des requtes.

L'tudiant a montr qu'il


sait crit minimalement
au moins une requte.

Ltudiant ncrit
minimalement aucune
de ses requtes.

Laurent BRISSON et Philippe PICOUET

23/89

[TP LE LANGAGE SQL]

III.

v2.7

NGATION ET LISTES
A.

AUTO-VALUATION

Pour chacune des requtes de cet exercice :

crivez tout dabord votre requte seul sur une feuille de papier,
prsentez la solution que vous proposez votre binme, votre binme doit alors vous positionner sur
la grille ci-dessous,
changez les rles et choisissez la solution que vous allez tester,
rflchissez, sur la base du rsultat obtenu, la pertinence de votre auto-valuation.

Critre

Justification en utilisant
un autre modle formel
Justification
(algbre relationnel ou
logique du 1er ordre).

B.

Justification
complte et
comprhensible.

Justification
Simple affirmation ou
comprhensible mais justification non
incomplte.
comprhensible.

REQUTES

11. Affichez les mdecins qui ne sont pas gnralistes


Comment reprsente-t-on et interroge-t-on en SQL le fait qu'une valeur soit ou non inconnue ?
12. Affichez les patients qui n'ont pas de mdecin rfrent
Quels mots clefs de la syntaxe SQL permettent dutiliser des listes (des colonnes de valeurs) comme critre de
comparaison ?
13.

Affichez les patients qui n'ont jamais vu de mdecin

Une prescription dsigne en fait une ordonnance sur laquelle plusieurs mdicaments sont prescrits. Identifiez
les dpendances fonctionnelles de la relation PRESCRIPTION. En quelle forme normale cette relation est-elle ?
En quoi ces questions vous aident pour la requte suivante ?
14.

Affichez les prescriptions qui ne contiennent pas de "doliprane"

Dans quelle mesure la requte 14 est-elle ou non diffrente de la requte : Affichez les prescriptions qui
contiennent au moins un mdicament qui n'est pas du doliprane. ?
15.

Affichez les noms des patients qui sont ressortis d'une visite sans prescription

Laurent BRISSON et Philippe PICOUET

24/89

[TP LE LANGAGE SQL]

IV.

v2.7

AGGRGATION
A.

REQUTES

Que fais exactement le mot-clef COUNT ?


Quelle diffrence existe-t-il entre COUNT(*), COUNT(A) et COUNT (DISTINCT A) selon que A soit, ou non,
une clef primaire ?
Dans quel cas une requte agrge ne ncessite-t-elle pas de clause GROUP BY ?
16. Affichez le nombre total de mdecins
17. Affichez le nombre de mdecins par spcialit
Quand une condition porte sur une fonction agrgat (ou regroupement), doit-on la placer derrire la clause
WHERE ?
18.
19.
20.

Affichez les personnes qui ont un ayant droit


Affichez les personnes qui ont plus de trois ayants droit
Affichez les personnes qui ont exactement un ayant droit

B.

Critre

AUTO-VALUATION

Une requte ne renvoyant aucun rsultat, est-elle fausse ? Une requte renvoyant un rsultat, est-elle
juste ?
Il est important de sintresser la cohrence de la requte crite avec la question pose. Sur la base
des requtes de ce dernier exercice essayez de vous positionnez par rapport au critre dvaluation
prsent ci-dessous.
Mettez jour votre schma de la structure gnrale dune requte SQL avec les nouvelles clauses que
vous avez dcouvertes. Sauriez-vous expliquer quelquun lutilit de ces nouveaux mots-clefs ?
A

L'tudiant russit crire,


de manire cohrente avec
la question, toutes les
Cohrence requtes complexes
utilisant ngation,
imbrication, regroupement
ou auto-jointure.

L'tudiant russit crire,


de manire cohrente avec
la question, la moiti des
requtes complexes
utilisant ngation,
imbrication, regroupement
ou auto-jointure.

L'tudiant russit
crire, de manire
cohrente avec la
question, une
requte simple
ncessitant une
jointure.

L'tudiant n'est
pas capable
d'effectuer une
restriction ou
une jointure.

Laurent BRISSON et Philippe PICOUET

25/89

[TP LE LANGAGE SQL]

V.

v2.7

REQUTES COMPLEXES
A.

REQUTES

21. Affichez les patients qui ont vu un gnraliste et un spcialiste le mme jour
22. Affichez les visites o a t prescrit doliprane ou aspegic (ou logique)
Combien d'instances de la relation prescription sont ncessaires pour tester la prsence simultane sur une
mme prescription de N mdicaments ?
23.
24.
25.

Affichez les visites o ont t prescrits doliprane et aspgic


Affichez les noms des patients qui sont ressortis d'une seule et unique visite sans prescription
Affichez les patients qui ont vu un autre mdecin que leur mdecin rfrent plus de 3 fois en janvier
2012
26. Affichez les patients qui n'ont jamais vu leur mdecin rfrent
27. Affichez les patients qui ont vu des mdecins de toutes les spcialits
28. Afficher le nombre de personnes qui ont plus de trois ayants droit

B.

VI.

AUTO-VALUATION
Vous devriez dsormais tre en mesure de pouvoir vous auto-valuer sur lensemble des critres
de la grille prsente la fin de ce document.

SENTRANER SE JUSTIFIER

Sur lespace Moodle du module vous trouverez un QCM vous permettant de vous entraner, non seulement au
niveau de la syntaxe SQL, mais aussi au niveau de la justification permettant de montrer la cohrence (ou non)
dune requte avec la question pose.

Laurent BRISSON et Philippe PICOUET

26/89

[TP LE LANGAGE SQL]

v2.7

GRILLE DVALUATION CRITERIE


Tout au long de votre apprentissage, en TD, TP ou lors de vos rvisions, essayez dutiliser la grille suivante pour
valuer votre niveau.
Critre

A
L'tudiant russit
crire, de manire
cohrente avec la
question, toutes les
Cohrence requtes complexes
utilisant ngation,
imbrication,
regroupement ou
auto-jointure.
Justification en
utilisant un autre
modle formel
Justification
(algbre relationnel
ou logique du 1er
ordre).

Minimalit

Qualit de
la syntaxe

B
L'tudiant russit
crire, de manire
cohrente avec la
question, la moiti des
requtes complexes
utilisant ngation,
imbrication,
regroupement ou autojointure.

L'tudiant russit
crire, de manire
cohrente avec la
question, une
requte simple
ncessitant une
jointure.

L'tudiant n'est pas


capable d'effectuer
une restriction ou une
jointure.

Justification
Justification complte et
comprhensible mais
comprhensible.
incomplte.

Simple affirmation ou
justification non
comprhensible.

L'tudiant crit
minimalement toutes
les requtes.

L'tudiant crit
minimalement la moiti
des requtes.

L'tudiant a montr
qu'il sait crit
minimalement au
moins une requte.

Ltudiant ncrit
minimalement
aucune de ses
requtes.

La syntaxe est
parfaitement
respecte.

Certains des mots cls


suivants sont mal
utiliss et ne sont pas
dans l'ordre : GROUP BY,
HAVING, EXISTS, IN.

Certains des mots


cls suivants sont mal
utiliss ou (exclusif)
ne sont pas dans
l'ordre : SELECT,
FROM, WHERE, LIKE,
ORDER BY.

Certains des mots cls


suivants sont mal
utiliss et ne sont pas
dans l'ordre : SELECT,
FROM, WHERE, LIKE,
ORDER BY.

Laurent BRISSON et Philippe PICOUET

27/89

[TD THORIE DE LA NORMALISATION]

v2.3

TD THORIE DE LA NORMALISATION
SYSTMES DINFORMATION ET BASES DE DONNES

SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
Contexte .................................................................................................................................................................. 1
I.

Dpendances fonctionnelles .......................................................................................................................... 2

II.

Formes normales ............................................................................................................................................ 4

III.

Dcomposition dune relation ........................................................................................................................ 6

PR-REQUIS
Aucun

APPROFONDISSEMENTS
la suite de ce TD, vous devez obligatoirement lire les cours suivants :

Cls primaires et dpendances fonctionnelles


Introduction la thorie de la normalisation
Qualit dune relation : les formes normales
Qualit dune dcomposition relationnelle
Algorithmes de dcomposition relationnelle

CONTEXTE
Dans le cadre du TD prcdent sur le modle relationnel et lintgrit des donnes nous avons vu que, pour
faciliter le maintien de lintgrit des donnes lors des mises jour, il tait ncessaire de minimiser les
redondances.
Dans le cadre de ce TD, nous allons dcouvrir progressivement quelques notions de la thorie de la
normalisation qui vont vous donner les outils formels pour minimiser ces redondances. Cette approche sera
mettre en regard de l'approche conceptuelle (voir modlisation conceptuelle), plus utile pour une
apprhension macroscopique des donnes, pour rsoudre des problmes de redondance au niveau micro.

Laurent BRISSON et Philippe PICOUET

28/89

[TD THORIE DE LA NORMALISATION]

I.

v2.3

DPENDANCES FONCTIONNELLES

Considrons la relation EMP-DEPT illustre par un extrait dans le Tableau 1 et qui a pour schma :
EMP-DEPT (empno, ename, job, mgr, hiredate, comm, deptno, dname, loc). Lexpert en donnes accompagne
cet exemple des informations suivantes :

EMPNO
7698
7499
7521
7904
7369
7788
7566
7902
7839
7934
7904
7788

Un employ est identifi par un numro. Il est dcrit par un nom, une date dembauche, un salaire et
une commission.
Un dpartement est identifi par un numro. Il est dcrit par un nom et une localisation.
Un employ a un et un seul manager.
Un employ peut avoir plusieurs jobs, mais un seul dans un dpartement donn.
ENAME
BLAKE
ALLEN
WARD
DOE
SMITH
SCOTT
JONES
FORD
KING
MILLER
DOE
SCOTT

JOB
MANAGER
SALESMAN
SALESMAN
CLERK
CLERK
ANALYST
MANAGER
ANALYST
PRESIDENT
CLERK
SALESMAN
ANALYST

MGR
7839
7698
7698
7566
7902
7566
7839
7566
NULL
7566
7566
7566

HIREDATE
05/01/2081
02/20/2081
02/22/2081
12/11/2099
12/17/2080
12/09/2081
04/02/2081
12/03/2081
11/17/2081
01/23/2082
12/11/2099
12/09/2081

SAL
2850
1600
1250
2500
800
3000
2975
3000
5000
1300
2500
3000

COMM
NULL
300
500
300
NULL
NULL
NULL
NULL
NULL
NULL
300
NULL

DEPTNO
40
30
30
20
20
20
20
20
10
10
30
10

DNAME
SALES
SALES
SALES
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
ACCOUNTING
ACCOUNTING
SALES
ACCOUNTING

LOC
BOSTON
CHICAGO
CHICAGO
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DENVER
DENVER
CHICAGO
DENVER

Tableau 1 - Table EMPLOYE

Dfinition [Dpendance fonctionnelle] Pour une relation R(X,Y,Z) o X, Y et Z sont des sous-ensembles de
lensemble des attributs, on dit quil existe une dpendance fonctionnelle (DF) de X vers Y note X  Y si
chaque valeur de X correspond au plus une valeur de Y.
Remarque : Lexpression X  Y peut galement sexprimer en disant que X dtermine fonctionnellement Y
ou que Y dpend fonctionnellement de X . Dans ce contexte, si deux tuples ont la mme valeur pour X, alors
ils auront la mme valeur pour Y.
1.

Soit la relation EMP-DEPT dfinie prcdemment. Les dpendances fonctionnelles suivantes sont-elles
vrifies : EMPNO  ENAME, ENAME  EMPNO ?

.
2.

Peut-on dire quune dpendance fonctionnelle est symtrique ?

Laurent BRISSON et Philippe PICOUET

29/89

[TD THORIE DE LA NORMALISATION]

v2.3

Dfinition [Dpendance fonctionnelle lmentaire] Soit X un ensemble dattributs dune relation R et A un


attribut unique de R et non inclus dans X.
X A est dite lmentaire si A ne dpend pas dun sous-ensemble de X. C'est--dire quil nexiste aucun X X
tel que X  A.
Selon la dfinition, on peut voir que X  A est une dpendance fonctionnelle lmentaire si on ne peut pas
enlever un attribut X sans changer la dpendance fonctionnelle.
3.

Toujours dans le contexte de la relation EMP-DEPT, dterminez pour chacune des propositions
suivantes sil sagit dune dpendance fonctionnelle. Si oui, dterminez si celle-ci est lmentaire ou
non.
a)
b)
c)
d)

4.

JOB  ENAME
ENAME  JOB
DEPTNO  MGR
DEPTNO  DNAME

EMPNO, DNAME  JOB


EMPNO, DNAME  MGR
EMPNO, DEPTNO  JOB
EMPNO, DEPTNO  LOC

e)
f)
g)
h)

Dduisez la clef primaire de la relation EMP-DEPT partir des informations donnes en dbut
dexercice.

.
5.

Aprs avoir rflchi sur lexemple de la relation EMP-DEPT, compltez ci-dessous la dfinition de cl
primaire en utilisant le formalisme des dpendances fonctionnelles :

Dfinition [Clef primaire] Soit R(A1, , An) un schma de relation, soit X un sous-ensemble de A1, , An, on dit
que X est une cl primaire de R si et seulement si :
1 ..
2 .

AUTO-VALUATION
A lissu de cet exercice vous devriez vous situer au niveau A concernant le critre suivant. Est-ce le cas ?
Critre

Identifier les
dpendances
fonctionnelles

A
L'tudiant sait
traduire, avec le bon
formalisme, des
hypothses en une
srie de dpendances
fonctionnelles
lmentaires.

B
L'tudiant sait
traduire des
hypothses en une
srie de dpendances
fonctionnelles, une
faute d'tourderie est
admise.

L'tudiant fait une


erreur d'interprtation
des hypothses mais
sait exprimer une srie
de dpendances
fonctionnelles.

L'tudiant ne sait
pas dfinir une
srie de
dpendances
fonctionnelles.

Laurent BRISSON et Philippe PICOUET

30/89

[TD THORIE DE LA NORMALISATION]

II.

v2.3

FORMES NORMALES

Les formes normales visent exprimer la qualit d'une structure de tableau au regard des contraintes
relationnelles : puissance du langage de requtes, gestion de la redondance, etc. Les formes normales les plus
utilises sont les trois premires et la forme normale de BoyceCodd (BCNF), mais elles ne permettent pas de
traiter l'ensemble des situations. Dans ce TD, nous ne prsentons que les trois premires formes normales qui
sont les plus utilises. Nous vous renvoyons au cours pour des informations sur la BCNF ainsi que ses limites.
Dfinition [Premire forme normale] Une relation est en premire forme normale (1NF) si tout attribut est
atomique.
La premire forme normale exprime simplement les contraintes structurelles du modle relationnel. On
retrouve ces contraintes dans les langages de requtes relationnels qui sont peu l'aise pour interroger des
attributs complexes : bien que SQL gre depuis longtemps les donnes de type date, la manipulation d'attributs
2
structures est complique (vous pouvez nanmoins chercher d'autres informations sur les systmes NF ou
Non First Normal Form). Le terme atomique signifie donc ici que lattribut a un type de base et nest pas
une structure, mme simple, compos dlments de diffrentes natures ou d'une liste d'lments.
1.

Pour chacune des relations suivantes et daprs vos connaissances en SQL, identifiez en quoi chaque
structure serait complexe interroger en SQL.
a. LIVRAISON (nfournisseur, listeVilles)
b. LIVRAISON (nfournisseur, ville)
c. CLIENT (nclient, nom, prnoms)
d. CLIENT (nclient, nom, prnom1, prnom2)
e. CLIENT (nclient, nom, prnom, adresse)

Dfinition [Deuxime forme normale] Une relation est en deuxime forme normale (2NF) si et seulement
si elle est en premire forme normale et que tout attribut nappartenant pas une cl est en dpendance
fonctionnelle lmentaire de toute la cl et non dune partie seulement.
La deuxime forme normale vise dtecter une des principales sources de redondance dans une relation,
savoir la prsence d'attributs qui ne dpendent que d'une partie de la cl. De cette dfinition, on peut dduire
immdiatement qu'une relation dont la cl est compose d'un unique attribut est toujours en 2NF (sous
rserve qu'elle soit aussi en 1NF).
2.

Pour chacune des relations suivantes, et daprs vos connaissances sur les donnes concernes,
proposez des dpendances fonctionnelles et indiquez si la relation est 2NF :
a. PRET (nisbn, nadherent, date, nom_adherent, ville_adherent, titre_livre)
b. PRET (nisbn, date, nadherent, nom_adherent, ville_adherent, titre_livre)
c. PRET (nisbn, nadherent, date)
d. PRET (nexemplaire, date, nadherent)

Laurent BRISSON et Philippe PICOUET

31/89

[TD THORIE DE LA NORMALISATION]

v2.3

Dfinition [Troisime forme normale] Une relation est en troisime forme normale (3NF) si et seulement
si elle est en deuxime forme normale et que tout attribut nappartenant pas une clef ne dpend pas
fonctionnellement dun attribut qui nappartient pas une cl.
Outre qu'elle permet d'identifier une nouvelle source de redondance dans laquelle un attribut non cl dpend
fonctionnellement d'un (ensemble de) d'attribut(s) non cl(s), il est important de souligner, comme pour la
2NF, la progressivit "force" des formes normales. En effet, le critre de passage en 3NF est totalement
orthogonal celui de la 2NF.
3.

4.

Pour chacune des relations suivantes et daprs vos connaissances sur les donnes concernes,
identifiez les dpendances fonctionnelles et indiquez si la relation est en troisime forme normale ou
non; concluez en spcifiant le risque de redondance.
a. FOURNISSEUR (nfournisseur, ville, pays) dans le contexte o un fournisseur nest tabli que
dans une seule ville (considrez le cas o chaque nom de ville est unique et le cas o des
villes de mme nom peuvent se retrouver dans diffrents pays)
b. PERSONNEL (nagent, nom, dpartement_recherche, btiment)
c. PERSONNEL (nagent, nom, dpartement_recherche, statut_agent)
d. VOL( nvol, compagnie, heure, destination, modele_avion, nombre_passagers)
e. VOL( nvol, compagnie, heure, destination, modele_avion, nombre_places)
Selon vous, quel est lintrt davoir une relation exprime en troisime forme normale ?

AUTO-VALUATION
A lissu de cet exercice vous devriez vous situer au niveau A concernant les critres suivants. Est-ce le cas ?
Critre

Identifier
les cls
d'une
relation

Niveau B + L'tudiant sait


dduire les cls composites
d'une relation partir d'un
ensemble de dpendances
fonctionnelles.

Niveau C + L'tudiant sait


dduire les cls d'une
relation partir d'un
ensemble de
dpendances
fonctionnelles.

L'tudiant est
L'tudiant ne
capable de dfinir la
comprend pas le
notion de cl de
concept de cl.
manire intuitive.

Qualifier
une
relation

L'tudiant donne une


argumentation complte
pour justifier la qualit des
relations.

L'tudiant sait justifier la


qualit des relations mais
son argumentation est
incomplte.

L'tudiant connait
les dfinitions des
formes normales
mais ne sait pas du
tout les appliquer.

L'tudiant ne
connait pas les
dfinitions des 3
premires formes
normales.

Laurent BRISSON et Philippe PICOUET

32/89

[TD THORIE DE LA NORMALISATION]

III.

v2.3

DCOMPOSITION DUNE RELATION

L'objectif de cette section est maintenant de voir comment obtenir, partir d'une relation de faible qualit en
termes de formes normales (i.e. prsentant de la redondance), plusieurs relations qui prsentent moins de
redondance tout en conservant la richesse de l'information initiale (prservation des donnes) mais aussi les
contraintes entre ces donnes (prservation de dpendances fonctionnelles).

A.

NOTION DE DCOMPOSITION

Considrons la relation VOITURE(nimmatriculation, modle, marque, puissance, couleur) laquelle on associe


lensemble de dpendances fonctionnelles suivant : {nimmatriculation  modle, modle  marque,
modle  puissance, nimmatriculation  couleur}
1.

me

Justifiez le fait que la relation VOITURE nest pas en 3

forme normale.

.
me

tant donn que la relation VOITURE nest pas en 3


forme normale, nous voulons la dcomposer en
me
plusieurs relations respectant la 3 forme normale. Nous proposons les deux dcompositions suivantes :
A. V1 (nimmatriculation, modle, couleur)
V2 (modle, puissance, marque)

2.

B.

V1 (nimmatriculation, modle)

V2 (modle, couleur, puissance)

V3 (modle, marque)
me

Pour laquelle des deux dcompositions, lensemble des relations respecte la 3

forme normale ?

Dfinition [Dcomposition dune relation] La dcomposition dun schma de relation R(A1, , An) est son
remplacement par une collection de schmas de relations (R1, , Rn) tel que :





3.

Les dcompositions A et B sont-elles valides au sens de la dfinition prcdente ?

Laurent BRISSON et Philippe PICOUET

33/89

v2.3

[TD THORIE DE LA NORMALISATION]

4.

En vous basant sur les donnes de la table VOITURE ci-dessous, et pour chacune des dcompositions A
1
et B, reprsentez sous forme de plusieurs tables les relations obtenues par projection

Nimmatriculation
872 RH 75
975 AB 29

Modle
R21
R21

Puissance
7
7

Couleur
Bleue
Beige

Marque
Renault
Renault

Tableau 2 - Table VOITURE

5.

Dans le contexte de la dcomposition A, quelle opration devez-vous effectuer pour retrouver la


marque de la voiture dimmatriculation 872 RH 75 ? Notez que cette opration sappelle une jointure

 .
et se note de la faon suivante :  

Dfinition [Dcomposition prservant les donnes] Une dcomposition dune relation R en n relations
R1, , Rn prserve les donnes si et seulement si, pour toute extension de R, on a :

  R    R 
Proprit Une dcomposition en deux relations prserve les donnes si et seulement si lattribut de jointure
de la recomposition est cl dune au moins des deux relations.
6.
7.

Les dcompositions A et B prservent-elles les donnes ? Dmontrez-le.


Pour chacune des dcompositions A et B identifiez lensemble des dpendances fonctionnelles
lmentaires. Exprimez ce rsultat sous forme dun graphe de dpendances o les nuds sont les
attributs et les arcs les dpendances fonctionnelles.

Dfinition [Dcomposition prservant les dpendances] Une dcomposition (R1, , Rn) de R prserve les
2
dpendances fonctionnelles si la fermeture transitive des dpendances fonctionnelles de R est la mme que
celle de lunion des dpendances fonctionnelles des relations R1, , Rn.
8.
9.

Pour chacun des graphes prcdents ajoutez en couleur les arcs reprsentant les dpendances
fonctionnelles dduites : vous obtenez ainsi les graphes de fermeture transitive.
Les dcompositions A et B prservent-elles les dpendances ? Dmontrez-le (pensez utiliser les
graphes de la prcdente question).

La projection dune relation R sur un sous-ensemble X de ses attributs consiste crer une relation R ne
contenant que lensemble dattributs X et pour laquelle tous les tuples en doublons ont t supprims.
2
+
La fermeture transitive F dun ensemble de dpendances fonctionnelles F est lunion des dpendances
fonctionnelles de F avec lensemble des dpendances fonctionnelles de F dduites par transitivit  !  :
 "
  ! 
Laurent BRISSON et Philippe PICOUET | TELECOM Bretagne |

34/89

v2.3

[TD THORIE DE LA NORMALISATION]

B.

ALGORITHME DE DCOMPOSITION

Algorithme [Dcomposition dune relation] Soit une relation R de cl K et son ensemble de dpendances
fonctionnelles F :
3

1. Chercher une couverture minimale G pour F.


2. Raliser une partition {F1, , Fn} de l'ensemble des DF tel que dans chaque Fi les dpendances aient la mme
partie gauche.
3. Crer pour chaque Fi une relation Ri avec l'ensemble des attributs de Fi.
4. Si aucune des relations produites ne contient une cl de R, ajouter dans la dcomposition finale une relation
compose des attributs formant la clef de R.
Cet algorithme permet une dcomposition dune relation unique en plusieurs relations en troisime forme
normale. Jusquen troisime forme normale la dcomposition se fait sans perte de donnes et sans perte de
dpendances fonctionnelles.
Appliquez lalgorithme de dcomposition aux deux relations ci-dessous :
1.
2.

FOURNISSEUR (nfournisseur, ville, frais) sachant quun fournisseur ne livre que dans une seule ville et
que les frais dpendent uniquement de la ville desservie.
VEHICULE_FONCTION (nagent, nvhicule, nom, prnom, marque_vhicule, puissance_vhicule,
couleur_vhicule) qui permet de grer pour chaque agent le ou les vhicules qu'il est autoris
utiliser (ventuellement en partage avec d'autres agents) dans le cadre de ses dplacement
4
professionnels.

La couverture minimale d'un ensemble de dpendances fonctionnelles est un sous ensemble minimum de
dpendances fonctionnelles lmentaires permettant de gnrer toutes les autres au moyen des proprits
dAmstromg prsentes ci-dessous.
Soit un ensemble F de dpendances fonctionnelles entre les attributs d'un schma de relation R(X,Y,Z). Nous
pouvons dfinir les proprits suivantes :

transitivit : si X  Y, et Y  Z, alors X  Z,
augmentation : si X  Y, alors XZ  Y pour tout groupe Z d'attributs appartenant au schma de
relation,
rflexivit : si X contient Y, alors X  Y.

partir de ces trois axiomes de base, on peut dduire d'autres rgles :

union : si X  Y et Y  Z, alors X  YZ,


pseudo-transitivit : si X  Y et WY  Z, alors WX  Z,
dcomposition : si X  Y et Z contenu dans Y, alors X  Z.

Laurent BRISSON et Philippe PICOUET | TELECOM Bretagne |

35/89

v2.3

[TD THORIE DE LA NORMALISATION]

AUTO-VALUATION

A lissu de cet exercice vous devriez vous situer au niveau C concernant les critres suivants. Est-ce le
cas ?
La lecture des approfondissements recommands en dbut de TD devrait vous permettre datteindre
le niveau A qui est vis.

Critre

Appliquer un
algorithme de
dcomposition
sur une relation

Qualifier une
dcomposition

A
Niveau B + L'tudiant
sait utiliser l'algorithme
sur un ensemble de
dpendances
fonctionnelles
complexes (multiplicit
des couvertures
minimales, sources
multiples, etc.).
Niveau B + L'tudiant
maitrise la proprit de
prservation des
dpendances
fonctionnelles d'une
dcomposition et sait
l'illustrer sur un
exemple.

Niveau C + L'tudiant
connat les cas limites
d'utilisation de
l'algorithme (garantie
de la prservation
des donnes, etc.).

L'tudiant sait
appliquer
l'algorithme sur un
exemple simple.

L'tudiant ne sait
pas appliquer ces
algorithmes.

Niveau C + L'tudiant
matrise la proprit
de prservation des
donnes d'une
dcomposition et sait
la justifier sur un
exemple.

L'tudiant sait
identifier une
dcomposition et
produire ses
instances partir de
l'instance de la
relation universelle.

L'tudiant ne sait
pas identifier une
dcomposition
d'une relation
universelle.

Laurent BRISSON et Philippe PICOUET | TELECOM Bretagne |

36/89

[TP - LE MCANISME TRANSACTIONNEL]

v2.6

TP - LE MCANISME TRANSACTIONNEL
SOMMAIRE
Sommaire ................................................................................................................................................................ 1
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
I.

Introduction .................................................................................................................................................... 2

II.

Proprits des transactions : ACID ................................................................................................................. 3

III.

Mise en place du TP ........................................................................................................................................ 4

IV.

Premire approche des transactions : commit et rollback ............................................................................. 5

V.

Contrainte applicative ou contrainte BD ? ..................................................................................................... 6

VI.

Dcouverte des niveaux disolation................................................................................................................ 8

VII. Erreurs de srialisation et interblocages ........................................................................................................ 9


VIII. Bilan sur les transactions et leurs niveaux disolation .................................................................................. 10
IX.

Auto-valuation ............................................................................................................................................ 11

X.

Bibliographie ................................................................................................................................................. 11

XI.

Annexes ........................................................................................................................................................ 12

PR-REQUIS
Aucun

APPROFONDISSEMENTS
A la suite de ce TP, vous devez obligatoirement lire les cours suivants :

Introduction aux transactions

Isolation des transactions

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON et Philippe PICOUET

37/89

[TP - LE MCANISME TRANSACTIONNEL]

I.

v2.6

INTRODUCTION

L'objectif de ce TP est de rflchir aux problmes qui peuvent survenir lors de modifications d'une base de
donnes et de son partage entre diffrents utilisateurs, spcialement quand ceux-ci veulent modifier ces
donnes simultanment. Le partage d'une base de donnes rpond des besoins diffrents du partage d'un
fichier dans un systme d'exploitation.
Rappelons qu'une base de donnes (relationnelle dans notre cas) est un ensemble cohrent, intgre et souvent
volumineux de donnes. De ce fait, la modification de donnes est une action dlicate car il est trs difficile,
voire tout fait impossible, de vrifier visuellement que la modification ralise ne viole pas l'intgrit des
donnes. La diminution des redondances, voire leur limination quand c'est possible, permet de rduire les
risques d'incohrence. Mais dans tous les cas, il est essentiel que le SGBD propose des outils pour contrler et
maintenir cette intgrit.
Le mcanisme de transactions vise rpondre ces diffrentes proccupations. C'est l'objectif de ce TP de
l'explorer et de comprendre son comportement et les degrs de libert offerts par le SGBD.
La base de donnes qui sert de support ce TP est une base d'emprunt de livres par des lecteurs sans gestion
des historiques.
Aprs une prsentation du principe et des proprits des transactions (Section suivante), nous dcrirons le
dmarrage oprationnel du TP (Section 3). Le travail raliser dans le TP dmarre dans la section 4 avec la
dcouverte des commandes SQL ddies aux transactions et un premier aperu de certaines de ces proprits
(Section 4). En section 5, nous revenons sur le problme de cohrence des donnes en nous interrogeant au
passage sur les rles respectifs des applications et du SGBD dans le contrle de la cohrence des donnes. La
section 6 introduira la notion de niveau d'isolation pour permettre au contrle transactionnel d'tre plus ou
moins souple (en contrepartie d'un fonctionnement plus risqu). Enfin, la section 7 permettra de mettre en
place une situation d'interblocage entre deux utilisateurs afin d'analyser sa cause et ses solutions. La section 8
est ddie un bilan de l'activit.
La proprit de durabilit n'est pas teste dans ce TP.

Laurent BRISSON et Philippe PICOUET

38/89

[TP - LE MCANISME TRANSACTIONNEL]

II.

v2.6

PROPRITS DES TRANSACTIONS : ACID

Du point de vue d'un utilisateur, une transaction dsigne un ensemble de mises jour respectant un ensemble
de proprits. L'acronyme ACID dsigne ces proprits : Atomicit, Consistance, Isolation et Durabilit. Les
transactions respectent un modle simple de succs ou dchec. Soit la transaction est valide et tous les
changements sont effectus ; soit la transaction choue et aucune modification nest effectue, ltat initial
tant restaur.

Atomicit
Une transaction permet de grouper des changements sur les tables et les lignes afin de former
une unique opration indivisible. Ainsi tous les changements apparaissent ou alors aucun d'entre
eux. Voil pourquoi l'tat initial est restaur si une transaction choue.

Cohrence
Une transaction n'opre que sur un ensemble cohrent de donnes et ne doit tre valide que
si elle laisse les donnes dans un tat cohrent. Les donnes sont dites cohrentes tant qu'elles
respectent les contraintes d'intgrit. Au cours d'une transaction, les donnes peuvent
cependant tre temporairement incohrentes.

Isolation
Le systme prend en charge l'excution des transactions dans un contexte multi-utilisateurs o
les donnes sont partages. Dans le mode par dfaut, READ COMMITED, les effets d'une
transaction sont invisibles pour toutes les transactions concurrentes tant que cette transaction
n'a pas t valide (COMMIT).

Durabilit
Lorsqu'une transaction est valide (COMMIT), ses effets persistent dans le temps mme en cas
de panne du systme. En cas de panne durant la transaction, aucune modification n'est
effectue et l'tat initial est restaur grce un ROLLBACK.

Laurent BRISSON et Philippe PICOUET

39/89

[TP - LE MCANISME TRANSACTIONNEL]

III.

v2.6

MISE EN PLACE DU TP
A.

INSTALLATION DES DONNES

Les donnes pour effectuer le TP seront stockes sur Oracle sous la forme de deux relations (ou tables) :
Lecteur et Livre. La table Livre contient des informations sur les diffrents livres de la bibliothque, ainsi que la
rfrence du lecteur qui la emprunt. La table Lecteur contient des informations sur les lecteurs inscrits la
bibliothque.
Le script de cration de la base de donnes script_install_base_biblio.sql est accessible sur lespace Moodle du
module.
1. Enregistrer le script la racine de votre compte.
2. Lancez SQL PLUS (voir le document daccs Oracle sur Moodle) en utilisant votre login Unix et le mot de
passe attribu par Oracle.
3. Chargez le script, soit par un coup-coll dans l'interprteur SQL, soit au moyen de la commande : start
install_transactions_oracle.sql;

B.

CRATION DUN ENVIRONNEMENT CONCURRENT

Afin de constater ce qui se droule lorsque plusieurs personnes interagissent sur la mme base de donnes,
vous allez, tout au long de ce TP, simuler un environnement concurrent.
Pour cela ouvrez une deuxime session SQL PLUS avec le mme login/password que la prcdente. Partagez
votre cran avec les 2 fentres, celle sur la gauche sera la session A, celle sur la droite la session B.
Ouvrez le fichier de script de cration de la base de donnes afin de pouvoir lire le code des procdures lorsque
vous les utilisez lors de ce TP.

Consultez maintenant lannexe de


ce document pour avoir plus
dinformations sur les tables et les
vues utiliser !

Laurent BRISSON et Philippe PICOUET

40/89

[TP - LE MCANISME TRANSACTIONNEL]

IV.

v2.6

PREMIRE APPROCHE DES TRANSACTIONS : COMMIT ET ROLLBACK

Attention ! Avant demprunter un livre, assurez-vous, chaque fois, que ce livre nest pas dj emprunt !

A.

1.

2.
3.
4.

Dans la session A, observez ltat des relations en utilisant la vue infos. Ajoutez ensuite un nouveau
lecteur et un nouvel emprunt la base (vous pouvez si vous le souhaitez utiliser les procdures
stockes inserer_lecteur et emprunter).
Interrogez les relations dans la session B en utilisant la vue infos. Que constatez-vous ?
Dans la session A, validez la mise jour avec la commande commit ; .
Que constatez-vous dans la session B ?

B.
1.
2.
3.
4.
5.

VALIDATION DUNE TRANSACTION

RETOUR A LTAT DORIGINE

Dans la session A, ajoutez successivement deux nouveaux lecteurs.


Sont-ils prsents dans la session B ?
Dans la session A, excutez la commande rollback ; .
Que constatez-vous dans chacune des sessions ?
Quelle(s) proprit(s) des transactions avez vous ainsi test ?

C.

BILAN

Daprs votre exprience sur les questions prcdentes rpondez aux questions suivantes sans excuter de
requtes, puis faites validez vos rponses par votre enseignant :
1. Dans la session A, on demande la collection de Risibles amours et on obtient Folio .
Dans la session B on modifie la collection de Risibles amours en Pocket et on valide la
transaction par un commit ; . Quelle est dsormais la collection de Risibles amours au travers
de la session A ?
a. Folio
b. Pocket
2. Dans la session A, on compte le nombre de livres et on obtient 15. Dans la session B, deux livres sont
ajouts et la transaction valide par un commit ; . Combien obtient-on dsormais de livres au
travers de la session A ?
a. 15
b. 16
c. 17

Laurent BRISSON et Philippe PICOUET

41/89

[TP - LE MCANISME TRANSACTIONNEL]

V.

v2.6

CONTRAINTE APPLICATIVE OU CONTRAINTE BD ?


A.

COHRENCE ET CONTRAINTES D'INTGRIT

Excutez la procdure supprimer_lecteur(2). La base de donnes qui rsulte de cette mise jour est
elle intgre ? Justifiez votre rponse.

.
.
.
.

Dfinissez les contraintes de cls primaires et de cls rfrentielles sur le schma de la base de donnes
(cherchez sur le web les syntaxes d'ajout de cl primaire et rfrentielle pour le SGBD Oracle).
Pour les deux types de contrainte, proposez une requte INSERT et une requte UPDATE qui testent le bon
comportement du systme en matire de contrainte d'intgrit :
Pour la cl primaire de lecteur :
1.
2.

Pour la cl rfrentielle de livre vers lecteur :


1.
2.

Pour vous, l'intgrit des donnes, c'est plutt :


a.
b.
c.

Un problme de codage de la procdure emprunter.


Un problme de contrainte d'intgrit au niveau de la base de donnes.
Les deux.

Laurent BRISSON et Philippe PICOUET

42/89

[TP - LE MCANISME TRANSACTIONNEL]

B.
1.
2.
3.
4.

2.
3.

DEUX EMPRUNTS SIMULTANS

Dans la session A, le lecteur n1 emprunte le livre n6 tandis que dans la session B, le lecteur n2
emprunte le mme livre. Que constatez-vous ?
Effectuez un commit dans la session A.
Interrogez les relations depuis les deux sessions. Que constatez-vous ?
Effectuez un commit dans la session B. Que constatez-vous ?

C.
1.

v2.6

SUPPRESSION DUN LIVRE EN COURS DEMPRUNT

Dans la session A, le lecteur n3 emprunte le livre n7 tandis que dans la session B le livre n7 est
supprim au moyen de la procdure supprimer_livre. Que constatez-vous ?
Effectuez un commit dans la session A puis interrogez les relations depuis les deux sessions. Que
constatez-vous ?
Effectuez un commit dans la session B puis interrogez les relations depuis les deux sessions. Que
constatez-vous ?

Pour finir, rpondez aux questions suivantes :

Comment justifiez-vous ce comportement ?

.
.
.
.

Proposez une nouvelle requte pour la procdure supprimer_livre rsolvant le problme en vous
inspirant de la procdure emprunter.

.
.
.
.
.
.
Faites valider vos rponses par votre encadrant.

Laurent BRISSON et Philippe PICOUET

43/89

[TP - LE MCANISME TRANSACTIONNEL]

VI.

v2.6

DCOUVERTE DES NIVEAUX DISOLATION

Vous trouverez dans le cours une prsentation de la srialisabilit, qui est le principe sur lequel on s'appuie
pour dcider que l'excution simultane de plusieurs transactions prsente ou non un risque d'incohrence en
matire d'isolation.
Pourtant, ce principe de srialisabilit est si contraignant que la norme ANSI/ISO SQL a dfini diffrents niveaux
disolation, dont trois plus faibles que le niveau srialisabilit. Si leur utilisation apporte moins de contrainte (et
gnre moins de conflits), ils risquent nanmoins de laisser passer des situations sources d'erreurs. Ces niveaux
sont :

READ UNCOMMITED
READ COMMITED
REPETABLE READ
SERIALIZABLE

Le SGBD ORACLE en implmente deux dentre eux : READ COMMITED, qui est le comportement par dfaut (que
vous avez utilis jusqu'ici), et SERIALIZABLE, le comportement "de rfrence" que vous allez maintenant
tudier.

A.

LECTURES REPRODUCTIBLES

Modifiez le niveau disolation en excutant la commande suivante dans la session A :


SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;
1. Dans la session A, affichez le nom du lecteur n1.
2. Dans la session B, modifiez le nom du lecteur n1 au moyen de la commande suivante :
UPDATE lecteur SET nom =toto WHERE num_lecteur=1 ;
Validez avec la commande : commit ;
3. Dans la session A, affichez le nom du lecteur n1. Que constatez-vous ?
4. Effectuez un commit dans la session A puis affichez de nouveau le nom du lecteur n1. Que constatezvous ?

B.

DISPARITION DES FANTMES

Modifiez le niveau disolation en excutant la commande suivante dans la session A :


SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;
1.
2.
3.
4.

Dans la session A, comptez le nombre de lecteurs.


Dans la session B, ajoutez un lecteur. Validez avec un commit ; .
Dans la session A, comptez le nombre de lecteurs. Que constatez-vous ?
Effectuez un commit dans la session A puis comptez le nombre de lecteurs. Que constatez-vous ?

Laurent BRISSON et Philippe PICOUET

44/89

[TP - LE MCANISME TRANSACTIONNEL]

C.

v2.6

BILAN DU COMPORTEMENT DU NIVEAU SERIALIZABLE

Daprs votre exprience sur les questions prcdentes rpondez tout dabord aux questions suivantes sans
excuter de requtes, puis faites validez vos rponses par votre enseignant :
Dans la session A, on demande la collection de Risibles amours et on obtient Folio . Dans la
session B on modifie la collection de Risibles amours en Pocket et on valide la transaction par
un commit ; . Quelle est dsormais la collection de Risibles amours au travers de la session A ?
a. Folio
b. Pocket
5. Dans la session A, on compte le nombre de livre et on obtient 15. Dans la session B un livre est ajout
et la transaction valide par un commit ; . Combien obtient-on dsormais de livres au travers de
la session A ?
d. 15
a. 16

VII.

ERREURS DE SRIALISATION ET INTERBLOCAGES

Les mcanismes transactionnels s'appuient essentiellement sur l'utilisation de techniques de verrouillage (ce
qu'on appelle smaphore en programmation concurrente). Le dfaut de ces techniques rside essentiellement
dans le risque de voir apparaitre des interblocages entre des transactions (processus en programmation
concurrente) qui accdent des ressources identiques. En programmation, on anticipe ces risques de conflits
au moment de la conception des programmes. En bases de donnes, on ignore par principe les transactions qui
vont parvenir au SGBD. La rduction du niveau d'isolation est donc une rponse possible pour rduire ce
risque. Nous l'illustrons dans cette section.
Modifiez le niveau disolation en excutant la commande suivante dans la session A :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;
1. Dans la session A, affichez le nom du lecteur n1.
2. Dans la session B, modifiez le nom du lecteur n1
3. Dans la session A, modifiez le nom du lecteur n1 en choisissant un nom diffrent de la session B. Que
constatez-vous ?
4. Effectuez un commit dans la session B puis affichez de nouveau le nom du lecteur n1 dans la session
A. Que constatez-vous ?
Expliquez ce quil se serait pass si la premire transaction (de la session A) navait pas t en mode
SERIALIZABLE.
.
.
.

Laurent BRISSON et Philippe PICOUET

45/89

[TP - LE MCANISME TRANSACTIONNEL]

VIII.

v2.6

BILAN SUR LES TRANSACTIONS ET LEURS NIVEAUX DISOLATION


A.

PHNOMNES SURVENANT LORS DES TRANSACTIONS

Revenons sur la dfinition des proprits que peut avoir une transaction :

Lecture sale (DIRTY READ) : il est possible de lire des donnes qui nont pas t valides par un
commit. Lintgrit des donnes nest pas assure.
Lecture non reproductible (NON REPETABLE READ) : il est possible au cours dune mme transaction
de lire un temps t1 des informations sur une ligne, et un temps t2 des informations diffrentes.
Lecture fantme (PHANTOM READ) : il est possible au cours dune mme transaction de voir au cours
du temps apparatre des lignes.

B.

NIVEAUX DISOLATION ANSI

Rpondez aux questions suivantes :

Daprs-vous, quappelle-t-on fantme dans le cadre des transactions ?


Quelle est la diffrence de comportement entre le niveau par dfaut, READ COMMITED, et le niveau
SERIALIZABLE ?
Dans quel contexte pensez-vous pouvoir utiliser le niveau disolation SERIALIZABLE ?

Daprs les dfinitions de la section VII.A et de vos expriences effectues au cours de ce TP compltez le
tableau suivant.
Niveau disolation
Read uncommited
Read commited
Repetable read
Serializable

Lecture sale
Possible

Lecture non
reproductible
Possible

Lecture fantme
Possible

Impossible

Impossible

Possible

Laurent BRISSON et Philippe PICOUET

46/89

10

[TP - LE MCANISME TRANSACTIONNEL]

IX.

v2.6

AUTO-VALUATION

A lissue de ce TP vous devriez avoir atteint le niveau A pour les critres ci-dessous.
Critre

Avoir un regard
pertinent sur la
problmatique
d'intgrit et de
partage des
donnes

Niveau B + L'tudiant
est capable d'utiliser
les diffrents niveaux
d'isolation prvus par
SQL pour expliquer le
comportement du
SGBD.

Niveau C + L'tudiant
est capable d'illustrer
les notions lies
l'isolation :
srialisation,
verrouillage,
transactions bien
formes et
interblocage.

L'tudiant est
capable d'utiliser la
terminologie de
base des
transactions
(validation /
commit, abandon /
rollback) et illustrer
les proprits de
l'acronyme ACID.

L'tudiant ne
matrise pas la
terminologie de base
ou ne sait pas
illustrer les
proprits de
l'acronyme ACID.

L'tudiant est
capable d'illustrer la
problmatique
d'intgrit en
prsence de
redondance,
d'identifier et de
justifier
intuitivement la
moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

L'tudiant n'est pas


capable d'illustrer la
problmatique
d'intgrit en
prsence de
redondance ou ne
sait pas identifier et
justifier
intuitivement la
moiti des
contraintes de cls
primaires et de cls
rfrentielles d'un
schma logique.

Niveau C + L'tudiant
est capable d'identifier
et justifier
formellement (au
Niveau B + L'tudiant
moyen des
est capable de
dpendances
justifier l'usage
fonctionnelles) la
complmentaire aux
totalit des
Maintenir
contraintes de cls
contraintes de cls
l'intgrit de la
primaires et
primaires d'un schma
base de donnes rfrentielles des
relationnel. Identifier
contraintes de non
et justifier
nullit et de
formellement la
contrainte sur valeur
prservation des
d'attribut (CHECK).
donnes et des
dpendances
fonctionnelles si
possible.

X.

BIBLIOGRAPHIE

[1] Tom Kyte (ORACLE), On transaction isolation levels,


http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm
[2] Postresql, Isolation des transactions (norme ISO)
http://docs.postgresqlfr.org/9.0/transaction-iso.html

Laurent BRISSON et Philippe PICOUET

47/89

11

[TP - LE MCANISME TRANSACTIONNEL]

XI.

v2.6

ANNEXES
A.

LES TABLES

La table Livre contient des informations sur les diffrents livres de la bibliothque, ainsi que la rfrence des
lecteurs qui les ont emprunts. La table Lecteur contient des informations sur les lecteurs inscrits la
bibliothque.
Pour voir le contenu de ces deux tables, tapez la commande suivante dans linterprteur SQL (attention ne
pas oublier le ; la fin de la commande) : select * from nom_table ;
Pour voir la structure de ces deux tables tapez la commande : desc nom_table ;

A.

LES VUES

Les vues vous permettent daccder plus simplement certaines informations. Pour interroger une vue utiliser
la commander : select * from nom_vue
Vous avez votre disposition deux vues :

La vue infos : affichant les numros de livre et les numros de leurs emprunteurs
La vue infos_livre : affichant toutes les informations dtailles sur les livres

Pour observer la structure des vues, utilisez les mmes commandes que pour les tables.

B.

LES PROCDURES STOCKES

Les procdures stockes permettent deffectuer des requtes prdfinies lors de la cration de la base. Pour
effectuer ce TP un certain nombre de procdures vous sont fournies, prenez le temps tout au long des
exercices de les lire. Pour excuter une procdure stocke utilisez la commande suivante :
exec nom_procedure(attribut1, , attributn)
Vous disposez des procdures stockes suivantes (lors de lappel nindiquez pas le typage !) :

inserer_livre(varchar nom , varchar titre ,varchar collection, int ref)


supprimer_livre(int numlivre)
inserer_lecteur(varchar nom)
emprunter(int numlivre, int numlecteur)
rendre(int numlivre)

Laurent BRISSON et Philippe PICOUET

48/89

12

v1.8

[TD - MODLISATION CONCEPTUELLE DES DONNES]

TD - MODLISATION CONCEPTUELLE DES


DONNES
SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
I.

La place de la modelisation conceptuelle de donnes ................................................................................... 2

II.

Prsentation du problme .............................................................................................................................. 2

III.

Travail raliser.............................................................................................................................................. 3
A.

Schma conceptuel .....................................................................................................................................3

B.

Schma logique ...........................................................................................................................................3

Grille dvaluation critrie .................................................................................................................................... 3

PR-REQUIS
Avant de venir en TD, vous devez avoir obligatoirement lu le cours suivant :

Modlisation conceptuelle des donnes

APPROFONDISSEMENTS
Aucun

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON et Philippe PICOUET

49/89

v1.8

[TD - MODLISATION CONCEPTUELLE DES DONNES]

I.

LA PLACE DE LA MODLISATION CONCEPTUELLE DE DONNES

Ce schma ne vous dit rien ? Vous avez du oublier de lire votre cours avant de venir !

II.

PRSENTATION DU PROBLME

L'objectif de cet exercice est de produire une modlisation relationnelle d'un ensemble de donnes
persistantes dcrivant les sessions de Formation Continue de Telecom Bretagne.
Votre encadrant pour cet exercice jouera le rle d'expert de donnes. Il pourra en particulier expliciter les
assertions ci-dessous qui ne seraient pas clairement exprimes.
Il y a des stagiaires, des enseignants, des dpartements, des modules, les sessions de ces modules et des
sances qui composent ces modules.
1.

Stagiaires et enseignants ont beaucoup de caractristiques communes : un nom, un prnom, une


adresse, un numro de tlphone.
2. Il y a deux types denseignants : les vacataires extrieurs et les permanents.
3. Les vacataires extrieurs ont un employeur principal et une date de validit de lautorisation de cumul.
4. Les permanents ont une appellation (CER, MC, Prof, IE, DE) et ils sont rattachs un dpartement et
un seul.
5. Les dpartements ont un nom. Ils ont un chef qui est un permanent du dpartement.
6. Les modules sont coordonns par un ou deux permanents (2 au maximum). Ils possdent un titre.
7. Il peut y avoir plusieurs sessions dun mme module. Elles sont diffrencies par leur date de dbut.
8. Chaque module est compos de sances ordonnes possdant un titre.
9. Une sance dune session particulire est encadre par un enseignant unique et identifi.
10. Un stagiaire peut tre inscrit plusieurs sessions.

Laurent BRISSON et Philippe PICOUET

50/89

v1.8

[TD - MODLISATION CONCEPTUELLE DES DONNES]

III.

TRAVAIL A RALISER
A.

SCHMA CONCEPTUEL

Dans un premier temps, vous devez utiliser la notation UML afin de concevoir le modle conceptuel de
donnes. Dans lordre, commencez par identifier :

les diffrentes classes,


les liens dhritage,
les associations entre classes,
et les cardinalits de chacune des associations.

B.

SCHMA LOGIQUE

Dans un second temps, vous devez driver votre modle conceptuel en modle logique. Avant dobtenir un
schma global, vous vous concentrerez sur quelques points intressants :
a.
b.
c.
d.
e.

Cas dune cardinalit 1-N


Cas dune cardinalit N-M
Cas dune cardinalit 1-2
Cas de plusieurs associations entre 2 classes
Cas de lhritage

GRILLE DVALUATION CRITERIE


Afin dvaluer votre travail et votre progression utilisez la grille suivante.
Critre

Notation UML

L'tudiant ne fait
aucune erreur.

Un des lments de la
notation est erron.

Identification
des concepts

L'tudiant identifie tous


les concepts du
problme et leurs
proprits. Il peut
ventuellement avoir
ajout 1 ou 2 concepts
"superflus" et oubli
une ou deux proprits.

L'tudiant identifie trop


de concepts superflus
ou a oubli un des
concepts du problme. Il
peut ventuellement
avoir oubli quelques
proprits.

D
Le schma possde
Les erreurs
tellement d'erreurs
montrent que
qu'il en perd son
plusieurs lments sens ou l'tudiant
de la notation ne
confond un
sont pas acquis mais diagramme de
le schma conserve classe et un schma
toujours un sens.
conceptuel de
donnes.
Deux concepts du
problme sont
oublis ou toutes
les proprits sont
absentes.

La majeure partie
des concepts sont
errons.

Laurent BRISSON et Philippe PICOUET

51/89

v1.8

[TD - MODLISATION CONCEPTUELLE DES DONNES]

Identification
des
associations

Choix des
cardinalits

Identification
de l'hritage

Rgles de
drivation

L'tudiant est capable


de dfinir correctement
toutes les associations
dans un cas complexe
(arit suprieure ou
gale 3, reflexivit,
notion de temps,
d'ordre ou de
hierarchie).

L'tudiant est capable


de dfinir correctement
la majorit des
associations dans un cas
complexe (arit
suprieure ou gale 3,
reflexivit, notion de
temps, d'ordre ou de
hierarchie).
L'tudiant a fait des
erreurs dans les
L'tudiant est capable
cardinalits mais est
de dfinir correctement capable dans la majorit
toutes les cardinalits,
des cas de diffrencier
une erreur d'tourderie les associations 1-1, 1-N
est accepte.
et N-N, et de choisir les
bonnes cardinalits
minimales.
L'tudiant identifie
L'tudiant identifie
correctement les liens
correctement l'hritage
d'hritage mais ne
et indique s'il est
prcise pas s'ils sont
inclusif ou exclusif.
inclusifs ou exclusifs.
L'tudiant fait des
erreurs en drivant
Toutes les drivations
l'hritage, une
sont correctes.
association 1-1 ou une
association ternaire.

L'tudiant est
capable de dfinir
les associations
binaires dans un cas
simple.

L'tudiant se
trompe dans les
concepts concerns
dans la majorit des
associations.

L'tudiant a fait des


erreurs dans les
cardinalits des
associations
binaires mais ne
confond
gnralement pas
les associations 1-N
et N-N.

L'tudiant a fait des


erreurs concernant
les cardinalits des
associations
binaires montrant
qu'il n'a pas saisi la
distinction entre les
associations 1-N et
N-N.
L'tudiant invente
au moins un lien
d'hritage qui
n'existe pas, ou en
a oubli la majorit.

L'tudiant identifie
correctement la
majorit des liens
d'hritages.
L'tudiant fait des
erreurs en drivant
une association 1-N
ou N-N.

L'tudiant fait des


erreurs en drivant
les associations 1-N
et N-N.

Laurent BRISSON et Philippe PICOUET

52/89

v1.3

[TD MAPPING OBJET RELATIONNEL]

TD MAPPING OBJET RELATIONNEL


INGENIERIE DU LOGICIEL ET DES DONNEES

SOMMAIRE
Pr-requis ................................................................................................................................................................ 1
Approfondissements ............................................................................................................................................... 1
I.

Prsentation de lapplication cible ................................................................................................................. 2

II.

Excution lment par lment ..................................................................................................................... 2

III.

Mapping objet relationnel .............................................................................................................................. 3

PRE-REQUIS
Aucun

APPROFONDISSEMENTS
A la suite de ce TD, vous devez obligatoirement lire le cours suivant :

Interaction objet relationnel

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Philippe PICOUET | TELECOM Bretagne |

53/89

v1.3

[TD MAPPING OBJET RELATIONNEL]

I.

PRESENTATION DE LAPPLICATION CIBLE

Soit le schma relationnel compos des relations EMP et DEPT.


Lapplication dvelopper consiste distribuer une commission entre les employs de la base. La valeur de la
commission est globale et doit tre partage entre tous les employs de la base en proportion de leur salaire :
un employ dont le salaire reprsente 15% de la masse salariale totale recevra 15% du montant total de la
commission.
La valeur totale de la commission rpartir est renseigne lors du lancement du programme.

II.

EXECUTION ELEMENT PAR ELEMENT

Un programme java appel Commission (invoqu par java Commission 10000) effectue le traitement et la mise
jour puis affiche en fin de processus le contenu de la table EMP pour contrle.
Le fonctionnement propos est le suivant :

Calcul de la masse salariale (somme des salaires de tous les employs)

Pour chaque employ :

Rcupration du n d'employ et de son salaire

Calcul du montant individuel de la commission

Mise jour dans la table du nouveau montant de commission

Affichage du contenu de la table pour vrification

Un embryon de la classe Commission est fourni : Commission.java. Dans celui-ci, le traitement concernant la
rcupration, le calcul de la commission puis la mise jour sur la BD est dcrit dans la mthode
affectationCommission.
// Rcupration de la somme des salaires
// ------------------------------------Statement stmt1 = connexion.createStatement();
String requete1 = "select sum(SAL) from EMP";
ResultSet rset1 = stmt1.executeQuery(requete1);
while(rset1.next())
{
sommeSalaires = rset1.getInt(1);
}
stmt1.close();
System.out.println("Somme des salaires : " + sommeSalaires);
// Rcupration du salaire de chacun des employs
// ---------------------------------------------Statement stmt2 = connexion.createStatement();
String requete2 = "select empno,ename,sal from EMP";
ResultSet rset2 = stmt2.executeQuery(requete2);
while(rset2.next())
{
// Salaire et n d'employ
String empno = rset2.getString(1);
float salaire = rset2.getInt(3);

Philippe PICOUET | TELECOM Bretagne |

54/89

v1.3

[TD MAPPING OBJET RELATIONNEL]

// Calcul du montant individuel de la commission


float coeff = (salaire * 100) / sommeSalaires;
float montantIndividuelCommission = montantTotalCommission * coeff /
100;
System.out.println("Montant de la commission (" + coeff + "%) pour "
+ rset2.getString(2) + " : " + montantIndividuelCommission);
// Mise jour dans la base
Statement stmt3 = connexion.createStatement();
String update = "update emp set comm=" + montantIndividuelCommission
+
" where empno=" + empno;
stmt3.executeUpdate(update);
stmt3.close();
}
stmt2.close();
Rpondez aux questions suivantes :

Comptez le nombre de requtes SQL envoyes par le programme au SGBD

Proposez une autre solution alternative, ensembliste, qui ralise la mme chose que le programme cidessus avec seulement deux requtes la base.

Analysez la diffrence de performance entre les deux solutions : pour quelles raisons, selon vous,
pourrait-on accepter de multiplier les requtes la base ? Ces conditions sont-elles runies dans la
proposition ci-dessus ?

III.

MAPPING OBJET RELATIONNEL

Dans cette section, nous allons prciser les difficults dune mise en correspondance entre des modles de
donnes diffrents. Nous allons tenter dabstraire le modle relationnel de donnes en un modle objet
manipulable en Java.

Supposons que vous deviez crire un programme Java manipulant des employs et des dpartements
(sans plus vous proccuper de leur stockage), dcrivez maintenant la structure des classes Employe et
Departement.

En supposant que les donnes sont dj en mmoire, rcrivez une version objet du programme
Commission.

Que proposez-vous maintenant pour charger en mmoire les donnes ncessaires au traitement de
Commission? Vous prciserez en particulier les constructeurs des deux classes et linitialisation de
Commission.

Quels problmes la gestion des liens entre objets risque-t-elle de gnrer? Proposez une solution pour
simplifier cette gestion.

Enfin, pour limiter encore le nombre dobjets chargs en mmoire simultanment, vous proposerez
une solution inspire de la classe ResultSet pour traiter les collections dobjets employs.

Une amorce de corrections de ces exercices se trouvent lURL :


http://perso.enst-bretagne.fr/~picouet/sgbd/jdbc/commission/
Nhsitez pas la regarder !

Philippe PICOUET | TELECOM Bretagne |

55/89

v2.4

[TP INTRODUCTION A HIBERNATE]

TP INTRODUC TION A HIBERNATE

SOMMAIRE
Objectifs pdagogiques ........................................................................................................................................... 1
Documentation ....................................................................................................................................................... 1
I.

Introduction .................................................................................................................................................... 2

II.

Description de lapplication CommissionManagement .................................................................................. 4

III.

Travail raliser.............................................................................................................................................. 6

IV.

Annexes ........................................................................................................................................................ 13

OBJECTIFS PEDAGOGIQUES
Les objectifs pdagogiques que vous devez atteindre au cours de cette sance sont les suivants :

Comprendre o est explicit le mapping objet relationnel dans le framework Hibernate


Comprendre comment est gre la collection persistante dans le framework Hibernate
Comprendre comment configurer la connexion la base de donnes dans le framework Hibernate
Comprendre comment prendre en compte la persistance des donnes dans le code Java (accs
transactionnel ou hors transaction)

DOCUMENTATION
Documentation hibernate : http://docs.jboss.org/hibernate/core/3.6/reference/fr-FR/html/

Merci de communiquer toute correction ou remarque sur ce document


philippe.picouet@telecom-bretagne.eu

Philippe PICOUET | TELECOM Bretagne |

56/89

v2.4

[TP INTRODUCTION A HIBERNATE]

I.

INTRODUCTION

Hibernate est un framework qui offre une solution au mapping objet relationnel. Il s'occupe donc de grer
la persistance d'objets manipuls dans un programme orient objet (par exemple Java) au sein d'un stockage
relationnel.
Dans Hibernate, l'ajout de la persistance ne se fait pas en modifiant les classes Java correspondant aux donnes
stocker, mais via la notion de mapping et de collection persistante (collection au sens de Set ou de List) : les
donnes sont rendues persistantes par ajout dans la collection, qui propose galement des mthodes de
recherche. Dans ce TP, les collections seront gres dans des classes spcifiques
Dans le cadre de ce TP, vous manipulerez donc des employs et des dpartements (classes Emp et Dept,
dfinies dans les fichiers Emp.java et Dept.java), dont les instances pourront tre rendues persistantes
via la collection persistante code dans le fichier EmpManager.java.

A.

MATERIEL

Afin dallger le travail de configuration, nous avons mis votre disposition une machine virtuelle VMWare
contenant les lments ncessaires la mise en uvre du TP, savoir :

Une image du systme Ubuntu.


Une version de Java et dEclipse adquats.
Un stockage relationnel, en loccurrence le SGBD relationnel Postgresql. Postgresql est la fois lger,
complet et libre.
L'outil PgAdmin qui offre une interface relativement conviviale (cf Figure 1).
Un projet Eclipse contenant les sources du TP. Le projet est disponible sur le bureau de la machine
virtuelle et aussi sur Moodle.

Figure 1 - Interface pgAdminIII de Postgresql

Philippe PICOUET | TELECOM Bretagne |

57/89

v2.4

[TP INTRODUCTION A HIBERNATE]

Note : il est possible de partager des fichiers et rpertoires entre la machine virtuelle et la machine relle. Tout
rpertoire partag est visible de la machine virtuelle sous /mnt/hgfs/. C'est le cas en particulier du
rpertoire /users/local de la machine relle qui est accessible depuis /mnt/hgfs/exchange depuis la
machine virtuelle.

B.

DEMARRAGE DU TP

L'ensemble des oprations suivantes se font sur la machine virtuelle UBUNTU_BD_PROG (lancement par
double clic sur l'icone "lancement des machines virtuelles" puis, dans le menu, choisissez la machine lancer
(dernire version propose de UBUNTU_BD_PROG):

1.
2.

Connectez-vous en tant que simple utilisateur (mot de passe : password )


Lancez Eclipse (icne Indigo JEE sur le bureau). Si le projet commissionManagement est visible,
passez l'tape. Dans le cas contraire, procdez de la manire suivante :
o Dans Eclipse, choisissez le menu File, item Import, Existing Projects into
Workspace
o choisissez le rpertoire contenant votre projet (/home/user/tpHibernate) et
slectionnez le projet commissionManagement. Validez
o Ne lancez pas l'application,
l'application, attendez que cela vous soit demand (Section III Travail raliser
/ A. Premire Etape / Excuter la succession d'actions suivantes :).

Philippe PICOUET | TELECOM Bretagne |

58/89

v2.4

[TP INTRODUCTION A HIBERNATE]

II.

DESCRIPTION DE LAPP LICATION COMMISSIONMANAGEMENT

A.

DONNEES MANIPULEES

Lapplication manipule les donnes prsentes dans le schma ci-aprs. Il s'agit de 4 classes dobjets
persistants, savoir Dept, Person, Emp et CasualEmp. Les deux associations sont bidirectionnelles.

Figure 2 - Schma conceptuel de donnes

B.

TRAITEMENTS EFFECTUE S

Les traitements effectus par l'application sont trs simples et consistent principalement affecter une
commission des employs. La classe principale qui implante ce code, Main, utilise pour cela deux classes
utilitaires :

HibernateUtil. Cette classe est utilise pour l'initialisation du framework Hibernate. Vous
trouverez plus d'information sur cette classe dans la section 1.1.6
1.1.6 de la documentation Hibernate
(pour rappel : http://docs.jboss.org/hibernate/core/3.6/reference/fr-FR/html/).
EmpManager. Cette classe ralise la gestion de la collection persistante d'employs. Une autre classe
quivalente DeptManager, pour la manipulation de la collection de dpartements, aurait pu faire
partie de l'application. Nous ne l'avons pas ajoute pour des raisons de simplicit.

Philippe PICOUET | TELECOM Bretagne |

59/89

v2.4

[TP INTRODUCTION A HIBERNATE]

Figure 3 - Diagramme de classes de l'application

La figure 3 correspond au diagramme de classes de cette application. Les classes Person, Dept, Emp et
CasualEmp correspondent celles prsentes dans le paragraphe prcdent. Leurs relations sont donc les
mmes que dans la figure 2.

C.

ORGANISATION DES SOU RCES

Le rpertoire src est compos des rpertoires et fichiers suivants :

Le paquetage DAO. Vous y trouverez :


o les fichiers Dept.java, Person.java, Emp.java et CasualEmp.java qui dfinissent
respectivement les classe Dept, Person, Emp et CasualEmp ;
o les fichiers Dept.hbm.xml et Person.hbm.xml (prsents en annexes) qui dcrivent
respectivement le mapping objet relationnel de la classe Dept et de la hirarchie des classes
Person, Emp et CasualEmp ;
o le fichier EmpManager.java, qui ralise la gestion de la collection persistante.

Le paquetage main contient le fichier Main.java.


Le package utils contient le fichier HibernateUtil.java.
Le fichier hibernate.cfg.xml dcrit la connexion la base de donnes et adresse les fichiers
dcrivant les mappings objet relationnels.

Allez sous Eclipse pour visualiser l'organisation des sources et reprer les diffrents fichiers de l'application.

Philippe PICOUET | TELECOM Bretagne |

60/89

v2.4

[TP INTRODUCTION A HIBERNATE]

III.

TRAVAIL A REALISER

Initialisation : Si vous avez procd comme indiqu en section I.B,


I.B, la base de donnes
commission_management ne contient aucun schma de relation (et donc videmment pas de donnes).
Utilisez l'outil pgAdmin pour vrifier que la base de donnes est bien vide (par exemple que la base de donnes
ne contient bien aucune table).
Pour accder la base de donnes commission_management, vous devez utiliser le login bdd1 avec pour
mot de passe bdd1. L'utilisateur par dfaut est posgres, vous devez donc changer d'utilisateur. Pour cela,
faites un click droit / Proprits... sur le serveur Postgresql9.1 (localhost:54321).
Modifiez l'utilisateur posgres en bdd1 et validez. Puis double clickez sur le serveur et saisissez le mot de
passe bdd1.
Le schma de la base commission_management sera cr automatiquement par Hibernate lors du
lancement du programme (lignes en rouge dans la console commenant par [main] INFO).
Le TP est constitu de sept tapes. Les six premires tapes s'appuient sur six mthodes prsentes dans le
fichier Main.java (mthodes part1 part6 appeles partir du constructeur Main). La septime tape
ne ncessite pas l'excution d'une des mthodes du code java.
Chacune de ces sept tapes aborde un aspect diffrent propre Hibernate. Ne passez pas d'tape sans avoir
rpondu aux questions qui vous sont poses dans ce TP. De plus, vous devrez, chaque tape, aller voir le code
source du fichier Main.java pour comprendre ce que font les diffrentes mthodes part1 part6.

A chaque lancement du programme (au moins un lancement par tape), des commentaires sont affichs dans
la console d'Eclipse. Certains proviennent d'Hibernate (commentaires en rouge), certains proviennent du
programme lui mme (commentaires en noir). Consultez chaque fois ces commentaires.

A.

PREMIERE ETAPE

Au cours de cette premire tape :

vous allez prendre en main la structure de l'application Hibernate, c'est dire de ses fichiers de
configuration (hibernate.cfg.xml, Person.hbm.xml et Dept.hbm.xml), mais aussi les
fichiers java et surtout l'organisation de son code. Les questions ci-dessous vont vous aider analyser
les diffrents fichiers de l'application, que vous allez donc devoir afficher et tudier sous Eclipse.
Puis, vous lancerez l'application qui va crer le schma relationnel dans la base de donnes
commission_management et y insrer des donnes ;

Attention, sous Eclipse, la visualisation des fichiers xml peut se faire selon deux formats, un format 'graphique'
qui est le format par dfaut, et un format texte, qui peut tre plus lisible. Le passage d'un format l'autre se
fait par des onglets situs dans le bas de la fentre d'dition. Choisissez l'onglet Source pour mieux
comprendre le contenu des fichiers xml.
Comprendre les grandes lignes des fichiers de configuration (une comprhension plus fine sera examine dans
l'tape 7) :

Le serveur de bases de donnes utilis dans le projet est dcrit dans le fichier
hibernate.cfg.xml.
Vrai
Faux

Philippe PICOUET | TELECOM Bretagne |

61/89

v2.4

[TP INTRODUCTION A HIBERNATE]

Dans les fichiers de type xxx.hbm.xml (hbm pour hibernate mapping), savoir Dept.hbm.xml et
person.hbm.xml, sont dcrites les correspondances entre les classes Java rendre persistantes et
la structure des relations associes.
Vrai
Faux
L'attribut location de la classe Java Dept a le mme nom dans la relation associe.
Vrai
Faux
Le fichier Person.hbm.xml dcrit les trois classes Person, Emp et CasualEmp parce que ces
trois relations appartiennent une seule hirarchie (relation d'hritage).
Vrai
Faux

Comprendre la structure de l'application :

La classe Dept utilise l'API d'Hibernate.


Vrai
Faux
La classe Dept gre les sessions et les transactions vers la base de donnes (cration,
ouverture, fermeture).
Vrai
Faux
La classe EmpManager contient des mthodes classiques d'une collection (isEmpty, add,
getById, etc.).
Vrai
Faux
La classe EmpManager contient des requtes vers la bases de donnes exprimes dans une
sorte de SQL.
Vrai
Faux
La classe EmpManager gre les sessions et les transactions vers la base de donnes (cration,
ouverture, fermeture).
Vrai
Faux
La classe EmpManager utilise les sessions vers la base de donnes ouvertes ailleurs dans le
code de l'application.
Vrai
Faux
La classe Main gre les sessions et les transactions vers la base de donnes (cration, ouverture,
fermeture).
Vrai
Faux

Excuter la succession d'actions suivantes :

Lancer l'excution de la classe Main. Seule la premire mthode (part1) s'excutera. En effet, dans
le constructeur Main, les appels aux autres mthodes (part2 part6) sont en commentaire.
Vrifier par PgAdmin que le schma et les donnes ont bien t cres sur le SGBD ;
Modifier une donne via PgAdmin (par exemple modifier le nom d'un employ);
Relancer l'excution du programme. La modification apparat-elle dans les donnes affiches dans la
console d'Eclipse ? Apparat-elle dans la base ? ;
.
.
.
Commenter dans le fichier hibernate.cfg.xml la proprit hbm2ddl.auto et refaire la
modification dans la base de donnes.

Philippe PICOUET | TELECOM Bretagne |

62/89

v2.4

[TP INTRODUCTION A HIBERNATE]

Relancer nouveau lapplication. La modification apparat-elle dans les donnes affiches dans la
console d'Eclipse ? Apparat-elle dans la base ? A quoi sert la proprit hbm2ddl.auto ?
.
.
.
Dcommenter la ligne "emp = part2(empno);" dans le constructeur Main du fichier
Main.java et passer la deuxime tape.

B.

DEUXIEME ETAPE

N'oubliez pas, chaque tape, d'aller voir le code source de Main.java pour comprendre ce que font les
diffrentes mthodes part1 part6 appeles.
L'objectif de cette deuxime tape est d'examiner comment les donnes de la base peuvent tre utilises dans
le programme.

Relancer l'excution de la classe Main, les deux mthodes part1 et part2 s'excuteront ;
Quelle mthode de la collection persistante (EmpManager.java) est utilise pour chercher
l'employ dans la base de donnes ?
.
La mthode part2 affiche (dans la console d'Eclipse) l'employ dont le numro est pass en
argument.
Examiner dans la console d'Eclipse les informations qui sont affiches pour cet employ. Aller aussi
voir le code des mthodes toString qui sont utilises pour l'affichage d'un employ et d'un
dpartement.
Puis donner la liste (en indiquant le type de l'objet avec son name ou dname) des diffrents objets
java qui ont du tre crs en mmoire partir des donnes de la base, pour l'affichage de l'employ
pass en argument.
.
.
.
.
L'accs aux donnes de la base ncessite toujours d'utiliser la classe EmpManager ?
Vrai
Faux
Dcommenter la ligne "collaborators = part3(emp);" dans le constructeur Main du fichier
Main.java et passer l'tape 3.

C.

TROISIEME ETAPE

L'objectif de cette troisime tape est de dcouvrir ce que deviennent les objets java persistants une fois
termine la session qui les a crs (dans le jargon Hibernate, on dit qu'ils sont dtachs ).
Dans la mthode part3, on travaille hors session et on recherche les collgues
collgues d'un employ, c'est dire les
employs qui travaillent dans le mme dpartement que l'employ pass en argument.

O sont dfinies les mthodes utilises dans cette troisime tape ?


o Dans Emp.java
o Dans Dept.java

Vrai
Vrai

Philippe PICOUET | TELECOM Bretagne |

63/89

Faux
Faux

v2.4

[TP INTRODUCTION A HIBERNATE]

o Dans EmpManager.java
Vrai
Faux
Relancer l'excution de la classe Main, les trois mthodes part1, part2 et part3 s'excuteront ;
Mettre en commentaire, dans la mthode toString de la classe Dept, les deux lignes ralisant
l'affichage des noms des employs du dpartement courant, puis relancer l'application.
Quelle ligne de la mthode part3 pose problme? Pourquoi ?
.
.
.
.
.
.
.
A votre avis, lorsqu'un dpartement
dpartement est charg en mmoire, quels sont les attributs qui sont
automatiquement chargs et quels sont ceux qui ne le sont pas ?
.
.
.
Dans le fichier de configuration Dept.hbm.xml, ajouter l'attribut/valeur lazy="false" dans
l'lment xml <bag name="emps" inverse="true">,
inverse="true">, puis relancer le programme.
Quel est le rle de l'attribut lazy plac dans une collection?
.
.
.
Quelle solution prconisez-vous parmi les 2 suivantes pour que la mthode part3 fonctionne
correctement mme lorsque l'affichage d'un employ ne demande pas l'affichage du nom des
employs travaillant dans le mme dpartement (c'est dire mme en gardant en commentaire les
deux lignes de la mthode toString de la classe Dept que vous avez mis en commentaire) ?
o Le travail en session.
Dans ce cas prcis, il faut que la mthode part3 reste dans la mme session que la mthode
part2 qui affiche l'employ pass en argument. Il faut donc dplacer l'instruction
session.close() qui se trouve en fin de mthode part2, et la mettre en fin de
mthode part3.
o Le chargement non diffr des objets de la collection emps.
Il faut alors ajouter l'attribut/valeur lazy="false" dans l'lment xml <bag
name="emps" inverse="true"> du fichier de configuration Dept.hbm.xml.
.
.
.
.
Vous trouverez plus d'information sur les stratgies de chargement des objets dans la section 21.1. de
la documentation Hibernate (pour rappel : http://docs.jboss.org/hibernate/core/3.6/reference/frFR/html/).

Dcommenter la ligne "subordinates = part4(emp);"


part4(emp);" dans le constructeur Main du fichier
Main.java et passer la quatrime tape.

Philippe PICOUET | TELECOM Bretagne |

64/89

v2.4

[TP INTRODUCTION A HIBERNATE]

D.

QUATRIEME ETAPE

L'objectif de cette quatrime section (mthode part4 de la classe Main) est de dcouvrir comment maintenir
la cohrence entre les donnes stockes dans la base et les objets java correspondants quand il y a
successivement ouverture et fermeture de session.
Dans la mthode part4, on travaille au sein d'une session, dans une transaction et on cherche les employs
qui sont sous la responsabilit directe ou indirecte de l'employ pass en argument.

Relancer l'excution de la classe Main, les quatre mthodes part1, part2, part3 et part4
s'excuteront ;
Commenter la ligne session.saveOrUpdate(emp) et relancer l'application.
Quelles lignes du code posent problme?
.
Comment expliquer l'erreur obtenue ?
.
.
.
.
Dcommenter la ligne prcdente.
Ajouter avant l'ouverture de session une modification sur l'objet emp pass en argument.
Relancer nouveau l'application. La modification du salaire a-t-elle t prise en compte dans la base
de donnes ?
.
.
.
.
Si vous deviez renommer la mthode saveOrUpdate de session, quel nom proposeriez-vous ?
.
.
.
Dcommenter la ligne "part5(subordinates, totalCommission);"
totalCommission);" dans le constructeur
Main du fichier Main.java et passer la cinquime tape.

E.

CINQUIEME ETAPE

L'objectif de cette cinquime tape est d'identifier


d'identifier la possibilit de mettre jour des objets en dehors du
contexte transactionnel. Pour autant les modifications ne seront pas reportes dans la base de donnes.
Dans la mthode part5, on travaille hors session et on affecte une commission l'employ pass en
argument ainsi qu' tous les employs qui sont sous sa ressponsabilit directe ou indirecte.

Relancer l'excution de la classe Main, les cinq mthodes part1, part2, part3, part4 et part5
s'excuteront ;
Comparer les valeurs affiches par l'application et celles stockes dans la base ;
.
.
.
Dcommenter la ligne "part6(emp, subordinates);" dans le constructeur Main du fichier
Main.java et passer la sixime tape.

Philippe PICOUET | TELECOM Bretagne |

65/89

10

v2.4

[TP INTRODUCTION A HIBERNATE]

F.

SIXIEME ETAPE

L'objectif de cette sixime tape est de comprendre comment rpercuter sur la base de donnes des
modifications faites hors transactions.

Relancer l'excution de la classe Main, les six mthodes part1, part2, part3, part4, part5 et
part6 s'excuteront ;
Comparer les valeurs affiches par l'application dans la console d'Eclipse et celles stockes dans la
base ;
.
.
.
Dcommenter les lignes appliquant la mthode saveOrUpdate aux subordonns de l'employ
pass en argument. Relancer l'application et expliquer le comportement ;
.
.
.
.

G.

SEPTIEME ETAPE

Une utilisation plus avance des fichiers de mapping est ncessaire pour coder une application persistante avec
Hibernate. Cette dernire tape, en vous proposant des modifications de schma, a pour objectif d'initier cet
apprentissage. Cela reste nanmoins trs succinct et vous tes incits utiliser la documentation Hibernate
pour trouver des rponses vos situations particulires.
Avant de raliser les exercices de cette tape, pensez dcommenter la proprit hbm2ddl.auto dans le
fichier hibernate.cfg.xml.
Il est fortement conseill de tester les modifications une une (en relanant le programme) afin de faciliter le
dbogage en cas de problme. Certaines modifications exigent en effet de modifier non seulement un fichier
de mapping (.hbm.xml) mais aussi certains fichiers Java.
Pour les modifications java, pensez utiliser la fonctionnalit trs pratique d'Eclipse 'Refactor' (click droit
/ Refactor / Rename...).

Modifier le nom de la colonne salary de la table Employees en sal


.
.
.
.
.
Modifier le nom de lattribut dept de la classe Emp en departement
.
.
.
.
.

Philippe PICOUET | TELECOM Bretagne |

66/89

11

v2.4

[TP INTRODUCTION A HIBERNATE]

Emp
en
Modifier
le
nom
de
la
classe
TeacherResearcher
.
.
.
.
.
Modifier lattribut lower de la classe TeacherResearcher pour qu'il soit reprsent comme
une liste et non comme un ensemble.
Vous trouverez de l'information sur le mapping des collections dans la section
section 7 de la documentation
Hibernate (http://docs.jboss.org/hibernate/core/3.6/reference/fr-FR/html/).
.
.
.
.
.
Identifier d'autres moyens de reprsenter l'hritage entre les classes Person,
TeacherResearcher et CasualEmp.
Vous trouverez de l'information sur les stratgies d'hritage dans la section 5.1.6. de la documentation
Hibernate (http://docs.jboss.org/hibernate/core/3.6/reference/fr-FR/html/).
Dans
quel
cas
choisiriez
vous
l'une
ou
l'autre
des
solutions
proposes ?
.
.
.

Enfin, sachez que si vous souhaitez utiliser Hibernate avec le serveur Oracle de l'cole, une aide est disponible
dans un wiki de l'espace Moodle du cours.

Philippe PICOUET | TELECOM Bretagne |

67/89

12

v2.4

[TP INTRODUCTION A HIBERNATE]

IV.

ANNEXES

Ces annexes contiennent une version papier des fichiers de configuration hibernate hibernate. cfg.xml, ainsi
que les deux fichiers de mapping Person.hbm.xml et Dept.hbm.xml.

Fichier hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>

<!-- Connexion la base de donnees -->


<property name="connection.driver_class">org.postgresql.Driver</property>
<property
name="connection.url">jdbc:postgresql://localhost:54321/commission_management</property>
<property name="connection.username">bdd1</property>
<property name="connection.password">bdd1</property>

<!-- JDBC connection pool (use the built-in) -->


<property name="connection.pool_size">1</property>
<!-- Dialecte SQL utilise -->
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Effacement et re-creation
-creation du schma de la base au lancement de l'application ->
<property name="hbm2ddl.auto">create</property>

<!-- fichiers de correspondance (mapping) entre les classes et Hibernate -->


<mapping resource="DAO/Person.hbm.xml" />
<mapping resource="DAO/Dept.hbm.xml" />
</session-factory>
</hibernate-configuration>

Philippe PICOUET | TELECOM Bretagne |

68/89

13

v2.4

[TP INTRODUCTION A HIBERNATE]

Fichier Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="DAO">
<class name="Person" table="PERSONS">
<id name="persNumber" column="person_id" type="long" unsaved-value="undefined">
<generator class="native" />
</id>
<property name="name" column="name" type="string" length="10" />
<joined-subclass name="Emp" table="EMPLOYEES">
<key column="emp_id"/>
<property name="job" column="job" type="string" length="9" />
<property name="hiredate" column="hiredate" type="date" />
<property name="salary" column="salary" type="float" />
<property name="commission" column="comm" type="float" />
<many-to-one name="dept" cascade="save-update" column="dept_ref" class="Dept" />
<many-to-one name="manager" column="mngr" class="Emp"/>
<set name="lower" inverse="true">
<key column="mngr"/>
<one-to-many class="Emp"/>
</set>
</joined-subclass>
<joined-subclass name="CasualEmp" table="CASUAL_EMPS">
<key column="casual_emp_id"/>
<property name="doubleDippingValidityDate" column="validity_date"
column="validity_date" type="date" />
</joined-subclass>
</class>
</hibernate-mapping>

Fichier Dept.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="DAO">
<class name="Dept" table="DEPARTMENTS">
<id name="deptNumber" column="dept_id">
<generator class="increment" />
</id>
<property name="dname" column="dname" type="string" length="14" />
<property name="location" column="loc" type="string" length="13" />
<bag name="emps" inverse="true">
<key column="dept_ref"/>
<one-to-many class="Emp"/>
</bag>
</class>
</hibernate-mapping>

Philippe PICOUET | TELECOM Bretagne |

69/89

14

v1.2

[PROJET - GESTION DUNE BIBLIOTHQUE]

PROJET - GESTION DUNE BIBLIOTHQUE


I.

SOMMAIRE

II.

Objectifs pdagogiques .................................................................................................................................. 1

III.

Droulement du projet ................................................................................................................................... 2

IV.

Travail demand ............................................................................................................................................. 2

V.

Description du projet ...................................................................................................................................... 3


A.

Contexte ..................................................................................................................................................... 3

B.

Fonctionnalits........................................................................................................................................... 3

VI.

Fiche de recette .............................................................................................................................................. 4

II.

OBJECTIFS PDAGOGIQUES

Le but de ce mini-projet est de vous exercer de faon ludique la conception dun lment du systme
dinformation dune bibliothque, savoir sa base de donnes.
Les objectifs pdagogiques que vous devez atteindre sont :






Lanalyse et la conception dune application persistante


La modlisation conceptuelle dune base de donnes
La production dun schma logique de donnes partir dune modlisation conceptuelle
Lutilisation du langage SQL
Lutilisation du langage JAVA avec JDBC afin de dvelopper une couche daccs une base de donnes

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON
0

70/89

v1.2

[PROJET - GESTION DUNE BIBLIOTHQUE]

III.

DROULEMENT DU PROJET

Lobjectif de ce projet est de raliser, en binme, une application persistante de gestion dune bibliothque.
Vous avez 12h de projet encadres par des enseignants, il est toutefois ncessaire de fournir au moins autant
de temps de travail personnel.
Voici les objectifs des diffrentes sances :

Sance 1 : Modlisation et conception de la base de donnes (schma conceptuel, schma logique et


script SQL pour gnrer les tables et les peupler)
Sance 2 : Validation des modles et dbut de limplantation des classes JAVA
Sance 3 : Implantation des classes JAVA et utilisation de JDBC
Sance 4 : Finalisation de lapplication et tests

Remarque : le projet de ce module INF206 est distinct de ce que vous ralisez dans le cadre du module INF205.

IV.

TRAVAIL DEMAND

Vous prsenterez lors de la sance dvaluation du projet une dmonstration de votre application. Vous devez
galement apporter les documents suivants lors de lvaluation :

La fiche recette de votre application.


Le modle conceptuel de votre bibliothque.
Le schma logique driv de votre modle conceptuel.

Vous raliserez le modle conceptuel en utilisant le formalisme UML. Le schma logique devra prciser les
contraintes d'intgrit.
Lvaluation prendra en compte la qualit de votre application, de vos livrables, de vos rponses aux questions
ainsi que de votre investissement tout au long du projet. La grille dvaluation sur laquelle nous nous basons
est disponible la fin de ce document.
Notez que si une diffrence notable dinvestissement est remarque lors du projet, les notes pourront tre
individualises.

ATTENTION : Seules les classes .java doivent tre modifies !


En aucun cas vous ne devez toucher aux fichiers .jsp !

Laurent BRISSON
0

71/89

v1.2

[PROJET - GESTION DUNE BIBLIOTHQUE]

V.

DESCRIPTION DU PROJET
A.

CONTEXTE

La socit BreizhSoft, ditrice de progiciels, souhaite lancer prochainement sur le march un logiciel de gestion
de bibliothque. La version de base de ce systme devra pouvoir rpondre aux besoins dtablissements
scolaires, universitaires et municipaux de moyenne importance.

B.

FONCTIONNALITS

Les fonctionnalits offrir par ce systme sont celles, classiques, dune bibliothque :

Gestion des livres :


o Affichage de la liste complte des livres
o Recherche dun livre
o Ajout/suppression/modification dun livre
o Ajout/suppression dun exemplaire
Gestion des usagers :
o Affichage de la liste complte des usagers
o Recherche dun usager
o Ajout/suppression/modification dun usager
Gestion des emprunts :
o Faire un emprunt
o Rendre un livre
o Consulter les emprunts en cours
o Consulter lhistorique des emprunts

Les livres possdent les caractristiques suivantes : numro identifiant unique attribu par la bibliothque,
nisbn10, nisbn13, titre et auteur. De plus, dans un souci de simplification on considrera quun livre na quun
seul auteur. Pour cette table le nom des colonnes est fig : id, isbn10, isbn13, titre et auteur.
Les usagers ont un dossier enregistrant : n dabonn, nom, prnom, statut (Enseignant ou Etudiant) et email.
La gestion des emprunts doit permettre de savoir quelle date lexemplaire dun livre a t emprunt par un
usager. Un historique doit tre conserv et contenir galement la date de retour de lexemplaire.

Laurent BRISSON
0

72/89

v1.2

[PROJET - GESTION DUNE BIBLIOTHQUE]

VI.

FICHE DE RECETTE
Fonctionnalit

GESTION
DES
LIVRES

Ralise

Non
ralise

Commentaires

Liste complte des


livres
Modification dun livre
(ISBN10, ISBN13, titre,
auteur)
Ajout dun exemplaire
de livre
Suppression dun
exemplaire
Suppression dun livre

Recherche d'un livre

Insertion d'un
nouveau livre

GESTION
DES
USAGERS

Liste complte des


usagers
Modification dun
usager (nom, prnom,
statut, email)
Suppression dun
usager

Recherche d'un usager

Insertion dun nouvel


usager

GESTION
DES
EMPRUNTS

Consultation des
emprunts
Restitution dun
emprunt

Consultation de
lhistorique des
emprunts
Emprunter un livre

Laurent BRISSON
0

73/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

v2.3

P R O J E T B I B L I OT H E Q U E G U I D E D E D E M A R R A G E

I.

SOMMAIRE

II.

Objectifs du document ................................................................................................................................... 1

III.

Installation de lenvironnement ..................................................................................................................... 2

A.

Lancement de la machine virtuelle ............................................................................................................ 2

B.

Premier lancement du projet ..................................................................................................................... 2

C.

Sauvegarde de votre travail ....................................................................................................................... 3

IV.

Prsentation/Architecture de lapplication .................................................................................................... 4

A.

Organisation du projet ............................................................................................................................... 4

B.

Architecture de lapplication...................................................................................................................... 5

V.

Guide pour dbuter le projet.......................................................................................................................... 6


A.

Cration de votre base de donnes ........................................................................................................... 6

B.

Exemple de fonctionnalit : la liste de tous les livres ................................................................................ 8

C.

Memento Java Database Connectivity (JDBC) ........................................................................................... 9

D.

Complments dinformation essentiels lire pour vous faciliter la vie ! ................................................. 10

II.

OBJECTIFS DU DOCUMENT
IMPORTANT !

Ce document est une aide pour commencer votre projet. Toutes les informations ncessaires la ralisation
de votre projet ne sont cependant pas prsentes : des liens et des indications sont donns mais vous devez
rechercher sur internet les informations complmentaires qui vous sont ncessaires !

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON et Philippe TANGUY

74/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

III.

v2.3

INSTALLATION DE LENVIRONNEMENT
A.

LANCEMENT DE LA MACHINE VIRTUELLE

Lensemble des outils ncessaires est rassembl au sein dune machine virtuelle. Pour utiliser cet
environnement suivez les tapes suivantes :
1.
2.

3.

Double-cliquez sur licne Lancement de machines virtuelles


Choisissez la machine virtuelle UBUNTU_BD_PROG_V2
a. Identifiant : user
b. Mot de passe : password
Pour passer en plein cran utilisez le raccourci clavier suivant : CTRL+ALT+ENTER

Sur le bureau vous trouverez des raccourcis vers les applications suivantes :

Eclipse - Indigo : lun des environnements de dveloppement open source Java le plus utilis. Cette
version (3.7) contient un ensemble de plug-ins qui permettent le dveloppement dapplications Web
en Java. Cet environnement contient aussi le moteur de servlets/JSP Tomcat utilis dans ce projet. Il
sagit dun serveur Web capable dexcuter les fichiers JSP qui gnrent dynamiquement le contenu
Web de lapplication. Le serveur Tomcat se lance partir de linterface dEclipse (voir plus loin).
Pour plus dinformations : http://www.eclipse.org/ et http://tomcat.apache.org/
ADS 4.7 : un logiciel permettant dutiliser une base de donnes. Il est dj pr-configur pour accder
la base PostgreSQL que vous utiliserez pour le projet. Vous pouvez lutiliser pour crire vos scripts
SQL (il possde un colorateur syntaxique bien pratique).

B.

PREMIER LANCEMENT DU PROJET

Afin de vrifier que tout fonctionne correctement, suivez les tapes suivantes :

Double-cliquez sur licne Eclipse


Choisissez le menu File > Import
Choisissez Existing project puis NEXT
Choisissez
Root Directory
puis
BROWSE
pour
/home/usr/workspace/Bibliotheque puis cliquez sur FINISH

slectionner

le

rpertoire

IMPORTANT ! Une petite erreur sest glisse dans la configuration de limage, vous devez donc effectuer les 2
tapes suivantes :

Sous Eclipse, faites un clic-droit sur votre projet Bibliothque puis choisissez Rename et changez le
nom Bibliotheque en bibliotheque (remplacez le B majuscule par un b minuscule)
Sous Firefox, faites un clic-droit sur Projet Bibliothque et choisissez Proprits . Changez lURL
de la manire suivante : http://localhost:8080/bibliotheque (remplacez le B majuscule par un b
minuscule)

Sous Eclipse, dans la fentre bas-droite sur longlet Servers faites un clic-droit sur Tomcat v7 et
choisissez Add and remove

Laurent BRISSON et Philippe TANGUY

75/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

v2.3

Slectionnez bibliotheque puis Add > et cliquez sur FINISH.


Slectionnez Tomcat v7 puis cliquez sur licne Start Server prsente droite de la barre avec
les onglets.
Sous Firefox, cliquez sur le raccourci Projet Bibliothque et vous devriez arriver sur la page
daccueil de lapplication. Actuellement seule la fonctionnalit pour lister les livres fonctionne.

C.

SAUVEGARDE DE VOTRE TRAVAIL

Afin de sauvegarder votre travail vous devez copier sur un espace diffrence limage virtuelle qui est stocke
localement dans le rpertoire /users/local/votre_login /Ubuntu_BD_PROG.
IMPORTANT ! Vous devez prendre soin de bien sauvegarder votre travail au sein de la machine virtuelle puis de
lteindre compltement avant de copier limage virtuelle !

1.

SAUVEGARDE POUR TRAVAILLER DANS LES SALLES DE TP

Cliquez sur le raccourci Local et ouvrez le dossier correspondant votre login. Copiez le rpertoire complet
Ubuntu_BD_PROG sur votre espace sanssauvegarde (normalement un enseignant a d vous demander
votre login pour vous attribuer de lespace) ou un support externe.
Pour utiliser ce travail sur une autre machine dans une salle de TP de lcole vous devez copier le rpertoire
Ubuntu_BD_PROG situ sur sanssauvegarde dans le rpertoire /users/local/votre_login de la nouvelle
salle machine. Cliquez ensuite sur Lancement de machines virtuelles , slectionnez Ubuntu_BD_PROG et
choisissez de dmarrer partir de limage existante.

2.

SAUVEGARDE POUR TRAVAILLER DE CHEZ SOI

Pour pouvoir utiliser cette machine virtuelle sur votre machine personnelle, il faut dabord installer VMware
Player, le logiciel VMware qui excute des machines virtuelles. Il doit sagir au minimum de la version 3 (dans
les salles de TP de Tlcom Bretagne il sagit de la version 3.1.4) qui se trouve ladresse suivante :
http://goo.gl/8p9qa
Ensuite, suivez la procdure suivante :
1.

Copier le modle et le delta de la machine virtuelle

Rcuprer les rpertoires /MachinesVirtuelles/Ubuntu_BD_PROG (on lappellera par la suite, rpertoire


modle) et /users/local/votre_login/Ubuntu_BD_PROG (on lappellera par la suite rpertoire delta), sur le
disque de la machine personnelle. Attention, le rpertoire modle peut prendre plusieurs gigas.
2.

Configurer la machine virtuelle pour le fonctionnement sur votre poste

Dans le rpertoire delta sur votre machine personnelle, ouvrez avec un diteur le chier avec extension
.vmdk qui na pas de -sXX (il sagit juste dun chier texte). Changer la valeur de la variable
parentFileNameHint pour indiquer lemplacement du chier .vmdk du rpertoire modle sur votre
machine.

Laurent BRISSON et Philippe TANGUY

76/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]


3.

v2.3

Lancer l'excution de la machine virtuelle sur votre machine

tant donn que vous ne disposez pas du lanceur de machines virtuelles, il faut toujours effectuer le
lancement de la machine virtuelle partir du chier .vmx du rpertoire delta. Sinon, vos modications ne
seront pas prises en compte lors du prochain dmarrage de la machine virtuelle.
Pour rutiliser en salle de TP de Tlcom Bretagne le travail eectu sur le poste personnel :

IV.

Recopier le rpertoire delta de votre machine personnelle dans /users/local/votre_login de la machine


de Tlcom Bretagne ;
Modier le chier .vmdk qui na pas de -sXX de ce delta pour remettre la variable parentFileNameHint
sa valeur initiale.Cliquez sur le raccourci Local et ouvrez le dossier votre nom. Copier le
rpertoire complet nomm Ubuntu_BD_PROG sous votre espace sanssauvegarde
(normalement un enseignant a d vous demander votre login pour vous attribuer de lespace).

PRESENTATION/ARCHITECTURE DE LAPPLICATION
A.

ORGANISATION DU PROJET

Lorganisation des fichiers du projet est visible dans


longlet Project Explorer dans Eclipse, sur la partie
gauche. La structure du projet est celle de toute
application Web, voici les lments les plus
importants :

Le rpertoire WebContent : contient tous


les fichiers JSP, HTML, les rpertoires
images et styles. Ils sont directement
accessibles via le serveur Web et forment
une partie de linterface de lapplication.
Le rpertoire Libraries : contient les
librairies Java ncessaires lapplication.
Le rpertoire src : contient lensemble des
fichiers sources Java des composants de
lapplication. Ces sources sont organises
en paquetages. Par exemple le composant
ComposantBDLivre fait partie du package
biblio (fichier ComposantBDLivre.java
lintrieur du rpertoire biblio).

Figure 1 - Arborescence du projet

IMPORTANT !
Vous ne devez pas essayer de compiler le fichier source : Eclipse le compile automatiquement lors de chaque
sauvegarde !

Laurent BRISSON et Philippe TANGUY

77/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

B.

v2.3

ARCHITECTURE DE LAPPLICATION

Lapplication bibliothque est une application Web Java dite multi-niveaux (n-tier). Dans notre cas, nous avons
trois niveaux. Larchitecture peut tre rsume laide du schma suivant :

1er niveau

Navigateur Web
(Firefox, IE, ...)

2me niveau

3me niveau

Moteur de JSP
Tomcat
HTTP

Partie serveur Web


HTML :
index.html

JSP :
ListePersonnes .jsp

Composant
mtier
Java
Composant
mtier
Java :: :
Composants
mtier
ComposantBDLivre.java
ComposantBDLivre.java
ComposantBDLivre. java

JDBC

SGBD
PostgreSQL

Ct serveur

Niveau client :
 Le premier niveau est le niveau dinteraction du client. Il est constitu dun simple navigateur Web
(cest ce quon appelle un client lger). Le navigateur se connecte au serveur en utilisant le protocole
HTTP.
Niveau serveur : cette partie est constitue de deux sous-niveaux :
 Le deuxime niveau ou niveau intermdiaire (middle-tier) contient lensemble des composants qui
participent au traitement de linformation : les composants de linterface graphique (les fichiers JSP) et
les composants qui codent les aspects mtiers de lapplication (ComposantBDLivre,
ComposantBDEmprunt, etc.).
 Le dernier niveau est constitu par la couche SGBD : la base PROJET_BIBLIOTHEQUE_BD prsente sur
PostgreSQL.

Laurent BRISSON et Philippe TANGUY

78/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

V.

v2.3

GUIDE POUR DEBUTER LE PROJET


A.

CREATION DE VOTRE BASE DE DONNEES


1.

LE LOGICIEL AQUA DATA STUDIO

Lancez lapplication Aqua Data Studio partir du


bureau (icne ADS 4.7), puis choisissez le menu
Query Analyzer en faisant un clic-droit sur
Tables dans la base de donnes ddie au projet
PROJET_BIBLIOTHEQUE_BD .
Si vous vous intressez la manire de configurer la
connexion, faites un clic-droit sur la base de
donnes et slectionnez Server Properties .
Une fois la fentre de requte ouverte, vous pouvez
commencer crire votre script. Pensez
lenregistrer et une fois termin, vous pouvez
lexcuter en cliquant sur le bouton execute
ressemblant une flche verte (CTRL-E).

Figure 2 - Menu Query Analyzer

2.

SPECIFICITES DU SGBD POSTGRESQL

Bien que la syntaxe du langage SQL soit normalise, chaque SGBD prsente quelques variations de sa syntaxe.
Par rapport aux scripts ORACLE distribus sur moodle dans le cadre des autres TP, voici les principales
diffrences.

Comme Oracle, PostgreSQL ne diffrencie pas les caractres minuscules et majuscules dans les mots
cls du langage (create, insert, into, etc.). Dans les noms des tables et dans les noms des colonnes. Par
contre il fait une diffrence dans les valeurs textuelles :
o select * from entreprise est quivalent SELECT * FROM ENTREPRISE
o select * from candidature where nom='toto' ne donnera pas le mme rsultat que
select * from candidature where nom='Toto'

Le sparateur des chanes de caractres est le simple quote : '.

Laurent BRISSON et Philippe TANGUY

79/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

v2.3

La cration dune table est identique Oracle. Exemple :


create table "nom_table" (
colonne_1 type ,
colonne_2 type ,

);

La cration dune cl primaire avec une squence est lgrement diffrente : dans une syntaxe
abrge (suffisante ici) il suffit dutiliser le type serial et dajouter la contrainte primary key (voir table
entreprise). lexcution du script, PostgreSQL gnrera automatiquement une squence qui sera
nomme de la faon suivante : nomTable_nomColonnePK_seq. Par exemple, pour la table entreprise,
la squence se nomme entreprise_id_seq. Vous pouvez trouver plus dinformation sur la manipulation
des squences en lisant ce document : http://goo.gl/ZejpE

La cration dune cl rfrentielle est similaire Oracle. Dans une syntaxe abrge (la contrainte nest
alors pas nomme), il suffit dindiquer pour la colonne qui porte la contrainte :
nom_colonne type_colonne [not null] references nom_table
La partie entre crochets est optionnelle.
exemple : ref_entreprise integer not null references "entreprise"
Les doubles quotes sont optionnelles.

Une contrainte de non nullit se fait en ajoutant not null aprs le type de la colonne. Exemple :
nom varchar(50) not null

Types des donnes utiles :


o serial : type entier (integer) qui permet la gnration automatique dune squence
o integer : type entier sur 4 octets (suffisant pour la dimension de notre systme dinformation)
o varchar(n) : chane de n caractres max
o text : chane de caractres non borne en taille. Typiquement le CV dune candidature est de
ce type, ce qui nest pas le cas du nom et du prnom par exemple.
o date : stockage dune date (sans le stockage de lheure, inutile ici). Pour le stockage de lheure
uniquement, il faut utiliser le type time et pour le stockage de la date avec lheure, il faut
utiliser le type timestamp. Pour insrer une date dans une colonne de ce type, il faut insrer
une chane de caractres (entoure de simples quotes) au format '2011-09-02' soit le 02
septembre 2011.

Laurent BRISSON et Philippe TANGUY

80/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

B.

v2.3

EXEMPLE DE FONCTIONNALITE : LA LISTE DE TOUS LES LIVRES

Pour tester le comportement de lapplication, une version complte de celle-ci est disponible lURL suivante :
http://srv-labs-006.enst-bretagne.fr/BibliothequeCorrige/
Une des fonctionnalits de lapplication est presque implmente : la liste de tous les livres prsents dans la
base de donnes. Limplmentation de cette fonctionnalit est faite sur trois niveaux :
 Au premier niveau, le composant graphique qui interagit avec le navigateur est le fichier JSP
ListeLivres.jsp.
 Au deuxime niveau, ce JSP interagit avec le composant Java ComposantBDLivre.
 Au troisime et dernier niveau, ce composant interagit avec la base de donnes o se trouve la table
contenant les donnes afficher.
Lensemble du fonctionnement est schmatis ci-dessous :
ListeLivres .jsp
Appel de la mthode listeTousLivre()

Gestion de laffichage des rsultats

1.

Oracle base ENSEIG

ComposantBDLivre
listeTousLivre()
Requte
select * from livre order by titre
Encapsulation des rsultats au sein dun
ArrayList
Renvoi

Table livre
Id

Isbn 10

Isbn13

Titre

Auteur

000

111

Aaa

Bbbb

LE JSP LISTELIVRES.JSP

Le composant daffichage de la liste des livres effectue principalement deux actions : demander au composant
ComposantBDLivre la liste des livres et grer laffichage des rsultats.
 La rcupration de la liste des livres se fait la ligne 28 : livres = compBD.listeTousLivres(); Le rsultat
est stock dans une structure de donnes (ArrayList).
 Ce rsultat est ensuite affich (lignes 50 66) au sein dun tableau HTML.

2.

LE COMPOSANT COMPOSANTBDLIVRE

La mthode listeTousLivre() est la mthode du composant ComposantBDLivre qui est utilise par cette
fonctionnalit. Cette mthode utilise une connexion JDBC pour rcuprer les donnes partir de la base.
Cette mthode rcupre les donnes partir dun certain nombre de colonnes qui doivent imprativement
tre prsentes dans la table : les colonnes id, isbn10, isbn13, titre et auteur.

3.

LA TABLE LIVRE

Cette table nexiste pas dans votre base de donnes (cest la premire tape de votre travail). Attention, le
code de ComposantBDLivre sattend trouver un certain nombre de colonnes qui doivent OBLIGATOIREMENT
tre prsentes au sein de votre table (voir plus haut).

Laurent BRISSON et Philippe TANGUY

81/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

C.

v2.3

MEMENTO JAVA DATABASE CONNECTIVITY (JDBC)


1
Obtenir une connexion la base de
donnes
 instance de la classe Connection

2
partir de la classe Connection,
obtenir une instance de la classe
Statement
~ unit de base permettant une
interaction avec la base de donnes
Modifier des donnes
de la base (insert,
delete, update )

= Connexion .getConnection ();

Statement stmt

= conn.createStatement ();

Obtenir des donnes


de la base : requte
(select )

3
Excution de la mise jour sur le
Statement.

executeUpdate
ne renvoie pas de
rsultats. Seul le
nombre de lignes modifis
dans la base est renvoy

Connexion conn

3
Excution de la requte sur le
Statement et rcupration des
rsultats dans un ResultSet.

ResultSet rset =
stmt .executeQuery ("select *
from table ");

stmt .executeUpdate ("insert


into ");

4
Boucle sur le ResultSet pour
rcuprer ligne par ligne les rsultats.

while (rset .next () ) {


String s =
rset .getString ("col");
5
Fermeture du ResultSet.

rset .close ();

6
Fermeture du Statement.

stmt.close ();

7
Fermeture de la connexion.

conn.close ();

Laurent BRISSON et Philippe TANGUY

82/89

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

v2.3

D.
COMPLEMENTS DINFORMATION ESSENTIELS A LIRE POUR VOUS
FACILITER LA VIE !
1.

PRECISION SUR LES METHODES "CREERLIVRE" ET "CREERUSAGER"

Ces deux mthodes insrent respectivement dans la base de donnes les informations sur un nouveau livre et
un nouvel usager. Les commentaires associs ces mthodes sont trs courts. Chacune de ces mthodes
renvoit une valeur entire (int) qui est l'identifiant unique des donnes enregistres (livre ou usager). Dans le
code qui vous est livr, la valeur par dfaut (et inutilisable) est -1.
Il y a donc deux tches raliser dans les mthodes :
1.

2.

Insertion des nouvelles donnes :


Lorsquon excute la commande SQL suivante : insert into livre values (...)
vous devez utilisez la squence associe la cl primaire pour obtenir une nouvelle valeur pour
l'identifiant (cl primaire).
Rcupration de l'id du nouveau livre (usager) :
Le principe est de demander la base qu'elle est la valeur courante de la squence associe (voir
document sur Moodle sur l'utilisation des squences sous Postgresql). Il est possible de faire un
requte SQL de la forme : select currval('nom_de_ma_sequence')

Le code suivant permet la rcupration (exemple donn pour un livre) :


public static int creerLivre(String isbn10, String isbn13, String titre,
String auteur) throws SQLException {
Statement stmt = Connexion.getConnection().createStatement();
// Partie 1 - insertion du nouveau livre : complter...
/ Partie 2 - rcupration de l'id correspondant au nouveau livre
String query = "select currval('livre_id_seq') as
valeur_courante_id_livre";
ResultSet rset = stmt.executeQuery(query);
rset.next();
int id = rset.getInt("valeur_courante_id_livre");
rset.close();
stmt.close();
return id;
}

Laurent BRISSON et Philippe TANGUY

83/89

10

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

v2.3

Note importante : cette application informatique n'est pas une application "relle", il n'y a qu'un seul
utilisateur connect sur la partie serveur. Comme toutes les vritables applications Web, plusieurs utilisateurs
simultans peuvent utiliser l'application en mme temps. Que pourrait-il arriver si deux utilisateurs diffrents
saisissaient chacun un nouveau livre quasiment simultanment (dans un laps de temps de l'ordre de quelques
millisecondes) ?

2.

DU CODE MORT

Quest-ce quun code mort ? Cest tout simplement une portion de code qui nest jamais utilise dans une
application.
On peut constater que les mthodes listeEmpruntsEnCours() et listeEmpruntsHistorique() ne sont jamais
appeles. Il nest donc pas utile de les complter.

3.
INVERSIONS DANS LORDRE DAFFICHAGE DES ATTRIBUTS DUN
EMPRUNT
Pour rsoudre ce problme, voici les manipulations effectuer :
Fichier ListeEmpruntEnCours.jsp lignes 56/57
Remplacer le code :

Par le code suivant :

<td><%=emprunt[1]%></td>

<td><%=emprunt[0]%></td>

<td><%=emprunt[0]%></td>

<td><%=emprunt[1]%></td>

Fichier ListeEmpruntHistorique.jsp lignes 56/57


Remplacer le code :

Par le code suivant :

<td><%=emprunt[1]%></td>

<td><%=emprunt[0]%></td>

<td><%=emprunt[0]%></td>

<td><%=emprunt[1]%></td>

4.
JAI COMPLETE LA METHODE MODIFIERLIVRE() MAIS QUAND JE
CLIQUE SUR MODIFIER UN LIVRE DANS LINTERFACE, JAI UN MESSAGE
DERREUR !
Avant de pouvoir modifier un livre, il faut en afficher les informations : vous devez donc galement complter
la mthode getLivre() avant de pouvoir modifier un livre travers linterface web.

Laurent BRISSON et Philippe TANGUY

84/89

11

[PROJET BIBLIOTHEQUE GUIDE DE DEMARRAGE]

5.

v2.3

JAI UNE ERREUR AU NIVEAU DE RSET.NEXT() ! AU SECOURS !

Il faut prendre lhabitude de lire la documentation avant dappeler laide. Pour vous aider, voici la
documentation concernant la mthode next() de la classe ResultSet.

boolean next()throws SQLException


Moves the cursor froward one row from its current position. A ResultSet cursor is initially
positioned before the first row; the first call to the method nextmakes the first row the
current row; the second call makes the second row the current row, and so on.
When a call to the next method returns false, the cursor is positioned after the last row.
Any invocation of a ResultSet method which requires a current row will result in
a SQLException being thrown. If the result set type is TYPE_FORWARD_ONLY, it is
vendor specified whether their JDBC driver implementation will return false or throw
an SQLException on a subsequent call to next.
If an input stream is open for the current row, a call to the method next will implicitly close
it. A ResultSet object's warning chain is cleared when a new row is read.

Returns:

true if the new current row is valid; false if there are no more rows
Throws:

SQLException - if a database access error occurs or this method is called on a


closed result set

Observez bien le Returns que se passe-t-il si vous rcuprez false et que vous tentez daccder au
ResultSet malgr tout ?
Documentation sur la classe ResultSet: http://goo.gl/sMp0K
Le lien vers la DOC JAVA : http://docs.oracle.com/javase/

Laurent BRISSON et Philippe TANGUY

85/89

12

v1.4

[PRISE EN MAIN D'ORACLE]

PR I S E E N M A IN D ' OR AC L E
SOMMAIRE
I.

Inscription AU SGBD ORACLE.......................................................................................................................... 1

II.

Connexion ORACLE ...................................................................................................................................... 1

III.

Documentation ............................................................................................................................................... 3

I.

INSCRIPTION AU SGBD ORACLE

De la mme manire que vous disposez dun compte informatique vous permettant daccder vos fichiers,
vous avez besoin dun compte Oracle pour pouvoir utiliser ce SGBD.
Pour crer un compte Oracle votre nom, lancez un navigateur web et allez sur http://web-tp.svc.enstbretagne.fr/ pour demander la cration de votre compte oracle. Un mot de passe vous est envoy par email.
Le SGBD Oracle est localis sur un serveur distant. Il est identifi sous le nom dENSEIG (pour ENSEIGnement).

II.

CONNEXION A ORACLE
A.

EN UTILISANT SQL PLUS

De la mme manire que vous pouvez accder vos fichiers par linterprteur de commande tcsh (xterm sous
unix) ou dos (invite de commandes sous windows), vous pouvez accder de manire interactive au SGBD
Oracle via un interprteur de commande nomm SQLPLUS qui utilise le langage standardis SQL.
Maintenant, laide de votre login et du mot de passe qui vous a t affect par mail, vous devez vous
identifier via SQLPLUS pour accder au serveur Oracle sur ENSEIG.

Sous windows, sqlplus est accessible via le menu programme

Merci de communiquer toute correction ou remarque sur ce document


laurent.brisson@telecom-bretagne.eu

Laurent BRISSON

86/89

v1.4

[PRISE EN MAIN D'ORACLE]

Sous unix/linux, taper SETUP ORACLE dans une fentre de commande puis sqlplus

A ce stade, vous avez accs linterprteur SQL. Pour communiquer avec Oracle, vous tes oblig dutiliser ce
langage. Lobjectif de ce TP est de vous permettre dapprhender rapidement les possibilits de SQL.

B.

EN UTILISANT AQUA DATA STUDIO 4.7.2

Cliquez sur Register Server puis compltez les informations comme sur la capture dcran ci-dessous.

Laurent BRISSON

87/89

v1.4

[PRISE EN MAIN D'ORACLE]

III.

DOCUMENTATION
A.

DOCUMENTATION STANDARD ORACLE.

Une documentation en ligne est mise votre disposition (http://lricdrom.enstbretagne.fr/cd/817docs/DOC/). Pour accder une aide sur le langage SQL, choisir Oracle8 Server,
puis Oracle8 SQL Reference qui vous liste les commandes et leur syntaxe. SQL*Plus User's Guide
and Reference propose une explication pour dbuter avec le langage SQL.
Une aide en ligne est disponible sous linterprteur SQL Plus. Moins facile dutilisation que la
documentation papier ou html, elle peut cependant dpanner en cas de problme.
> help ;
vous permet de connatre les lments pour lesquels une aide en ligne est disponible.
> help command;
vous permet de connatre les commandes pour lesquels une aide en ligne est disponible.
> help select;
vous permet de connatre la syntaxe de la commande select.
B.

PREMIER CONTACT AVEC SQLPLUS

Pour connatre le schma de vos tables, vous pouvez utiliser la commande desc nom_de_la_table .
Par exemple, pour connatre le schma de la relation emp (employ), taper :
desc livre
Pour connatre le contenu dune table, vous pouvez utiliser les commandes du langage SQL, par
exemple :
Select * from livre ;
Enfin, pour amliorer la visualisation des rsultats, il vous est recommand de positionner au sein de
linterprteur SQLPlus dOracle les variables paramtrant laffichage des rsultats :
Set linesize 130;
Set pagesize 65;
Set long 1024;
Set pause on;
Vous tes maintenant capable dattaquer les exercices dcrits dans la section suivante.

Laurent BRISSON

88/89

v1.4

[PRISE EN MAIN D'ORACLE]

C.

SQL ET LA CASSE (CASE SENSITIVITY)

Par dfaut, les noms de structures (i.e. de relations, dattributs, de synonymes, etc.) sont en majuscules
mais vous pouvez les utiliser en minuscules dans les requtes, linterprteur les mettra de lui-mme en
majuscule. Les deux requtes ci-dessous donnent le mme rsultat :
> SELECT TITRE FROM LIVRE;
> select titre from livre;
Si vous voulez dissocier le traitement des caractres minuscules ou majuscules, il faut utiliser les
quotes. Par exemple, seule la premire des deux requtes suivantes donnera un rsultat correct :
> select TITRE from LIVRE;
> select titre from livre;
En revanche, les valeurs dattributs textuels sont case-dependant . Par consquent, les deux requtes
suivantes sont diffrentes :
> select titre from livre where nom=KUNDERA;
> select titre from livre where nom=Kundera;
Enfin, la recherche de chanes de caractre incomplte sexprime en SQL laide du comparateur
LIKE et des caractres % (percent remplace toute chane de caractres) et _ (underscore remplace un
caractre quelconque). Par exemple :
> select titre from LIVRE where collection like Fo%;
> select titre from LIVRE where collection like Fo_io;

D.

SAUVEGARDES

Quelques commandes utiles si vous souhaitez garder des traces des requtes que vous tapez :

save filename.sql /* sauve la requte courante dans un fichier de nom filename.sql*/


get filename.sql /* charge le contenu du fichier de nom filename.sql comme requte
courante dans le buffer*/
start filename /* charge et excute la requte SQL contenue dans le fichier filename.sql
*/
run /* lance l'excution de la requte courante stocke dans le buffer*/
spool filename.txt /* fait une sortie fichier de la sortie courante lcran*/
spool off /* suspend l'opration prcdente*/

Laurent BRISSON

89/89

Вам также может понравиться