Академический Документы
Профессиональный Документы
Культура Документы
Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
SQLspot, entreprise d'audit et de conseil de bases de donnes et de serveurs SQL, et intervient dans
diffrentes coles (ISEN Toulon, Cesi Aix-en-Provence et Cesi Lyon, Cnam Toulon et universit Toulouse II).
Distingu MVP (Most Valuable Professional) par Microsoft titre d'expert SQL Server, il anime depuis plus
de 10 ans la clbre rubrique sqlpro consacre aux base de donnes et au langage SQL sur le site
www.developpez.com.
Concevoir une base de donnes grce UML 2
S'adressant aux architectes logiciels, chefs de projet, analystes, dveloppeurs, responsables mthode et tudiants en
informatique, cet ouvrage explique comment utiliser bon escient le diagramme de classes UML pour concevoir une base de
donnes, puis comment traduire correctement ce diagramme en langage SQL. Sa dmarche est indpendante de tout diteur
de logiciel et aisment transposable, quel que soit l'outil de conception choisi.
Le livre dcrit d'abord la construction dun diagramme de classes UML l'aide de rgles de validation et de normalisation.
Tous les mcanismes de drivation d'un modle conceptuel dans un schma relationnel sont clairement comments l'aide
d'exemples concrets. Le modle logique est ensuite optimis avant l'criture des scripts SQL. La dernire tape consiste
implmenter les rgles mtier en programmant des contraintes, dclencheurs ou transactions SQL. Le livre se clt par une
tude comparative des principaux outils de modlisation sur le march.
Entirement rcrite, cette deuxime dition est commente par Frdric Brouard, expert SQL Server et auteur de nombreux
ouvrages et articles sur le langage SQL. maille d'une centaine de schmas et d'illustrations, elle est complte par 30
exercices inspirs de cas rels.
Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classesassociations Agrgations Identification relative et artificielle Hritage Aspects temporels Dmarche adopter
Rgles mtier et contraintes Rgles de validation Le niveau logique. Du conceptuel au relationnel Typez vos
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.
29,90
Au sommaire
782212 134131
C. Soutou
2ee dition
11:31
15/02/12
soutou
Christian Soutou
Avec la collaboration de Frdric Brouard
UML
2
UML 2
pour
les
pour les
bases
de
donnes
bases de donnes
Modlisation
- Normalisation
Modlisation
- Normalisation
Gnration SQL - Outils
Gnration SQL - Outils
2ee dition
Avec 30
exercices
corrigs
Page 1
Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
SQLspot, entreprise d'audit et de conseil de bases de donnes et de serveurs SQL, et intervient dans
diffrentes coles (ISEN Toulon, Cesi Aix-en-Provence et Cesi Lyon, Cnam Toulon et universit Toulouse II).
Distingu MVP (Most Valuable Professional) par Microsoft titre d'expert SQL Server, il anime depuis plus
de 10 ans la clbre rubrique sqlpro consacre aux base de donnes et au langage SQL sur le site
www.developpez.com.
Concevoir une base de donnes grce UML 2
S'adressant aux architectes logiciels, chefs de projet, analystes, dveloppeurs, responsables mthode et tudiants en
informatique, cet ouvrage explique comment utiliser bon escient le diagramme de classes UML pour concevoir une base de
donnes, puis comment traduire correctement ce diagramme en langage SQL. Sa dmarche est indpendante de tout diteur
de logiciel et aisment transposable, quel que soit l'outil de conception choisi.
Le livre dcrit d'abord la construction dun diagramme de classes UML l'aide de rgles de validation et de normalisation.
Tous les mcanismes de drivation d'un modle conceptuel dans un schma relationnel sont clairement comments l'aide
d'exemples concrets. Le modle logique est ensuite optimis avant l'criture des scripts SQL. La dernire tape consiste
implmenter les rgles mtier en programmant des contraintes, dclencheurs ou transactions SQL. Le livre se clt par une
tude comparative des principaux outils de modlisation sur le march.
Entirement rcrite, cette deuxime dition est commente par Frdric Brouard, expert SQL Server et auteur de nombreux
ouvrages et articles sur le langage SQL. maille d'une centaine de schmas et d'illustrations, elle est complte par 30
exercices inspirs de cas rels.
qui sadresse cet ouvrage ?
Aux tudiants en IUT, IUP, Deug et coles d'ingnieur, ainsi qu leurs professeurs
Aux professionnels souhaitant s'initier la modlisation de bases de donnes avec UML
tous les concepteurs de bases de donnes dsirant migrer de Merise UML
Au sommaire
Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classesassociations Agrgations Identification relative et artificielle Hritage Aspects temporels Dmarche adopter
Rgles mtier et contraintes Rgles de validation Le niveau logique. Du conceptuel au relationnel Typez vos
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.
C. Soutou
2ee dition
11:31
15/02/12
soutou
Christian Soutou
Avec la collaboration de Frdric Brouard
UML
2
UML 2
pour
les
pour les
bases
de
donnes
bases de donnes
Modlisation
- Normalisation
Modlisation
- Normalisation
Gnration SQL - Outils
Gnration SQL - Outils
2ee dition
Avec 30
exercices
corrigs
soutou titre
9/02/12
10:53
Page 2
UML 2
pour les
bases de donnes
2e dition
dU mme AUTEUR
C. Soutou. SQL pour Oracle (5e dition).
N13329, 2011, 720 pages.
C. Soutou. Programmer avec MySQL.
N12869, 2011, 450 pages.
Autres ouvrages
P. Roques. Mmento UML 2.4 (2e dition).
N13268, 2011, 14 pages.
P. Roques. UML 2 par la pratique (7e dition).
N12565, 2009, 396 pages.
P. Roques. UML 2 par la pratique (6e dition).
N13344, 2011, 370 pages (format semi-poche).
P. Roques et F. Valle. UML 2 en action (4e dition).
N12104, 2007, 396 pages.
H. Balzert. UML2.
N11753, 2006, 88 pages.
F. Valle. UML pour les dcideurs.
N11621, 2005, 282 pages.
H. Bersini. La programmation oriente objet. Cours et exercices en UML 2 avec Java 6, C# 4, C++, Python, PHP 5 et LinQ.
N12806, 2011, 644 pages.
P. Roques. Mmento PHP 5 et SQL (2e dition).
N12457, 2009, 14 pages.
p2 Soutou.indd 1
15/02/12 09:13
soutou titre
9/02/12
10:53
Page 1
Christian Soutou
UML 2
pour les
bases de donnes
2e dition
DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com
En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage,
sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre Franais dexploitation du droit de copie,
20, rue des Grands Augustins, 75006 Paris.
Groupe Eyrolles, 2007, 2012, ISBN: 978-2-212-13413-1
Copyright Soutou.indd 1
15/02/12 09:12
Livre SOUTOU.indb 3
15/02/12 07:04
Livre SOUTOU.indb 4
15/02/12 07:04
Avant-propos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
3
4
Les diagrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
Guide de lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Niveau conceptuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transformation et normalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
criture des scripts SQL et programmation des contraintes. . . . . . . . . . . . . . . . . . . . . . . . .
Les vues SQL2 et SQL3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les outils du march . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Annexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
9
9
9
9
Les pictogrammes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10
Le niveau conceptuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
12
Premiers exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le jargon du terrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ne confondez pas traitements et donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le dictionnaire des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
14
16
16
17
Un peu dhistoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
ditions Eyrolles
Livre SOUTOU.indb 5
15/02/12 07:04
Dautres formalismes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Attribut ou information?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classe ou entit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
20
20
21
Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
24
25
27
28
30
32
32
34
36
37
37
Les classes-associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formalismes entit-association. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rattacher une classe-association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classe-association rflexive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
39
39
40
41
41
42
43
44
46
46
51
Les agrgations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
Lidentification relative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
VI
Livre SOUTOU.indb 6
53
54
54
55
56
Lidentification artificielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
ditions Eyrolles
15/02/12 07:04
Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Identification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
59
59
59
60
Aspects temporels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
60
61
62
63
La dmarche adopter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
58
64
64
65
66
68
72
74
74
75
76
78
80
Rgles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
81
82
83
84
86
88
89
89
91
Bilan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
ditions Eyrolles
Livre SOUTOU.indb 7
116
VII
15/02/12 07:04
117
117
118
121
121
124
125
126
128
131
144
152
153
154
154
156
157
158
159
161
161
163
164
VIII
Livre SOUTOU.indb 8
165
168
169
173
174
177
180
ditions Eyrolles
15/02/12 07:04
Dnormalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Les rgles de Brouard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
183
185
Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
198
198
200
202
203
207
208
214
218
227
227
230
231
ditions Eyrolles
Livre SOUTOU.indb 9
245
246
247
248
248
IX
15/02/12 07:04
Modelio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
250
250
251
252
Objecteering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
254
255
255
256
PowerAMC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
257
258
259
259
260
261
263
264
265
265
267
268
268
268
270
270
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Livre SOUTOU.indb 10
276
276
ditions Eyrolles
15/02/12 07:04
279
281
281
282
287
288
288
289
ditions Eyrolles
Livre SOUTOU.indb 11
XI
15/02/12 07:04
310
311
312
313
314
Ressources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Webographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Bibliographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
XII
Livre SOUTOU.indb 12
ditions Eyrolles
15/02/12 07:04
Avant-propos
Le but de cet ouvrage est dexpliquer tout dabord comment utiliser bon escient le diagramme
de classes UML pour concevoir une base de donnes, puis comment matriser la traduction
de ce diagramme en script SQL permettant de gnrer des tables normalises. La dmarche
propose dans ce livre est indpendante de tout diteur de logiciel et aisment transposable
quel que soit loutil de conception que vous adopterez.
Entirement rcrite, cette deuxime dition est maille de nombreux cas concrets prsents
sous forme dexercices. Le texte est par moments comment par Frdric Brouard alias SQLPro,
consultant indpendant et expert en bases de donnes (MS SQL Server en particulier).
ditions Eyrolles
Livre SOUTOU.indb 1
15/02/12 07:04
sr; Apollo11 a t envoy sur la lune en juillet1969 avant quE.Codd publie ses crits sur le
modle relationnel. lpoque, la conception des donnes se faisait avec bon sens, depuis, les
chercheurs ont amen des cadres plus formels. vous de toujours conserver votre bon sens,
tout en utilisant ces cadres.
Le modle hirarchique
Les bases de donnes hirarchiques ont introduit un modle de donnes du mme nom. Il sagit
de dterminer une arborescence de donnes o laccs un enregistrement de niveau infrieur
nest pas possible sans passer par le niveau suprieur. Promus par IBM et toujours utiliss dans
le domaine bancaire, les SGBD hirarchiques souffrent toutefois de nombreux inconvnients.
La figure suivante illustre un modle hirarchique de donnes dans lequel des compagnies
ariennes peuvent embaucher plusieurs pilotes. Un pilote peut travailler pour le compte de
diffrentes compagnies.
Livre SOUTOU.indb 2
ditions Eyrolles
15/02/12 07:04
Avant-propos
Les inconvnients rcurrents sont toujours la forte dpendance entre les donnes stockes et
les mthodes daccs. Les chanages internes impliquent forcment une programmation complexe. Outre ces problmes de programmation, ce modle montre des lacunes lors de laccs
la base.
Extraire la liste des pilotes implique le parcours de toutes les compagnies.
Linsertion peut se rvler problmatique : lajout dun pilote sans compagnie nest pas
possible, moins dajouter une compagnie fictive.
La suppression peut se rvler dangereuse : une compagnie disparat, alors de fait ses
pilotes aussi.
La modification est souvent problmatique : les incohrences proviennent dventuelles
redondances (le nom ou ladresse dun pilote qui change doit se rpercuter tous les enregistrements).
Bien quil existe de nombreuses hirarchies autour de nous, le monde qui nous entoure nest
pas un arbre!
Le modle rseau
Quelques annes plus tard, C. W. Bachman, pionnier dans le domaine de linformatique, sest
essay aux bases de donnes en inventant un modle brisant cette hirarchie plutt arbitraire.
Les bases de donnes rseau taient nes avec le modle CODASYL, premire norme dcide
sans IBM.
ditions Eyrolles
Livre SOUTOU.indb 3
15/02/12 07:04
Bien que rsolvant quelques limitations du modle hirarchique et annonant des performances en lecture honorables, le modle rseau nest ni plus ni moins quune usine gaz gave
de pointeurs. Pour preuve, plus personne nutilise de tels SGBD o la dpendance entre les
donnes stockes et les mthodes daccs existe toujours, et lvolution dune base de donnes
est trs coteuse en termes de recompilation de pointeurs.
Soyons honntes, le monde ressemble bien une telle usine gaz ! Mais pas question de
stocker ainsi les donnes, ce serait bien trop compliqu de concevoir le bon graphe. Le modle
de donnes se doit dtre plus simple.
Le modle relationnel
En 1970, E. Codd publie larticle de rfrence posant les bases du modle relationnel [COD
70]. Dun seul coup, toutes les limitations des prcdents modles sont rsolues. Le but initial
de ce modle tait damliorer lindpendance entre les donnes et les traitements. Cet aspect
des choses est russi et avec a dautres fonctionnalits apparaissent:
Indexation, etc.
Les liens entre les enregistrements de la base de donnes sont raliss non pas laide de pointeurs physiques, mais laide des valeurs des cls trangres et des cls primaires. Pour cette
raison, le modle relationnel est dit modle valeurs.
Livre SOUTOU.indb 4
ditions Eyrolles
15/02/12 07:04
Avant-propos
La force de ce modle de donnes rside dans le fait quil repose sur des principes simples et
permet de modliser des donnes complexes. Le modle relationnel est lorigine du succs
que connaissent aujourdhui les grands diteurs de SGBD, savoir Oracle, IBM, Microsoft et
Sybase dans diffrents domaines:
OLTP (OnLine Transaction Processing) o les mises jour des donnes sont frquentes,
les accs concurrents et les transactions ncessaires.
OLAP (Online Analytical Processing) o les donnes sont multidimensionnelles (cubes),
les analyses complexes et linformatique dcisionnelle.
Systmes dinformation gographiques (SIG) o la majorit des donnes sont exprimes en
2D ou 3D et suivent des variations temporelles.
Comment concevoir de telles relations ? Cest ce que nous allons voir tout au long de cet
ouvrage
ditions Eyrolles
Livre SOUTOU.indb 5
15/02/12 07:04
Ladoption gnralise de la notation UML dpasse le simple effet de mode. La majorit des
nouveaux projets industriels utilisent la notation UML. Tous les cursus universitaires, quils
soient thoriques ou plus techniques, incluent ltude dUML. Cela ne signifie pas quUML
soit la panace, mais que cette notation est devenue incontournable. La dernire version de
la spcification UML, sortie en mai 2010, est la 2.3 (http://www.omg.org/spec/UML/2.3/).
Ce succs sexplique aussi par ladoption unanime des concepts objet, qui ont des avantages
indniables (rutilisabilit de composants logiciels, facilit de maintenance, prototypage et
extension des applications, etc.).
Les diagrammes
Les versions 1.x de la notation UML dfinissent neuf diagrammes : cinq pour les aspects
statiques (classes, objets, cas dutilisation, composants et dploiement) et quatre pour les
aspects dynamiques (squence, collaboration, tats-transitions, activits). Les spcifications
dUML2.x ajoutent le diagramme dinteraction, le diagramme de structure composite et le
diagramme temporel. Seul le diagramme de classes est intressant utiliser pour la modlisation dune base de donnes.
UML concerne en premier lieu le dveloppement logiciel et na pas t initialement pens
pour les bases de donnes. La notation UML permet toutefois doffrir un formalisme aux
concepteurs dobjets mtier et aux concepteurs de bases de donnes. Dautre part, les
concepts relatifs la modlisation de donnes (entits, associations, attributs et identifiants)
peuvent tre parfaitement intgrs aux diagrammes de classes. De plus, dautres concepts
(notamment les classes-associations, agrgats et contraintes) permettent denrichir un
schma conceptuel.
Les outils
De nombreux outils informatiques bass sur la notation UML existent depuis quelques
annes. Les plus sophistiqus permettent de gnrer des modles logiques ou des scripts
SQL. Alors que lautomatisation est quasiment assure (sous rserve de la qualit de loutil)
entre le modle conceptuel et la base de donnes, il nen est pas de mme de llaboration du
diagramme initial qui va conditionner toute la suite. Ici lhumain est au centre de tout et il
nest pas question de penser que cette tche puisse tre automatise (cest heureux pour les
concepteurs).
Par ailleurs, il est fort probable que les scripts SQL gnrs devront tre modifis manuellement par la suite, soit pour des raisons doptimisation, soit parce que loutil ne permet pas de
gnrer une caractristique particulire du SGBD (index, vues, types de donnes...), soit tout
simplement parce que le concepteur prfre utiliser une autre possibilit dimplmentation
pour traduire telle ou telle autre association.
Il est donc prfrable de matriser les concepts, de comprendre les mcanismes de transformation de modles et dadopter une dmarche afin dutiliser loutil de manire optimale.
Livre SOUTOU.indb 6
ditions Eyrolles
15/02/12 07:04
Avant-propos
Cetouvrage vous permettra, je lespre, de mieux apprhender le cheminement de la conception vers le codage en donnant des rgles prcises suivre dans llaboration des diffrents
modles pour viter de graves erreurs au niveau de la base. Le script SQL fera office de vritable rvlateur.
Guide de lecture
Cet ouvrage sorganise en 5chapitres qui suivent les tapes de modlisation illustres dans la
figure suivante.
ditions Eyrolles
Livre SOUTOU.indb 7
15/02/12 07:04
Louvrage commence par dcrire la construction dun diagramme de classes UML en respectant des rgles qui permettent de le valider et de le normaliser. Les mcanismes de drivation
dun modle conceptuel dans un schma de donnes relationnel sont clairement expliqus
laide dexemples concrets. Le modle logique est ensuite optimis avant lcriture des scripts
SQL. Il sagit ensuite dimplmenter les rgles mtier en programmant des contraintes ou des
dclencheurs SQL. La dernire tape consiste prparer des vues qui composeront linterface
de la base aux utilisateurs extrieurs.
Livre SOUTOU.indb 8
ditions Eyrolles
15/02/12 07:04
Avant-propos
Niveau conceptuel
Le chapitre 1 dcrit la premire tape du processus de conception dune base de donnes,
savoir la construction dun schma conceptuel. Le formalisme graphique prconis est le
diagramme de classes de la notation UML qui permet des quivalences des modles de type
entit-association.
Transformation et normalisation
Le chapitre2 dcrit les concepts du modle relationnel, puis prsente les rgles qui permettent
de driver un schma logique partir dun modle conceptuel. La dernire partie traite de la
normalisation et du calcul de volumtrie.
Annexes
Les annexes contiennent les corrigs dtaills des exercices, une webographie et une bibliographie. Lindex propose les termes utiliss dans la dfinition des concepts et de certaines
instructions SQL.
ditions Eyrolles
Livre SOUTOU.indb 9
15/02/12 07:04
Les pictogrammes
Ce pictogramme introduit une dfinition, un concept ou une remarque importante.
10
Livre SOUTOU.indb 10
ditions Eyrolles
15/02/12 07:04
Chapitre 1
Le niveau conceptuel
Ce chapitre dtaille la premire tape de conception dune base de donnes: il sagit dlaborer
un schma conceptuel. Bien que le formalisme graphique prconis soit le diagramme de
classes de la notation UML, vous trouverez toutes les quivalences avec les modles de type
entit-association.
La modlisation est un processus la fois incontournable et crucial. Incontournable, car mme
si vous matrisez le modle relationnel et connaissez parfaitement lenvironnement automatiser, vous ne pouvez pas raisonnablement crer directement les tables. Crucial, car cela
conditionne la structure de la base de donnes et donc influencera les performances venir.
Ce travail dabstraction concerne toute nouvelle conception et il est naturel dy consacrer du
temps.
Le schma conceptuel exprime une vue abstraite de la base de donnes qui, afin de prserver
lindpendance donnes/traitements, ne comporte aucune indication relative aux structures de
stockage ou techniques daccs aux donnes.
Lobjectif dun schma conceptuel nest pas de dcrire compltement un systme, mais de
modliser dans un premier temps les donnes qui seront stockes. Par ailleurs, des rgles
mtier peuvent enrichir un schma conceptuel afin de prparer au mieux la programmation
des applications.
Il faut comprendre que la modlisation conceptuelle base de classe ou dentit reprsente les aspects smantiques du modle de donnes, tandis que le modle physique
base de tables est une lecture purement technique de la base. Malheureusement, il est
de plus en plus frquent de voir des informaticiens ignorer la modlisation conceptuelle
pour sengouffrer directement sur le physique. Cest une erreur gravissime qui a des
consquences profondes et durables, comme la mauvaise interprtation du modle ou la
cration de tables obses.
ditions Eyrolles
Livre SOUTOU.indb 11
11
15/02/12 07:04
Pour faire comprendre pourquoi il est frquent de mal interprter un modle physique, je montre mes
tudiants deux tables voiture et personne avec un lien 1:n de voiture vers personne et je leur
demande ce que ce modle dcrit. Il y a pratiquement autant de rponses que dtudiants, mais jamais
la bonne!
Imaginez ce que cela peut donner en entreprise quand la base de donnes doit tre utilise par de nombreux informaticiens pour dvelopper une mme application, chacun ayant sa propre interprtation des
liens entre les tables
Enfin, en ce qui concerne larrive de tables obses, elle est lie la non-utilisation du modle conceptuel.
Combien de fois ai-je entendu un dveloppeur demanderJai une nouvelle information stocker, je la
rattache quelle table? avec la fin des tables de 80colonnes inexploitables et contre-performantes
lors de la monte en charge
lire: http://blog.developpez.com/sqlpro/p10070/langage-sql-norme/base-de-donnees-et-performancespetites.
Premiers exemples
Une organisation
Considrons le club de plonge qui dcide dabandonner la gestion papier de toutes ses prestations. Lanalyse va consister recenser ses biens matriels, comprendre le fonctionnement
de la gestion des clients et comptabiliser les sorties des bateaux, etc. La visite des sites et la
rencontre avec chaque intervenant seront trs instructives (accueil, pilote du bateau, moniteurs
et directeur de plonge); elles permettront de bien apprhender le contexte. Ltude de documents papier permet souvent une investigation plus approfondie: le carnet de bord dun bateau
pour se rendre compte du nombre de sorties par jour, des cartes pour recenser les sites, les
habitudes ou rglementations associes, etc.
12
Livre SOUTOU.indb 12
ditions Eyrolles
15/02/12 07:04
Chapitre 1
Le niveau conceptuel
Sans vous jeter leau (elle tait facile celle-l), vous devez pousser chaque expert dans son
domaine le faire.
Un texte de loi
Considrons le texte suivant o diffrentes informations sont prsentes au sein dun mme
contenu. Supposons que les textes de loi soient numriss et stocks sur un serveur ministriel.
Le contexte danalyse est, par exemple, restreint la recherche dun texte en particulier.
Il apparat un numro darticle, un numro de loi ou de dcret (il sagira donc de prendre en
compte un type de document), la date de la loi ou du dcret. Par ailleurs, les termes portant
droits et relatif vous amneront prendre en compte une donne modlisant les mots-cls
dun article ou dcret. Enfin, le verbe abroger implique daffecter un statut chaque article
ou loi (abrog ou pas).
ditions Eyrolles
Livre SOUTOU.indb 13
13
15/02/12 07:05
Le jargon du terrain
Lors de cette analyse, vous constaterez que le jargon du terrain nest pas toujours clair. Chaque
domaine a ses experts et son vocabulaire. Par exemple, des simples notions comme une date,
une dure ou un prix ne seront probablement pas perues de la mme manire dans un contexte
financier ou des travaux publics.
Si vous devez concevoir une base de donnes, mieux vaut ne pas connatre le domaine ou
feindre de ny rien comprendre afin que votre connaissance partielle ne vienne pas perturber
la ralit du systme. titre dexemple, supposons que vous soyez copropritaire et que vous
assistiez depuis de nombreuses annes aux runions houleuses organises par votre cher (dans
les deux termes?) syndic. Un jour, vous avez en charge dinformatiser un autre syndic (dommage). Vous constaterez sans doute que le fonctionnement de votre client est trs diffrent
de celui que vous supposiez. Ainsi, il est probable que cela vous pnalise davantage que si vous
tiez novice dans ce domaine de limmobilier.
Deux dmarches sont mener de front (oui, avec sa tte!):
dductive: vous devrez dcortiquer le discours en informations lmentaires;
inductive: vous mettrez en vidence partir des concepts du discours des informations.
Avec lexprience, vous analyserez les choses de cette manire.
14
Livre SOUTOU.indb 14
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Questionnez les experts du domaine en reformulant souvent vos interrogations. Nhsitez pas
changer dinterlocuteur afin davoir des points de vue complmentaires. Investiguez jusquau
moment o vous obtiendrez une rponse unique et sans ambigut chacune de vos questions.
Le tableau suivant prsente quelques questions qui ne peuvent tre rsolues par ltude seule
de documents initiaux (photos, fragments de texte et interface graphique) des trois exemples
prcdents. Vous devrez obtenir une rponse prcise chacune de ces questions.
Tableau 1-1: Questions additionnelles
Club de plonge
Textes de loi
Supermarchs
Jusqu quel kilomtrage considre-t-on un supermarch dans le rayon dun autre (pour les
prsenter sur le mme cran)?
Lors de la phase danalyse, il est souvent difficile de faire cracher le morceau aux interviews. En effet, ils sont tellement dans leur univers quils nenvisagent mme pas quun
tiers, spcialiste de linformation et qui est plong dans leur univers, puisse ignorer ce
point leur mtier. Ils ont donc souvent des difficults faire comprendre ou simplifier
les rgles qui les rgissent ou quils ont eux-mmes cres. Pour sen convaincre, il ny a
qu voir la raction de non-informaticiens lorsquils participent une discussion entre
dveloppeurs passionns!
Cest pourquoi la matrise du vocabulaire client est essentielle et dterminante. Je commence toujours par cette phase, et je note et apprends par cur les dfinitions techniques
Au cours de la phase danalyse par interview, il est probable quil y ait toujours des zones
dombre, notamment sur les rgles de gestion, mme lorsque les explications viennent de
plusieurs sources. Dans ce cas, je fais mon simplet en revenant le soir ou le lendemain
avec une question-affirmation prenant lexact contraire de ce que jai pu comprendre, par
exemple: Si jai bien compris, lallotement rsiduel ne peut tre induit que par un tiers
au contrat. ce moment-l, tous les coups, mon interlocuteur rtorque: Mais,
non jai d mal mexpliquer je vais prendre un autre exemple
En gnral, l vous avez gagn car on progresse plus de ses erreurs que de ses russites!
ditions Eyrolles
Livre SOUTOU.indb 15
15
15/02/12 07:05
Supermarchs
Quelle est la priode de mise jour des informations qui apparaissent sur le site?
16
Livre SOUTOU.indb 16
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
La majorit des outils de conception permettent de gnrer des rapports, plus ou moins
dtaills, listant les donnes du domaine associes certaines caractristiques importantes:
identificateur (nom de la donne);
dsignation (explication en quelques mots ou lignes de la smantique de la donne);
type de la donne (chane de caractres, date, numrique, rel, boolen);
caractre obligatoire ou facultatif.
Dautres caractristiques moins importantes peuvent prciser la nature des donnes (contrainte
de valeur, minimum, maximum, intervalle, valeur calcule).
La figure suivante illustre un extrait dun rapport gnr laide de loutil PowerAMC.
ditions Eyrolles
Livre SOUTOU.indb 17
17
15/02/12 07:05
de ces concepts, vous serez en mesure de concevoir votre base de donnes quel que soit le
domaine dapplication.
Une erreur courante Quest-ce quune relation?
Il existe une grande confusion sur le terme relation. En effet, contrairement une croyance
populaire dissmine par de mauvaises traductions comme par des articles pseudo-techniques sur cette nouvelle Samaritaine que reprsente Internet, le terme relation dsigne
lorigine les objets mathmatiques contenant les donnes et non les liens! On a oubli
le sens primaire de relation. Il suffit daller sur nimporte quel dictionnaire, par exemple
le Larousse (http://www.larousse.fr/dictionnaires/francais/relation), pour lire la dfinition suivante: Action de rapporter en dtail ce dont on a t le tmoin ou dont on a eu
connaissance.
Autrement dit, la relation au sens mathmatique (MLD) est la traduction de lentit du
modle conceptuel et conduira la table dans le modle physique.
Un peu dhistoire
Le modle relationnel est n en 1970 des travaux de Edgar Frank Codd, mathmaticien
britannique, ex-pilote de chasse de la RAF, devenu ingnieur chez IBM.
Pendant les annes qui ont suivi, deux courants de recherches relatives la conception des
tables se sont dgags. Le premier visait contrler la qualit dun schma relationnel en proposant des rgles de normalisation (les formes normales seront tudies en dtail au chapitre
suivant). Le second visait sabstraire des structures de donnes stockes en introduisant un
niveau plus abstrait: le niveau conceptuel.
Le modle entit-association, appel entity-relationship (entit-relation) chez les AngloSaxons, a t propos des deux cts de lAtlantique. La paternit de ce modle fut attribue
Peter Chen en 1976 avec son article The Entity-Relationship Model-Toward a Unified View
of Data, mais il ntait sans doute pas le premier. Il est dailleurs amusant de lire le titre dun
des articles dHubert Tardieu paru en 1979 A Method, A Formalism and Tools for Database
Design (three years of Experimental Practice).
18
Livre SOUTOU.indb 18
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Comme tout ce qui a du succs, ces approches ont t reprises : en 1991 avec le modle
conceptuel des donnes (MCD) de Merise, tendu avec Merise/2 en 1994.
En 1997, dimportants acteurs (HP, Microsoft, Oracle, Unisys) utilisent des travaux de
G.Booch, J.Rumbaugh et I.Jacobson pour donner naissance la version1.0 dUML.
Dautres formalismes
Il existe toujours plusieurs autres formalismes graphiques. Citons le modle binaire NIAM
(Natural Language Information Analysis Method), IDEF1X (Integration Definition for
Information Modeling), la notation de Barker, etc. Seul le modle entit-association avait t
initialement reconnu par lISO.
Selon loutil que vous utiliserez, vous serez peut-tre amen les rencontrer. Par ailleurs, les
outils permettent aisment de gnrer un diagramme dans un autre formalisme.
ditions Eyrolles
Livre SOUTOU.indb 19
19
15/02/12 07:05
Terminologie
Chaque concept de base se divise en sous-concepts comme le prsente le tableau suivant.
Tableau 1-3: Les trois concepts de base
Attribut (attribute)
Entit/classe (entity/class)
Donne lmentaire
associe un domaine
de valeurs.
Association (relationship)
Agrgation.
Hritage.
Dans ltat actuel de vos connaissances, et en vous supposant dbutant, vous pourriez tablir
le tableau suivant sans vous prononcer davantage sur la suite des vnements.
Tableau 1-4: Les trois concepts du cas des supermarchs
Attribut (attribute)
Entit/classe
(entity/class)
code_postal, nom_ville
date_service, lib_service
nom_magasin, nbre_produits, distance_km
Association
(relationship)
Magasin?
Ville?
Service?
Le tableau suivant prsente les termes quivalents de la notation UML et des formalismes
entit-association (Merise compris).
Tableau 1-5: Terminologie
UML
Entit-association
Classe
Entit
Association
Association (Relation)
Objet
Occurrence
Multiplicit
Cardinalit
Diagramme de classes
Attribut ou information?
Lors de lanalyse de lexistant ou du domaine modliser, vous devrez faire la distinction entre
attribut et information.
20
Livre SOUTOU.indb 20
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Les attributs caractrisent les donnes que vous stockerez en base. Vous les dcouvrirez
plus ou moins directement. Vous devrez en crer de toutes pices dans certains cas (les
identifiants en particulier).
Les informations incluent toutes les donnes de lunivers du discours. On y retrouve les
attributs et dautres donnes qui nauront pas tre stockes (informations dduites, calcules ou de traitements).
Lattribut est une donne brute et linformation est gnralement calcule ou compose
partir dautres donnes brutes (date et heure systme, par exemple). Le tableau suivant prsente
quelques exemples de bons ou de mauvais candidats devenir attribut.
Informations
format_facture (traitement)
Au dbut vous ttonnerez, mais ensuite vous irez rapidement lessentiel, en laissant de ct
les informations qui nauront pas lieu dtre stockes, en amont du dictionnaire des donnes.
Par ailleurs, vous devrez veiller ce que chaque attribut soit indcomposable en termes de
structure. Autrement dit, toute valeur dun attribut doit tre atomique. Lexemple le plus parlant
est celui dune adresse qui ne doit pas tre modlise par un unique attribut adresse, mais
par autant dattributs qui la composent (nom de la voie, numro dans la voie, code postal,
cedex).
Cet aspect des choses sera argument au niveau physique; il est motiv principalement par
lextraction et lindexation future des donnes.
Classe ou entit?
Deux appellations identiques pour le mme concept, cest a linformatique : on aime bien
donner des noms diffrents aux choses ds quon change denvironnement.
Entit est la terminologie qui fut propose par les pionniers de la conception de base de
donnes.
Classe est la terminologie utilise par les pionniers de la conception objet et reprise par
UML.
ditions Eyrolles
Livre SOUTOU.indb 21
21
15/02/12 07:05
Une entit (classe) est une description dun ensemble homogne dobjets (concrets ou
abstraits), chacun caractris par diffrents attributs.
Chaque entit (classe) doit disposer dun identifiant.
Les classes UML peuvent disposer de mthodes (mcanisme pas encore bien adapt aux
schmas relatifs aux bases de donnes).
Chaque outil a ses prfrences graphiques par dfaut qui diffrent dun autre; la figure suivante illustre quelques diffrences. En revanche, vous retrouverez les constantes suivantes:
un cadre reprsente une entit (classe), le nom de la classe dans le premier compartiment;
les attributs au centre du cadre;
les ventuelles mthodes dans un troisime compartiment.
Comme vous le constatez, le type des donnes peut apparatre (exemple de la seconde classe).
La visibilit des attributs aussi (private de la seconde classe). Ce mcanisme est issu de
lapproche objet et ne concerne pas les schmas relatifs aux bases de donnes.
Vous devrez affecter, chacune de vos classes, un identifiant. Un identifiant est une proprit
naturelle ou artificielle dune classe permettant de distinguer un objet de tous les autres (et
ce quel que soit lobjet considr). Un identifiant peut tre compos dun ou de plusieurs
attributs.
Si loutil que vous envisagez dutiliser ne permet pas cette fonctionnalit, et bien changez-le
pour un autre En effet, sans identifiant, vous ne pourrez gnrer aucun script SQL partir
de votre schma conceptuel.
22
Livre SOUTOU.indb 22
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Les identifiants
Ltape didentification est fondamentale, elle va conditionner par la suite la composition des
index et des cls trangres de vos tables. Cest aussi grce aux identifiants que vous dcouvrirez des nouvelles classes dfinir.
ditions Eyrolles
Livre SOUTOU.indb 23
23
15/02/12 07:05
Deux de ces attributs se trouvent tre des libells qui impliquent la dfinition des identifiants
associs (id_theme et id_sujet). Le schma conceptuel sera donc compos dau moins
deux classes, illustres comme suit. Loutil PowerAMC permet de dclarer un identifiant pour
chaque classe (et permet de le reprer visuellement).
Pourquoi avoir dispos lattribut num_page dans la classe Sujets? Parce quil dpend
de cette classe. En effet, daprs lanalyse qui a t tablie, chaque sujet est dot dun libell
et une seule page du catalogue le concerne. Nous reviendrons plus loin sur cette notion de
dpendance.
Concrets ou abstraits?
Abstrait ou concret, tout objet se doit dtre identifiable.
Si une classe regroupe des objets concrets, lidentifiant est naturellement concret, mais
vous pourrez le considrer galement de nature abstraite.
Si une classe regroupe des objets abstraits, lidentifiant est naturellement abstrait, mais
vous pourrez le considrer galement de nature concrte.
Le contexte et le point de vue doivent vous conduire diffrencier, pour tout objet que vous
modliserez, le concret de labstrait et ce que vous dsirez stocker. Dans certains cas, les deux
aspects dune mme chose peuvent vous intresser simultanment.
En considrant les objets suivants, examinons les diffrents points de vue et contextes afin de
dterminer, pour chaque classe, lidentifiant adquat.
24
Livre SOUTOU.indb 24
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Lavion (ici, un A320): du point de vue de la compagnie arienne, chaque objet est concret,
dot dune immatriculation, dun numro de srie, dune date dacquisition, et associ des
vnements (vols et rvisons) etc. Limmatriculation ou le numro de srie sont de bons
candidats pour devenir identifiants. Du point de vue dune agence de voyages, cet objet est
abstrait; il importe peu de savoir quel aronef de la compagnie ralise le vol. Dans ce cas, le
type de lavion (ici, A320) suffirait lidentifier. Pour distinguer tout vol rel, lobjet concret
avion devient un composant de lidentifiant (il faudra utiliser lidentification relative).
La voiture (ici, une BMW 320Ci type E46): du point de vue de la concession, chaque objet
est concret, dot dun numro de srie et de bien dautres options. Le numro de srie est
un bon candidat pour devenir identifiant de chaque vhicule. Dun point de vue du dpartement des ventes, habitu des statistiques, chaque objet devient abstrait et associ un type
catalogue (ici, 320Ci E46). Ce type suffirait identifier toute voiture perue comme un
modle. Dans le contexte des cartes grises ou des services de police, plusieurs identifiants
seront ncessaires, le numro de srie (qui ne varie jamais) et le numro dimmatriculation.
Le livre (ici, SQL 3e dition): du point de vue de lditeur, chaque objet peut tre peru de
manire abstraite, dot notamment dun numro ISBN unique (il existe en fait plusieurs
classifications ISBN). Du point de vue dun libraire ou dun bibliothcaire, chaque objet est
concret et sera vendu ou prt. En consquence, un numro dexemplaire artificiel devra
tre ajout afin didentifier tout livre peru ici comme un exemplaire.
Le plat (ici, un steak-frites) : dans le contexte dun restaurant, chaque objet sera plutt
peru de manire abstraite (plusieurs steaks-frites correspondent au mme plat qui est
vendu la carte un certain prix). Un code suffira donc identifier ce plat. Sil advenait
quon doive tracer la provenance des viandes, il faudrait considrer lobjet comme concret
et associer chaque steak un numro unique afin de pouvoir relier ce dernier lexploitation dorigine. Dans ce cas, les deux identifiants (celui du steak et celui de lexploitation)
seraient utiliss conjointement.
Jappelle cela les notions gnrique et spcifique. Alors que Livre est une classe
gnrique (qui dcrit une uvre littraire, par exemple Les misrables de Victor Hugo),
Livre peut tre aussi spcifique (Les misrables, collection Folio, Gallimard). Enfin, Livre
peut tre un exemplaire dune bibliothque. Cela rejoint les notions de classe et dinstance.
Artificiels ou naturels?
Avant de parler de la nature dun identifiant, voquons les deux critres de qualit respecter:
stabilit (un objet ne doit pas changer didentifiant au cours du temps);
minimalit (en termes de taille et de complexit de valeurs).
Lorsque lattribut dun objet remplit les deux critres fondamentaux, on parle didentification
naturelle (lidentifiant a une smantique mtier; on parle de cl mtier).
ditions Eyrolles
Livre SOUTOU.indb 25
25
15/02/12 07:05
Lorsquaucun attribut prsent dans le dictionnaire des donnes ne remplit les deux critres
fondamentaux, il est ncessaire dajouter un attribut identifiant (le plus souvent un numrique
qui deviendra squence ou auto-incrment). On parlera didentification artificielle. Cette
technique, trs utilise, est simple et favorise le respect des critres de qualit au cours du
temps.
Si vous optez pour lidentification artificielle, vous devez, dans la majorit des cas, ajouter la
classe un attribut naturel didentification (cl mtier). Cette identification secondaire permettra
par la suite de pouvoir rechercher un objet laide dune smantique mtier.
Plusieurs identifiants peuvent tre dduits de la figure suivante (extrait du site Internet de la
banque LCL).
Lidentifiant naturel de la banque LCL (id_banque): il est aussi possible didentifier une
banque par un numro artificiel (cest le cas du code attribu par la Banque de France:
30002 pour le Crdit Lyonnais).
Lidentifiant naturel de lagence (id_agence), indiqu en tant quindicatif du compte: cest
souvent un numro ou un code de la succursale (chaque tablissement bancaire est responsable
de cette codification: 4068 pour lagence de Ramonville Saint-Agne du Crdit Lyonnais).
Lidentifiant naturel du compte (id_compte): cest souvent un code compos de numros
et de lettres (chaque client connat ses numros ou est capable de les retrouver).
Lidentifiant articiel du client (id_client): le client ne le connat pas, mais le banquier
est capable de le retrouver.
Le code personnel ne peut ni jouer le rle didentifiant articiel du client (plusieurs clients peuvent choisir le mme code, peu probable, mais possible), ni permettre didentifier un compte
(pour la raison prcdente et parce quun client peut tre propritaire de plusieurs comptes).
26
Livre SOUTOU.indb 26
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Une cl naturelle peut ne pas tre connue lors de la saisie primale Que se passe-t-il si
le patient que vous avez modlis avec comme identifiant son numro de Scurit sociale
arrive lhpital sans ses papiers et dans le coma?
Une cl naturelle peut voluer dans le temps Que se passe-t-il si ayant modlis vos
adhrents par leurs nom et prnom, Marie DUPONT se marie avec Albert DUVAL? Quid
des donnes des nombreuses tables filles?
Une cl naturelle est souvent longue Un numro de Scurit sociale (13 caractres),
comme le couple nom et prnom (en moyenne, 15caractres), cest 3 4fois plus long
quun entier et permet environ 6fois moins de combinaisons (en pratique, on ne peut utiliser quune quarantaine de caractres sur les 25possibles). Cest donc facilement 24fois
moins performant!
Prfrez une cl arbitraire la plus courte possible. Par exemple, un entier auto-incrment
(SEQUENCE , IDENTITY en SQL). Lutilisation des GUID (Globally Unique IDentifier)
ou UUID (Universally Unique Identifier) posant dautres problmes en plus de ne pas
garantir lunicit absolue
Il est possible de dfinir dans une classe plusieurs identifiants la condition quun seul soit
principal.
ditions Eyrolles
Livre SOUTOU.indb 27
27
15/02/12 07:05
Les autres identifiants potentiels (appels secondaires ou alternatifs) napparatront pas forcment visuellement sur vos schmas conceptuels (cela dpend de loutil que vous utiliserez).
Ces identifiants secondaires se rendront plus utiles au niveau logique en jouant le rle de cl
candidate pouvant se substituer la cl primaire de la table. Des rfrences supplmentaires
pourront tre mises en place sans ncessairement utiliser la cl primaire de la table.
La figure suivante prsente la classe UML (incomplte) que lon peut dduire de cet exemple.
Lensemble des donnes quil faudrait recenser nest pas pris en compte (nom de lauteur,
traducteur). En revanche, les attributs identifiants potentiels sont tous rpertoris. Seul
lidentifiant principal est aisment reprable visuellement.
28
Livre SOUTOU.indb 28
Les associations un--un sont les moins courantes. titre dexemple, dans le contexte des
assurances, citons le contrat (classe) qui concerne (association) un vhicule (classe). Tout
vhicule nest concern que par un seul contrat.
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Les associations un--plusieurs (hirarchies) sont trs courantes car omniprsentes dans
notre environnement. titre dexemple, une compagnie arienne (classe) possde (association) des avions (classe). Tout avion nappartient qu une seule compagnie.
Les associations plusieurs--plusieurs sont aussi courantes car trs prsentes dans notre
environnement. titre dexemple, une compagnie arienne (classe) affrte (association)
des avions (classe). Un avion peut tre affrt par diffrentes compagnies.
On classifie toute association laide dun couple de valeurs (nombre minimal et maximal
dobjets mis en association) lextrmit de chaque lien. UML parle de multiplicits (les
modles entit-association voquent les cardinalits).
Dans lexemple suivant, lassociation UML exprime quun exemplaire concerne un et un seul
livre (1..1). De plus, un livre peut ne pas exister en tant quexemplaire ou au contraire tre
prsent en plusieurs exemplaires (0..*).
Nous pouvons maintenant relier les deux classes de lexemple du catalogue des services automobiles, lassociation prcise quun thme inclut plusieurs sujets et un sujet ne dpend que
dun thme.
Figure 1-16. Thmes et sujets relis par une association UML un--plusieurs
Il est important de nommer chaque association par un verbe ou une forme nominale la plus
parlante possible.
Cela est particulirement intressant lorsque plusieurs associations relient deux mmes classes.
Le plus souvent, il ny a pas de corrlation entre les objets qui participent ces diffrentes
ditions Eyrolles
Livre SOUTOU.indb 29
29
15/02/12 07:05
associations. Chaque lien exprime une smantique distincte. Dans le cas contraire, il sera
ncessaire dutiliser des contraintes (voir la fin de ce chapitre).
Le schma suivant prsente trois associations entre deux mmes classes. Bien que la smantique de ces trois associations soit distincte, il faudra par la suite contraindre ce schma en
prcisant que la gare de dpart doit tre diffrente de la gare darrive. De plus, ces deux gares
devront tre rpertories au sein de lassociation plusieurs--plusieurs desservir qui reprsente le trajet complet dun train.
Les cardinalits de Merise (et celles des autres formalismes entit-association) sont notes
par un couple de valeurs x,y. La lettre n (ou N) dsigne plusieurs sans en limiter la valeur.
Pour ces deux notations, il est vident que le nombre minimum doit tre toujours infrieur ou
gal au nombre maximum (xy).
Les cardinalits dune association binaire Merise sont inverses par rapport aux multiplicits
de la notation UML (qui se comporte comme les autres modles entit-association).
30
Livre SOUTOU.indb 30
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Le schma conceptuel Merise, quivalent du diagramme UML prcdent, illustre cette diffrence.
Le tableau suivant rsume les quivalences entre les critures des multiplicits de la notation
UML et les cardinalits des autres formalismes entit-association.
Tableau 1-7:quivalences entre multiplicits et cardinalits
Multiplicits UML
Cardinalits
0..1
0,1
1..1 (ou 1)
1,1
0..* (ou *)
1..*
a..b
a,b
Il est peu courant que le nombre minimum dobjets soit suprieur 1, mais cest une possibilit
que tous les formalismes permettent. Le schma suivant prsente un cas o toutes les multiplicits sont bornes. Ce schma exprime que tout administrateur se doit de conseiller entre 2 et
5holdings. Par ailleurs, tout holding sera associe au moins 3administrateurs et au plus 10.
ditions Eyrolles
Livre SOUTOU.indb 31
31
15/02/12 07:05
Ne faites pas de confusion avec le sens de lecture des multiplicits de UML si vous lisez un
schma au formalisme de Merise (il vous suffira de permuter les couples pour chaque association
le cas chant).
Que vous choisissiez de borner vos multiplicits par un entier suprieur 1 (2, par exemple)
ou que vous optiez pour * (ou N pour un formalisme entit-association), le schma logique
obtenu sera identique (la structure des tables et la composition des cls seront identiques).
Les multiplicits minimales prcisent les liens dassociation et nont pas dinfluence sur la
structure des tables et des cls de la base de donnes. En revanche, vous devrez mettre en
uvre, en thorie, des contraintes si vous dsirez implmenter chaque multiplicit minimale.
Je dis en thorie, car bon nombre de schmas sont pleins de bonnes intentions sur le papier
quil faut concrtiser correctement dans la programmation des transactions.
32
Livre SOUTOU.indb 32
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Considrons la classe Aeroport qui est relie deux associations un--plusieurs ayant du
ct un les multiplicits minimales respectives1 et0.
Le 1 de lassociation situer du ct Ville exprime quun aroport est situ sur une
ville. Une contrainte NOT NULL sera gnre.
Le 0 de lassociation controler du ct Douanes exprime quun aroport peut ne pas
tre associ un service douanier. Aucune contrainte NOT NULL ne sera gnre.
Examinons prsent la smantique des multiplicits minimales dun diagramme un peu plus
complexe comme celui des actionnaires de SARL. Lassociation participation exprime
quune SARL doit avoir au minimum 2actionnaires et au plus10. Un actionnaire peut ne pas
tre associ une SARL, et est limit 6participations. Chaque actionnaire devra tre dtenteur
dune trois adresses lectroniques.
ditions Eyrolles
Livre SOUTOU.indb 33
33
15/02/12 07:05
Le 1 au minimum du ct Mails de lassociation contacts nest pas sujet discussion, car cest lexpression du fait quun actionnaire dispose obligatoirement dun e-mail.
Une contrainte NOT NULL sera gnre pour implmenter ce contrle. En affectant 0
cette multiplicit, la contrainte ne sera pas gnre.
Le 1 au minimum du ct Actionnaires de lassociation contacts peut tre sujet
discussion. Il sagit de savoir si la base de donnes peut stocker des e-mails anonymes.
En thorie, il faudrait assurer un tel contrle au niveau de la programmation. En affectant
0 cette multiplicit, vous relchez ce contrle.
Le 0 au minimum du ct SARL de lassociation participation peut tre sujet
discussion. Il sagit de savoir si la base de donnes peut stocker des actionnaires qui ne
participent aucune SARL. Ici aucune contrainte nest mettre en uvre. Le fait de choisir
1 pour cette multiplicit ncessite, en thorie, la mise en uvre de ce contrle par
programmation (transaction ou dclencheur).
Le 2 au minimum du ct Actionnaires de lassociation participation nest
pas sujet discussion, cest lexpression dune rgle mtier. Une simple contrainte CHECK
ne suffit pas et du code SQL doit implmenter cette rgle (transactions et dclencheurs).
Ce code se chargera galement de vrifier le non-dpassement du nombre maximal de la
multiplicit (10).
Si vous hsitez entre 0 et 1 pour une multiplicit minimale, choisissez 0 de sorte moins
contraindre le schma SQL. Vous pourrez toujours ensuite programmer une nouvelle
contrainte.
Rflexivit
Une association binaire (un--un, un--plusieurs, plusieurs--plusieurs) qui relie une classe
elle-mme est dite rflexive.
Bien que sduisant par sa smantique, le concept de rflexivit produit des schmas relationnels plus complexes (en particulier avec des associations plusieurs--plusieurs) et induit une
programmation ardue qui peut savrer moins performante (requtes rcursives).
Afin de pallier ces problmes potentiels, nous verrons quune association rflexive peut se
reprsenter, dans certains cas, laide de plusieurs associations binaires non rflexives.
Le diagramme suivant dcrit lassociation un--plusieurs de parrainage qui relie (ventuellement) un client ses filleuls qui sont aussi des clients (0..*). Un filleul peut ntre associ
aucun parrain (0..1), ce qui exprime quun client peut tre ni parrain, ni filleul.
34
Livre SOUTOU.indb 34
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
En considrant lexemple des autoroutes franaises, il apparat quune ville (source) est relie
une ou plusieurs autres villes (cibles). Par ailleurs, une ville cible peut tre relie plusieurs
villes sources.
ditions Eyrolles
Livre SOUTOU.indb 35
35
15/02/12 07:05
Ce nest pas la solution la plus simple pour modliser un tel graphe. Dune part, la rflexivit nest pas le concept le plus adquat, dautre part, ce schma relie une ville plusieurs
autres sans prciser de quelle autoroute il sagit, alors quil existe une forte contrainte entre les
deux associations. Une solution plus simple consiste utiliser une classe supplmentaire pour
modliser un tronon (schma dcrit plus loin dans ce chapitre).
Les cardinalits Merise sont, comme au titre des associations binaires, simplement permutes
par rapport aux multiplicits (voir le schma suivant).
Il est important dutiliser des rles pour prciser la smantique dune association UML a fortiori lorsque cette association est de nature rflexive.
Nous verrons, par la suite, quil est possible de relier une classe-association UML une association rflexive la condition quelle soit de type plusieurs--plusieurs.
Les rles
Un rle UML se note sur un lien dassociation sous la forme dun nom (forme nominale ou
verbale) qui dcrit comment une classe source voit sa classe cible.
Dans lexemple suivant, les comptes dun client sont considrs comme un portefeuille, le
client dun compte est son dtenteur. Les rles inscrits sur lassociation rflexive prcisent le
sens de lecture et la smantique de lassociation.
36
Livre SOUTOU.indb 36
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Bien quil soit possible de nommer les associations et les rles dans un mme diagramme de
classes, cela nest pas forcment recommand pour des raisons de lisibilit.
Les rles sont particulirement utiles pour les concepteurs qui criront toutes leurs contraintes
laide du langage OCL (voir en fin de chapitre).
Mise en pratique
Testez ds prsent vos aptitudes grce lexercice1.1 La droute des bleus, la fin du
chapitre. Vous y modliserez le schma du premier tour de la coupe du monde de football2010
en Afrique du Sud. Vous naurez pas modliser le second tour (vous vous rappelez que notre
quipe de stars na pas t qualifie). Suite de lexercice peut-tre en 2014.
lhritage que tout le monde connat depuis lavnement des langages objet;
Les classes-associations
Une classe-association UML:
Dun point de vue smantique, une classe-association cest comme une agence matrimoniale:
a forme des couples qui se lient ensemble ventuellement dautres objets.
ditions Eyrolles
Livre SOUTOU.indb 37
37
15/02/12 07:05
Premier exemple
Dans lexemple suivant, la classe-association Comp_Aero modlise tous les couples (compagnie, aroport) valides. chaque couple, des donnes peuvent tre associes. Ici, la date
darrive dune compagnie dans un aroport et le nombre de comptoirs dont elle dispose.
Notez que les deux attributs de cette classe-association ne peuvent pas tre disposs ailleurs.
La date darrive ne dpend pas de la compagnie seule (Air France peut rsider Orly
depuis lanne 1967 alors quelle est arrive Blagnac au cours de lanne 1969, par
exemple). Cette date darrive ne dpend pas non plus de laroport seul, car Orly qui a
accueilli Air France en 1967 a vu dbarquer Air Libert en 1990.
Le nombre de comptoirs ne dpend ni de la compagnie seule, ni de laroport seul. Sinon,
il sagirait de cumuls. Dans le premier cas, sil se trouvait dans la classe Compagnie,
lattribut indiquerait le nombre de comptoirs dtenus par la compagnie (sans prciser o
chacun se trouve). Dans le second, sil se trouvait dans la classe Aeroport, lattribut indiquerait le nombre de comptoirs qui se trouvent dans un aroport (sans prciser de quelle
compagnie il sagit).
Tout attribut dune classe-association doit dpendre simultanment des deux classes (pas
simplement de lune ou de lautre). Pour toute valeur dun couple dobjets connects, une
valeur au plus de lattribut doit tre associe, et cet attribut doit tre contenu dans la classeassociation.
Vous ne savez pas comment appeler une classe-association?Composez son nom avec les
prfixes des deux classes connectes.
38
Livre SOUTOU.indb 38
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Formalismes entit-association
Avec Merise et les autres formalismes, ces attributs qui dpendent de deux entits se trouvent
aussi dans une association plusieurs--plusieurs.
ditions Eyrolles
Livre SOUTOU.indb 39
39
15/02/12 07:05
Classe-association rflexive
Une classe-association peut tre lie une association rflexive ( condition quelle soit de type
plusieurs--plusieurs).
Le premier exemple reprend la premire modlisation des villes connectes par des autoroutes. Modlisons un tronon comme un couple de villes. Chaque tronon a t ouvert
une certaine date (postrieure celle de lautoroute, mais pas forcment identique) et chaque
tronon mesure une certaine distance.
Ce nest pas la modlisation la plus simple; il napparat pas explicitement la notion de sens,
du fait que les villes forment un graphe orient. Dans ce schma, on exprime toutefois quun
couple de villes forme un tronon tout en permettant quentre deux villes, deux tronons distincts existent: celui o vous roulez en regardant souvent votre compteur et votre avertisseur
de radar, et lautre o ceux de la voie den face font pareil.
Lautre problme de cette modlisation concerne le lien entre Ville et Autoroute qui nest
pas prcis (il ne respecte pas la hirarchie). La hirarchie veut quune autoroute soit compose
de tronons reliant chacun deux villes. Nous reviendrons sur cet cueil classique. Le schma
suivant est de meilleure qualit.
40
Livre SOUTOU.indb 40
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Ces deux modlisations (les comptes et les tronons autoroutiers) peuvent se simplifier du fait
de la prsence de la multiplicit 1..1 du ct de la classe-association. Nous verrons la section
Lidentification artificielle les moyens de procder une telle simplification.
Mise en pratique
Appliquez le concept de classe-association grce la fin de lexercice1.1 La droute des
bleus. Il sagit de pouvoir nommer de manire diffrente une quipe en fonction de la langue.
Vous pouvez galement rflchir aux exercices1.2 Lorganisme de formation et 1.3 Les
lignes de facture qui ne font intervenir que des associations binaires.
ditions Eyrolles
Livre SOUTOU.indb 41
41
15/02/12 07:05
Des logiciels sont installs sur des serveurs par des dpartements.
Les chantiers peuvent tre visits plusieurs fois par jour par les vhicules de la socit.
vitez dutiliser des associations n-aires, car votre modlisation produira un schma relationnel non contraint (dcidez plutt de ne pas contraindre un schma au niveau logique). La
majorit des associations n-aires doivent plutt scrire, dune manire hirarchique, laide
dune ou de plusieurs classes-associations.
Cette section dcrit tout dabord comment dcrypter une association n-aire. Ensuite, plusieurs
cas sont prsents qui mettrent en vidence le fait que lon puisse parfois se passer de ce mcanisme dassociation. Enfin, vous dcouvrirez comment dcomposer une association n-aire en
une ou plusieurs classes-associations.
Aucune de ces deux lectures nest linverse ou loppose de lautre; le sens est tout bonnement
diffrent. Dans lexemple suivant, lutilisation de lassociation n-aire Installer permet dexprimer que des logiciels sont installs un certain jour (date_install) sur des serveurs par
des dpartements.
42
Livre SOUTOU.indb 42
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Le langage du formalisme
Quel que soit le nombre dentits/classes connectes, le mcanisme de lecture est analogue
lexemple prcdent. Pour une association reliant 4entits/classes (de degr4), vous devrez
considrer la relation entre triplets et singletons en partant de la cible ou de la source.
Lexemple suivant illustre ce propos avec Merise. De chaque ct, il est exprim la cardinalit
(0,n) qui sinterprte pour toutes les entits ainsi: un objet est associ plusieurs triplets dobjets ou aucun. Du ct Employe, cette cardinalit signifie quun employ peut tre associ
plusieurs comptoirs dans diffrents aroports (ou dans le mme), pour le compte dune compagnie (ou pour plusieurs).
ditions Eyrolles
Livre SOUTOU.indb 43
43
15/02/12 07:05
Avec le formalisme Merise, vous ne pouvez pas dduire grand-chose des associations n-aires.
La majorit dentre elles ne contiennent que des cardinalits (0,n). La cardinalit (0,1) impose
une dcomposition en degr infrieur (une association 3-aire se dcompose en deux associations
binaires).
Avec le formalisme UML, les associations n-aires sont davantage parlantes. La multiplicit
(0..1) nimpose pas forcment une dcomposition en degr infrieur. Le schma suivant prcise quun employ qui se trouve dans un comptoir dun aroport ne travaille que pour le
compte dune seule compagnie. Symtriquement, un employ qui se trouve dans un comptoir
dune compagnie est situ dans un seul aroport.
Bien que UML semble plus explicite que Merise sur cet aspect des choses, ces deux schmas
ne sont pas satisfaisants. En effet, trop peu de contraintes sont prsentes entre les 4classes.
Pensez-vous rellement quen considrant un employ rpertori, un aroport, une compagnie et un comptoir existants, vous allez composer un fait cohrent stocker?
Ne croyez-vous pas que toutes les compagnies ne sont pas prsentes dans nimporte quel
aroport, quun comptoir ne se trouve que dans un aroport, quune compagnie nembauche
pas nimporte quel employ?
Ce sont toutes ces questions que vous devrez vous poser de sorte dcomposer au mieux cette
association tentaculaire (celle-l et toutes les autres que vous rencontrerez).
44
Livre SOUTOU.indb 44
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Cela va coter cher la compagnie qui devra renouveler sa flotte un rythme mensuel ou
hebdomadaire peut-tre
Dans le second schma Merise, vous permet facilement (enfin la structure de la base le permet)
un patient de se faire prescrire nimporte quel mdicament par tout mdecin
La notation UML nest pas en reste (mme dans la documentation officielle de lOMG).
Le premier schma prcise quune quipe peut faire jouer nimporte quel joueur quelle que
soit lanne (mme lanne o lquipe nexistait pas).
Le deuxime schma indique, sans rien prciser, quun type de voiture peut tre conu
nimporte quelle anne dans nimporte quel type de bureau (mme si le bureau ou la voiture nexistaient pas cette anne-l).
Le troisime schma indique quun professeur peut enseigner nimporte quelle matire
nimporte quel tudiant. Cest dans lair du temps la polyvalence, mais l, a sapparente
un grand cart (appelez le prof de gym!).
ditions Eyrolles
Livre SOUTOU.indb 45
45
15/02/12 07:05
Comment se prmunir?
Avant de chercher systmatiquement utiliser une classe-association afin de contraindre une
association n-aire, vous devez essayer de rduire le degr de lassociation n-aire laide de
plusieurs associations de degr infrieur n. Ces cas se rencontrent lorsquil existe un lien fort
entre deux classes (entits) connectes indpendamment de lassociation, mais toutefois dans
le contexte. Le cas chant, une association 4-aire se dcomposera en une association 3-aire
et plusieurs binaires. Une association 3-aire se drivera ensuite ventuellement en plusieurs
associations binaires.
46
Livre SOUTOU.indb 46
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Dans lexemple des contrats reliant vhicules, clients et socits dassurance, vous pouvez
penser une association de degr3. Ici, le lien fort provient de la proprit dun vhicule. Ce
lien doit se modliser par une association binaire entre un client et ses vhicules.
ditions Eyrolles
Livre SOUTOU.indb 47
47
15/02/12 07:05
Le contrat devient une simple association binaire reliant un vhicule sa compagnie dassurance.
Lexemple suivant utilise une association de degr3 pour lister les qualifications des pilotes
relatives certains types dappareils.
Le problme de cette association est quelle mlange deux faits: le premier concerne les qualifications quun avion impose (indpendamment du pilote) et le second que des pilotes soient
titulaires de diffrentes qualifications. Les associations binaires titulaire et necessite
simplifient le modle initial. La troisime association est plus discutable puisquelle peut tre
dduite des deux prcdentes. La normalisation forcene vous conduirait ne pas la dfinir,
lutilisation courante vous conseillera de la prserver.
48
Livre SOUTOU.indb 48
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Lorsquil ne vous est pas possible de rduire le degr dune association n-aire du fait quil
nexiste aucun lien entre les diffrentes classes connectes, part lassociation elle-mme,
trouvez sil existe (et cest souvent le cas) une hirarchie travers une ou plusieurs classesassociations. En effet, une association n-aire exprime implicitement dans la majorit des cas
une ou plusieurs contraintes dinclusion.
Dcomposition en classe-association
Le processus dcrit ici concerne une association de degr 3, mais il sapplique aux degrs
suprieurs par analogie de raisonnement.
Vous devez choisir le couple de classes le plus fort. Dans certains cas, le choix simpose
facilement, dans dautres, plusieurs couples peuvent tre candidats.
Reliez ces classes par une association plusieurs--plusieurs, si ce nest pas possible, votre
couple nest pas solide (enfin, ce nest pas ce que je veux dire!), piochez ailleurs (l non plus).
Attachez ensuite cette association une classe-association qui contiendra ventuellement
des attributs.
La classe restante est associer la classe-association et toutes les possibilits de multiplicits sont permises.
Concernant lexemple des installations de logiciels, un premier choix peut se porter sur les
couples (logiciel, serveur) qui recensent toutes les compatibilits (et vitent ainsi les incompatibilits). La classe-association contient la date dinstallation (qui dpend en fait du seul
couple). Lassociation dinstallation concerne bien simultanment les trois classes en reliant un
couple (logiciel, serveur) au dpartement acteur de lvnement.
ditions Eyrolles
Livre SOUTOU.indb 49
49
15/02/12 07:05
Une deuxime alternative consiste considrer les couples (logiciel, dpartement) qui recensent tous les achats (vitant ainsi dinstaller un logiciel non acquis par le dpartement). La
classe-association contient la date dinstallation (qui dpend en fait du seul couple). Lassociation dinstallation concerne toujours simultanment les trois classes en reliant un couple
(logiciel, dpartement) aux serveurs dont le but est lhbergement. La date dinstallation doit
se trouver au niveau de cette association avec cette modlisation.
Une troisime alternative consiste considrer les couples (dpartement, serveur) qui recensent toutes les autorisations (vitant ainsi dinstaller un logiciel sur un serveur non accessible
par le dpartement). Cette solution est symtrique la prcdente.
50
Livre SOUTOU.indb 50
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
La dernire alternative consiste inclure ces trois contraintes dans le mme diagramme.
Il restera prciser ces contraintes laide dun langage naturel ou par lintermdiaire du
pseudo-code du langage OCL (voir la fin du chapitre).
Mise en pratique
Lexercice1.4 La dcomposition des n-aires vous permettra de dcomposer les prtendues
associations n-aires (en les rduisant des associations binaires ou en regroupant judicieusement des classes en couple reli une classe-association).
Les agrgations
La notion dagrgation a t lun des aspects les plus discuts de la notation UML. Lagrgation concerne seulement les associations binaires (rflexives ou non). Une agrgation nest pas
une association symtrique, car une des extrmits du lien dassociation joue toujours un rle
prdominant par rapport lautre.
Selon P. A.Muller, [MUL00], une agrgation est prconise dans les cas suivants:
une classe fait partie dune autre classe;
une action sur une classe implique une action sur une autre classe;
les objets dune classe sont subordonns aux objets dune autre classe.
ditions Eyrolles
Livre SOUTOU.indb 51
51
15/02/12 07:05
Les agrgations partages sont un peu plus difficiles dfinir, elles renforcent le couplage
dune association binaire et interviennent lorsque la composition ne sapplique pas et que des
objets sont fortement dpendants par rapport dautres objets dans le cadre de lassociation.
52
Livre SOUTOU.indb 52
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Les agrgats partags (habiter et localiser) renforcent une simple association par le
fait que la perte dun copropritaire ou dun immeuble est susceptible dentraner la suppression des adresses associes. Il ne sagit pas ici dune relation composite/composant, car
une mme adresse (dun immeuble ou dun copropritaire) peut tre partage par diffrents
copropritaires.
Du fait que la suppression dun appartement nimplique pas la perte du copropritaire associ
(qui peut tre copropritaire dautres appartements), lassociation appartient est la moins
contrainte.
Lidentification relative
Dans certaines situations, lidentification dune classe ncessite de se positionner relativement
par rapport une autre classe.
Lidentification relative a son histoire, aborde initialement dans Merise; elle est absente de
louvrage de rfrence. partir de 1987, A.Rochfeld et J.Morejon rhabilitent cette notion
travers le concept dentit faible qui sintgre Merise/2 ainsi que dans la plupart des outils
associs.
ditions Eyrolles
Livre SOUTOU.indb 53
53
15/02/12 07:05
Par analogie, en qualifiant de faible, la classe qui ncessite lidentifiant dune autre classe et
en utilisant lagrgation forte, UML implmente ce mcanisme.
Rification
Dans la smantique du discours, sous-tendue par la structure grammaticale, lorsquon passe
progressivement dune association (groupe verbal) un objet (groupe nominal), on parle
de rification (ou substantification). La modlisation conceptuelle est avant tout une vision
smantique: la perception en classe ou association prime sur la manire de lidentifier. Ce nest
pas lidentification qui dtermine la modlisation, mais le choix de modlisation qui implique
lidentification.
Le concept modliser peut apparatre de prime abord en tant que forme verbale (une association): un avion est affrt par une compagnie. Puis progressivement, la forme verbale devient
substantive: pour chaque affrtement, les vols affrts Ce groupe nominal (un objet dune
classe) intervient son tour dans des associations.
54
Livre SOUTOU.indb 54
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Considrons prsent des vhicules qui visitent quotidiennement des chantiers et appelons
mission chaque dplacement journalier. Chaque mission est identifie par le vhicule et le
jour de sortie. Lattribut km_journalier de la classe faible Mission dsigne la distance
parcourue dun vhicule dans la journe.
Alternatives
la question Y a-t-il une unique solution toute conception?, la rponse est ngative;
plusieurs schmas diffrents peuvent modliser le mme systme. Selon le mcanisme que
vous utiliserez, diverses solutions peuvent merger. Les mcanismes qui sont potentiellement
interchangeables sont les classes-associations, les associations de composition et lidentification
artificielle.
Les modlisations suivantes sont quivalentes. Le premier schma utilise une classe-association pour dcrire chaque mission, alors que le second considre une mission comme un objet
artificiel quil est ncessaire didentifier.
ditions Eyrolles
Livre SOUTOU.indb 55
55
15/02/12 07:05
Les diffrences vont se rencontrer au niveau logique. Il faudra alors prfrer la solution optimale en termes de tables en raisonnant sur les index quil faudra gnrer.
Mise en pratique
Comment modliser lhistorique des rendez-vous de lexercice 1.5 Les comptes bancaires?
Trouvez les identifiants principaux et relatifs qui sont prsents dans lexercice 1.6 Le
RIB.
Lidentification artificielle
Lorsque lidentification dun objet est complexe ou met en jeu beaucoup trop dautres classes,
vous pouvez faire appel lidentification artificielle qui consiste dfinir une classe (le plus
souvent de nature abstraite) afin dhberger des attributs pour lesquels il est difficile dy associer un identifiant naturel ou relatif. Une fois dfinie, la classe ncessite un identifiant (artificiel)
qui sera dpourvu de toute smantique.
Considrons lexemple des tronons autoroutiers (section Les classes-associations). Alors
que la rflexivit ntait pas la solution la plus simple pour modliser un tel graphe, lidentification artificielle se rvle redoutable de simplicit. Un tronon est dsormais modlis en tant
quobjet reli deux villes. Lassociation de composition permet en plus de pouvoir utiliser un
mme numro de tronon pour diffrentes autoroutes.
56
Livre SOUTOU.indb 56
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Considrons lexemple des installations de logiciels (section Les associations n-aires). Bien
que la classe-association soit une solution satisfaisante, lidentification artificielle est aussi possible. Une installation est modlise en tant quobjet abstrait reli aux classes qui interviennent
dans lassociation.
ditions Eyrolles
Livre SOUTOU.indb 57
57
15/02/12 07:05
Mise en pratique
Aidez-vous de lidentification artificielle pour:
complter lexercice1.5 Les comptes bancaires en modlisant les virements internes
entre comptes. Il sagit de connatre le montant en euros, le client initiateur et la date de
lopration;
finaliser le diagramme1.7 Lorganisme de formation (suite). Il sagit de modliser les
sessions de cours et diffrents vnements les concernant.
Lhritage
Lhritage est un mcanisme qui provient de la programmation objet et qui consiste rutiliser
du code (en termes de fonctionnalits). Dans le contexte dun modle conceptuel, lhritage va
permettre la rutilisation de structures (classes). Une classe gnrique (appeles surclasse) rend
possible la dfinition de classes plus spcifiques (appeles sous-classes). Par consquent, cette
dcomposition rend les associations entre classes plus prcises.
lorigine, les modles entit-association ne disposaient pas de ce concept. Des extensions
comme Merise/2 ont rendu possible le mcanisme dhritage qui permet dorganiser les entits
en hirarchies. La notation objet UML propose lhritage de classes depuis sa premire
spcification.
Dfinition
Vous devez dfinir un hritage entre les classes C1 et C2 si vous rpondez affirmativement
la question: la classe C1 est-elle une sorte de C2?
La surclasse gnralise le concept alors que les sous-classes le spcialisent.
Lhritage reprsente un lien trs fort entre classes. Avec UML, un lien dhritage est not par
une flche partant dune sous-classe vers sa surclasse.
Dans lexemple suivant, la surclasse Personnel permet aux sous-classes Navigant et
C
ommercial de rcuprer les attributs nup, nom et salaire qui sont gnriques. Chaque
classe (gnrique ou spcifique) peut tre relie dautres en exprimant davantage de smantique quen labsence dhritage.
58
Livre SOUTOU.indb 58
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Identification
Najoutez pas didentifiant une sous-classe, car lidentifiant dune sous-classe provient de
la surclasse.
Instances
Diffrents cas dhritage peuvent tre recenss en fonction de la population (instances) des
classes qui participent au graphe dhritage [ADI93].
Dans lexemple prcdent il faudra tre capable de rpondre aux questions suivantes: existet-il un personnel qui ne soit ni navigant ni commercial? Est-il possible quun navigant soit
aussi commercial?
Nous tudierons cette classification la section Rgles mtier et contraintes.
Hritage multiple
Relativement peu utilis par les programmeurs objet, car complexe mettre en uvre, lhritage multiple est le mcanisme qui autorise quune sous-classe hrite simultanment de
plusieurs surclasses. Dans lexemple suivant, il permet de rpondre laffirmative la question:
est-il possible quun navigant soit aussi commercial?
ditions Eyrolles
Livre SOUTOU.indb 59
59
15/02/12 07:05
Bien que sduisant, ce mcanisme nest implment dans aucune base de donnes objet et dans
trs peu de langages. De plus, il est possible de sen passer par lintermdiaire des contraintes
sur un hritage simple.
Mise en pratique
Appliquez ce mcanisme aux diffrents cas de lexercice1.8 Lhritage.
Aspects temporels
Il est trs frquent davoir prendre en compte des aspects temporels au niveau conceptuel. On
peut classifier trois modlisations: le moment, la chronologie et lhistorisation.
vitez de nommer un attribut temporel par un mot rserv du langage informatique (exemples:
date, month, day, etc.). Prfrez des identificateurs plus parlants (exemples: date_naissance, date_vente, mois_arrivee, etc.). Prcisez toujours au niveau du dictionnaire de
donnes le format que vous attendez (jour/mois, jour/mois/anne sur 4positions, etc.).
60
Livre SOUTOU.indb 60
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Modlisation de chronologie
Il sagit de modliser des situations o le temps intervient de manire rgulire (plannings,
emploi du temps, prvisions, statistiques, etc.). Le plus souvent, cet attribut sera considr en tant
que classe. Les formats de cette donne peuvent aussi tre divers (jour, mois, jour/mois, etc.).
Lexemple suivant dcrit les attributs de chronologie num_sem (de 1 52) et num_jour_an (de
1 365) qui identifient respectivement les classes Semaine et Jours. Ici, on suppose que la
prcision dune semaine est suffisante pour connatre lactivit des enseignes et des fournisseurs.
ditions Eyrolles
Livre SOUTOU.indb 61
61
15/02/12 07:05
Modlisation de lhistorisation
On utilise ce type de modlisation quand on dsire conserver les valeurs antrieures dun
attribut. Citons quelques exemples comme le montant dun loyer (on dsire connatre son volution) ou la valeur du coefficient bonus/malus dun contrat dassurance. En contre-exemple
(trait dans les exercices), le nombre de passagers dun vol donn sera plutt trait comme une
chronologie.
Alors que Merise/2 dispose dun artifice pour noter lhistorisation (symbole H sur un lien dassociation), lhistorisation avec UML peut sapparenter de lidentification relative et donc
simplmenter laide dune association dagrgation forte (composition).
Lexemple suivant dcrit deux historisations modlises par une composition (une classe-association aurait aussi pu convenir). La classe Contrats permettra de lister les diffrents contrats
au cours du temps entre un supermarch et un fournisseur. La classe Gerances permettra de
faire voluer lappartenance dun supermarch une enseigne.
62
Livre SOUTOU.indb 62
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Mise en pratique
Utilisez ces aspects temporels pour:
grer lhistorique des coupes du monde de football (suite de lexercice1.1 La droute des
Bleus);
faire voluer le prix dun produit et son taux de TVA (suite de lexercice1.3 Les lignes
de facture);
modliser le cycle de vie des vhicules dans lexercice1.9 Les cartes grises.
ditions Eyrolles
Livre SOUTOU.indb 63
63
15/02/12 07:05
La dmarche adopter
La premire tape de conception est la mise en place du dictionnaire des donnes. Vous devrez
lister, de manire minimale, les attributs stocker en rendant vos phrases lmentaires et sans
formuler des propositions incompltes, redondantes, contradictoires ou fausses.
Incompltes
reformuler
Propositions incompltes
Il ne doit pas exister de proposition incomplte. Ainsi toute proposition mettant en jeu plusieurs classes Un logiciel est install par un dpartement sur un serveur. risque dtre
incomplte. Vous devrez prciser cet vnement en considrant les classes deux deux.
Un dpartement peut-il installer tout logiciel?
64
Livre SOUTOU.indb 64
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
ditions Eyrolles
Livre SOUTOU.indb 65
65
15/02/12 07:05
Autrement dit, ces attributs doivent tre placs dans des entits secondaires associes
lentit primaire que constitue la personne. On aura donc trois entits supplmentaires:
lune pour les tlphones, lautre pour les adresses et la troisime pour les e-mails. Notez
que cette conception induit de multiples avantages parmi lesquels chaque personne peut
avoir un nombre indtermin de tlphones (fixe, fax ou GSM), plusieurs adresses et
une multiplicit de-mails, ce qui est courant!
Le fait de mettre tous les attributs de contacts dans une seule et mme entit personne
physique contribue crer des tables obses dont les performances seront catastrophiques lors de la monte en charge de la base.
lire sur le sujet : http://blog.developpez.com/sqlpro/p10070/langage-sql-norme/basede-donnees-et-performances-petites/.
Quelques conseils
Afin de rendre optimal un schma conceptuel (minimiser les modifications oprer avant de
crer des tables et index), quelques principes doivent tre adopts.
Dcomposez si ncessaire
Dcomposez tout attribut dont la structure est complexe en autant dattributs que ncessaire.
Chacun de ces attributs devra tre indcomposable (atomique). Lexemple le plus marquant est
ladresse norme dont chaque champ possde une smantique propre.
Ainsi, prfrez lutilisation de la classe Adresse lattribut de mme nom. Dune part, cette
classe pourra tre connecte diffrentes autres classes (Client, Fournisseur, Succursalle, etc.). Dautre part, il sera possible dindexer diffrentes colonnes pour faciliter des
recherches dans la base de donnes (sur le code postal, le nom dune rue, etc.).
66
Livre SOUTOU.indb 66
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Pour complter cette modlisation, il faudrait connecter la classe Ville la classe Adresse.
Tous les attributs dune entit doivent tre atomiques
Cette rgle doit tre apprcie sa juste valeur Elle est en effet relative lunivers que
lon modlise. Par exemple, la modlisation dun simple numro de Scurit sociale sera
diffrente si vous lavez titre informatif (par exemple, dans le cadre de la gestion des
ressources humaines) ou titre fonctionnel (par exemple, dans le domaine de la sant).
titre informatif, un seul attribut de type chane de caractres de longueur13 suffit. titre
fonctionnel, il est important de dcouper ce numro en autant de parties:
le sexe sur un caractre;
lanne de naissance sur deux caractres;
le mois de naissance sur deux caractres;
le code Insee de la commune de naissance sur cinq caractres (et non le dpartement
puis la commune comme on le croit trop souvent);
le rang de naissance sur trois caractres.
En effet, il est possible que lon vous demande un jour dextraire toutes les femmes de la
tranche 45 60ans nes en rgion parisienne, pour une tude sur le cancer du sein
Un autre exemple nous est donn par les e-mails. On a tendance oublier quun e-mail
est compos de deux parties: partie locale (en gnral, un nom de personne ou de service)
et un DNS (Domain Name Server ou nom de domaine) le tout accol avec le caractre
@ (arobase) entre les deux. Il sera donc intressant de dcomposer les e-mails en deux
entits lies comme suit:
MAIL_USER (MLU_ID entier auto, MLU_LIBELLE A256), lidentifiant tant MLU_ID;
MAIL_DNS (MLD_ID entier auto, MLD_LIBELLE A256), lidentifiant tant MLD_ID.
Avec la cardinalit n:1 entre MAIL_USER et MAIL_DNS, la volumtrie est rduite: on vite
ainsi la redondance des wanadoo.fr, free.fr, etc., on contrle mieux la saisie, et lindexation est facilite. Bref, de nombreux bnfices pour les performances.
ditions Eyrolles
Livre SOUTOU.indb 67
67
15/02/12 07:05
Le ventilateur
Afin dviter le pige dit du ventilateur, soignez vos parcours dassociations (particulirement
pour les liens terminaison *) et suivez la hirarchie.
Dans le premier exemple, sil est vrai quun employ est embauch par une entreprise compose de dpartements, il apparat aussi quil est impossible de savoir quel dpartement est
rattach chaque employ (lien Composer terminaison *). En rorganisant la hirarchie de
ces classes, ce problme est rsolu.
68
Livre SOUTOU.indb 68
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Dans le second exemple, sil est vrai quun serveur est responsable de plusieurs tables, il apparat aussi quil est impossible de savoir quel serveur a encaiss une note (lien planning
terminaison *). Une association supplmentaire rsout ce problme.
Labme
Le pige de labme concerne la prsence de multiplicits minimales zro sur le parcours
de lecture dassociations entre deux classes relies indirectement.
Dans lexemple suivant, la multiplicit 0..1 du lien gestionnaire signifie que certains serveurs peuvent tre anonymes en termes de propritaire. Pour remdier ce risque de perte
dinformations, il suffit de rajouter un lien dassociation rendant le parcours plus direct.
ditions Eyrolles
Livre SOUTOU.indb 69
69
15/02/12 07:05
70
Livre SOUTOU.indb 70
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Concernant le second exemple, le lien embaucher peut sembler redondant. Le problme vient
dun risque dabme en ne sachant pas de quelle entreprise un reprsentant dpend du fait que
ce dernier peut ne pas tre rattach une succursale.
ditions Eyrolles
Livre SOUTOU.indb 71
71
15/02/12 07:05
Donnes et un peu de
traitement
Un passager peut embarquer avec un bagage pas trop volumineux ni trop lourd.
Traitements
prpondrants
Le solde du compte du client ne doit pas tre ngatif pour pouvoir commander un billet.
Les donnes sont prpondrantes, car les attributs num_siege, nom_client et nombre_
miles apparaissent assez facilement.
Un peu de traitement est mlang avec des donnes lorsquil faut approfondir certaines questions telles que Doit-on stocker le volume ou le poids du bagage main des passagers?,
Doit-on connatre la contenance ou la charge limite dun coffre bagages utilis lors du
voyage?. Peut-tre des attributs tels que masse_bagage_main, masse_max et volume_
max devront tre pris en compte.
Les traitements sont prpondrants lorsquil sagit de processus dpendants de la valeur de
certains attributs dj existants ou mettant jour de tels attributs.
72
Livre SOUTOU.indb 72
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Les associations navigables ne sont pas significatives du point de vue des donnes, mais des
traitements.
Les associations drives peuvent tre perues comme redondantes, mais si elles doivent
tre dfinies, elles devront tre considres comme des associations binaires standard.
Les associations qualifies doivent tre mises en uvre par le concept dagrgation forte
(composition).
ditions Eyrolles
Livre SOUTOU.indb 73
73
15/02/12 07:05
Quelles que soient les contraintes que vous dfinirez dans vos diagrammes conceptuels,
aucune modification structurelle ne sera rpercute dans les schmas relationnels gnrs.
Toute contrainte devra tre implmente au niveau du code SQL (par contraintes, dclencheurs ou procdures catalogues).
Pour les contraintes personnalises, des rles doivent tre utiliss au niveau des associations
qui seront concernes par une contrainte.
La spcification UML2 ne propose pas beaucoup de contraintes prdfinies et bien peu doutils les incluent. En contrepartie, toute contrainte peut tre crite soit laide du langage OCL
(Object Constraint Language), soit en langage naturel.
Graphiquement, une contrainte est un texte encadr daccolades qui sapplique au niveau dun
attribut, dun rle, ou entre associations nommes.
Les contraintes qui sappliquent un ou entre plusieurs lments peuvent tre notes de diffrentes faons [AUD 09]:
en plaant la contrainte ct dun attribut ou lextrmit dune association;
en ajoutant une note associe llment contraindre;
en plaant la contrainte sur une flche en pointills joignant les deux lments de modle
contraindre ensemble, la direction de la flche constituant une information pertinente au
sein de la contrainte;
en plaant la contrainte sur un trait en pointill joignant les deux lments de modle
contraindre ensemble dans le cas o la contrainte est bijective;
74
Livre SOUTOU.indb 74
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
en utilisant une note relie, par des traits en pointills, chacun des lments de modle,
subissant la contrainte commune, quand cette contrainte sapplique sur plus de deux lments
de modle.
Contraintes prdfinies
Les contraintes prdfinies se notent en gnral lextrmit dun lien dassociation (au mme
niveau que le rle). Les plus intressantes dans un contexte de bases de donnes sont:
{subsets nom_rle} exprime linclusion dune association par rapport une autre;
{xor} qui indique le OU exclusif entre objets relis par deux associations.
Dans lexemple suivant, la contrainte xor prcise quun consultant est soit associ un projet,
soit une formation, mais jamais aux deux simultanment.
Dans lexemple suivant, la contrainte subsets exprime le fait que les formations effectues
par un stagiaire ont t pralablement listes au niveau de lassociation vux.
ditions Eyrolles
Livre SOUTOU.indb 75
75
15/02/12 07:05
{bag} exprime quun mme objet cible peut apparatre plusieurs fois dans lassociation;
{sequence} note aussi {seq} combine les caractristiques de bag et de ordered.
En labsence de ces contraintes (cas le plus gnral et celui par dfaut), la terminaison dune
association est dite de type set (chaque objet reli nest prsent au plus quune seule fois
dans lassociation).
Pour formaliser toute autre contrainte, vous pouvez utiliser le langage OCL.
76
Livre SOUTOU.indb 76
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Lexemple suivant sinspire de [MAK 08] et prsente deux contraintes bases sur des ensembles
dobjets.
ditions Eyrolles
Livre SOUTOU.indb 77
77
15/02/12 07:05
La rgle OCL (R1) qui dcrit la contrainte des clauses du contrat est la suivante:
context Vehicule inv R1 :
self.impliqueforAll
(s | s.optionforAll
(c | c.prevoitexists(co |
co.beneficiaire=self)))
Contraintes dhritage
Lhritage a t prsent la section Les associations plus complexes avec lexemple de la
surclasse Personnel qui permet de spcialiser les sous-classes Navigant et Commercial.
Dans tout graphe dhritage, diffrents cas peuvent tre recenss en fonction des instances des
classes. Ces cas traduisent des contraintes que Merise/2 nommait la partition (appele aussi
exclusion et totalit). En considrant les personnels comme navigants et commerciaux, cette
population peut tre compose:
de navigants ou commerciaux exclusivement (casA);
de navigants, de commerciaux et de personnels ni navigants ni commerciaux (casB);
de navigants, de commerciaux et de personnels la fois navigants et commerciaux (casC);
de toute possibilit (casD).
78
Livre SOUTOU.indb 78
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Contraintes prdfinies
Le tableau suivant illustre, pour chaque cas dhritage, la contrainte mettre en uvre dans
le formalisme Merise et la notation UML. Notez que labsence de contrainte dans un graphe
dhritage na pas la mme signification dans Merise/2 et dans UML. Le premier autorise
quune occurrence appartienne plusieurs entits sous-types. UML considre que par dfaut
un objet nexiste que dans une classe pour un niveau de hirarchie donn.
Tableau 1-10 : Hritage: couverture et disjonction
Couverture
Non-couverture
Disjonction (cas A)
(cas B)
Merise/2: Partition(XT)
Merise/2 : Exclusivit(X)
UML: {complete,disjoint}
Non-Disjonction (cas C)
(cas D)
UML: {complete,overlapping}
UML : {incomplete,overlapping}
Le schma suivant prcise lassociation dhritage en indiquant quil nexiste pas de personnel
qui ne soit ni navigant ni commercial.
ditions Eyrolles
Livre SOUTOU.indb 79
79
15/02/12 07:05
titre dexemple, les critures suivantes dcrivent la contrainte de partition (casA) entre les
navigants et les commerciaux. La premire rgle, attache la classe Navigant, signifie
quun navigant ne peut pas tre commercial. Notez lutilisation de la fonction allInstances
qui retourne pour un type donn lensemble de ses instances, incluant aussi les instances de
ses sous-classes.
context Navigant inv Partition1 :
Commercial.allInstances.nupexcludes(self.nup)
Mise en pratique
Rendez-vous lexercice 1.10 Les contraintes pour crire formellement les expressions
OCL afin denrichir diffrents schmas.
Rgles de validation
La notation UML ne propose aucun moyen de sassurer de la cohrence dun diagramme de
classes. Cela est particulirement pnalisant pour les diagrammes qui visent modliser une
base de donnes. Les rgles que vous devrez adopter sinspirent des rgles de validation et de
normalisation introduites avec les modles entit-association et la mthode Merise. La plupart
de ces rgles datent du milieu des annes 1970. Ces rgles sont majoritairement bases sur les
dpendances fonctionnelles.
Il est ais de transposer ces rgles vos diagrammes de classes UML de manire obtenir
automatiquement un schma relationnel de qualit, en limitant les risques derreurs de modlisation lourdes de consquences au niveau de la base de donnes.
80
Livre SOUTOU.indb 80
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Considrons les attributs relatifs au billet de train: num_train, nom_passager, num_dossier, jour_depart, ville_depart, heure_depart, num_classe, num_voiture et
num_siege.
ditions Eyrolles
Livre SOUTOU.indb 81
81
15/02/12 07:05
num_dossierjour_depart;
num_dossiernum_classe;
num_dossiernum_voiture;
num_dossiernum_siege;
trajet rgulier);
num_trainheure_depart.
La premire dpendance nest pas optimale, car le nom dun passager dpend davantage dun
code client que des voyages quil a raliss. Ainsi, il conviendrait dintroduire un identifiant
pour le passager et les dpendances induites seraient:
num_clientnom_passager.
Vrification
Non-redondance
Un attribut ne figure qu un seul endroit du diagramme: soit dans une classe, soit dans une
classe-association.
Si vous dcouvrez sur un diagramme des attributs qui se rptent dans diffrentes classes,
deux cas se prsentent.
Lattribut identifie une classe un endroit et il est rpt en tant que cl trangre.
Lattribut ne joue pas le rle didentifiant et il est redondant partout o il est dupliqu.
Le diagramme UML suivant trouv sur le Web prsente des redondances au niveau des identifiants. En ralit, ce diagramme dcrit un modle relationnel et non un modle conceptuel.
Dun point de vue conceptuel, ce diagramme nest pas correct, mais dun point de vue relationnel, il ne pose pas de problme au premier abord.
82
Livre SOUTOU.indb 82
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Bien que la normalisation soit un processus qui concerne le modle relationnel, il est toutefois
intressant de ltudier au niveau conceptuel, de sorte produire des diagrammes de classes
optimaux. Vous trouverez dans la littrature et sur le Web un trs grand nombre de dfinitions
mathmatiques des formes normales. Ne comptez pas sur moi ni pour en rajouter ni pour souligner les incohrences de lune ou de lautre. Je vais simplement illustrer chaque cas par un
exemple. Vous devrez transposer vos problmatiques chaque exemple prsent.
Les attributs multivalus (associs plusieurs valeurs comme un tableau ou une liste) sont
proscrits de tout schma conceptuel. En revanche, un schma conceptuel doit tre compos
ditions Eyrolles
Livre SOUTOU.indb 83
83
15/02/12 07:05
dattributs monovalus pouvant contenir au plus une valeur de tout type (chane de caractres,
date, entier).
Lexemple suivant modlise le fait quun client dispose de trois e-mails au plus. Les deux
premires modlisations ne respectent pas la premire forme normale. La premire considre
le-mail comme un tableau, tandis que la seconde utilise plusieurs attributs de mme sens.
Au final, les tables issues de cette modlisation seront difficilement indexables, contiendront
nombre de valeurs nulles et les requtes crire seront infiniment plus complexes que dans le
cas dune solution normalise.
Le diagramme suivant ne respecte pas la deuxime forme normale, car plusieurs attributs de
la classe-association ne dpendent pas simultanment du couple (id_cli, immatriculation).
84
Livre SOUTOU.indb 84
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
En raisonnant avec les dpendances fonctionnelles, toutes celles qui concernent les attributs
dune classe-association doivent tre lmentaires (minimales en partie gauche).
id_cli, immatriculation
date_achat minimale si on considre quun client ne
peut pas racheter une voiture lui ayant dj appartenu.
id_cli, immatriculation
mise_circulation non minimale, car la date de premire
mise en circulation ne dpend pas du client (immatriculationmise_circulation).
id_cli, immatriculation
km minimale si on dsire conserver le kilomtrage lors
de lachat.
id_cli, immatriculation
total_km non minimale, car le kilomtrage total ne
dpend que du vhicule (immatriculationtotal_km).
id_cli, immatriculation
tel_cli non minimale, car le tlphone du client ne
dpend pas du vhicule (id_clitel_cli).
En appliquant ces dpendances au diagramme prcdent, on rduit la complexit de la classeassociation.
ditions Eyrolles
Livre SOUTOU.indb 85
85
15/02/12 07:05
La limitation de ce diagramme rside dans le fait quun client ne peut racheter sa voiture dans
le temps. Pour pallier cette limitation, utilisez lidentification relative pour exprimer le fait
quun achat est caractris par un couple (vhicule, date) qui ne peut tre associ qu un seul
client.
La classe suivante ne respecte pas la troisime forme normale, car il existe une dpendance
entre deux attributs non identifiants (id_constructeurmarque). Il convient de prserver
cette dpendance dans une autre classe.
86
Livre SOUTOU.indb 86
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
En raisonnant avec les dpendances fonctionnelles, il faut que toutes les dpendances soient
directes (issues de lidentifiant primaire de toute classe).
immatriculation
id_constructeur est directe, un vhicule est associ un
constructeur.
immatriculation
marque nest pas directe, car la marque dpend davantage de
lidentifiant du constructeur.
id_constructeur
marque est directe et donc il faut ajouter une classe modlisant
cette dpendance.
Lventuelle limitation de ce diagramme rside dans le fait quune mme appellation puisse
tre partage par plusieurs vhicules. Ainsi, cet attribut devrait tre considr comme un
libell qui doit tre associ un identifiant.
ditions Eyrolles
Livre SOUTOU.indb 87
87
15/02/12 07:05
88
Livre SOUTOU.indb 88
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Daprs moi, cette forme normale ne doit pas tre mise en uvre dun point de vue conceptuel.
Elle est davantage tudier au niveau logique ou physique afin dviter dventuelles redondances et anomalies de mises jour.
En considrant que la catgorie dun avion est en relation directe avec son envergure, lassociation appartient ne respecte pas la forme normale domaine-cl, car suivant la valeur de
lenvergure de chaque avion, on pourrait dduire cette information.
ditions Eyrolles
Livre SOUTOU.indb 89
89
15/02/12 07:05
La classe suivante ne respecte pas la quatrime forme normale, car il existe des dpendances
entre des couples de classes. Il convient de prserver ces dpendances par le biais dassociations
binaires.
Si la modlisation initiale navait pas prvu le fait quun pilote puisse dtenir des qualifications indpendamment des avions sur lesquels il est apte voler, la cinquime forme normale
naurait pas t respecte. Le diagramme suivant pallie cet ventuel inconvnient.
90
Livre SOUTOU.indb 90
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Mise en pratique
Respectez ces principes pour rsoudre les exercices1.11 La carte dembarquement, 1.12
Deux cafs et laddition ! , 1.13 La thalasso , 1.14 Le centre de plonge et 1.15
Llection prsidentielle.
Bilan
Aprs avoir examin diffrents formalismes de modlisation de bases de donnes(le modle
de Chen, le MCD de Merise et ses extensions Merise/2), la notation UML semble trs bien
adapte pour les raisons suivantes.
UML propose autant de concepts que Merise/2, avec la possibilit de dfinir en plus des
strotypes personnaliss.
La reprsentation de certaines contraintes sur des associations n-aires est implicite avec
les classes-associations.
Lutilisation de la notation UML permet aux concepteurs de travailler dans un environnement plus volutif, notamment avec la possibilit dinterfacer plus facilement les langages
volus C++ ou Java.
Exercices
Pour que vos diagrammes soient le plus en phase avec les corrigs (en annexes), le nom des
attributs est indiqu pour la plupart des exercices en police Courier.
ditions Eyrolles
Livre SOUTOU.indb 91
91
15/02/12 07:05
92
Livre SOUTOU.indb 92
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Dsignation
Type
lib_equipe
Chane de caractres
lib_groupe
Chane de caractres
nom_ville
Chane de caractres
nom_stade
Chane de caractres
jour_match
Date
heure_match
Dcimal
score
Chane de caractres
nom_chaine
Chane de caractres
classement
Entier court
Associations binaires
Qui dit libell, dit identifiant, et qui dit identifiant, dit classe. Voil donc les premires classes
simplement dcouvertes partir des attributs initiaux.
ditions Eyrolles
Livre SOUTOU.indb 93
93
15/02/12 07:05
Il reste caser:
jour_match, heure_match et score qui caractrisent une rencontre, concept qui nest
pas encore reprsent (classe Match dfinir, donc identifiant ajouter, car aucun de ces
Classe-association
Si vous savez vous servir dune classe-association, vous pouvez rflchir lvolution de ce
schma afin de prendre en compte laffichage des rsultats dans diffrentes langues. Ainsi,
le nom de lquipe dAfrique du Sud (lib_equipe) doit pouvoir tre associ diffrents
libells, par exemple South Africa en anglais ou frica del Sur en espagnol. Utilisez
la classe Langue constitue dun identifiant id_langue (par exemple, fr) et dun libell
lib_langue (par exemple, France).
Historique
Modifiez le diagramme pour mmoriser lhistorique des coupes du monde (qui a lieu tous
les 4ans: annee), notamment pour savoir quelle tait le pays organisateur et la composition
94
Livre SOUTOU.indb 94
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
des groupes de lpoque. Notez que le groupe nest pas compos selon lordre alphabtique.
En effet, la position (position) dans le groupe seffectue selon le classement lors du 1er tour.
Sachez galement que cet vnement ne peut tre organis que par 2pays maximum.
Inscriptions
En dbut danne, chaque salari remplit une fiche sur laquelle il indique son nom (nom), son
e-mail (mail), le code de son entreprise (codent) et la liste des formations quil envisage de
ditions Eyrolles
Livre SOUTOU.indb 95
95
15/02/12 07:05
suivre dans lanne (6 maximum parmi les 450 prsentes au catalogue). Un code lui est ensuite
automatiquement attribu (idsta).
Chaque formation est dfinie par un code (codef), un titre (titref) et une dure (duree),
et place sous la responsabilit dun consultant caractris par un code, un nom et un e-mail
(idemp, nomemp et mailemp).
Tout consultant doit tre disponible un jour par semaine (jsem) et durant une plage horaire
dfinie (hrens) afin de renseigner le public propos des formations dont il est le responsable.
Plannings
1. Modifiez le schma pour quun consultant puisse tre interrog diffrents moments de la
semaine tout en respectant un seul crneau par formation quil supervise.
2. Modifiez le schma pour quun consultant puisse donner des renseignements sur une
formation quil supervise diffrents moments de la semaine.
96
Livre SOUTOU.indb 96
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Concernant le prix et le taux de TVA, distinguez les conditions initiales (aucune facture nest
mise le matin du premier jour de lexercice comptable) de la facturation courante.
Stages
Chaque stage rfrenc dans le catalogue peut se drouler dans diffrentes villes et diffrentes priodes. Les classes principales sont Stage, Ville et Periode.
ditions Eyrolles
Livre SOUTOU.indb 97
97
15/02/12 07:05
Cote automobile
Il sagit de rfrencer les cotes des vhicules doccasion selon la marque, le modle et lanne.
Prenez en compte galement les autres caractristiques (type de carrosserie, nergie, missions
de carbone et nombre de chevaux fiscaux).
98
Livre SOUTOU.indb 98
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Noubliez pas que vous devez tre en mesure dimprimer la demande ce tableau.
Associations binaires
Compltez le diagramme suivant pour modliser:
ditions Eyrolles
Livre SOUTOU.indb 99
99
15/02/12 07:05
Identification relative
Modlisez lhistorique des rendez-vous de chaque client avec le conseiller rencontr et la date
de dernier entretien. Il est intressant de connatre les diffrents produits financiers qui auront
t vendus au client lors de ces rendez-vous. Chaque conseiller peroit une prime en fonction
du produit vendu pour toute souscription.
Identification artificielle
Modlisez les virements entre comptes. Il sagit de connatre le montant en euros, le client
initiateur et la date de lopration.
1.6 Le RIB
Positionnez-vous au niveau de la Banque de France en modlisant les comptes des clients de
tous les organismes bancaires. Considrez notamment les attributs suivants:
nom_banque, nom_agence, num_compte, cle_RIB, nom_client;
debit, credit, date_ouverture.
100
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Sessions
Les sessions de formations sont assures par des formateurs en interne (cest un consultant qui
nest pas forcment le responsable du cours). Chaque session ne dpasse pas 5jours.
la fin de chaque session, chaque stagiaire note la formation quil a suivie (notec).
Il faut mmoriser la date du cours (datec) et lidentit du formateur de la session.
Salles
Chaque session se droule dans une des salles de lorganisme de formation. Les locaux de
lorganisme sont composs de plusieurs tages. Chaque salle est numrote et dispose dun
nombre de places limit (capacite). Il faut au minimum 2stagiaires inscrits et aucune salle
ne dpasse 12places.
Des techniciens soccupent de la configuration des salles chaque session. Pour chaque session,
le technicien rsume ses actions dans un mmo (memo).
Il est intressant de connatre le temps de prsence (temps_presence) de chaque technicien
pass pour chaque jour de la session.
1.8 Lhritage
Organisme de formation
Dans quelle mesure lhritage permet de prciser le diagramme de lexercice 1.7lorganisme
de formation?
Comptes bancaires
Comment pouvez-vous utiliser lhritage pour prciser le diagramme de lexercice1.5 Les
comptes bancaires?
Ancien rgime
Le premier document analyser est le suivant. Lorsquun vhicule change de propritaire son
immatriculation est modifie.
ditions Eyrolles
101
15/02/12 07:05
Modlisez un premier schma en fonction des attributs que vous devez considrer:
immatriculation, date_immat, mise_circu, nom_departement, taxe_region;
nom_proprio, prenom_proprio, adresse_proprio;
genre, marque, type_veh, nserie_veh, carosserie, energie, puissance, num_
places.
Cot du cheval
Modlisez le fait que chaque rgion (nom_region) fixe annuellement (annee) par dlibration du conseil rgional la valeur du cheval fiscal (euros_cv) rentrant en compte dans le
calcul de la taxe du certificat dimmatriculation.
Nouvelle numrotation
Deux systmes cohabitent actuellement en France. Lancien systme bas sur un comptage
dpartemental, en place depuis 1950, est dsormais remplac depuis le 15avril2009 par un
systme entirement national.
Ce nouveau numro est attribu dfinitivement au vhicule, jusqu sa destruction ou son
exportation. La plaque intgre, sur sa partie droite, un identifiant territorial compos dun
numro de dpartement et du logo de la rgion correspondante. Cet identifiant est choisi par le
propritaire et na pas obligatoirement de rapport avec le lieu de rsidence.
102
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Contrles techniques
Indpendamment du systme dimmatriculation, chaque vhicule doit passer tous les deux
ans un contrle technique. Plusieurs enseignes existent et diffrents centres de contrle
dtenant un numro dagrment sont prsents en France. Modlisez lhistorique de ces vnements en prenant en compte de nouveaux attributs: limite_echeance, nom_enseigne,
adresse_centre, nom_centre, num_agrement, date_visite, num_visite et num_
carte_grise.
ditions Eyrolles
103
15/02/12 07:05
Lorganisme de formation
Un consultant doit proposer entre 2 et 4crneaux par semaine pour enseigner un cours.
Un technicien doit rdiger un mmo de Ses actions pour toute formation quil prend en charge.
Le nombre de stagiaires ne doit pas dpasser la capacit dune salle pour toute session.
Vols catalogue
Les autres attributs que vous devez considrez apparaissent clairement sur le document et
sont les suivants : nom_client, prenom_client, num_vol, jour_mois, heure_dep,
heure_emb, nom_aeroport, num_porte et num_siege. Un aroport est identifi par un
code international (par exemple, Paris Orly est codifi LFPO par lOACI, lOrganisation
de laviation civile internationale).
Distinguez un vol catalogue dun vol rel. Le vol rel transporte plusieurs clients, tandis
que le vol catalogue renseigne les caractristiques dun trajet indpendamment du jour.
104
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Vols rels
Modifiez le prcdent diagramme pour:
calculer des statistiques des retards en mmorisant les heures de dpart et darrive relles
(dep_reel, arrivee_reelle);
quun client puisse rserver plusieurs siges pour le mme trajet;
connatre le planning annuel de chaque vol. Dans lexemple suivant, le vol AF6146 nest
pas ouvert du samedi16 au mardi19. Lheure darrive catalogue (heure_arr) est galement prendre en compte.
ditions Eyrolles
105
15/02/12 07:05
1.13 La thalasso
Les principaux attributs sont les suivants: num_client, num_sejour, nom_client, jour_
soin, heure_soin, num_vestiaire, lib_soin et lib_lieu.
Un type de soin na lieu que dans un seul espace et il peut tre effectu plusieurs fois le mme
jour.
106
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Chaque sortie dun bateau se ralise sur lun des sites existants. Tout site est limit en nombre
de mouillages (lib_site, nb_bateau_max). La taxe journalire de chaque site est variable
en fonction de la saison (mois) et du site. Les sites ne sont pas ouverts tous les bateaux.
Chaque bateau ne peut effectuer plus de quatre sorties par jour. Les dates et heures de chaque
sortie doivent tre mmorises (date_sortie et heure_sortie).
ditions Eyrolles
107
15/02/12 07:05
Lors de chaque sortie, plusieurs plongeurs sont embarqus. Ces plongeurs composent diffrentes palanques (groupe dau maximum cinq plongeurs ralisant la mme plonge).
Un plongeur peut tre rattach un club extrieur pour lequel des accords ont t passs
avec lorganisateur. Chaque plongeur doit tre enregistr (num_brevet, nom_plongeur,
niveau_plong) et on doit pouvoir connatre le chef de chaque palanque. Certaines palanques sont diriges par des moniteurs du club.
Le prix de chaque plonge est indpendant du site, mais peut varier selon le mois. Il existe
deux tarifs (prix_plongee): en autonome et accompagn dun des moniteurs du club. la
fin de chaque plonge, le chef de palanque annonce la dure dimmersion, ainsi que la profondeur maximale atteinte au cours de la plonge (duree_plongee et profondeur_max). Ces
deux chiffres doivent tre consigns.
108
ditions Eyrolles
15/02/12 07:05
Chapitre 1
Le niveau conceptuel
Il est important de connatre le leader courant de chaque parti. Les principaux attributs
considrer sont les suivants: nom_politicien, prenom_politicien, date_naiss, nom_
parti, annee_creation, annee_fin, date_entree et date_sortie.
Figure 1-114. Historique des rsultats dun parti. Extrait du site http://fr.wikipedia.org
ditions Eyrolles
109
15/02/12 07:05
Titre suprme
Le ministre de lIntrieur propose danalyser les rsultats des premier et second tours de
llection au niveau national, par rgion ou par dpartement.
Quelle que soit la prcision choisie, le rsultat du premier tour est prsent sous la forme suivante.
110
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Ce chapitre dtaille la deuxime tape de conception dune base de donnes: il sagit dlaborer un schma logique (modle relationnel); la dernire tape tant la cration des tables
(gnration de scripts SQL) puis des vues (requtes SQL).
Les avantages dutiliser un modle logique de donnes sont nombreux:
rester indpendant du SGBD (mais plus proche des tables);
vrifier son modle avant de crer les tables dfinitives (normalisation);
rduire la complexit du modle (dcider de ne pas crer certaines tables dduites toutefois
du modle conceptuel);
renommer des objets (colonnes, cls, contraintes et tables);
typer les colonnes plus prcisment;
prvoir dajouter certaines contraintes de cls et de valeurs (contraintes UNIQUE et CHECK
notamment);
calculer la volumtrie prvisionnelle.
Ce chapitre se divise en trois parties. La premire partie dcrit les concepts du modle relationnel. La deuxime partie prsente les rgles qui permettent de driver un schma logique
partir dun modle conceptuel. La dernire partie traite de la normalisation et du calcul de
volumtrie.
Deux autres aspects importants du modle relationnel existent. Le premier concerne lintgrit des donnes qui est aborde au chapitre3 (contraintes SQL). Le dernier aspect recouvre
la manipulation des donnes au sens des oprateurs relationnels (algbre relationnelle, base
mathmatique du langage de requtes SQL). Vous trouverez de nombreuses ressources sur le
Web et dans la bibliographie.
ditions Eyrolles
111
15/02/12 07:05
112
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Le diagramme DB Designer suivant contient trois relations et deux cls trangres. Les cls
primaires sont iconises, tandis que les cls trangres sont suffixes par fk.
ditions Eyrolles
113
15/02/12 07:05
Le choix de loutil Rational Rose (inclus dans loffre Data Modeler dIBM) est de prfixer les
attributs cls: pk pour les cls primaires, fk pour les cls trangres et pfk pour les attributs
jouant les deux rles.
Depuis la version7, SQL Server propose un outil pour construire un modle de tables. Les
cls primaires sont notes laide dune icne cl, les cls trangres ne sont pas explicitement
distingues.
114
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Du conceptuel au relationnel
Cette partie prsente les rgles qui permettent de crer un schma relationnel partir
dun modle conceptuel exprim par un diagramme de classes UML. Ces rgles sont
surtoutbases sur lexistence des associations et la valeur des multiplicits de chaque association.
Bien que ces rgles soient, en principe, correctement programmes dans tout outil digne
de ce nom, il est ncessaire de vrifier le schma rsultant avant de crer votre base.
Ainsi,laconnaissance de ces rgles vous permettra de vrifier la cohrence des relations
gnres.
ditions Eyrolles
115
15/02/12 07:05
En appliquant cette rgle lexemple suivant, la relation Aeroport prfigure la table de mme
nom.
116
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Appliquons cette rgle lexemple suivant, il vient deux cls trangres. Notez quune classe
peut tre considre la fois parent pour une association et enfant pour une autre.
Le fait que la multiplicit minimale du lien ct parent soit0 ou1 na pas dinfluence sur la
structure du schma relationnel gnr. Seul le modle physique permet de diffrencier ces
deux cas en ajoutant une ventuelle contrainte NOT NULL applique la colonne cl trangre.
ditions Eyrolles
117
15/02/12 07:05
De lapplication de cette rgle lexemple suivant, manent deux nouvelles relations. Lidentifiant de chaque nouvelle relation est compos du couple didentifiants des deux relations
initiales. Les cls trangres relient la nouvelle relation ses deux relations initiales associes.
Le fait que la multiplicit minimale dun lien soit0, 1 ou n (n>1) na pas dinfluence sur la structure du schma relationnel gnr. Seule une programmation permettra de mettre en uvre
une telle contrainte.
118
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Appliquons cette rgle lexemple suivant, deux cls trangres doivent tre gnres. La
premire cl trangre (num_proj dans Collaborateur) qui concerne lassociation un-plusieurs devrait apparatre naturellement. En revanche, vous devrez vous assurer du bon
positionnement de la seconde cl trangre (id_coll dans Projet).
Je prcise que les associations rflexives suivent les mmes rgles de transformation:
une association rflexive un--un conduit une double cl et une assertion;
une association rflexive un--un conduit une double cl;
une association rflexive un--un conduit une table de jointure.
De lapplication de ce principe lexemple suivant, manent deux cls trangres. La premire provient de lassociation un--plusieurs et la seconde de lassociation un--un. La classe
Employe joue le double rle de parent et denfant pour ces deux associations.
ditions Eyrolles
119
15/02/12 07:05
En renommant les colonnes cls trangres provenant dassociations rflexives, vous amliorerez considrablement, par la suite, la lisibilit de la table. Les rles UML peuvent vous aider
dans ce sens. Dans lexemple prcdent, il convient de renommer par exemple id_emp2 par
id_mon_pote et id_emp3 par id_manager.
120
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Vous devez vous demander comment driver un schma relationnel lorsquune classe-association est relie une autre classe. Eh bien, le plus naturellement du monde: en considrant
la classe-association comme une classe part entire et en adoptant les rgles prcites en
fonction des multiplicits de lassociation traduire.
Nous verrons plus loin quelques exemples qui incluent des classes-associations connectes
dautres classes.
Transformation de lhritage
Il existe trois transformations possibles pour chaque association dhritage.
Il nexiste pas de solution miracle et vous devrez choisir la meilleure option en fonction de
la nature de la contrainte qui concerne lhritage (partition, exclusion, totalit ou absence de
contrainte).
Vous pouvez traduire une association dhritage par:
distinction: en crant autant de relations que de classes (surclasse et sous-classes). Lidentifiant de la surclasse est propag dans toutes les relations et devient la cl primaire pour
chacune delles. Ce mme identifiant joue galement le rle de cl trangre vers la relation
dduite de la surclasse (qui prfigure la table de rfrence);
push-down: en migrant tous les attributs de la surclasse dans les sous-classes;
push-up: en migrant tous les attributs des sous-classes dans la surclasse.
ditions Eyrolles
121
15/02/12 07:05
Le premier exemple concerne la classification des personnels en trois populations: commerciaux, managers (chacun responsable de plusieurs personnels) et administratifs. En labsence
de contrainte, ce diagramme UML signifie quil existe des personnels non classifis (ni commerciaux, ni managers, ni administratifs) et quaucun dentre eux ne peut appartenir plus
dune classification.
La transformation par distinction implmente correctement cet tat de fait.
La transformation par distinction dune association dhritage est la plus polyvalente. Sous
rserve de codage, elle permet dimplmenter nimporte quelle autre contrainte dhritage
(partition, exclusion et totalit).
122
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Le troisime exemple prsente la transformation dun hritage simple par push-up. Cette
solution permet dimplmenter toutes les contraintes, mais convient vraiment mieux lorsque
chaque personnel peut occuper plus dun type demploi.
Le tableau suivant prcise les options souhaitables pour chaque contrainte dhritage. Quelle
que soit la solution que vous choisirez, vous devrez programmer la contrainte sous la forme
de directives SQL CHECK, dclencheurs ou lintrieur de vos procdures catalogues (voir
le chapitre3), sauf en ce qui concerne la transformation par distinction et lorsquil nest pas
ncessaire dassurer lexclusivit.
Tableau 2-1 : Transformation de lhritage
Options de
transformation
Distinction
Push-down
Partition: {complete,disjoint}
Totalit: {complete,overlapping}, redondance dinformations
Push-up
Totalit: {complete,overlapping}
Autres cas: prsence de nombreuses valeurs NULL
ditions Eyrolles
123
15/02/12 07:05
La solution universelle
Il existe une transformation qui peut convenir toute association binaire (un--un, un-plusieurs, plusieurs--plusieurs et rflexive). Il sagit de gnrer une nouvelle relation munie
de deux cls trangres (qui prfigure la table dassociation ou table de jointure). La cl
primaire de cette relation est compose soit par un des identifiants, soit par le couple des identifiants des deux relations initiales.
Appliquons cette rgle lexemple de deux associations binaires. Deux relations doivent tre
gnres. Lassociation un--un est traduite par la relation diriger et lassociation un-plusieurs est traduite par la relation affecter.
Pour sassurer quun collaborateur ne dirige quun projet, il conviendra dajouter, au niveau
physique, une contrainte UNIQUE sur la cl trangre (id_coll) dans la table diriger.
124
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Danslautre table dassociation, la cl primaire id_coll permettra de sassurer quun collaborateur ne puisse tre affect plusieurs projets.
Ce principe de transformation est idal lorsque les multiplicits de vos associations sont susceptibles de changer avec le temps (dans notre exemple, le fait quun collaborateur puisse
diriger plusieurs projets ou participer diffrents projets). En ce cas, et mme avec des donnes
en base, il suffira dactiver ou de dsactiver telle contrainte ou telle cl.
Cette transformation est viter, car la table dassociation quon obtiendra ne permettra aucun
contrle de cohrence. Ainsi, avec ce schma, il est possible dinstaller un logiciel qui nest pas
compatible avec un serveur ou quun dpartement ne dtient pas par exemple.
ditions Eyrolles
125
15/02/12 07:05
Il est vident que toutes les associations n-aires alourdissent les cls des tables dassociation. Chercher donc rduire le nombre de colonnes est important et lorsque lon ne
peut pas le faire, il devient souvent intressant de crer artificiellement une entit associative (classe artificielle en UML) afin dallger la cl primaire ce qui est grandement
bnfique pour les performances. Il faudra, dans ce cas, ajouter une contrainte dunicit pour lensemble des cls trangres composant lassociation. Cette technique rajoute
effectivement une colonne, mais allge bien des objets physiques sous-jacents la table,
comme lcriture de certaines requtes. La plupart des outils de modlisation permettent
dautomatiser ce genre de transformation.
Dans la majorit des cas, il nest pas utile de traduire cette relation en table. Elle est toutefois
indispensable au niveau conceptuel, car elle permet de faire migrer dans la table dassociation
la colonne qui reprsente le jour de visite. Certains la traduiront pour disposer dune table de
rfrence de dates, astuce qui permet de faciliter les requtes interrogeant la base propos de
dates o aucune visite na t ralise.
126
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Les classes qui ont une smantique faible et qui ne sont relies aucune autre classe, part
dans le cadre dune association, sont en gnral de bons exemples de classes qui ne doivent
pas ncessairement tre transformes en tables.
La question dune entit DATE (ou parfois NOMBRE) parat anodine, mais savre
cruciale.
Dans un modle de donnes, il devrait toujours figurer une table des dates et une table des
nombres. En effet, un problme important rsoudre dans les requtes est de retrouver
des donnes qui ne figurent pas dans la base. Pour cela, il faut artificiellement crer ces
donnes pour des ensembles continus. Par exemple, une table des dates sur quelques
sicles. Il devient alors facile et pertinent de retrouver des dates absentes des donnes
de production laide dune jointure externe droite sur la table des dates. Un exemple
que je donne en dmonstration est celui dun SAV ou je montre une table avec des lignes
dappareils ports en rparation pendant toute une semaine. Jy omets sciemment un jour,
mettons le mercredi et demande calculer le nombre moyen dappareils traits par jour
au cours de cette semaine. La plupart du temps, la requte produite sera fausse, car le
jour absent nest pas compt!
CREATE TABLE T_SAV (SAV_DATE DATE, SAV_APPAREIL VARCHAR(16));
INSERT INTO T_SAV VALUES
('2011-11-12', 'TV'), ('2011-11-14', 'RADIO'), ('2011-11-12', 'FRIGO'),
('2011-11-13', 'FOUR'), ('2011-11-16', 'RADIO'), ('2011-11-14', 'RADIO'),
('2011-11-12', 'FOUR'), ('2011-11-13', 'FOUR'), ('2011-11-16', 'TV');
requte nave:
SELECT COUNT(*) / CAST(COUNT(DISTINCT SAV_DATE) AS FLOAT) AS NB_
APPAREIL_PAR_JOUR FROM T_SAV;
NB_APPAREIL_PAR_JOUR
---------------------2,25
Ce rsultat est faux, car la date du 15novembre2011 ne figure pas dans la table (peut-tre
une grve?). La solution consiste donc rajouter une table de date:
CREATE TABLE T_DATE (D DATE);
INSERT INTO T_DATE VALUES ('2011-11-12'), ('2011-11-13'),
('2011-11-14'), ('2011-11-15'), ('2011-11-16');
ditions Eyrolles
127
15/02/12 07:05
ON T_SAV.SAV_DATE = T_DATE.D
Il est ensuite facile de rajouter cette table de dates dautres informations: numro de
jour, semaine, mois, anne, trimestre, semestre, jours fris, congs et dindexer cette
table tout en la dclarant en lecture seule afin dviter tout verrou!
Mise en pratique
Les exercices2.1 Les associations binaires, 2.2 Lhritage et la composition, 2.3 Les
classes-associations et 2.4 Traduire ou ne pas traduire ? vous proposent de traduire
manuellement diffrents modles conceptuels en schmas relationnels.
128
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
La colonne prix nest pas prcise (de quelle devise sagit-il?). Cette colonne sera-t-elle
actualise au bon moment ? Cette colonne nest pas comprhensible (sagit-il dun prix
TTC, HT, unitaire, de revient, etc. ?). Enfin, le type flottant (FLOAT) peut rserver des
surprises lors de calculs intermdiaires importants (12.499999999 ou 12.5000000001?).
La colonne quantite nest ni prcise (les dcimales doivent-elles tre acceptes, pour
stocker par exemple 1,5 pour un kilo et demi?), ni comprhensible (quelle est lunit du
produit, des mtres, des kilos, des livres, etc.?), ni complte (les contraintes NOT NULL
sont absentes du fait que la case O comme obligatoire nest pas coche).
La normalisation
Bien que les outils permettent de modliser un schma logique dans ce modle de donnes,
aucun noffre la possibilit dautomatiser une quelconque normalisation. Les avantages de
normaliser un schma relationnel sont les suivants.
viter des redondances potentielles (donc minimiser lespace de stockage et diminuer les
risques dincohrences qui sont appeles anomalies transactionnelles).
Faciliter la programmation de nimporte quelle opration sur les tables (ajout, modification
et suppression).
Renforcer lintgrit des donnes.
Le schma relationnel suivant, de par sa structure, rend problmatique les futures (mais trs
probables) actions suivantes.
ditions Eyrolles
Ajout dun client sil nest pas inscrit un cours (la cl primaire de la table Inscriptions
est compose des colonnes et interdit donc quune des deux colonnes soit nulle).
Modification du nom dun client ou de la socit dun client (la mise jour doit tre rpercute dans toutes les lignes concernes). Si une modification est partielle, la table est tout
bonnement inexploitable (au niveau de ces deux colonnes).
Suppression dune inscription (qui entranerait la perte des donnes du client).
129
15/02/12 07:05
130
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Dpendances fonctionnelles
La normalisation est base sur les dpendances fonctionnelles (DF). E.Codd fut le premier
publier sur ce type de dpendances [COD72]. Bien que le qualificatif de fonctionnelles soit
communment utilis, ces dpendances sont davantage lies aux valeurs qu une fonctionnalit particulire. Le terme qui conviendrait mieux les qualifier serait donc: dpendances
de valeurs.
Un attribut b dpend fonctionnellement dun attribut a si une valeur de a correspond au plus
une valeur de b. La dpendance fonctionnelle est note ab.
Le membre droit de lcriture sappelle le dpendant, le membre gauche sappelle le dterminant, ce dernier devient en gnral cl primaire (ou alternative, aussi appele candidate).
ditions Eyrolles
131
15/02/12 07:05
Plusieurs attributs peuvent apparatre dans la partie gauche dune DF. Plusieurs attributs peuvent apparatre dans la partie droite dune DF. Dans ce cas, il convient de considrer chaque
DF en gardant la partie gauche et en faisant intervenir un seul attribut dans la partie droite.
On apprend scolairement, laide de techniques formelles, que la rduction dun
modle peut se faire partir des dpendances fonctionnelles et de certaines rgles
(Armstrong, fermeture, couverture minimale jen passe et des meilleures). Tout cela
est bien joli de la part dun mathmaticien, mais na en pratique aucun intrt, car la
difficult de la modlisation nest pas dans lapplication bte et mchante de rgles
mcaniques que certains outils mathmatiques incorporent, mais bien dans le dbusquage des dpendances fonctionnelles! L, il ne sagit plus de mathmatiques, mais de
smantique, de comprhension, dintrospection, de maquettage, voire de tests Aprs,
les choses sclaircissent naturellement et comme dirait Boileau les mots pour le dire
arrivent aisment!
Exemples
tudions les exemples suivants inspirs du monde aronautique commercial. Chaque pilote est
dot dun numro, dun nom et dune fonction (copilote, commandant ou instructeur).
Lcriture num_pilote
nom_pil,fonction est quivalente aux critures num_
pilotenom_pil et num_pilotefonction qui sont deux DF, car tout pilote nest
dot que dun seul nom et dune fonction tout instant. Avec ces hypothses, lcriture
num_pilotenom_pil,fonction est une DF.
Lcriture num_pilote,jour
nb_heures_vol peut tre considre comme une DF
si tout couple cohrent et susceptible dtre stock (num_pilote, jour), on dsire
associer au plus un nombre dheures de vol (qui sera le cumul de tous ses vols journaliers).
Lcriture nom_pilote
fonction peut tre considre comme une DF si on suppose
quil nexistera aucun homonyme dans la population des pilotes (cas peu probable). En restant dans le cadre le plus gnral, cette criture ne doit pas tre considre comme une DF.
Lcriture fonction
nom_pilote nest videmment pas une DF, car plusieurs pilotes
peuvent tre dots de la mme fonction.
DF lmentaire
Une DF a, bc est lmentaire si ni ac, ni bc ne sont des DF.
132
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
DF directe
Une DF ac est directe si elle ne peut pas tre dduite par transitivit de deux DF avres,
cest--dire que les critures suivantes ab et bc ne sont pas des DF.
Il est difficile de statuer sur le fait quune DF est directe. En revanche, il est plus facile de
dterminer quune DF est indirecte (si on trouve un parcours de DF cohrent). En consquence, toutes les DF qui ne sont pas considres comme indirectes doivent tre considres
comme directes.
Considrons lexemple qui fait intervenir les attributs suivants : (immat : numro dimmatriculation dun avion, type_avion: type de laronef, nom_const: nom du constructeur
de laronef). Lcriture immatnom_const nest pas une DF directe, car les dpendances
suivantes sont directes:
immattype_avion
type_avionnom_const
ditions Eyrolles
133
15/02/12 07:05
La relation Product ne respecte pas la rgle de la premire forme normale, car la colonne
color est prvue pour stocker diffrentes couleurs.
134
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Toutes les requtes relatives aux coloris se programmeront par jointures rendues performantes par la prsence dindex et par le type de la cl trangre (ici numrique).
Daccord, il sagit de prvoir que chaque attribut soit atomique. Mais il ne faudrait pas
oublier que tout attribut dune relation doit tre valu (donc pas de NULL)! (en sus du
fait que la relation doit imprativement avoir une cl).
Mais quest-ce que latomicit dun attribut? Une date est-elle atomique? Nest-elle pas
elle-mme compose dune anne, dun mois et dun jour? Un numro de Scurit sociale
nest, par nature, pas du tout atomique. Il incorpore plusieurs notions telles que le sexe,
lanne, le mois et la commune de naissance
Pour autant, on peut inverser le problme. Demandez donc un vendeur de listes si
ladresse dont il a fourr tous les lments (nom de voie, type de voie, numro dans la
voie) dans un seul et mme attribut considre que cette information nest pas atomique!
Bref, la notion datomicit est relative la problmatique du modle analys
Pour autant, certaines informations sont composes de plusieurs lments dcomposables, et peuvent bien entendu tre considres comme atomiques. Cest le cas par
exemple des priodes (un dbut+une fin) et plus gnralement des intervalles, mais aussi
des objets gographiques (points, lignes, polygones). Il devient alors trs complexe de
savoir ce que reprsentent certaines notions dunicit dans ce genre de cas de figure.
titre dexemple, voici deux polygones identiques (SQL SIG):
POLYGON ((3 7, 5 7, 5 2, 4 2, 3 7))
POLYGON ((4 2, 3 7, 5 7, 5 2, 4 2))
ditions Eyrolles
135
15/02/12 07:05
Mais si nous ne connaissons pas le nom, ou le prnom ou la date de naissance dune personne, alors que faire? Il suffit tout simplement de dcomposer lentit en trois:
PERSONNE_PHYSIQUE_NOM
(PRP_ID INT auto, PRP_NOM A60),
l'identifiant tant PRP_ID.
PERSONNE_PHYSIQUE_PRENOM
(PRP_ID INT auto, PRP_PRENOM A32),
l'identifiant tant PRP_ID.
PERSONNE_PHYSIQUE_NAISSANCE (PRP_ID INT auto, PRP_NAISSANCE
DATE), l'identifiant tant PRP_ID.
Pour reconstituer linformation dune personne, il suffira de faire des jointures externes
bilatrales. A priori ce dcoupage semble utopique, car il va gnrer de nombreuses oprations de jointures Pour autant, certains SGBDR comme Sybase IQ le font sans vous
le dire, car ce modle (toutes les tables sont dotes dune cl et au plus dun seul attribut),
en sus dtre parfait, est extrmement performant sur de grands volumes et de nombreuses
transactions. En effet:
il rpartit la charge de mise jour sur diffrents objets, ce qui est moins bloquant que
davoir un seul objet bloqu pour tout un tas de mises jour diffrentes;
il conomise du volume (on ne stocke pas de lignes pour le NULL);
il permet une indexation systmatique de tous les objets (il suffit de poser un seul index
sur le seul attribut pour que tout soit index).
Bien entendu, si votre SGBDR ne dispose pas dun tel mcanisme, vous pouvez le simuler
avec des vues!
136
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
La relation Coloris ne respecte pas la rgle de la deuxime forme normale, car la colonne
poids_kg ne dpend que du produit et non de la couleur (enfin, en gnral, cest comme a).
En revanche, il est plausible que le prix dun produit dpende aussi de sa couleur (avez-vous
remarqu que les iPhone blancs sont plus chers?).
ditions Eyrolles
137
15/02/12 07:05
La redondance dinformations: le poids dun produit nest stock quune seule fois, ce qui
annule une ventuelle incohrence dinformations.
Les requtes relatives aux poids nont plus besoin de jointures.
Seules les relations ayant des cls primaires composes sont potentiellement concernes par
la deuxime forme normale.
Une jointure permet de reconstituer la relation originale. Une vue peut tre programme cet
effet.
La relation Product ne respecte pas la rgle de la troisime forme normale, car la colonne
nom_marque nest pas en dpendance directe avec la cl (itemID). En effet, le nom
dunemarque doit tre identifi par un code et un produit sera associ ensuite sa marque.
138
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Cette solution vite les inconvnients prcdents, car le nom de la marque est unique dans
la table de rfrence (Marques) et ne se rpte pas pour chaque produit. En revanche, les
requtes relatives aux marques ncessiteront davantage de jointures.
Une jointure permet de reconstituer la relation originale. Une vue peut tre programme cet
effet.
En supposant quun produit puisse tre fabriqu dans une rgion de diffrents pays, la relation
Fabrication ne respecte pas la rgle de Boyce-Codd. En effet, il existe une dpendance
entre la colonne region et une partie de la cl (itemID) qui sexplique par le fait quune
rgion est toujours associe un unique pays.
ditions Eyrolles
139
15/02/12 07:05
Par ailleurs, le nom de la rgion est un libell qui doit tre associ un identifiant. La prise
en compte de ces deux remarques mne la normalisation en forme de Boyce-Codd de ce
schma.
La thorie montre que toute relation a une dcomposition sans perte en forme normale de
Boyce-Codd. En revanche, une telle dcomposition ne prserve pas toutes les DF (dans
lexemple la DF itemID, id_paysregion a t supprime). Il est cependant possible de
la retrouver en ralisant une jointure entre les relations normalises.
140
Seules les relations ayant des cls primaires composes sont potentiellement concernes par
la forme normale de Boyce Codd.
Une jointure permet de reconstituer la relation originale. Une vue peut tre programme cet
effet.
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Le premier schma relationnel ne vrifie pas la forme normale domaine-cl, car la relation
Avion contient le code catgorie (id_cat) qui peut tre calcul en fonction de la colonne
envergure. Cette redondance est problmatique si les rgles rgissant les catgories voluent. En effet, ladoption de lclatement du groupe I pour former deux nouveaux groupes
Ia concernant les avions denvergure infrieure 20ft et Ib pour ceux denvergure
jusqu 49ft ncessiterait la mise jour de nombreuses lignes de la table. Si ces mises jour
ne forment pas une transaction, des anomalies de mises jour peuvent se produire.
ditions Eyrolles
141
15/02/12 07:05
Le deuxime schma relationnel qui est dcompos selon la forme normale domaine-cl
prsente lavantage de ne pas tre sensible de telles modifications.
Une inqui-jointure permet de reconstituer la relation originale. Une vue peut tre programme
cet effet.
Afin de dissocier ces deux tats de faits, il est ncessaire de dcomposer Qualifier en deux
relations Qualif_necessaire (constitue les correspondances entre un type davion et les
qualifications) et Aptitude (pour connatre quels sont les pilotes qualifis pour chaque type
dappareil).
Considrons nouveau la relation initiale Qualifier et supposons quelle inclut galement
les qualifications que possde chaque pilote, sans pour autant que ces qualifications soient
concernes par un type dappareil quelconque. Cette relation ne respecte pas la cinquime
forme normale, car il existe des dpendances de jointure.
142
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Afin de dissocier ces trois tats de faits, il est ncessaire de dcomposer Qualifier en trois
relations : Qualif_necessaire et Aptitude pour rpondre aux deux premiers tats de
faits, et Qualif_detenues pour modliser lhypothse de travail.
ditions Eyrolles
143
15/02/12 07:05
Seules les relations ayant des cls primaires composes de plus de deux colonnes sont
potentiellement concernes par les quatrime et cinquime formes normales.
Si vous suivez les prconisations du chapitre1, vous viterez de modliser chaque association n-aire en ltat (sans dcomposition systmatique en classes-associations), et
vous obtiendrez un schma qui respecte naturellement les quatrime et cinquime formes
normales.
Mise en pratique
Lexercice2.5 La normalisation vous propose de normaliser une relation qui contient peu
de colonnes, mais beaucoup dinformations.
Calculs de volumtrie
Lanalyse de la volumtrie dune base est un calcul a priori. Pour chaque relation, vous devrez
estimer la longueur dun n-uplet (une ligne): l. En considrant, dune part, une valeur moyenne
de la taille de chaque colonne:
144
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
FLOAT: de 4 8octets;
TIMESTAMP: de 8 10octets.
Dautre part, vous devrez, pour chaque relation, estimer le nombre de lignes (nl). Le volume
dune relation (vr) en octets est donn par la formule suivante: vr=l nl. De la somme de
tous ces volumes, on calcule la taille prvisionnelle de toutes les relations: vri (i=1
nb_relations).
Il est communment admis quen appliquant un coefficient de 2,5 (indexation, espace perdu,
fragmentation, rserv libre pour dventuelles mises jour, etc.), on obtient un bon indicateur
final.
Les outils disposent en gnral dune aide ce calcul. Considrons la prvision suivante applique au prcdent schma: 150types davion, 3500pilotes et 450qualifications. Le volume
dune table dassociation est le produit des volumes des deux tables associes comme lillustre
la figure suivante.
Une fois toutes les tables renseignes en termes de volume, un calcul thorique peut tre excut. Dans lexemple suivant, il faudra disposer de plus de 103Mo.
ditions Eyrolles
145
15/02/12 07:05
Vous venez sans doute de constater quun bon modle de donnes est constitu dune multiplicit dentits. Sans doute beaucoup plus que vous ne lauriez imagin et certainement
plus que ce que vous avez dj fait, si jamais vous avez commenc travailler les bases
de donnes sans passer par ltape modlisation.
Pour autant, vous vous posez avec srnit la question des performances du fait des multiples jointures faire lors du codage des applications, et donc de lexploitation de la
base. Bien entendu, toute opration de jointure a un cot. Mais ce cot peut devenir trs
minime en face du bnficie considrable dune bonne modlisation Autrement dit, vous
ne devez pas avoir peur du nombre dentits et donc de tables de votre base.
Mais crire de multiples jointures pour la moindre requte vous fatigue ! Vous avez
raison, un bon informaticien doit tre faignant La solution rside donc dans la cration
des vues. Ainsi, pour une personne dont vous voulez, et les donnes personnelles, et les
donnes de contact, crez une vue synthtisant toutes ces informations. Nhsitez pas
lutiliser systmatiquement dans tous vos codes, mme pour la mise jour (nous verrons
comment mettre jour les vues dans un chapitre ultrieur).
Sachez quun bon SGBDR ignorera certaines jointures inutiles dune vue, si les informations retourner ne sont pas utiles pour votre requte. Sachez aussi que le nombre
de jointures quun SGBDR peut supporter est assez lev. Cest en gnral plusieurs
centaines. Sachez enfin que le cot dune jointure entre une cl primaire (identifiant de
lentit) et une cl trangre (qui se doit dtre indexe) est trs minime si vous avez opt
pour une cl auto-incrmente (SEQUENCE ou IDENTITY). Apprenez que le cot dune
jointure entre deux tables de 100millions de lignes, devant retourner une unique ligne,
ne dpasse pas six lectures
Enfin, si tout cela ne vous a pas convaincu, venez en discuter ici : http://www.
developpez.net/forums/d1099389/bases-donnees/decisions-sgbd/optimisations/petitestables-grandes-tables-consequences-performances/.
146
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
Exercices
2.1 Les associations binaires
Dduisez manuellement (sans laide dun outil) les relations des associations binaires avec
leurs cls trangres ncessaires limplmentation du modle conceptuel suivant.
ditions Eyrolles
147
15/02/12 07:05
148
ditions Eyrolles
15/02/12 07:05
Chapitre 2
Le niveau logique
2.5 La normalisation
En considrant la relation suivante qui vise modliser les diffrents gagnants de tournois de
tennis, trouvez la cl, puis normalisez cette relation le plus possible.
ditions Eyrolles
149
15/02/12 07:05
15/02/12 07:05
Chapitre 3
Le niveau physique
Le niveau physique prsent dans ce chapitre correspond la dfinition des tables, des cls
trangres ainsi qu limplmentation des ventuelles rgles mtier par des contraintes de cls,
de validation ou par des dclencheurs.
Le langage SQL
Le langage SQL provient du langage SystemR dIBM. SQL est implant dans des produits
commerciaux la fin des annes 1970 avec la premire version dOracle et de SQL/DS
dIBM. SQL est une norme ANSI depuis 1986 et une norme ISO depuis 1987. La norme
ANSI (SQL-86) est le rsultat dun compromis entre constructeurs, mais a t fortement
influence par le dialecte dIBM.
La version SQL2 (appele aussi SQL-92) a t normalise par lANSI et lISO en 1992. Les
langages proposs par les SGBD actuels sont proches de cette norme qui dfinit trois niveaux
de conformit: le niveau dentre (entry level), le niveau intermdiaire (intermediate level) et
le niveau maximum (full level). Les langages SQL des principaux diteurs de SGBD relationnels (Oracle, IBM, Microsoft, Sybase) sont conformes au premier niveau et ont beaucoup de
caractristiques qui relvent des niveaux suprieurs.
SQL3 comporte de nombreuses parties (On Line Analytical Processing, sries temporelles,
accs des sources non SQL, rplication des donnes, objet, XML, etc.).
Les diffrentes normes sont reconnues et numrotes de la manire suivante:
ditions Eyrolles
151
15/02/12 07:05
SQL2 ISO 9075:1992 (SQL92/SQL2) 600 pages, 4 niveaux (entry qui reprend SQL1,
transitional, intermediate et full), ISO 9075-4:1996 (SQL/Persistant Stored Module for
SQL92), ISO 9075-3:1995 (SQL/Call Level Interface for SQL92);
SQL3, des milliers de pages, mises jour continuelles, codifications: ISO/IEC 9075-x (x
dsignant lanne, par exemple: ISO/IEC 9075-1:2008, Information technology - Database
languages - SQL -- Part 1: Framework).
Les schmas
Une table est un objet nomm dun schma (notion de propritaire) qui est compos de colonnes
et dventuelles contraintes (cls ou valeurs). La description de chaque table se trouve stocke
dans le dictionnaire de donnes du SGBD, ce qui permet notamment aux outils doprer du
reverse engineering. Une table sera par la suite ventuellement indexe, partitionne ou clusterise.
La notion de schma na pas la mme signification selon certains SGBD: certains lassimilent la notion de database (MySQL) la notion de user comme Oracle. SQL Server est
multischma et multibase. Un schma joue le rle de bibliothque (tel un espace de noms) dans
lequel les privilges se grent plus facilement.
152
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Un serveur SQL (aussi appel instance ) est une machine logique installe sur un
ordinateur lui-mme physique ou logique. La plupart des diteurs permettent dinstaller
plusieurs serveurs SQL sur une mme machine. Dans chaque serveur SQL, il peut y avoir
plusieurs bases de donnes (limit 32000) et dans chaque base des schmas SQL (la
limite thorique tant 4milliards par bases) qui constituent autant despace logique,
dont le but est triple:
fournir un moyen de ranger les diffrents objets en diffrentes catgories (par exemple,
un schma pour les ressources humaines, un autre pour la comptabilit, un troisime
pour la production);
permettre dassocier des privilges au niveau du schma des utilisateurs, ce qui
allge la tche dadministration de scurit pour les objets futurs (par exemple, GRANT
SELECT ON SCHEMA::COMPTA TO DOMINIQUE);
autoriser dans un ordre CREATE SCHEMA de crer des objets mutuellement dpendants
sans pour cela se contraindre un ordre logique particulier (voir http://blog.developpez.com/sqlpro/p5835/langage-sql-norme/de-l-interet-des-schema-sql/ et http://
docs.postgresqlfr.org/9.0/sql-createschema.html).
Il existe toujours un schma par dfaut pour la base et pour lutilisateur.
En cas dabsence du prfixe de schma pour atteindre un objet, le serveur doit effectuer
une rsolution de nom en commenant par chercher lobjet dans le schma associ
lutilisateur, et sil ne le trouve pas, le serveur lassocie au schma par dfaut de la base.
Dans tous les cas, cette phase prend du temps et peut conduire des problmes de pertes
de cache donc, de mauvaises performances. Il vaut donc mieux tre prcis et prfixer tous
les objets de vos requtes par le schma dans lequel ils ont t crs.
MySQL nimplmente pas la notion de schmas SQL, mais laisse entendre que cela est
similaire la cration de multiples bases dans une mme instance. Certains SGBD, en
particulier MS SQL Server et MySQL, autorisent nativement des requtes interbases avec
des noms qualifis (par exemple MaBase.MonSchema.MaTable pour MS SQL Server).
Pour faire cela, sous Oracle ou PostGreSQL, il faut recourir un mcanisme de DBlink
qui semble plus lourd et moins performant.
ditions Eyrolles
153
15/02/12 07:05
Le schma SQL est un conteneur logique pour les objets dune base. Il na donc rien
voir avec un stockage physique. Si votre SGBDR gre correctement les espaces de
stockage, vous pouvez avoir n tables toutes cres dans un schmaS1 et chacune de ces
tables peut stocker ses donnes o bon lui semble et pourquoi pas un espace de stockage
spcifique chaque table.
Rpartir les objets dune base de donnes dans diffrents schmas SQL est une excellente
approche, car cela permet dorganiser la base en diffrents pans smantiques ou fonctionnels. En revanche, rpartir les objets dune mme application dans diffrentes bases,
pose des problmes impossibles rsoudre.
On ne peut pas faire de contraintes SQL dune base une autre. En revanche, au sein
dune mme base et mme si les objets sont dans diffrents schmas SQL cest possible.
On ne peut pas sauvegarder les donnes de deux bases diffrentes de manire synchrone alors que la sauvegarde dune base emporte la sauvegarde de tous les schmas
dun seul coup au mme point de synchronisation.
La gestion des privilges est spcifique une base. Elle couvre les schmas, mais elle
ne peut passer de base en base (MS SQL Server est le seul SGBDR permettre cette
fonction, mais elle savre complexe mettre en uvre).
Schmas et propritaires
Comme tout objet de la base, un schma est cr par un utilisateur, ce qui confre cet
utilisateur dtre le propritaire du schma, moins quil ne spcifie un autre utilisateur
dans lordre SQL CREATE SCHEMA .
Le propritaire dun schma est un peu comme un chtelain du Moyen ge Il a le droit
de vie ou de mort sur ses sujets, je voulais dire ses objets, tout le temps quil est responsable de la cration des objets figurant lintrieur de son schma. Mais rien nempche
de crer au sein du schma de Pierre un objet dont le propritaire est Paul (une sorte de
concession en somme)!
Il y a longtemps eu une confusion au sein des diteurs de SGBDR entre la notion de
propritaire (la norme SQL parle dautoris) et la notion de schma. Cest ainsi que
dans certains SGBDR le schma par dfaut porte le mme nom que lutilisateur qui en est
propritaire, histoire dentretenir la confusion!
Les contraintes
Les objectifs des contraintes au niveau des tables sont multiples: renforcer lintgrit de la
base, programmer des rgles de gestion lmentaires et allger la programmation ct client.
154
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
La mise en uvre des contraintes va soprer lors de la cration des tables (ou ultrieurement),
la dclaration dune contrainte lors de la cration SQL peut tre ralise en ligne (in line sur la
mme ligne que la colonne de la table elle-mme) ou hors ligne (out of line). Les principales
contraintes de SQL que vous avez disposition sont:
CHECK (condition)
Une fois dfinie et active, une contrainte peut tre dsactive ou supprime. Ds quune
contrainte nest pas respecte au cours du temps, une exception est leve et la transaction, dans
laquelle se trouve linstruction qui concernait la table, est annule.
Loutil que vous utiliserez ventuellement est capable de gnrer un script qui contiendra ces
deux types dinstruction.
CREATE TABLE [nom_schema.]nom_table
(colonne_1 type_1 [NOT NULL] [DEFAULT valeur],
[, colonne_2 ...]
[, CONSTRAINT nom_contrainte_1 type_contrainte_1 ...])
options physiques;
ALTER TABLE [nom_schema.]nom_table
ADD CONSTRAINT nom_contrainte type_contrainte;
De plus, il faudrait signaler lunicit des noms des objets travers les schmas (tables,
contraintes) et la possibilit davoir des doublons de noms sur les objets primaires des
bases si on les situe dans diffrents schmas.
Dautres instructions SQL peuvent aussi se trouver dans le script:
Afin de rendre les scripts plus clairs, les instructions SQL sont notes en majuscules et les
noms dobjets (tables, colonnes et contraintes) apparaissent en minuscules.
ditions Eyrolles
la cration des index (CREATE INDEX) sur certaines colonnes (les cls trangres en
principe);
la destruction des objets crs pour pouvoir relancer la demande le script de cration
(ALTER TABLE DROP CONSTRAINT, DROP INDEX et DROP TABLE).
155
15/02/12 07:05
Script SQL
DROP TABLE Aeroport CASCADE CONSTRAINTS;
156
La contrainte NOT NULL oblige la colonne contenir une valeur non nulle (qui est diffrente de
0, blanc ou plusieurs espaces). Certains outils disposent systmatiquement cette contrainte
sur les cls primaires.
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Script SQL
ALTER TABLE Aeroport
DROP CONSTRAINT fk_aero_situer_ville;
ALTER TABLE Ville
DROP CONSTRAINT fk_ville_localisation_reg;
DROP TABLE Aeroport CASCADE CONSTRAINTS;
DROP TABLE Region
CASCADE CONSTRAINTS;
DROP TABLE Ville
CASCADE CONSTRAINTS;
CREATE TABLE Aeroport (
code_aero
VARCHAR2(4) NOT NULL,
id_ville
SMALLINT
NOT NULL,
nom_aero
VARCHAR2(50),
nbPistes
SMALLINT,
capacite
INTEGER,
CONSTRAINT pk_aeroport
PRIMARY KEY (code_aero));
CREATE TABLE Region (
id_region
SMALLINT NOT NULL,
nom_region
VARCHAR2(30),
CONSTRAINT pk_region
PRIMARY KEY (id_region));
CREATE TABLE Ville (
id_ville
SMALLINT NOT NULL,
id_region
SMALLINT,
nom_ville
VARCHAR2(40),
codePostal
SMALLINT,
CONSTRAINT pk_ville
PRIMARY KEY (id_ville));
ditions Eyrolles
157
15/02/12 07:05
La contrainte NOT NULL sur une colonne cl trangre traduit une multiplicit minimale 1
dune association un--plusieurs (ici la colonne id_ville dans la table Aeroport).
Script SQL
DROP INDEX diriger_fk;
ALTER TABLE collaborateur
DROP CONSTRAINT fk_affecter_projet;
ALTER TABLE projet
DROP CONSTRAINT fk_diriger_collabor;
DROP TABLE collaborateur CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;
CREATE TABLE collaborateur (
id_coll
VARCHAR2(5) NOT NULL,
num_proj
VARCHAR2(6),
nom_coll
VARCHAR2(50),
indice
INTEGER,
CONSTRAINT pk_collaborateur
PRIMARY KEY (id_coll));
158
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Il existe dautres formes dassociations un--un comme dans le cas de lhritage ou dun
lien identifiant (la cl est la mme entre les diverses tables).
Script SQL
ALTER TABLE employe
DROP CONSTRAINT fk_manager;
ALTER TABLE employe
DROP CONSTRAINT fk_meilleur_ami;
DROP TABLE employe CASCADE CONSTRAINTS;
ditions Eyrolles
159
15/02/12 07:05
De la mme manire quil existe trois sortes de cardinalits de liens entre deux relations,
il en existe autant pour les autorfrences dune mme relation.
Autorfrence avec cardinalit un--un : le cas est rarissime. On peut donner un
exemple dun point de vue statique. Dans une table de personnes physiques et dans nos
religions occidentales, une personne ne peut avoir quun seul conjoint. Ainsi, linstant t, une occurrence de personne peut tre en lien 0 ou 1 une autre personne (peu
importe quil soit homme ou femme, certains pays ayant admis le mariage homosexuel
et cest le cas du Pacs en France).
Autorfrence avec cardinalit un--plusieurs: cest un cas trs courant, car il conduit
modliser une arborescence. On le trouve typiquement dans les organigrammes dentreprise pour savoir qui est le chef. Il est aussi souvent prsent dans les nomenclatures
pour lesquelles les donnes sont embotes.
Autorfrence avec cardinalit plusieurs--plusieurs: cest le cas des graphes mathmatiques qui reprsentent des rseaux (lignes de mtro, de bus, rseaux routiers,
tlcommunications, rseaux informatiques). Dans ce cas, le graphe peut tre
vu de deux faons: orient ou non, conduisant une multiplicit des cardinalits.
Graphe non orient : cest le cas notamment des rseaux de type full duplex. Par
exemple, si lon veut modliser la distance des routes ariennes entre deux aroports,
peu importe le sens, car il ny a pas de couloir arien sens unique! Le rsultat est
que la matrice des combinaisons est triangulaire. Il est ainsi inutile de stocker
la distance pour laller et le retour, une seule de ces deux informations suffit. En
revanche, pour la circulation des bus dans une grande ville, la prsence de voies
sens unique va multiplier les trajets orients et donc doubler potentiellement le
nombre des combinaisons.
160
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Script SQL
ALTER TABLE histo_annee
DROP CONSTRAINT fk_histo_employe;
DROP TABLE employe CASCADE CONSTRAINTS;
DROP TABLE histo_annee CASCADE CONSTRAINTS;
CREATE TABLE employe (
id_emp
INTEGER NOT NULL,
nom_emp
VARCHAR2(50),
date_embauche DATE,
CONSTRAINT pk_employe PRIMARY KEY (id_emp));
CREATE TABLE histo_annee
id_emp
annee
indice
salaire
CONSTRAINT
ditions Eyrolles
161
15/02/12 07:05
Script SQL
ALTER TABLE detail
DROP CONSTRAINT fk_configure_avion;
ALTER TABLE DETAIL
DROP CONSTRAINT fk_configure_options;
DROP TABLE avion CASCADE CONSTRAINTS;
DROP TABLE detail CASCADE CONSTRAINTS;
DROP TABLE options CASCADE CONSTRAINTS;
CREATE TABLE avion (
immat
VARCHAR2(6) NOT NULL,
type_av
VARCHAR2(40),
nb_h_vol
INTEGER,
CONSTRAINT pk_avion PRIMARY KEY (immat));
162
Vrifiez que la cl primaire de la table dassociation est compose de deux cls trangres.
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Solution universelle
Le tableau suivant dcrit la transformation de deux associations binaires entre les relations
Projet et Collaborateur. Lassociation affecter est de type de un--plusieurs lassociation diriger est de type de un--un.
Chaque association doit se traduire par une table dassociation munie de deux cls trangres.
Les contraintes UNIQUE et NOT NULL sur chacune de ces cls permettront dimplmenter telle
ou telle multiplicit.
Tableau 3-7: Transformation de deux associations binaires par la solution universelle
Schma relationnel
Script SQL
ALTER TABLE affecter
DROP CONSTRAINT fk_affecter_collabor;
ALTER TABLE affecter
DROP CONSTRAINT fk_affecter_projet;
ALTER TABLE diriger
DROP CONSTRAINT fk_diriger_collabor;
ALTER TABLE diriger
DROP CONSTRAINT fk_diriger_projet;
DROP TABLE collaborateur CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;
DROP TABLE affecter CASCADE CONSTRAINTS;
DROP TABLE diriger CASCADE CONSTRAINTS;
ditions Eyrolles
163
15/02/12 07:05
La contrainte NOT NULL sur la colonne id_coll dans la table diriger signifie que tout
projet est dirig par un collaborateur (multiplicit minimale 1). La contrainte UNIQUE sur
cette mme colonne implmente le fait quun collaborateur ne peut diriger plusieurs projets
(multiplicit maximale1).
Labsence de contrainte NOT NULL sur la colonne num_proj dans la table affecter signifie
quun collaborateur ne peut participer aucun projet (multiplicit minimale0). La contrainte
UNIQUE (du fait de la cl primaire) sur la colonne id_coll de cette mme table implmente le
fait quun collaborateur ne peut participer plusieurs projets (multiplicit maximale1).
Cette solution prsente lavantage dtre la plus volutive si les multiplicits viennent
changer. En effet, nul besoin de modifier la structure dune table, seules des contraintes seront
activer ou dsactiver.
Mise en pratique
Les exercices3.1 La cration de tables (carte dembarquement) et 3.2 La cration de tables
(horaires de bus) vous proposent de dduire le script SQL partir de diffrents modles
conceptuels.
164
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Script SQL
ALTER TABLE administratif
DROP CONSTRAINT fk_admin_personne;
ALTER TABLE commercial
DROP CONSTRAINT fk_commerci_personne;
ALTER TABLE manager
DROP CONSTRAINT fk_manager_personne;
DROP TABLE administratif CASCADE CONSTRAINTS;
DROP TABLE commercial CASCADE CONSTRAINTS;
DROP TABLE manager CASCADE CONSTRAINTS;
DROP TABLE personnel CASCADE CONSTRAINTS;
ditions Eyrolles
165
15/02/12 07:05
projet
VARCHAR2(254),
CONSTRAINT pk_manager
PRIMARY KEY (idpers));
CREATE TABLE PERSONNEL (
idpers INTEGER NOT NULL,
nom
VARCHAR2(40),
indice INTEGER,
CONSTRAINT pk_personnel
PRIMARY KEY (idpers));
ALTER TABLE administratif
ADD CONSTRAINT fk_admin_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);
ALTER TABLE commercial
ADD CONSTRAINT fk_commerci_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);
ALTER TABLE manager
ADD CONSTRAINT fk_manager_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);
Contrainte dexclusivit
La contrainte dexclusivit (cas par dfaut, le diagramme de classes UML ne comporte aucune
indication) exprime les rgles mtier suivantes.
Il nest pas possible quun personnel appartienne simultanment plusieurs classifications
(commercial, manager ou administratif).
Il est possible quun personnel ne soit associ aucune classification (commercial, manager
et administratif).
La premire rgle de gestion simplmente laide de trois dclencheurs: un sur chaque table
spcifique (commercial, manager et administratif). Il sagit dinterdire quun manager
de numro100 soit aussi galement rfrenc dans une autre table spcifique avec ce mme
numro (commercial et administratif). Le raisonnement devra sappliquer lidentique
pour les tables des commerciaux et celles des administratifs.
Le premier dclencheur est dcrit dans le tableau suivant avec une syntaxe Oracle. Si vous
aviez le programmer avec SQL Server, vous devriez utiliser les pseudo-tables Inserted et
Updated.
166
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Jeu dessai
Si vous ne souhaitez pas travailler avec des dclencheurs, vous devrez coder ces rgles
mtier dans vos procdures catalogues.
ditions Eyrolles
167
15/02/12 07:05
Absence de contrainte
Labsence de contrainte (notation {incomplete, overlapping} avec UML) permet les
scnarios suivants.
Il est possible quun personnel appartienne une ou plusieurs classifications (commercial,
manager ou administratif).
Il est possible quun personnel ne soit associ aucune classification (ni commercial, ni
manager, ni administratif).
Le premier scnario simplmente naturellement du fait de lexistence de la cl trangre dans
chaque table spcifique. En effet, il est autoris que le personnel numro100 soit aussi galement rfrenc dans nimporte quelle table spcifique avec ce mme numro.
La deuxime rgle de gestion est programme aussi du fait de lexistence de la cl trangre de
la mme manire quau cas prcdent.
Hritage en push-down
Suivant le principe de la dcomposition descendante, seules les tables spcifiques cres et
toutes les colonnes et la cl primaire de la table gnrique se propagent.
Tableau 3-10: Transformation de lhritage en push-down
Schma relationnel
Script SQL
DROP TABLE administratif CASCADE CONSTRAINTS;
DROP TABLE commercial CASCADE CONSTRAINTS;
DROP TABLE manager CASCADE CONSTRAINTS;
CREATE TABLE administratif (
idpers
INTEGER NOT NULL,
syndicat
VARCHAR2(254),
nbheuressupp INTEGER,
nom
VARCHAR2(40),
indice
INTEGER,
CONSTRAINT pk_administratif
PRIMARY KEY (idpers));
168
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Contrainte de partition
La contrainte de partition (notation {complete, disjoint} avec UML) interdit les scnarios suivants.
Un personnel appartient simultanment plusieurs classifications (commercial, manager
ou administratif).
Un personnel nest associ aucune classification (ni commercial, ni manager, ni administratif).
La premire rgle de gestion simplmente laide de trois dclencheurs: un sur chaque table
spcifique. Il sagit dinterdire quun manager de numro100 soit galement rfrenc dans
une autre table spcifique avec ce mme numro (commercial et administratif). Le
raisonnement devra sappliquer lidentique pour les tables des commerciaux et celle des
administratifs. Le code du dclencheur est dcrit au paragraphe prcdent.
La deuxime rgle simplmente naturellement du fait de linexistence dune table gnrique.
Ici seuls managers, commerciaux ou administratifs peuvent tre stocks.
Hritage en push-up
Suivant le principe de la dcomposition ascendante, seule la table gnrique est cre et rassemble toutes les colonnes des tables gnriques.
ditions Eyrolles
169
15/02/12 07:05
Script SQL
DROP TABLE personnel CASCADE CONSTRAINTS;
Contrainte dexclusivit
La contrainte dexclusivit interdit le fait quun personnel appartienne plusieurs classifications (commercial, manager ou administratif) tout en permettant un personnel de ntre
rattach aucune classification.
La premire rgle de gestion simplmente laide dune contrainte de vrification (CHECK).
Il sagit dinterdire que toutes les colonnes provenant des tables spcifiques disposent toutes
dune valeur. Si les colonnes relatives un manager sont renseignes, alors les autres (relatives
aux commerciaux et aux administratifs) doivent tre nulles. Le mme raisonnement devra
sappliquer pour les colonnes des commerciaux et des administratifs.
Le tableau suivant prsente cette contrainte ainsi que quelques insertions valides et une invalide (personnel la fois commercial et administratif).
Tableau 3-12 : Contrainte dexclusivit pour lhritage push-up
Contrainte dexclusivit
ALTER TABLE personnel
ADD CONSTRAINT ck_exclusivite
CHECK
((projet IS NOT NULL AND nbhmois IS NOT NULL
AND prime IS NULL
AND syndicat IS NULL
AND nbheuressupp IS NULL)
170
Jeu dessai
-- commercial
INSERT INTO personnel VALUES
(100,'F. Brouard',500,47800,NULL,NULL,NULL,NULL);
1 row created.
-- manager
INSERT INTO personnel VALUES
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
La deuxime rgle de gestion simplmente dans cette mme contrainte en permettant que
toutes les colonnes spcifiques soient nulles simultanment.
Contrainte de partition
La contrainte de partition simplmente en interdisant que toutes les colonnes spcifiques
soient nulles simultanment. Il suffit denlever la dernire partie de la condition compose. Le
tableau suivant dcrit lcriture de cette contrainte avec deux insertions invalides: la premire
du fait dun personnel non qualifi, la seconde cause dune double qualification.
Tableau 3-13: Contrainte de partition pour lhritage push-up
Contrainte de partition
Jeu dessai
ditions Eyrolles
171
15/02/12 07:05
OR
OR
(projet IS NULL AND nbhmois IS NULL
AND prime IS NULL
AND syndicat IS NOT NULL
AND nbheuressupp IS NOT NULL));
Contrainte de totalit
La contrainte de totalit permet des multiqualifications mais interdit les personnels non qualifis. Le tableau suivant dcrit lcriture de cette contrainte avec deux insertions invalides: la
premire du fait dun personnel non qualifi, la seconde cause dune double qualification. La
contrainte doit signifier que les colonnes spcifiques ne doivent pas tre nulles simultanment
(ce qui ninterdit pas des nullits partielles).
Tableau 3-14: Contrainte de totalit pour lhritage push-up
Contrainte de totalit
Jeu dessai
Absence de contrainte
Si lhritage ne prsente pas de restriction, aucune contrainte SQL nest mettre en uvre.
172
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Pour exprimer la mme chose sous forme de dclencheurs, il faut beaucoup plus de code.
Quant la version avec UDF, en voici un exemple, toujours sous MS SQL Server:
CREATE FUNCTION f_check_exclure_personne (@prs_id INT)
RETURNS BIT AS
BEGIN
RETURN CASE WHEN EXISTS(SELECT
FROM
t_personne_physique AS pp
INNER JOIN t_personne_morale AS pm
ON pp.prs_id = pm.prs_id
WHERE pp.prs_id = @prs_id)
THEN 1
ELSE 0
END;
END;
ALTER TABLE t_personne_physique
ADD CONSTRAINT ck_exclure_personne_pp
CHECK(f_check_exclure_personne (prs_id) = 0);
ALTER TABLE t_personne_morale
ADD CONSTRAINT ck_exclure_personne_pm
CHECK(f_check_exclure_personne (prs_id) = 0);
ditions Eyrolles
173
15/02/12 07:05
Contraintes prdfinies
cLe chapitre1 a prsent deux contraintes prdfinies de UML: subsets (qui exprime une
contrainte dinclusion) et xor (qui indique un ou exclusif).
Contrainte dinclusion
Dans lexemple suivant, la contrainte subsets exprime le fait quune inscription une formation par un stagiaire (relation effectue) ne sera possible que si ce mme stagiaire a choisi au
pralable cette formation (relation vux). Le script SQL dcrit ninclut pas la contrainte qui
nest pas gnre automatiquement, mais quil faudra coder manuellement.
Tableau 3-15: Contrainte dinclusion
Schma relationnel
Script SQL
ALTER TABLE voeux
DROP CONSTRAINT fk_voeux_stagiair;
DROP TABLE formation CASCADE
CONSTRAINTS;
DROP TABLE stagiaire CASCADE
CONSTRAINTS;
DROP TABLE effectue CASCADE
CONSTRAINTS;
DROP TABLE voeux CASCADE CONSTRAINTS;
174
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Le codage de cette contrainte se rsume la dclaration dune nouvelle cl trangre (compose de deux colonnes) qui aura pour but de vrifier si tout couple (stagiaire, formation)
dcrivant une inscription existe au pralable dans la table de rfrence des vux.
Tableau 3-16: Codage dune contrainte dinclusion
Contrainte dinclusion
ALTER TABLE effectue
ADD CONSTRAINT fk_inclusion
FOREIGN KEY (id_stag,id_form)
REFERENCES voeux (id_stag,id_form);
Jeu dessai
INSERT INTO formation VALUES (1,'SQL',4,1750);
INSERT INTO formation VALUES (2,'C++',3,1050);
INSERT INTO formation VALUES (3,'Cobol',5,1900);
INSERT INTO stagiaire VALUES
(100,'Fred','Brouard','sqlspot@gmail.com');
INSERT INTO stagiaire VALUES
(101,'Rudi','Bruchez','rudi@gmail.com');
INSERT INTO voeux VALUES (100,2);
INSERT INTO voeux VALUES (101,1);
INSERT INTO voeux VALUES (101,2);
SQL> INSERT INTO effectue VALUES (100,2);
1 row created.
SQL> INSERT INTO effectue VALUES (100,1);
*
ERROR at line 1:
ORA-02291: integrity constraint (SOUTOU.FK_
INCLUSION) violated - parent key not found
ditions Eyrolles
175
15/02/12 07:05
Contrainte du ou exclusif
Analogue lhritage par exclusion, la contrainte xor suivante prcise quun consultant est
soit associ un projet, soit une formation, mais pas aux deux simultanment. Loutil ne
gnre pas cette contrainte dans le script SQL.
Tableau 3-17: Contrainte xor
Schma relationnel
Script SQL
ALTER TABLE consultant
DROP CONSTRAINT fk_consul_forma;
ALTER TABLE consultant
DROP CONSTRAINT fk_consult_projet;
DROP TABLE consultant
CASCADE CONSTRAINTS;
DROP TABLE formation
CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;
176
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
La condition xor se programme laide dune contrainte de vrification qui vrifiera que tout
consultant soit associ une formation ou un projet, mais pas aux deux ou aucun.
Tableau 3-18: Codage dune contrainte xor
Contrainte ou exclusif
Jeu dessai
Contraintes personnalises
Le chapitre1 a prsent quelques possibilits du langage OCL afin de spcifier des contraintes
laide dinvariants de classes, de prconditions et postconditions lexcution doprations.
Lutilisation de rles au niveau des liaisons entre classes du modle conceptuel est bien souvent
ncessaire. Une expression OCL ne dcrit pas limplmentation dune mthode, mais sapparente un pseudo-algorithme.
Lexemple suivant dcrit la contrainte que tout employ est soit chef, soit sous la responsabilit
dun chef qui doit tre employ dans la mme entreprise que lui. Loutil ne gnre pas cette
contrainte dans le script SQL. Il est prfrable dutiliser la solution universelle pour traduire
lassociation rflexive de faon pouvoir programmer un dclencheur dans de bonnes conditions (viter lerreur des tables mutantes, avec Oracle: ORA-04091: table name is
mutating, trigger/function may not see it).
ditions Eyrolles
177
15/02/12 07:05
Script SQL
CREATE TABLE employe (
id_emp
INTEGER NOT NULL,
id_ent
INTEGER,
prenom_emp VARCHAR2(40),
nom_emp
VARCHAR2(40),
mail_emp
VARCHAR2(60),
salaire
FLOAT,
CONSTRAINT pk_employe
PRIMARY KEY (id_emp));
CREATE TABLE entreprise (
id_ent
INTEGER NOT NULL,
nom_entreprise VARCHAR2(50),
budget
FLOAT,
CONSTRAINT pk_entreprise
PRIMARY KEY (id_ent));
CREATE TABLE chef_de (
id_emp
INTEGER NOT NULL,
id_chef
INTEGER,
CONSTRAINT pk_chef_de
PRIMARY KEY (id_emp));
178
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Jeu dessai
Je nai jamais rien compris cette histoire de tables mutantes, limitation qui, ma
connaissance, nexiste que chez Oracle. La norme SQL accepte quun dclencheur puisse
accder la table cible dudit dclencheur. SQL Server la mis en uvre:
CREATE TRIGGER e_personne ON t_personne FOR UPDATE
AS
UPDATE t_personne SET nom = UPPER(nom)
WHERE prs_id IN (SELECT prs_id FROM inserted) -- table
comportant les donnes modifies (quivalent du NEW)
GO
ditions Eyrolles
179
15/02/12 07:05
Mise en pratique
Lexercice3.3 La programmation de contraintes vous propose de programmer quelques
contraintes sur diffrentes tables.
Dnormalisation
Avant de penser la dnormalisation, il faut que vous soyez assur que vos tables sont normalises au pralable La majorit des problmes de performances des applications en
production survient la monte en charge au niveau du volume des donnes. En dautres
termes, manipuler des tables mal conues devient seulement pnalisant quand elles deviennent
volumineuses et ne tiennent plus en RAM. Quand les experts tudient le code et se rendent
compte que les tables ne sont pas normalises, il est souvent dj un peu trop tard. Partez sur
de bonnes bases (cest le cas de le dire): normalisez au maximum en amont!
Si vos tables sont normalises et vos cls trangres indexes, le plus gros du travail est fait.
Vous disposez dautres outils que sont le partitionnement ou les vues matrialises. Si malgr
tout a, vos temps de rponse sont inacceptables, vous pouvez essayer de dnormaliser certaines
tables.
Vous pouvez dnormaliser une table en ajoutant des colonnes qui permettront de stocker
soit des colonnes calcules (qui viteront des calculs), soit des donnes redondantes (mais
plus accessibles) ou des cls primaires (de taille plus rduite: une squence par exemple) ou
trangres (qui diminueront les jointures). Dans bien des cas, vous devrez programmer des
dclencheurs afin de maintenir lintgrit dans le temps de votre nouvelle base. Si vous ntes
pas un adepte des dclencheurs, ce traitement devra tre cod dans vos procdures.
La dnormalisation sera profitable si votre application effectue beaucoup de lectures et peu de
mises jour. Si beaucoup de mises jour sont ralises, la dnormalisation dgradera sensiblement certaines performances. En revanche, si votre application effectue peu de lectures,
dnormaliser ne sert rien (a fortiori lorsquil existe beaucoup de mises jour).
Colonnes calcules
Dans lexemple suivant, lajout des colonnes totaljp (nombre de jours facturer) et totalj
(nombre de jours de formation dans lanne) vitera tout calcul impliquant des jointures avec
la table Inscriptions.
180
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Duplication de colonnes
Dans lexemple suivant, lajout des colonnes identite2 (nom du client) et ste2 (socit du
client) vitera toute jointure avec la table Client pour lister les dtails des inscriptions. Ici, on
rgresse de la troisime la premire forme normale.
ditions Eyrolles
181
15/02/12 07:05
Les inconvnients de ce mcanisme sont dune part lespace utilis, dautre part le risque dincohrence si le nom dun client vient changer (ou le nom de sa socit). La solution consiste
utiliser un dclencheur sur la table Client ou une vue matrialise (contenant entre autres
ces colonnes additionnelles).
On retrouve les mmes inconvnients que prcdemment (espace perdu et redondances). Pour
y remdier, il faudra programmer un dclencheur ou passer par une vue matrialise.
Exemple de stratgie
Dnormaliser est une action forte sur la base, car la structure des tables sera altre, des redondances vont apparatre et des dclencheurs seront mettre en uvre. En consquence, cette
technique doit tre la dernire rponse un problme de temps de rponse en exploitation et
en aucun cas justifie par lintrt du programmeur.
182
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Dans une base de donnes relationnelle, donc fortement transactionnelle, rien ne justifie
a priori la dnormalisation. Il faut avant tout normaliser au maximum. La dnormalisation tant un acte fort, elle ne peut que rsulter dune dcision risque prise en pleine
connaissance de cause laide des critres suivants.
Le gain de dnormalisation doit tre prouv: il faut donc mettre lpreuve la base
avec un volume de donnes significatif et une concurrence quivalente celle de lexploitation. Cela ne peut se faire gnralement quen cours dexploitation
Le gain doit tre trs important. Un gain minime sera gnralement perdant long
terme du fait du surcrot de volume gnr par la redondance et laccroissement des
temps de transaction (plus de donnes mettre jour, cest toujours plus long).
Le gain doit sanalyser globalement. Lerreur la plus courante est de ne mesurer que
le gain apport la table qui est dnormalise. Or, la dnormalisation entrane systmatiquement des effets de bord, quil est souvent difficile de mesurer de prime abord.
Par exemple, laccroissement du volume des donnes comme lallongement du temps
de mise jour induit par la dnormalisation, a des rpercussions sur les transactions
dont la dure augmente. De ce fait, les verrous durent plus longtemps et les risques de
blocage comme dinterblocage sont accrus.
Plus une table est petite (en nombre de colonnes), plus elle est facile indexer. Dailleurs,
le respect absolu de la normalisation des relations (pas de valeurs NULL) conduit une
base dont les tables sont formes dune cl et dau plus un attribut non cl.
Enfin, avant de dnormaliser, il existe dautres techniques telles que: lhypernormalisation (par exemple ajouter une table des prnoms au lieu de mettre la colonne prnom dans
la table personne) ou le partitionnement.
Quelle que soit la solution dimplmentation que vous choisirez: normaliser au maximum,
dnormaliser, indexer telle ou telle colonne, programmer une contrainte dans une procdure
plutt que dans un dclencheur, etc., vous rencontrerez des avantages, mais aussi des inconvnients. Vous devrez toujours peser le pour et le contre de toute implmentation ou optimisation
pour dcider finalement le plus souvent aprs des tests grandeur nature.
ditions Eyrolles
183
15/02/12 07:05
ide reue, composer sa base avec plus de tables ayant peu de colonnes rendra meilleures
les performances de vos requtes.
2. Une cl primaire artificielle est prfrable une cl mtier (smantique).
En choisissant le numro dimmatriculation dune voiture, qui vous dit qu la cration
de lenregistrement, linformation sera connue ou que cette valeur nvoluera pas dans
le temps (entranant des effets de bord trs coteux). La cl mtier est en gnral plus
volumineuse quune simple colonne NUMBER . Lidal, cest de dfinir une cl primaire
artificielle et de disposer aussi dune cl mtier (contrainte UNIQUE).
3. Ne codez jamais ( part dans vos tests ou dmonstrations), une requte du type SELECT
* , cela pour les trois raisons principales suivantes:
Moins il y a de donnes qui circulent sur le rseau, plus les temps de rponse sont courts.
Il est donc prfrable dindiquer dans la liste des colonnes uniquement celles qui sont
ncessaires.
Allgez la charge du transformateur de requtes en lui vitant de rechercher les informations dans les tables systme pour dduire la liste de toutes les colonnes et les privilges
associs.
Allez-vous interdire implicitement que vos tables voluent en termes de structure? Ajouter
ou supprimer une colonne risque de rendre le code inoprant tout endroit o cette
instruction se trouvera.
4. vitez si possible dutiliser des curseurs dans vos transactions.
Les curseurs imposent une programmation itrative (o les donnes sont traites ligne
par ligne comme avec un simple fichier) et non ensembliste. Un SGBD est optimis pour
traiter de manire ensembliste les donnes avec SQL. Depuis la version SQL:1999, la
rcursivit est prise en charge et SQL devient un langage complet (au sens de la machine
de Turing) o tout traitement peut tre thoriquement programm laide de requtes.
5. courtez la dure de vos transactions et programmez ct serveur (procdures cata
logues).
Une transaction ncessite daccder souvent exclusivement aux donnes et des verrous
sont mis en uvre automatiquement. Les verrous induisent des temps dattente pour les
utilisateurs concurrents. Si votre code nest pas optimis ou sil sexcute du ct du client,
la contention devient invitable.
6. Utilisez le SQL dynamique pour crire des requtes simples.
Le fait dcrire une instruction avec du SQL dynamique vite au transformateur de
requtes un certain nombre de tches et permet la rutilisation du plan dexcution.
7. Paramtrez la bonne collation.
Une collation sert grer la manire dont les chanes de caractres, constituant les
donnes de la base, vont se comporter face aux oprateurs de comparaisons et lordonnancement des donnes (tri). La gestion des majuscules/minuscules, accents, ligatures
(par exemple, cur), etc. doit tre prvue.
184
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
8. Nutilisez jamais une requte du type SELECT MAX(...)+1 pour gnrer une cl
primaire.
Ce mode de calcul est proscrire, car il peut conduire un jour ou lautre au mieux un
tlescopage de cl, au pire un blocage total. En effet, tant que la nouvelle ligne pourvue
de cette nouvelle cl nest pas encore insre dans la base, toute autre transaction peut
effectuer le calcul gnrant la mme valeur. Afin de rendre cohrent ce mcanisme, il
faudrait programmer une transaction intgrant le calcul du max+1 et lordre dinsertion
avec la nouvelle cl (ce qui nest pas aussi simple quil y parat).
Prfrez le mcanisme dauto-incrment de votre SGBD qui pour Oracle est la squence.
SEQUENCE et IDENTITY ont t normaliss (SQL:2008) SQL Server et IBM DB2 prennent les deux en charge. PostGreSQL propose le SERIAL (quivalent du IDENTITY en
plus de la squence).
9. Utilisez avec parcimonie les tables temporaires.
Chaque objet temporaire cr au sein dun SGBDR dclenche une criture coteuse au
journal de transactions et dans le dictionnaire des donnes. Si de nombreuses transactions sont effectues en parallle et quelles gnrent de nombreux objets temporaires, des
points de contention peuvent apparatre. Prfrez lutilisation de requtes contenant des
fonctions table ou des CTE.
10. Utilisez des index, mais bon escient.
Indexez vos cls trangres et choisissez bien le mode dindexage (B-tree, bitmap ou IOT).
Si une table IOT convient une squence, elle peut mener des performances dsastreuses pour une cl smantique alphanumrique de taille variable.
Peu importe le nombre dindex dune table, si chaque index apporte un gain considrable.
Avec un gain de 100 voire 1000 (facilement obtenu sur des tables ayant un grand nombre
de lignes) cest autant de temps de gagner pour les mises jour, dont on oublie trop souvent quelles ncessitent pour la plupart une lecture positionelle qui sera dautant plus
rapide quil existe un index adquat!
Mise en pratique
Lexercice3.4 La dnormalisation vous invite dnormaliser un schma, mais quelle table
sera impacte?
Dans lexercice3.5 Ma psy oublie tout, vous devez aider ma psy qui oublie tout.
Lexercice3.6 Le planning dune cole de pilotage est consacr la gestion dun planning
dune cole de pilotage.
ditions Eyrolles
185
15/02/12 07:05
Exercices
3.1 La cration de tables (carte dembarquement)
crire le script SQL (en liminant les tables inutiles) permettant de crer les tables correspondant au modle conceptuel suivant.
Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.
186
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Dsignation
Type de
donnes
code_OACI
4lettres
code_fidelite
Entier
1position
heure_dep, heure_emb,
heure_arr
Heures et
minutes:
2chiffres
heure_dep_reel,
heure_arr_reelle,
min_dep_reel,
min_arr_reelle
Heures et
minutes:
2chiffres
jour_mois
6caractres
jour_mois_planning
3positions
lib_fidelite
20caractres
nom_aeroport
Nom de laroport.
50caractres
num_carte
Numro du client.
Entier
12positions
num_porte
3caractres
num_siege
3caractres
num_vol
8caractres
(par exemple,
AF-6145)
prenom_client,
nom_client
Identit du client.
40caractres
pour chaque
ditions Eyrolles
187
15/02/12 07:05
Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.
Tableau3.22 : Dictionnaire des donnes
Colonne
Dsignation
Type de donnes
id_jour, id_ligne
et id_sta
Numriques de 1
3positions
lib_jour, nom_ligne
et nom_station
Caractres de taille
variable
heure, minute
Numriques de
2positions
ordre, position
Numriques de
2positions
188
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Horaires de bus
Programmez les contraintes suivantes.
Pas plus de trois libells Lundi vendredi, Samedi et Dimanche et jours fris).
Chaque ligne nest pas forcment planifie tous les jours.
Il ny a pas plus de 15stations sur un mme trajet.
Les horaires sont afficher sous la forme hh.min (avec hh de 6 22 et min de 0 59).
Il ny a pas plus de 8colonnes dhoraires afficher.
ditions Eyrolles
189
15/02/12 07:05
3.4 La dnormalisation
Carte dembarquement
Dnormalisez les tables du schma de la carte dembarquement pour, dune part, connatre le
nombre de vols effectus par les passagers et, dautre part, optimiser laffichage suivant. Les
donnes additionnelles prendre en compte sont le prix de chaque vol (seul le montant total
est affich), les noms de chaque compagnie et des aroports, et un libell qui indique quil ne
reste quun faible nombre de places disponibles.
190
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Horaires de bus
Rduisez le plus possible le schma relationnel normalis des horaires de bus quitte dnormaliser certaines tables ou abandonner de la cohrence.
Rendez-vous
Pour sa fte, ma psy a reu un ordinateur dun patient passionn. Connaisant ma nvrose
du rangement et de lorganisation des donnes, elle ma demand de laider mettre un peu
dordre dans ses fiches patients. Voici les donnes conserver.
Qui est venu la voir et quelle heure. La classification qui lintresse est la suivante :
enfant, ado, femme, homme ou couple. Notez que les sances dun couple peuvent se poursuivre individuellement et quun patient ado peut revenir quelques annes plus tard en tant
quadulte.
Par quel moyen (autre patient, docteur, bouche oreille, Pages Jaunes, Internet, etc.) le
patient la-t-elle connue (elle est curieuse!).
ditions Eyrolles
191
15/02/12 07:05
Confrres et livres
Pour dbrieffer certaines sances lourdes, pour rigoler ou, parfois, pour pleurer, ma psy voit
des psys. Ses confrres sont de professions diverses (psychologue, psychotrapeute, psychiatre,
psychanaliste, sophrologue, marabout, etc.). Certains ont deux voire trois qualifications.
Les rendez-vous avec ses confrres doivent tre modliss. Elle dsire noter les circonstances
de la premire rencontre avec chacun des spcialistes ctoys, pour raisons professionnelles
ou prives.
Elle envoie galement certains de ses patients en consultations ponctuelles chez ses confrres
qui lui transmettent par la suite un mmo rsumant la sance.
De plus, elle prte galement des livres ses patients, sans retour parfois. Elle souhaite donc
endiguer ce phnomne. Par contre, elle passe sous silence le fait que certains patients lui prtent
des livres quelle dispose ensuite dans sa bibliothque
Ma psy ne fait pas un boulot facile alors ne ratez pas sa base de donnes!
192
ditions Eyrolles
15/02/12 07:05
Chapitre 3
Le niveau physique
Flotte
La flotte de lcole est compose de diffrents aronefs. Les types se caractrisent le plus
souvent par un libell avec ou sans code (par exemple, Aquila-AT01, Robin DR400-120, CESSNA-172N, DA40, SR20-G3, TB20, etc). Limmatriculation de lavion, sa puissance et son
prix horaire doivent aussi tre sauvegards. Il est possible que lcole possde plusieurs aronefs de mme type. Pour chaque avion 2indicateurs sont importants mettre jour: le nombre
dheures de vol de la cellule et le nombre dheures de vol du moteur (qui est chang plusieurs
fois au cours de la vie de lappareil).
Chaque aronef doit tre rvis priodiquement en fonction du nombre dheures dutilisation
(50h, 100h, 500h, 1000h ou 2000h). Les dates de ces visites de maintenance doivent tre
mmorises de mme quun ventuel commentaire. Il en va de mme pour le dtail des pices
achetes (prix TTC) lors de lentretien, ainsi que le nombre total dheures de travail ncessaires.
ditions Eyrolles
193
15/02/12 07:05
Acteurs
lves pilotes et instructeurs voluent dans cette structure. Les lves sinscrivent une date
qui doit tre mmorise. Pour tous, les nom, prnom et adresse doivent tre connus. Tous disposent dun compte sur lequel ils peuvent dposer une somme dargent. Les sommes prleves
correspondent au montant du vol effectu par un lve pilote ou par un instructeur sil rserve
lavion pour lui.
Les instructeurs, qui sont identifis sur le planning par un trigramme inspir de leur nom,
bnficient dune rduction sur le cot horaire (diffrente en fonction de chaque type davion).
Notez quun instructeur nest pas forcment qualifi sur tous les types dappareils de lcole.
Chaque sance de vol (soit en instruction, soit en solo lorsque llve pilote vole seul) effectue
est dcompte en diximes dheures (par exemple, 1.5 signifie 1h30 de vol) et doit tre mmorise avec la date du vol. Le nombre total dheures de vol pour un lve ou pour un instructeur
doit tre facilement accessible, que ce soit pour les vols dinstruction (en double commande)
ou en solo.
lves et pilotes doivent passer annuellement ou semestriellement une visite mdicale. Sa date
et son rsultat (apte ou inapte) doivent tre consigns, ainsi quun ventuel commentaire.
Rendez-vous
Tous peuvent effectuer des rservations. Il suffit de sinscrire sur le planning en slectionnant
laronef, la plage horaire et, ventuellement, linstructeur dsign par ses initales. Il est galement possible de noter un commentaire et le nombre de places disponibles. Notez que certains
avions peuvent tre indisponibles, durant une priode plus ou moins longue, pour cause de
maintenance.
194
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Le niveau externe prsent dans ce chapitre concerne la dfinition et la manipulation des
vues (views). Les vues agissent comme des fentres sur la base de donnes. Une vue est
construite laide dune requte qui retourne un rsultat tabulaire. Cest pour cette raison
quun vue apparat un utilisateur sous la forme dune table. En ralit, une vue ne contient
pas de donnes (except les vues matrialises), elle ne fait que filtrer les donnes issues de
tables.
Pour tout dveloppement de qualit, les vues sont indispensables pour viter tout accs direct
aux tables. En pratique, bon nombre dapplications se passent de ce concept, en manipulant
directement les tables.
En plus dun contrle fin laccs aux donnes (confidentialit, scurit et privilges), une vue
permet de masquer la complexit ou de dnormaliser des schmas relationnels, dimplmenter
des contraintes de valeur (ou dintgrit) et de simplifier la formulation de requtes complexes.
La figure suivante illustre trois accs une base de donnes. Chaque utilisateur opre sur un
schma externe compos des vues accessibles pour son profil. Les donnes peuvent provenir
de diffrentes tables et sont toujours stockes dans des tables (sauf pour le cas des vues matrialises qui combinent les concepts de table et de vue).
ditions Eyrolles
195
15/02/12 07:05
La majeure partie des oprations ralises sur une vue sont des extractions, mais dans certains cas, une vue peut tre modifiable (les mises jour impacteront alors la table source). Par
ailleurs, nous verrons quun type de dclencheur (instead of trigger) permet de programmer
des mises jour de vues multitables.
Le niveau externe concerne aussi les routines SQL permettant de prsenter ou de mettre
jour les donnes de manire indirecte (procdures stockes, dclencheurs et UDF ou
User Defined Function).
Somme toute, une vue nest quun nom de table donn une requte dextraction de
donnes (SELECT) et on constatera daprs la norme SQL que les vues sont considres
comme des tables dun type particulier VIEW, les tables conventionnelles tant considres en tant que BASE TABLE . Notons ds prsent quil est possible, dans certains cas,
de mettre jour par INSERT, UPDATE , DELETE ou MERGE , les donnes des tables travers
les vues.
Une catgorie particulire de routines, les fonctions table, permet de mettre en uvre des
vues avances. Le fait quune fonction table admette des paramtres en entre et retourne
un jeu de donnes, rend possible la ralisation de vues paramtrables.
Globalement, les procdures stockes permettent de raliser des traitements complexes
de mise jour en masquant la complexit lutilisateur. Une procdure stocke peut aussi
renvoyer un ou plusieurs jeux de donnes.
196
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Enfin, des dclencheurs dun type particulier, les trigger INSTEAD OF, permettent de
raliser des traitements complexes, la manire des procdures, lorsque survient une
opration de mise jour (INSERT, UPDATE ou DELETE).
Tous ces lments constituent le modle externe de donnes (MED).
Pour tout dveloppement de qualit, les objets du MED sont indispensables pour viter
tout accs direct aux tables. En pratique, bon nombre dapplications se passent de ce
concept en manipulant directement les tables. Et cest une erreur! En effet, la couche dinterface ou dabstraction apporte par le modle externe de donnes rend indpendants la
structure de la base et laccs aux donnes. En gros, une modification de la structure des
tables de la base naffecte pas la couche externe et si lapplication a t dveloppe sur
cette couche, il nest gnralement pas ncessaire de la modifier pour quelle continue de
fonctionner, sauf si les modifications de structure apportent de nouvelles fonctionnalits
ou portent atteinte aux donnes stockes dans la base.
En combinant vues, fonctions table, dclencheurs INSTEAD OF et procdures stockes,
on peut concevoir des structures de donnes proches de celles des objets applicatifs et y
greffer les mthodes CRUD de manipulation desdits objets (INSERT, SELECT, UPDATE ,
DELETE). En fait, le modle externe de donnes simule de manire performante ce quun
ORM (Object Relational Mapping) fait de manire contre-performante!
Ce chapitre dcrit les diffrents types de vues qui existent:
les vues relationnelles issues de tables SQL2;
les vues matrialises issues de tables SQL2;
les vues objet issues de tables SQL2 ou SQL3.
La syntaxe SQL utilise dans ce chapitre est celle dOracle; elle est relativement proche du
standard en comparaison avec dautres SGBD (except concernant les vues objet).
ditions Eyrolles
197
15/02/12 07:05
alias dsigne le nom de chaque colonne de la vue. Si lalias nest pas prsent, la colonne
prend le nom de lexpression renvoye par la requte de dfinition.
requte_SELECT extrait des donnes en provenance dune ou de plusieurs tables, vues
ou vues matrialises. Tous les lments de la clause SELECT doivent comporter un nom
unique.
WITH READ ONLY dclare la vue non modifiable par INSERT, UPDATE ou DELETE.
WITH CHECK OPTION garantit que toute mise jour de la vue par INSERT ou UPDATE
Classification
On distingue les vues simples des vues complexes en fonction de la nature de la requte de
dfinition. Le tableau suivant rsume cette classification.
Tableau 4-1: Classification des vues
198
Requte de dfinition
Vue simple
Vue complexe
Nombre de tables
1 (monotable)
1 ou plusieurs (multitable)
Non
Oui
Regroupement
Non
Oui
Oui
Pas toujours
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Une vue monotable est aussi considre comme tant complexe si la requte comporte le
mot-cl DISTINCT, les clauses HAVING , GROUP BY ou WINDOW, une fonction de fentrage,
ou des colonnes dfinies par des expressions calcules ou constantes.
Avec Oracle, une vue est complexe si la requte comporte le mot-cl DISTINCT, ROWNUM
ou ROW_NUMBER, ORDER BY, HAVING ou CONNECT BY, des colonnes dfinies par des
expressions ou des colonnes NOT NULL dans les tables qui ne sont pas slectionnes par
la vue.
La structure de ces tables est prsente dans le tableau suivant. Les colonnes NOT NULL
doivent tre tout particulirement considres lors dventuelles mises jour.
ditions Eyrolles
199
15/02/12 07:05
Table employees
Type
---------NUMBER(4)
VARCHAR2(30)
NUMBER(6)
NUMBER(4)
Vues monotables
Le tableau suivant cre la vue monotable v_employes dans le schma soutou. Cette vue
dcrit les employs dont le salaire dpasse 10000 (restriction du WHERE) et masquant certaines
colonnes (restriction du SELECT). Notez les alias de colonnes qui permettent de masquer le
nom des colonnes originales de la table source.
Tableau 4-3: Cration dune vue monotable
Cration de la vue
Structure de la vue
200
Null?
Type
-------- --------NOT NULL NUMBER(6)
VARCHAR2(20)
NOT NULL VARCHAR2(25)
NOT NULL VARCHAR2(25)
NOT NULL DATE
NOT NULL VARCHAR2(10)
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Une fois cre, la vue sinterroge comme une table par un utilisateur, sous rserve de dtenir
le privilge de lecture (GRANT SELECT ON nom_vue TO nom_schema). Le tableau suivant
prsente deux extractions de cette vue.
Tableau 4-4: Interrogation dune vue
Besoin
Requte et rsultat
ID_EMP
------146
150
147
175
151
101
162
PRENOM
--------------Karen
Peter
Alberto
Alyssa
David
Neena
Clara
NOM
--------------Partners
Tucker
Errazuriz
Hutton
Bernstein
Kochhar
Vishney
MAIL
--------------KPARTNER
PTUCKER
AERRAZUR
AHUTTON
DBERNSTE
NKOCHHAR
CVISHNEY
SELECT
FROM
GROUP BY
ORDER BY
DATE_EMBAUCHE
---------------05-JAN-05
30-JAN-05
10-MAR-05
19-MAR-05
24-MAR-05
21-SEP-05
11-NOV-05
id_emploi, COUNT(id_emp)
soutou.v_employes
id_emploi
2 DESC;
ID_EMPLOI COUNT(ID_EMP)
----------- -------------SA_REP
14
SA_MAN
5
AD_VP
2
MK_MAN
1
PR_REP
1
AD_PRES
1
PU_MAN
1
AC_ACCOUNT
1
AC_MGR
1
FI_MGR
1
ditions Eyrolles
201
15/02/12 07:05
Vues complexes
Une vue complexe est caractrise par le fait quelle contient, dans sa dfinition, plusieurs
tables (jointures, sous-requtes, expressions de tables : CTE), une fonction applique
des regroupements, une fonction de fentrage, le mot-cl DISTINCT ou des expressions de
colonnes.
La mise jour directe (par INSERT ou UPDATE ou DELETE) de telles vues nest pas possible
sans programmer un dclencheur INSTEAD OF.
Le tableau suivant prsente la vue multitable v_dept_calculs du schma soutou qui extrait
pour chaque dpartement, le nom du manager, le nombre demploys, ainsi que les salaires
minimum, maximum et moyens.
Tableau 4-5: Cration dune vue complexe
Cration de la vue
Structure de la vue
Name
Null?
Type
---------------------- ---------
------------
DEPARTEMENT
NOT NULL
VARCHAR2(30)
COUNT(e.department_id), MIN(e.salary),
MANAGER
NOT NULL
VARCHAR2(25)
MAX(e.salary), ROUND(AVG(e.salary),1)
EMPLOYES
FROM hr.employees e,
hr.departments d, hr.employees m
WHERE e.department_id = d.department_id
AND
d.manager_id
NUMBER
MIN_SAL
NUMBER
MAX_SAL
NUMBER
MOYENNE_SAL
NUMBER
= m.employee_id
Conseil avis
Il est toujours prfrable de programmer une jointure laide de loprateur relationnel
INNER JOIN plutt que dans WHERE : dune part, pour des raisons de performances (certains SGBD y sont sensibles), dautre part, dun point de vue de la maintenance du code
(il est plus efficace de modifier une requte ainsi crite).
Une fois cre, la vue multitable sinterroge simplement (sans jointure). Le tableau suivant
prsente une extraction de cette vue.
202
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Requte et rsultat
DEPARTEMENT
-----------------Sales
Marketing
Public Relations
Accounting
Executive
MANAGER
ECART_MAX MOYENNE_SAL
----------- ----------- ------------Russell
7290
9492.6
Hartstein
7700
10450
Baer
0
11000
Higgins
4078.8
11169.4
King
7000
19333.3
Il est possible de mettre jour toutes les vues, soit directement, soit indirectement par
lintermdiaire de dclencheurs INSTEAD OF (RULE et FUNCTION pour PostgreSQL).
Vues modifiables
Lorsquil est possible dexcuter des instructions insert, update ou delete directement sur
une vue, elle est dite modifiable (updatable view). Pour mettre jour une vue simple, il doit
exister une correspondance biunivoque entre les lignes de la vue et celles de lobjet source.
Pour pouvoir mettre jour une vue complexe, il est ncessaire de programmer un dclencheur de type INSTEAD OF.
Il va de soi quune vue cre avec la directive WITH READ ONLY ne peut tre mise jour quelle
que soit sa structure
La premire vue monotable (employs dont le salaire dpasse 10000) cite en exemple est
modifiable sous rserve de renseigner les colonnes dclares non nulles (la cl primaire en fait
partie). Ici, la condition de correspondance biunivoque est respecte.
En revanche, la deuxime vue multitable (employs, manager et dtails sur les employs) ne
peut pas tre mise jour dune manire directe, car dune part, la cl primaire nest pas prsente, dautre part, les rsultats fournis proviennent de calculs dagrgats et il serait insens de
vouloir insrer un calcul directement.
Le tableau suivant prsente quelques mises jour possibles (sous rserve de respecter en amont
les contraintes de cls et de valeurs qui existent au niveau de la table source).
ditions Eyrolles
203
15/02/12 07:05
Rsultat
VALUES (99,'Fred','Brouard','sqlpro',SYSDATE,'IT_PROG');
Modification dune colonne dune ligne
dans la table employees du schma
hr.
UPDATE soutou.v_employes
SET mail = 'WIGIETZ'
WHERE
id_emp = 206;
id_emp IN (150,151);
La premire instruction est un peu paradoxale, car elle permet lajout, en passant par la vue,
dun employ qui ne repassera plus par la suite le filtre de la vue (linformation du salaire est
manquante et forme la condition de filtre de la vue).
La directive WITH CHECK OPTION, qui empche un ajout ou une modification non conforme
la dfinition de la vue, permet dviter ce genre deffets de bord qui peuvent tre indsirables
pour lintgrit de la base.
Contrainte de vrification
Il est ncessaire de redfinir la vue, le tableau suivant dcrit cette action et la tentative dajout
dun employ non dot de salaire.
Tableau 4-8: Vue avec WITH CHECK OPTION
Cration de la vue
Insertion interdite
View created.
204
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Les rgles qui rgissent les insertions ne sont pas identiques celles qui concernent les
mises jour ou suppressions. Des vues complexes peuvent tre modifiables, dans une certaine mesure, lorsquune table source est dite protge par sa cl (key preserved).
Considrons la vue complexe qui joint les tables des dpartements et des employs en incluant
toutes les colonnes non nulles. On pourrait penser que les deux tables sont protges par cl et
sont modifiables par la vue.
Tableau 4-9: Vue multitable
Cration de la vue
Structure de la vue
(ndept,departement,id_emp,prenom,
nom,mail,date_embauche,id_emploi)
AS SELECT d.department_id,
FROM
Name
Null?
Type
---------------------
--------- ---------
NDEPT
d.department_name, e.employee_id,
DEPARTEMENT
e.first_name, e.last_name,
ID_EMP
PRENOM
hr.employees e, hr.departments d
VARCHAR2(20)
NOM
ORDER BY 2,4;
DATE_EMBAUCHE
ID_EMPLOI
NOT
NULL DATE
En ralit, seule la table employees est protge par cl dans cette vue, car elle joue le rle de
la relation enfant tandis que la table departments joue le rle de parent. En effet, toute ligne
de cette table contiendra un unique numro demploy, tandis que le numro de dpartement
est susceptible de se dupliquer.
ditions Eyrolles
205
15/02/12 07:05
DEPARTEMENT
ID_EMP PRENOM
------------------ ---------- --------------Accounting
205 Shelley
Accounting
206 William
Administration
200 Jennifer
Executive
102 Lex
Executive
101 Neena
Executive
100 Steven
Finance
109 Daniel
Finance
111 Ismael
NOM
--------------Higgins
Gietz
Whalen
De Haan
Kochhar
King
Faviet
Sciarra
DATE_EMBAUCHE
------------------07-JUN-02
07-JUN-02
17-SEP-03
13-JAN-01
21-SEP-05
17-JUN-03
16-AUG-02
30-SEP-05
Avec Oracle, afin de savoir dans quelle mesure les colonnes dune table sont modifiables par
une vue (insertion, modification ou suppression), il faut interroger le dictionnaire des donnes
par lintermdiaire de la vue USER_UPDATABLE_COLUMNS.
206
Rsultat
COLUMN_NAME, INSERTABLE,
UPDATABLE, DELETABLE
USER_UPDATABLE_COLUMNS
TABLE_NAME = UPPER('v_dept_emps');
COLUMN_NAME
--------------------------DEPARTEMENT
ID_EMP
PRENOM
NOM
MAIL
DATE_EMBAUCHE
NDEPT
ID_EMPLOI
INS
--NO
YES
YES
YES
YES
YES
NO
YES
UPD
--NO
YES
YES
YES
YES
YES
NO
YES
DEL
--NO
YES
YES
YES
YES
YES
NO
YES
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Le tableau suivant prsente quelques mises jour valides (sous rserve de respecter en amont
les contraintes de cls et de valeurs qui existent au niveau de la table source).
Tableau 4-12: Mises jour de vue
Oprations
Rsultat
UPDATE soutou.v_dept_emps
SET
date_embauche = SYSDATE
WHERE id_emp = 206;
La premire instruction est encore un peu trange, car elle permet lajout, en passant par la
vue, dun employ qui ne repassera plus par la suite le filtre de la vue (linformation du dpartement dappartenance est manquante).
Les vues peuvent galement servir assurer la confidentialit, simplifier lcriture de requtes
complexes, implmenter lintgrit rfrentielle et dnormaliser.
Confidentialit
La confidentialit reste une des vocations premires des vues. En plus de renommer ou de
masquer des colonnes, il est possible de restreindre laccs des donnes dune manire temporelle. La vue suivante restreint les accs une table dun point de vue temporel.
ditions Eyrolles
207
15/02/12 07:05
Rsultat
Il est possible de restreindre davantage les accs un utilisateur particulier en utilisant les
mcanismes de transmission ou de rvocation de privilges. Il est par ailleurs toujours prfrable quun utilisateur transmette des droits sur ses donnes en utilisant des vues.
Les privilges objet (en opposition aux privilges systme comme pouvoir dmarrer la base,
crer un schma, etc.) quil est possible dattribuer sur une vue sont les mmes que ceux qui sont
applicables sur une table ( savoir SELECT et UPDATE sur des colonnes, INSERT et DELETE).
Tableau 4-14: Privilges sur les vues
Attribution du privilge
Signification
Simplification de requtes
Considrons la table jobs qui appartient aussi au schma hr dOracle. Une partie des donnes
est prsente ci-aprs.
208
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
La requte simplifier est celle qui doit extraire, pour chaque dpartement, la masse salariale
mdiane de chaque dpartement en fonction des types demplois. Par exemple, le dpartement 90 est compos dun employ de type AD_PRES et de deux employs de type AD_VP. Le
montant calcul pour ce dpartement doit tre gal : 1(4000020080)+2(30000
15000)=49920.
Construisons les vues ncessaires pour simplifier cette requte. La premire vue groupe les
effectifs de chaque dpartement par type demploi.
ditions Eyrolles
209
15/02/12 07:05
Rsultat
ID_EMPLOI
EFFECTIF
---------------------1
AD_ASST
MK_MAN
1
MK_REP
1
PU_CLERK
5
PU_MAN
1
HR_REP
1
20
SH_CLERK
ST_CLERK
20
ST_MAN
5
IT_PROG
5
PR_REP
1
SA_MAN
5
SA_REP
29
AD_PRES
1
AD_VP
2
FI_ACCOUNT
5
1
FI_MGR
AC_ACCOUNT
1
AC_MGR
1
La deuxime vue joint ces effectifs pour extraire le salaire mdian de chaque type demploi. Il
sagit ici dune vue complexe interrogeant conjointement une table et une autre vue.
Tableau 4-15: Jointure avec les salaires mdians
Vue complexe dune vue
Rsultat
210
EFFECTIF
MONTANT
N_DEPTID_EMPLOI
---------- ---------- ----------- ----------10 AD_ASST
1
3000
1
6000
20 MK_MAN
20 MK_REP
1
5000
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Rsultat (suite)
N_DEPT
---------30
30
40
50
50
50
60
70
80
80
90
90
100
100
110
110
ID_EMPLOI
EFFECTIF
MONTANT
---------- ------------ ----------PU_CLERK
5
3000
1
7000
PU_MAN
HR_REP
1
5000
20
3000
SH_CLERK
ST_CLERK
20
2992
ST_MAN
5
3000
5
6000
IT_PROG
1
6000
PR_REP
SA_MAN
5
10080
29
6008
SA_REP
AD_PRES
1
19920
2
15000
AD_VP
5
4800
FI_ACCOUNT
FI_MGR
1
7800
1
4800
AC_ACCOUNT
AC_MGR
1
7800
La troisime vue cumule le salaire mdian de chaque type demploi pour tout dpartement.
Tableau 4-16: Cumul par type demploi et dpartement
Vue complexe dune vue
Rsultat
SQL> SELECT
FROM
CUMUL
N_DEPTID_EMPLOI
---------- ----------- ---------10 AD_ASST
3000
20 MK_MAN
6000
20 MK_REP
5000
30 PU_CLERK
15000
30 PU_MAN
7000
40 HR_REP
5000
50 SH_CLERK
60000
50 ST_CLERK
59840
50 ST_MAN
15000
60 IT_PROG
30000
70 PR_REP
6000
ditions Eyrolles
211
15/02/12 07:05
Rsultat
N_DEPTID_EMPLOI
CUMUL
---------- ------------ --------80SA_MAN
50400
174232
80SA_REP
90 AD_PRES
19920
30000
90 AD_VP
100 FI_ACCOUNT
24000
100 FI_MGR
7800
110 AC_ACCOUNT
4800
7800
110 AC_MGR
La requte finale cumule ces sommes pour chaque dpartement. Aucune jointure nintervient
et toute la complexit est masque par les trois niveaux de vues en amont. Essayez dcrire
cette requte sans utiliser de vues intermdiaires, vous men direz des nouvelles.
Tableau 4-17: Requte simplifie
Requte sur une vue
SELECT
FROM
GROUP BY
ORDER BY
n_dept, SUM(cumul)
soutou.v_v_v_emps_cumul
n_dept
1;
Rsultat
N_DEPT SUM(CUMUL)
---------- ---------10
3000
20
11000
30
22000
40
5000
50
134840
60
30000
70
6000
80
224632
90
49920
100
31800
110
12600
Lexemple le plus classique de simplification par les vues est la prsentation de linformation par tranches Par exemple, lvolution des taux de TVA est fonction dune date
dapplication, qui rend de fait caduque lapplication du barme prcdent la date J-1
CREATE TABLE T_TVA
(TVA_TYPE
TVA_DATE_APPLICATION
212
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
TVA_TAUX
FLOAT)
INSERT INTO T_TVA VALUES
('Super Rduit',
'1982-07-01', 5.50),
('Super Rduit',
'1989-01-01', NULL),
('Rduit',
('Rduit',
('Rduit',
('Rduit',
('Rduit',
('Intermdiaire',
('Intermdiaire',
('Intermdiaire',
('Intermdiaire',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
'1968-01-01',
'1968-12-01',
'1970-01-01',
'1973-01-01',
'1989-01-01',
'1968-01-01',
'1968-12-01',
'1970-01-01',
'1982-07-01',
'1968-01-01',
'1968-12-01',
'1970-01-01',
'1973-01-01',
'1977-01-01',
'1982-07-01',
'1995-08-01',
'2000-04-01',
6.38),
7.53),
7.50),
7.00),
5.50),
14.92),
15.65),
17.60),
NULL),
20.00),
23.46),
23.00),
20.00),
17.60),
18.60),
20.60),
19.60),
('Major',
'1968-01-01', 25.00),
('Major',
'1968-12-01', 33.33),
('Major',
'1989-01-01', 28.00),
('Major',
'1989-09-15', 25.00),
('Major',
'1991-01-01', 22.00),
('Major',
'1993-01-01', NULL);
CREATE VIEW V_TVA AS
SELECT TVA_TYPE, TVA_DATE_APPLICATION AS TVA_DATE_DEBUT_
APPLICATION,
COALESCE((SELECT MIN(TVA_DATE_APPLICATION) - 1 DAY
FROM
T_TVA AS T2
WHERE T1.TVA_TYPE = T2.TVA_TYPE
AND T1.TVA_DATE_APPLICATION< T2.TVA_DATE_APPLICATION),
'9999-12-31')
AS TVA_DATE_FIN_APPLICATION, TVA_TAUX
FROM
T_TVA AS T1;
ditions Eyrolles
213
15/02/12 07:05
TVA_DATE_DEBUT_APPLICATION
---------------------------1982-07-01
1989-01-01
1968-01-01
1968-12-01
1970-01-01
1973-01-01
1989-01-01
1968-01-01
1968-12-01
1970-01-01
1982-07-01
1968-01-01
1968-12-01
TVA_DATE_FIN_APPLICATION
--------------------------1988-12-31
9999-12-31
1968-11-30
1969-12-31
1972-12-31
1988-12-31
9999-12-31
1968-11-30
1969-12-31
1982-06-30
9999-12-31
1968-11-30
1969-12-31
TVA_TAUX
-------5,5
NULL
6,38
7,53
7,5
7
5,5
14,92
15,65
17,6
NULL
20
23,46
Ce serait une norme faute que de rajouter la table une date de fin dapplication, car en cas derreur de
saisie, on pourrait se retrouver soit avec plusieurs taux diffrents pour un mme jour, soit aucun
noter: la prsence dune ligne avec un taux NULL signifie tout simplement la disparition de ce taux
de TVA!
214
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire
CREATE VIEW v1
AS SELECT * FROM t1 pere
WHERE NOT EXISTS
(SELECT employee_id
FROM t2
WHERE department_id=pere.department_id);
CREATE VIEW v2
AS SELECT * FROM t2
WHERE (department_id IN
(SELECT department_id FROM t1)
OR department_id IS NULL)
WITH CHECK OPTION;
La vue v2 restitue les dpartements qui nembauchent aucun employ. La vue v1 restitue les
employs associs un dpartement existant et ceux qui ne sont associs aucun dpartement
(la condition IS NULL peut tre omise dans la vue si chaque enfant doit tre obligatoirement
rattach un parent).
Les rgles que vous devez respecter pour manipuler les donnes sont les suivantes.
Ct parent: modifications, insertions et suppressions par la vuev1 et lecture de la tablet1.
Ct enfant: modifications, insertions, suppressions et lecture par la vuev2.
Cohrence prefils
Insertion correcte:
INSERT INTO v2
(employee_id, first_name, last_name, email,
hire_date, job_id,salary, commission_pct,
manager_id, department_id )
VALUES (99,'Fred','Brouard','sqlpro',
SYSDATE,'IT_PROG',3400,0,100,90);
ditions Eyrolles
Insertion correcte:
INSERT INTO v1
(department_id, department_name,
manager_id, location_id)
VALUES (800,'Eyrolles info.', 100,1700);
215
15/02/12 07:05
employee_id=99;
Le raisonnement sur deux tables peut se gnraliser une hirarchie dassociations ou diffrentes associations issues de la mme table.
216
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
PCG_NUMERO_POINT
PCG_LATITUDE
PCG_LONGITUDE
PCG_ALTITUDE
FLOAT,
Chacun sait quune parcelle de terrain est un polygone et quun polygone se doit davoir
au moins 3sommets. Tant que lon na pas saisi 3points, pas de polygone. Or, aucune
contrainte ne peut attendre larrive du troisime point pour valider ou invalider les
donnes. Dans ce cas, la solution rside dans la vue:
CREATE VIEW V_PARCELLE_GEOMETRIE_PCG AS
SELECT * FROM T_PARCELLE_GEOMETRIE_PCG AS P1
WHERE
EXISTS(SELECT 1
FROM
T_PARCELLE_GEOMETRIE_PCG AS P1 AS P2
WHERE
P1.PCL_NUMERO_CADASTRAL = P2.PCL_NUMERO_CADASTRAL
AND
GROUP
P1.PCG_NUMERO_POINT = P2.PCG_NUMERO_POINT
BY P2.PCG_NUMERO_CADASTRAL, P2.PCG_NUMERO_POINT
HAVING COUNT(*) >= 3);
Cette dernire ne fera apparatre que les donnes des points des parcelles pour celles
formant des polygones Mais comme on ne sait pas lavance le nombre de points dun
polygone, la manire la plus pratique est de rajouter cette information de fermeture
du polygone un niveau suprieur:
CREATE TABLE T_PARCELLE_PCL
(PCL_NUMERO_CADASTRAL
PCL_SAISIE_FINALISE
ditions Eyrolles
217
15/02/12 07:05
PCL_SAISIE_FINALISE;
Un autre exemple concerne les clients et les prospects. Un prospect nest autre quun
client qui na jamais effectu de commande. Ds lors, clients et prospects peuvent figurer
dans la mme table physique (CONTACT) ce qui simplifie beaucoup les choses. Il ny aura
qu crer deux vues modifiables, chacune delles avec toutes les colonnes de la table des
contacts, lune prsentant les donnes des prospects, lautre celle des clients, avec les
dfinitions de vues suivantes:
CREATE VIEW V_CLIENT_CLI AS
SELECT * FROM
WHERE
T_CONTACT_CTC
Dnormalisation
Les vues peuvent aider dnormaliser un schma relationnel. Il est possible de crer volontairement des rsultats tabulaires qui ne respectent aucune des formes normales (de la 1re
la 5e).
Lexemple suivant ne respecte pas la deuxime forme normale. En effet, la cl tant id_emp,
la prsence de la colonne department (nom du dpartement qui dpend davantage dun code
dpartement) fait abandonner la troisime forme normale.
218
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Structure
Pour quitter la virtualisation, si vous rendez cette vue physiquement existante (materialized
view), vous implmentez une dnormalisation.
Lorsque lon parle de modle relationnel, ce nest pas un modle particulier que
nous nous adressons, mais lensemble des modles ncessaires la fabrication dune
base de donnes. Ainsi, comme nous lavons vu, ce fameux modle relationnel se dcline
en (dans lordre) MCD, MLD, MPD et MED. Piqre de rappel
Le modle conceptuel de donnes est le premier des modles relationnels qui doit tre
tabli. Il dcoule de lanalyse et permet de rendre compte de la smantique des donnes.
ditions Eyrolles
219
15/02/12 07:05
Son formalisme a t labor par Peter Chen en 1976. Il compte des entits et des associations. Ces objets peuvent tre reprsents par diffrentes notations comme la trs
franaise MERISE, la plus moderne UML2 ou encore IDF1X, ER, etc.
Le modle logique de donnes est le deuxime des modles et se trouve tre la traduction mathmatique du premier. Ce modle, labor par Frank Edgar Codd dans les
annes1970, comporte des relations (cest--dire des objets mathmatiques porteurs
dinformations) constitues dattributs dont certains, communs entre diffrentes relations, servent de liens. Il permet daffiner le modle conceptuel dun point de vue logique,
mais pas physique.
Le modle physique de donnes est le troisime des modles et dcoule directement du
second dont il nest que la traduction physique, cest--dire sur une machine SQL. Ce
modle a aussi t labor par Frank Edgar Codd, mais cest Larry Ellison, alors tout
jeune entrepreneur, qui en fait la premire implmentation sur un produit quil dnomme
Oracle V2 (version2, la premire nayant jamais exist). Selon que lon utilise Oracle,
SQL Server, DB2 ou PostgreSQL, le modle est lgrement diffrent, car il rsulte de la
capacit prendre en compte ou non tel ou tel type de donnes, telle ou telle contrainte
Il est constitu de tables et de colonnes, mais aussi de contraintes et dindex.
Le modle externe de donnes est le dernier des modles relationnels. Souvent oubli, il
permet de prsenter les informations dune manire lisible, simplifie et enrichie de faon
faciliter le travail des dveloppeurs et rendre vidente la comprhension des donnes
par les utilisateurs. Il est constitu de vues et de routines SQL: procdures, dclencheurs,
fonctions. nouveau, il a t labor par Franck Edgar Codd, dans les annes1980, au
tout dbut des premires expriences sur les SGBDR commerciaux que sont Sytme R
et Oracle. Son but est de rendre indpendante la structure physique de la base, de celle
perue au niveau du dveloppement, afin que des modifications apportes aux tables nentranent que peu deffets sur le code applicatif.
Bien que les dveloppeurs ne pensent jamais utiliser proprement le modle externe de
donnes, ils en utilisent gnralement une partie, celle consacre aux routines, force
de constater que les performances du code de traitement dun SGBDR sont sans commune mesure avec celles quils peuvent obtenir dun traitement itratif dans un langage
hte, ds que la monte en charge se fait sentir (accroissement du volume des donnes
ou de la concurrence). Il est alors dommage de constater labsence de vues, qui leur
auraient grandement facilit le travail, surtout en termes dvolution de la structure de
la base
De mme, lutilisation inconsidre des ORM (Hibernate, Symfony, Doctrine)nest
quun pis-aller de substitution au MED et possde linconvnient majeur de dgrader
singulirement les performances applicatives. En effet, il nest pas rare quun ORM
multiplie par 10 ou 20 les temps de rponse par rapport une approche procdurale
en SQL.
220
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Les vues matrialises contribuent lamlioration des jointures du fait du stockage de lignes
prcalcules et de la possibilit de rcriture de requtes (query rewrite). De plus, il est possible dutiliser le partitionnement et lindexation sur une vue matrialise.
Rcriture de requtes
La rcriture de requtes est une technique doptimisation qui transforme une requte complexe
mise sur une table volumineuse en une requte smantiquement quivalente interrogeant la vue
matrialise. Ds quil est plus intressant dutiliser la vue matrialise parce quelle contient des
rsultats dj calculs (agrgats et jointures), toute requte est rcrite par le moteur relationnel
ditions Eyrolles
221
15/02/12 07:05
du SGBDR dune manire transparente pour lutilisateur et utilise la vue la place de la table
(initialement interroge). Aucun code nest ajouter dans linstruction SQL qui ne rfrence que
la ou les tables interroges, la substitution se faisant la vole lexcution de la requte.
En gnral, les vues matrialises sont bases sur la cl primaire des tables sources (ou sur la
colonne rowid). Dans un contexte dentrepts de donnes, les vues matrialises composent
gnralement des regroupements (agrgations) et des jointures.
Du fait du stockage de donnes redondantes (lignes prsentes physiquement la fois dans les
tables sources et dans la vue matrialise), des mthodes de rafrachissement (refresh) sont disponibles et peuvent tre de nature incrmentale (fast refresh) ou complte (complete refresh).
Les vues matrialises (vues indexes chez MS SQL Server) se basent le plus souvent sur
la cl primaire ou sur un identifiant interne de ligne (rowid pour Oracle) de manire
connatre la provenance des donnes.
La mise jour dune vue peut tre synchrone ou asynchrone. Dans le cas dune mise
jour synchrone, la vue et les tables sous-jacentes doivent avoir une relation univoque de
manire savoir quelle ligne est modifier dans la vue du fait des changements dans les
tables sources. En effet, la modification des donnes de la vue se fait par diffrence et
non par recalcul afin de minimiser limpact des mises jour dans les tables sources. Pour
les vues asynchrones, on peut gnralement choisir la mthode de rafrachissement des
donnes de la vue comme sa frquence. Oracle supporte les vues asynchrones, MS SQL
Server ne propose pour lheure que des vues synchrones.
222
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire
ditions Eyrolles
223
15/02/12 07:05
Les jointures entre employs et dpartements de ce lieu utiliseront la vue la place des tables
dune manire bien plus efficace. Pour les besoins dune requte en particulier, des index
uniques ou non peuvent sajouter: CREATE INDEX ON nom_vue (colonne1,colonne2).
Le rafrachissement
Le rafrachissement incrmental vite de reconstruire la vue matrialise entirement. Cependant, ce mcanisme doit soprer relativement rapidement ( la demande ou priodiquement)
pour garantir lintgrit des donnes. Chaque table est associe un journal doprations
(materialized view log) qui recense toutes les modifications effectues sur la table.
Dans un contexte de rplication, les vues matrialises permettent de maintenir sur une base
locale des copies de donnes distantes. Ces copies peuvent tre modifiables (sous rserve que
le SGBD le permette, avec Oracle il sagit de loption Advanced Replication).
Le rafrachissement automatique ncessite de crer un journal doprations par table interroge.
Les exemples suivants dcrivent des vues matrialises qui se mettront jour automatiquement. La premire vue (tous les employs) sera mise jour ds que la table employees sera
modifie. La deuxime (tous les dpartements) sera systmatiquement actualise tous les
lundis 15h.
Tableau 4-22: Rafrachissement automatique
Code SQL
Commentaire
224
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire (suite)
Les vues indexes ou matrialises ne sont pas la panace et doivent tre abordes avec
circonspection
Tout dabord, la vue doit tre dterministe, cest--dire toujours fournir les mmes rsultats si les tables sources ont les mmes donnes, ce qui exclut lappel des fonctions
comme celles fournissant la date et lheure courantes ou encore celles renvoyant des
donnes alatoires (RAND, GUID ou UUID).
Il existe de nombreuses restrictions lcriture de vues synchrones. Comme les lignes
originelles doivent pourvoir tre retrouves, cela exclut certains oprateurs dagrgation autres que SUM , COUNT, MAX et MIN , les jointures externes, les sous-requtes, les
valeurs non dfinies (NULL), les oprations ensemblistes (UNION , INTERSECT, EXCEPT),
loprateur DISTINCT, les fonctions de fentrage, les groupages OLAP (CUBE , ROLLUP,
GROUPING) et presque tous les oprateurs particuliers spcifiques certains SGBDR.
Lorsque la vue contient des calculs mathmatiques, il est important (mais pas impratif)
que les expressions intgrent des calculs prcis, cest--dire effectus sur des types SQL
prcision fixe, dfinie et limite. On devra alors utiliser du DECIMAL (ou NUMERIC) ou des
entiers (SMALLINT, INT, BIGINT). En effet, lemploi dun type de donnes numriques
ditions Eyrolles
225
15/02/12 07:05
prcision flottante comme REAL ou FLOAT, induirait fatalement des erreurs de calcul du
fait que les donnes sont mises jour par diffrence et non par recalcul (erreurs dcart
darrondi).
Bien que les vues indexes ou matrialises soient dune puissance phnomnale
lorsquelles sont judicieusement utilises, il ne faut pas les systmatiser. En effet, le but
dune telle vue nest pas de fournir lexacte rponse une requte, mais de participer la
simplification dune partie de la requte finale
Ainsi, il ne faut pas chercher crer autant de vues indexes quil y a de requtes
lourdes, mais trouver quels sont les dnominateurs communs de ces lourdes requtes
et factoriser le point dur par une vue matrialise.
En effet, et comme toujours dans les bases de donnes, lexcs dutilisation dun systme,
mme trs allchant, peut conduire leffet inverse, car noublions pas que de telles vues
stockant les donnes constituent de la redondance, plombent le volume global de la base,
et plus encore, encombrent le cache des donnes
226
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Les vues objet de tables relationnelles permettent de conserver les donnes telles quelles, sans
modifier structurellement la base. Ce mcanisme est intressant, car il permettra aux programmeurs de migrer sans effet de bord vers la technologie objet. Par la suite, des mthodes
peuvent tre programmes. Ces mthodes peuvent coder des transactions tout en manipulant
des donnes tabulaires.
Dcrivons les mcanismes quOracle propose.
tapes respecter
Plusieurs tapes sont ncessaires la dfinition dune vue objet.
Utiliser un type (existant ou crer) qui formera la structure de la vue. Ce type peut inclure
des colonnes composes, rfrences, collections ou mthodes.
crire la requte de dfinition qui extrait les donnes et charge la vue dobjets.
Spcifier un identifiant (OID), valeur unique base sur un attribut cl primaire en gnral.
Cet identifiant permettra de crer une rfrence vers chaque objet de la vue (comme pour
les tables objet qui peuvent tre accessibles par rfrences).
Si la vue doit tre modifiable (updatable object view), il faudra programmer un dclencheur
INSTEAD OF.
La syntaxe simplifie de cration dune vue SQL3 est la suivante.
CREATE VIEW [nom_schma.]nom_vue
[ (alias1, alias2 ) ]
OF [schma.]nom_type
{ WITH OBJECT IDENTIFIER { DEFAULT | ( colonne [, colonne]...) }
| UNDER [nom_schma.]nom_super_vue }
AS requte_SELECT
[WITH { READ ONLY | CHECK OPTION } ];
WITH READ ONLY et WITH CHECK OPTION ont la mme signification que les vues SQL2.
tudions la construction et la manipulation dune vue objet partir des tables relationnelles
employees et departments. Suivons les tapes nonces prcdemment.
ditions Eyrolles
227
15/02/12 07:05
associer plusieurs employs tout dpartement. Si le nombre demploys est limit, on choisira
de travailler avec un varray, sinon il faudra utiliser une nested table.
Trois types sont ncessaires pour composer la structure de la vue: celui de llment de la
collection, celui de la collection elle-mme et celui du type de la vue qui contient la collection.
Tableau 4-23 : Types crer
Cration des types
Commentaire
Type de la vue.
228
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Il est possible de construire dynamiquement des collections (NESTED TABLE ou VARRAY) lors
de la cration dune vue objet laide des directives CAST et MULTISET. La directive cast
convertit un rsultat dans un type (ici, la requte cre une collection qui est nomme). Si le
rsultat dune requte retourne plusieurs enregistrements, il est ncessaire dutiliser conjointement la directive multiset.
La dfinition de la vue inclut la spcification de lOID bas sur la cl primaire de la table source
(colonne department_id). La requte extrait, dans un premier temps, quatre colonnes de
la table departments. Par la suite, pour chaque enregistrement de la table employees, la
directive MULTISET construit un ensemble dlments compos de plusieurs colonnes de la
table enfant. La directive CAST nomme lensemble obtenu emps_nt, collection affecte la
dernire colonne du type de la vue.
Tableau 4-24 : Cration de la vue objet
Cration de la vue
Structure de la vue
Name
Null?
Type
NUMBER(4)
d.department_name,
NOM_DEPT
VARCHAR2(30)
d.manager_id, d.location_id,
ID_MANAGER
NUMBER(6)
CAST(MULTISET
LIEU
NUMBER(4)
EMPS_NT
EMP_NT_T
hr.employees e
WHERE e.department_id=d.department_id)
AS emp_nt_t
) AS emps_nt
FROM hr.departments d;
ditions Eyrolles
229
15/02/12 07:05
Oracle dispose de nombreux oprateurs qui permettent de manipuler des collections au sein
de requtes (CARDINALITY, MULTISET EXCEPT, MULTISET INTERSECTION, MULTISET
UNION, etc.).
Commentaire
UPDATE v_obj_dept_emps
SET
lieu
= 2400
WHERE n_dept = 30;
230
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Pour toute mise jour quil nest pas possible dcrire directement, vous devrez programmer
un dclencheur INSTEAD OF qui se chargera de propager les nouvelles valeurs des colonnes
modifies de manire cohrente travers les tables sources.
Commentaire
ditions Eyrolles
231
15/02/12 07:05
Commentaire (suite)
DECLARE
obj departement_t;
BEGIN
Employe ajoute
Effectif pour 20 = 3
v_obj_dept_emps d
WHERE
d.n_dept = 20;
obj.ajoute_emp(99,'Fred','Brouard',SYSDATE);
DBMS_OUTPUT.PUT_LINE('Employe ajoute');
DBMS_OUTPUT.PUT_LINE('Effectif pour ' ||
obj.n_dept || ' = ' || obj.nbre_emp());
END;
Une fois les mises jour opres, les nouvelles donnes sont visibles dans les tables sources
ou par lintermdiaire de la vue.
232
Une mthode peut implmenter une transaction, car tous les mcanismes du langage procdural du SGBD sont disponibles (validation, invalidation, points de sauvegarde, curseurs et
exceptions).
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
BEGIN
END;
Loption de contrle (WITH CHECK option) dune vue nest pas vrifie si un dclencheur
INSTEAD OF est programm sur lvnement en question (ajout, modification ou suppression). Le corps du dclencheur doit donc explicitement prendre en compte la contrainte.
linstar des dclencheurs traditionnels, il nest permis de programmer quun seul dclencheur INSTEAD OF par table.
Considrons les vues relationnelles cres dans le premier paragraphe et quil ntait pas possible de mettre jour.
ditions Eyrolles
233
15/02/12 07:05
Contenu partiel
MANAGER
EMPLOYES MOYENNE_SAL
------------ --------- -----------11169.4
Higgins
2
Whalen
1
4840
King
3
19333.3
Greenberg
6
8601.3
7150
Mavris
1
Hunold
5
5760
3
10450
Hartstein
Baer
1
11000
Raphaely
6
4150
Russell
34
9492.6
Fripp
45
3618.4
Permettons cette vue des insertions et modifications (il sagit de mettre jour la table
departments). En modification, seuls le nom du dpartement et celui du manager pourront tre modifis. Le dclencheur INSTEAD OF devra se charger de rechercher le code du
manager.
Tableau 4-28: Dclencheur INSTEAD OF pour la modification
Code du dclencheur
Commentaire
Cration du dclencheur et
description de lvnement
dclencheur.
234
Mmorisation du numro de
dpartement modifi.
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire (suite)
Modification du manager:
recherche du numro et
modification de la table.
Modification du nom du
dpartement: modification de la
table.
EXCEPTION
WHEN NO_DATA_FOUND THEN
id_mgr := NULL;
END;
Le scnario suivant illustre deux modifications de la vue qui conduisent mettre jour la table
(la vue aussi par consquent).
Tableau 4-29: Modification dune vue complexe
Code SQL
Commentaire
ditions Eyrolles
EMPLOYES MOYENNE_SAL
---------- ------------34
9492.6
235
15/02/12 07:05
Commentaire
Cration du dclencheur et
description de lvnement
dclencheur.
NUMBER(6);
BEGIN
SELECT MAX(department_id)+ABS(MOD(DBMS_RANDOM.RANDOM,100))
INTO id_dept FROM hr.departments;
SELECT employee_id INTO id_mgr
FROM hr.employees
WHERE UPPER(last_name)=UPPER(:NEW.manager);
INSERT INTO hr.departments
(department_id,department_name,manager_id,location_id)
VALUES (id_dept,:NEW.departement,id_mgr,NULL);
EXCEPTION
WHEN NO_DATA_FOUND THEN
id_mgr := NULL;
END;
Le scnario suivant dcrit une insertion dans la vue qui met jour la table. Les nouvelles
donnes napparaissent pas dans initialement la vue, car le dpartement est pour linstant non
pourvu demploys.
236
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire
Austin (numro105).
(departement,manager)
VALUES ('Eyrolles Prod.',
'Austin');
1 row created.
SQL> SELECT *
FROM
hr.departments
WHERE department_name=
DEPARTMENT_ID DEPARTMENT_NAME
MANAGER_ID LOCATION_ID
-------------- ------------------ ------------ -----------283 Eyrolles Prod.
105
'Eyrolles Prod.';
Pour modifier cette vue en insertion, le dclencheur INSTEAD OF doit insrer des informations simultanment dans les tables sources employees et departments. Si le dpartement
existe dj, il ne faut pas le recrer. Le salaire de lemploy doit tre estim puisquil nest pas
prsent dans la vue (on prend le salaire moyen pour le type demploi concern).
ditions Eyrolles
237
15/02/12 07:05
Commentaire
(department_id,department_name,
manager_id,location_id)
VALUES (:NEW.ndept,:NEW.departement,NULL,NULL);
END IF;
SELECT (max_salary-min_salary)/2 INTO v_salaire
Le scnario suivant dcrit deux insertions dans la vue et la vrification des donnes dans les
tables au final.
238
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Commentaire
hr.employees
WHERE
employee_id IN (999,998);
EMPLOYEE_ID
-----------998
999
FIRST_NAME
-----------Rudi
Fred
LAST_NAME
-------------------Bruchez
Brouard
SALARY
-------3000
3000
HIRE_DATE
---------20-OCT-11
30-OCT-11
JOB_ID
------IT_PROG
IT_PROG
DEPARTMENT_ID
-------------99
99
ditions Eyrolles
239
15/02/12 07:05
Avec Oracle, un dclencheur INSTEAD OF peut tre programm au niveau dune collection
NESTED TABLE dune vue objet. Ce type de dclencheur:
sexcute seulement si un lment de la collection NESTED TABLE est modifi par linstruction TABLE();
ne sexcute pas pour une mise jour globale de la collection NESTED TABLE (dans son
intgralit, il ny a pas daccs un lment en particulier).
Programmons linsertion dun lment de la collection suivante. Il sagit dajouter les nouvelles
donnes dans une table relationnelle.
Dans le corps du dclencheur, il est possible davoir accs aux valeurs des donnes de la collection mise jour, mais aussi de lenregistrement qui contient la collection (parent row). Des
directives permettent de rpercuter dans la table les modifications ralises au niveau de la
collection:
ON NESTED TABLE dsigne la collection surveille (ici, emps_nt);
REFERENCING permet de renommer les pseudo-variables:NEW et:OLD;
PARENT dsigne le niveau parent de la collection (ici, dpartement).
240
ditions Eyrolles
15/02/12 07:05
Chapitre 4
Le niveau externe
Tableau 4-34: Dclencheur INSTEAD OF pour linsertion dans une collection dune vue
Code du dclencheur
Commentaire
Le scnario suivant dcrit une insertion dans la collection de la vue et vrifie la prsence des
donnes dans la table source et dans la vue objet.
Tableau 4-35: Insertion dune vue complexe
Code SQL
Commentaire
Brouard
FBROUARD
31-OCT-11
DEPARTMENT_ID
--------------
IT_PROG
40
ditions Eyrolles
NOM
---------Brouard
Mavris
241
15/02/12 07:05
15/02/12 07:05
Chapitre 5
ditions Eyrolles
243
15/02/12 07:05
Il est intressant danalyser lvolution de ces offres cinq ans aprs. Enterprise Architect noffre
plus la possibilit de traduire un diagramme de classes, Visual UML a t inclus dans Visual
Paradigm. Peu de nouveaux outils sont apparus et ceux qui sont gratuits ne sont ni fiables, ni
performants. Ma slection sest porte sur les outils suivants:
MagicDraw UML: http://www.magicdraw.com/
Modelio: http://www.modeliosoft.com/
Objecteering: http://www.objecteering.com/
PowerAMC: http://www.sybase.fr/products/modelingdevelopment/poweramc
WinDesign: http://www.win-design.com/fr/
Ces outils proposent tous un processus de conception bas sur les diffrents niveaux du conceptuel au physique (forward engineering), un processus de rtroconception (reverse engineering)
et un processus dinterchange (round-trip engineering) entre modles.
La partie consacre aux bases de donnes nest pas forcment prpondrante. Dautres
fonctionnalits concernent la modlisation de processus mtier BPM (Business Process
Models) qui peuvent tre imports ou exports conformment au langage BPEL4WS
(Business Process Execution Language for Web Services). Nombre dentre eux fournissent
un rfrentiel utile aux architectes des systmes dinformation qui en seront les principaux
utilisateurs. Certains outils se combinent avec Hibernate, ce qui narrange pas nos affaires
en vrit.
Ce chapitre ne se substitue videmment pas la documentation des produits, il illustre seulement certaines fonctionnalits des diteurs de logiciels. Chaque outil est valu sur la qualit
de traduction dun diagramme de classes incluant toutes sortes dassociations. La capacit de
rtroconception dune base de donnes est galement tudie.
MagicDraw
La version Architect ou Enterprise de MagicDraw prsente sur le site Web des fonctionnalits
relatives la gnration de code SQL. La version dvaluation est plus que restrictive (procdure denregistrement et multiples vrifications): nombre dobjets limits, fichiers en lecture
seule, le tout pour 27jours! Au secours!
244
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Le clou de lessai: limpossibilit de dfinir un identifiant de classe. En cinq ans: zro progrs.
Fermez le ban!
MEGA
Loffre logicielle de la socit MEGA regroupe quatre catgories doutils pour la modlisation,
le contrle, les transformations et les outils de communication. Loutil de modlisation est ici
brivement prsent.
Pour dbuter, crez un projet, un paquetage et reliez le paquetage la base de donnes. Cette
commande nest pas active par dfaut et ncessite une action manuelle (menu Tools>Options,
dossier Compatibility>Others, cochez loption Data Package dans la partie droite de la
fentre).
Identifiants
Un clic droit sur la classe choix Attributes vous permettra de crer des attributs. Slectionnez
ensuite lidentifiant. Pour le typage, slectionnez chaque attribut par un clic droit dans lexplorateur, choix Properties, onglet Characteristics et trouvez le type adquat dans la liste
Expression Type.
ditions Eyrolles
245
15/02/12 07:05
Associations
Pour crer une classe-association, crez la classe du milieu et, laide du bouton Link, reliez
cette classe lassociation.
246
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Un assistant en quatre tapes est alors lanc. Le modle relationnel est, par la suite, cr dans
le paquetage.
ditions Eyrolles
247
15/02/12 07:05
Rtroconception
Crez une base vide de tout diagramme, et renseignez le type du SGBD (Properties), dun clic
droit Reverse Target Database. Vous avez le choix entre slectionner une source de donnes
ODBC pralablement dfinie ou un script SQL. Pour ce dernier cas, MEGA fournit un outil
qui se connecte une base par ODBC et gnre automatiquement un fichier XML dcrivant
les tables et cls.
Afin de gnrer un modle conceptuel, vrifiez que vous avez accs au Meta Model en mode
Avanced, dans le menu Tools>Options. Un assistant en quatre tapes se lance et produit un
nouveau modle de donnes (Data Model). Dans ce modle, crez un diagramme de donnes
(clic droit New>Data Diagram) puis insrez dans ce diagramme par un glisser-dposer les
entits que vous avez obtenues aprs rtro-ingnierie.
248
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Les schmas obtenus par rtroconception sont de trs bonne qualit. Dans lexemple, seules les
agrgations devraient tre notes en tant que compositions. Les points forts de cet outil sont
la robustesse, lergonomie de loutil de synchronisation par tapes et les passerelles possibles
avec dautres outils.
Modelio
Modelio est distribu par Modeliosoft, filiale de Softeam, socit franaise. Ce produit est
bas sur larchitecture dObjecteering (prsent plus loin) et prsente une interface au look
Eclipse.
Avant tout, installez les modules Persistent Profile et SQL Designer (MDA>Installer un
module) avant de crer un projet puis, lintrieur de celui-ci, un diagramme de classes.
Chaque classe, attribut et association doivent tre dclars persistants (cochez Element Persistant dans la fentre en bas droite dans longlet Persistent).
ditions Eyrolles
249
15/02/12 07:05
Identifiants
Pour crer des attributs et un identifiant dans une classe, rendez-vous dans la fentre Modle,
dun clic droit sur la classe et Profil de persistance, choisissez Property ou Identifier puis typez
la colonne dans la fentre en annotant llment dans longlet Element.
Associations
Chaque type dassociation (classe-association, composition, etc.) dispose de son icne. Lannotation dune association vous permet de fixer les multiplicits.
250
ditions Eyrolles
15/02/12 07:05
Chapitre 5
ditions Eyrolles
251
15/02/12 07:05
252
ditions Eyrolles
15/02/12 07:05
Chapitre 5
La gnration du script SQL sopre par un clic droit sur le diagramme SQL, puis SQL
Designer>Gnrateur: Script SQL.
Pour effectuer une rtroconception partir dun script SQL, positionnez-vous au niveau du
projet, puis clic droit SQL Designer>Reverse: Script SQL. Vous devrez ensuite choisir le type
du script (SQL92, Oracle, MySQL ou SQL Server) et localiser le fichier contenant la cration
des tables et contraintes. Pour remonter dans les niveaux, positionnez-vous sur le diagramme
SQL obtenu (qui est de bonne qualit), puis clic droit SQL Designer>Transformation: Modle
de tables vers modle de donnes. La suite des oprations est bien plus hasardeuse lorsque
vous dsirez gnrer le modle UML.
La simplicit des menus et lergonomie de cet outil sont apprciables de mme quun forum
ractif. En revanche, il manque un peu de fluidit dans la manipulation graphique des schmas.
Lexistence dun modle de donnes intermdiaire et la volont dintgrer Hibernate dans le
mme contexte entravent, mon sens, la qualit de gnration entre des modles UML et
SQL et inversement. Un autre point faible concerne lincapacit traiter automatiquement les
classes-associations.
Objecteering
Objecteering est un autre produit franais de la socit Softeam qui est un acteur majeur dans
la communaut des technologies objet et premier membre europen de lOMG.
ditions Eyrolles
253
15/02/12 07:05
Dans cet outil, le terme physical model dsigne un schma relationnel (niveau logique) et
logical model dsigne un script SQL.
Avant tout, crez un projet puis configurez laffichage des tags qui serviront annoter un
diagramme de classes pour sa transformation (Outils>Options graphiques Diagramme de
classes, rendez visible les tagged values). Ensuite, dployez le module SQL (Outils>Deployer
un MDAC choisissez generator>SQLDesigner). Concernant ce module (Outils>Options
MDAC), configurez laccs votre base. Dans loption Gnration de diagramme sur le
modle physique, cochez la case correspondante.
Vous pouvez crer un paquetage (dans la racine) qui contiendra votre diagramme de classes.
La transformation de modle ncessite que vous enrichissiez au pralable le diagramme de
classes UML de tagged values. Ainsi, vous devez annoter chaque classe du tag persistence
en adjoignant la proprit persistent.
Identifiants
Pour ajouter des attributs une classe, cliquez sur licne de lattribut, puis cliquez
nouveau dans sa classe. Les identifiants sont choisis via un clic droit sur la classe puis
MDA Components>SQL Designer>Primary key Pendant la saisie du diagramme de
classes, servez-vous plutt de la fentre de gauche (Explorer) pour supprimer les lments
superflus.
254
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Associations
En double-cliquant sur un lien dassociation, vous obtenez une fentre avec diffrents onglets,
vous pouvez nommer lassociation, les rles, les multiplicits, etc. Dcochez la case Est navigable qui ne sert rien.
Pour trouver les liens de classes-associations et de composition, laissez le curseur sur le bas de
licne Association (au niveau du tout petit triangle noir).
ditions Eyrolles
255
15/02/12 07:05
Un grand nombre de points forts sont noter: rigueur de la dmarche et ergonomie la fois
sobre et puissante, documentation dtaille du module SQL Designer (principes de transformations), ractivit et efficacit du support ainsi que lexistence dun forum ddi. Les points
faibles concernent le nombre rduit de SGBD pris en compte et surtout labsence de processus
de rtroconception.
256
ditions Eyrolles
15/02/12 07:05
Chapitre 5
PowerAMC
PowerAMC (anciennement AMC*Designor)est la version franaise de loutil de modlisation
PowerDesigner de Sybase. Depuis la version 8, la notation UML (appele MOO : Modle
Orient Objet) coexiste avec les notations Merise, entit-relation et IDEF1X.
Dbutez avec un nouveau diagramme de classes (Fichier>Nouveau>Modle Orient Objet),
en choisissant comme langage objet Analyse. La palette graphique apparat. Pour visualiser
le nom des associations: clic droit sur le fond puis Prfrences daffichage>Association, et
cochez la case Nom.
Identifiants
Pour chaque classe, vous devez dfinir un identifiant primaire. Le nom de lidentifiant importe
peu, vous navez pas le modifier. Slectionnez lattribut (ou les attributs), cliquez sur la cl et
suivez le guide
ditions Eyrolles
257
15/02/12 07:05
Si lattribut napparat pas soulign aprs avoir valid cette tape, retaillez un peu la classe
la souris, a devrait fonctionner. Si vous dsirez ajouter dautres identifiants (alternatifs), le
principe est le mme, mais vous dcocherez la dernire case.
Associations
En double-cliquant sur un lien dassociation, vous obtenez plusieurs fentres pour inscrire le
nom de lassociation, les rles, les multiplicits et la composition. Dcochez la case Navigable
qui ne sert rien.
258
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Pour crer une classe-association, il suffit de rattacher une classe une association existante
par un nouveau lien dassociation et le tour est jou.
Hritage
La palette contient un symbole relatif aux liens dhritage; reliez ensuite la sous-classe sa
surclasse.
En double-cliquant sur un lien dhritage, vous obtenez une fentre qui permet de choisir la
traduction de lhritage (distinction: par dfaut, push-down: ne pas gnrer la classe parent,
push-up: ne pas gnrer la classe enfant).
ditions Eyrolles
259
15/02/12 07:05
Le rsultat saffiche en tant que nouveau schma relationnel, la fentre de gauche contient tous
les dtails de la composition des tables. ce niveau, vous pourrez renommer des colonnes et
cls trangres, mais surtout typer au mieux chaque colonne.
260
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Rtroconception
Le choix Fichier/Reverse Engineering/Base de donnes permet de construire un schma
relationnel partir dun script SQL ou par une connexion au SGBD pour extraire des tables
dun schma. Des botes de dialogue donnent accs un certain nombre doptions, notamment
le type du SGBD source, les tables traduire aprs connexion au SGBD, le nom du script
SQL, etc.
ditions Eyrolles
261
15/02/12 07:05
Rational Rose
La socit Rational Software, qui a t lorigine de la standardisation dUML, est proprit
dIBM depuis 2003. Loutil de conception qui est au catalogue dIBM sappelle toujours
Rational Rose Data Modeler. Cet outil est bas sur le formalisme UML et inclut un profil
convenant aux bases de donnes. Un profil est une proposition dune communaut et regroupe
un ensemble dlments UML (composants, strotypes, icnes, proprits) qui sappliquent
un contexte particulier et qui conservent le mtamodle dUML intact. Quand un tel profil
est valide au niveau de la notation, il est dit bien form. Ce profil na pas t adopt par les
autres diteurs de logiciels.
262
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Identifiants
Pour identifier une classe, vous devez marquer lattribut en tant que Part of Object Identity. Pour un identifiant compos, il faut rpter ce choix sur chaque attribut. Si aucun attribut
ne vous convient, vous pouvez laisser loutil ajouter un attribut de type ID-based column. Pour
le SGBD Oracle, le type de cette colonne est NUMBER(10).
ditions Eyrolles
263
15/02/12 07:05
Aprs la transformation, vous devez crer un diagramme pour visualiser le modle logique
(clic droit sur le schma puis Data Modeler>New>Data Model Diagram). Vous pouvez
modifier certaines caractristiques avant de gnrer le script SQL (noms des contraintes et
colonnes, etc.).
264
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Rtroconception
Vous devrez au pralable crer un paquetage vide. Le processus de rtroconception dmarre
du schma (compartiment Logical View/Schemas) slectionner par un clic droit (Data
Modeler>Transform to Object Model). Lassistant permet de slectionner le nom du paquetage en sortie ainsi que dautres options. Le fait de transformer un modle de donnes dans
un paquetage modifie les nouveaux lments du paquetage, mais ne dtruit ni ne modifie les
lments mis jour au niveau du modle de donnes.
Cet outil na pas volu depuis la premire version de cet ouvrage, ce qui prouve sa trs grande
robustesse. On peut toutefois regretter quil ninclue pas de pilotes pour les SGBD open source.
Visual Paradigm
Ldition Enterprise de Visual Paradigm dclare des fonctionnalits relatives SQL.
Jai donc tlcharg la version dvaluation qui permet lenregistrement de diagrammes
pendant dix jours. Une fois le diagramme de classes UML saisi, vous constaterez quil nest
pas possible de gnrer du code SQL directement. La version value en 2007 ne comportait
pas ni didentifiant de classes, ni dassociations n-aires. Cette version supporte maintenant
les associations n-aires sans inclure les identifiants de classes. Pile ce quil ne fallait pas
faire.
Ce quil est possible de faire pour lheure, cest gnrer un diagramme de classe partir dun
modle de type entit-relation. Trs pratique Au suivant!
ditions Eyrolles
265
15/02/12 07:05
WinDesign
WinDesign est le produit de la socit Cecima base Aix-en-Provence. Il est prsent sur le
march franais depuis 1995. Dvelopp initialement pour Merise/2, la notation UML arrive
en 2002 avec la version5. Depuis, loutil est en volution constante. En 2011, la version11 est
disponible.
La gamme comprend trois modules autonomes et complmentaires, qui sarticulent autour dun
rfrentiel (Database pour la conception et le reverse des bases de donnes, Business Process
pour la modlisation des processus mtier et Object pour la modlisation UML). Vous devrez
disposer du premier et du troisime module pour traduire des diagrammes de classes en script
SQL. WinDesign est un outil facile prendre en main et son interface est trs intuitive. Le seul
problme de ce produit est quil prsente encore des lacunes de traduction dun diagramme UML
vers le modle logique. Lacunes qui sont absentes si vous utilisez la notation Merise.
Pour dbuter avec un nouveau diagramme de classes: Fichier>Nouveau>Module Objet. Cliquez sur le diagramme de classes et choisissez le langage cible Analyse. Un modle vierge
dattributs, mais contenant tous les types dassociations apparat, ainsi quune palette graphique.
266
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Identifiants
Pour chaque classe, le bouton Details permet de saisir les attributs et leurs types. Lidentifiant est cocher dans la case associe.
ditions Eyrolles
267
15/02/12 07:05
Associations
La fentre de gauche contient tous les dtails du diagramme de classes. La palette permet de
crer tout type de classe, dassociation, de classe-association et de lien dhritage.
Pour visualiser le nom des associations, cliquez sur le lien, dans longlet Affichage, cochez
Nom. Il est possible de crer des associations n-aires, mais il nest pas possible de relier une
classe-association une autre classe par une association simple. Cette fonctionnalit nest
possible quau niveau de Merise en utilisant un lien identifiant. Ce qui constitue pour moi le
principal inconvnient de cet outil.
Hritage
Il nest pas possible de choisir la traduction de lhritage (distinction, push-down ou push-up).
Par dfaut, la mthode push-down est adopte. Ce choix de dcomposition nest possible quau
niveau de Merise.
268
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Le rsultat saffiche en tant que nouveau modle logique, le rfrentiel senrichit des dtails
des tables (cls et index). ce niveau, vous pourrez renommer des tables, des colonnes ou des
cls trangres.
ditions Eyrolles
269
15/02/12 07:05
Rtroconception
Le choix Fichier>Reverse Engineering>Base de donnes permet de construire un modle
logique partir dun script SQL ou par une connexion au SGBD pour extraire des tables dun
schma. Des botes de dialogue donnent accs un certain nombre doptions, notamment au
rpertoire qui contient le script SQL, aux tables traduire, etc.
270
ditions Eyrolles
15/02/12 07:05
Chapitre 5
Conclusion
Lvolution dUML, dun point de vue normatif, vers les bases de donnes, ne se concrtise
toujours pas, car la RFP (Request For Proposal) nomme Information Management Metamodel propose par lOMG en 2006 est toujours au point mort. Cette spcification visait
dfinir un mtamodle incluant diffrentes sous-parties : Common Warehouse Metamodel,
UML2 Profile for Relational Data Modeling, UML2 Profile for Logical (Entity Relationship)
Data Modeling, UML2 Profile for XML Data Modeling et UML2 Profile for Record Modeling
COBOL. Cette absence de normalisation nempche personne dutiliser UML pour concevoir
une base de donnes relationnelle, la preuve, bon nombre doutils ont implment les principaux mcanismes.
En fonction des tests raliss, des manipulations relatives linstallation, la recherche de
documentations, etc. voici le classement qui nengage que moi bien sr. Sachez aussi quil
existe des forums sur http://www.developpez.net, relatifs Rational Rose et PowerAMC.
Tableau 5-1 : Et le gagnant est
Produit
diteur
Prix indicatif
()
ditions Eyrolles
Version
value
PowerAMC
Sybase
6800
15.3
MEGA Designer
MEGA
3300
2009 SP5
IBM
2100
7.0
Objecteering
Softeam
1800
6.1
WinDesign
Cecima
2980
11.0
Softeam
2400
2.0
Visual Paradigm
Visual Paradigm
1400
8.3
MagicDraw
No Magic
1700
12.0
Note
271
15/02/12 07:05
15/02/12 07:05
AnnexeA
ditions Eyrolles
273
15/02/12 07:05
Il est prfrable dutiliser deux associations pour modliser une rencontre entre 2quipes
quune seule association plusieurs--plusieurs.
Il est prfrable de relier Stade Ville plutt que Match Ville. Cette information est
dduite sans ambiguit par le parcours des associations derouler et lieu.
Classe-association
La classe-association Equipe_Langue permet laffichage dune mme quipe dans diffrentes langues. Le libell de lquipe dpend simultanment du code quipe et du code langue.
Historique
La classe Historique permet didentifier (dune manire relative) une quipe et un groupe
par rapport lanne. Ainsi, lquipe numro34 couple lanne2006 se diffrencie de la
mme quipe (34) en 2010. Il en va de mme pour les groupes (A-2006 est diffrent de A-2010).
Les autres classes relies Equipe et Groupe (ici, seulement Match) nont pas subir le
mme traitement si elles ne ncessitent pas dtre identifies dune manire relative par rapport lanne de la comptition. Cest le cas pour une rencontre dont le numro na pas de
274
ditions Eyrolles
15/02/12 07:05
ANNEXE A
smantique temporelle et qui est relie de manire non ambigu aux deux quipes qui seront
estampilles de lanne de lvnement.
Bien que les associations sites et utiliser ne soient pas minimales (on peut les dduire
partir de tous les matchs dune anne donne), elles permettent, dune part, dviter de parcourir les matchs pour connatre les villes et les stades prvus pour chaque vnement. Dautre
part, dans des conditions initiales (aucun match nest encore jou ou prvu), elles deviennent
indispensables pour dfinir dans quelles villes et dans quels stades les rencontres auront lieu.
Une fois dfinies, elles permettent galement de vrifier la cohrence du lieu dun match ralis.
ditions Eyrolles
275
15/02/12 07:05
Plannings
276
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Plusieurs crneaux de disponibilit (jsem et hrens) peuvent tre associs une formation
(et, donc, son responsable) et un mme crneau peut concerner diffrentes formations.
En consquence, ces deux attributs ne peuvent se trouver ni dans la classe Formation, ni
dans la classe Employe.
La cration de la classe Creneau permet dhberger ces attributs. Aucun de ces deux attributs
pris isolment ne peut devenir identifiant. En revanche, le couple (jsem , hrens) identifie un
crneau unique et permet de caractriser cette classe sans recourir lidentification artificielle.
ditions Eyrolles
277
15/02/12 07:05
Attention, ne dclarez pas lassociation planning entre Employe et Creneau, car vous ne
pourriez pas connatre la formation renseigne pour un crneau et un formateur donns (erreur
de labme).
278
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Un dpt qui se trouve dans une rgion est visit par plusieurs reprsentants.
Lhistorique des visites peut se modliser laide de la classe Visite identifie par le
couple (reprsentant, jour) associ plusieurs dpts (en supposant quun reprsentant
puisse raliser diffrents dplacements le mme jour).
ditions Eyrolles
279
15/02/12 07:05
En identifiant artificiellement la classe Visite, les associations autour de cette classe sont
simplifies. En revanche, les ventuelles contraintes de planning dun reprsentant (liste
des jours de travail, par exemple) seront plus difficiles mettre en uvre.
280
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Stages
Le couple prpondrant est (Stage, Ville), car il est souhaitable de contraindre en premier les
lieux dun stage donn. Ce couple est ensuite associ plusieurs priodes. Cette modlisation
nest valable que pour une anne en cours.
Cote automobile
En ajoutant lanne au modle, on identifie une cote brute. Les autres caractristiques dun
vhicule sont associes au modle.
ditions Eyrolles
281
15/02/12 07:05
282
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Identification relative
La classe Calendrier modlise les dates de rendez-vous de chaque conseiller. En associant cette classe aux clients, on obtient lhistorique de chaque client. La date du dernier
rendez-vous dun client est modlise par un attribut de classe (pouvant toutefois tre
dduit). Lesproduits financiers souscrits sont modliss par une association plusieurs-plusieurs.
Identification artificielle
Sans utiliser une classe Virement (dote dun identifiant artificiel), il est difficile didentifier
un virement. Distinguez les actions de crdit et de dbit dun compte. Le client initiateur du
virement est modlis par une association.
ditions Eyrolles
283
15/02/12 07:05
Exercice1.6 Le RIB
Chaque compte est identifi au niveau national par les numros de banque, dagence et de
compte. La composition permet de faire migrer les identifiants de classe en classe.
284
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Sessions
La classe Session permet de connecter Formation (nature du cours), Employe (identit du
formateur) et Stagiaire (liste des participants). La note dpend du stagiaire et du cours suivi.
Salles
Le mmo du technicien dpend aussi de la session. Le temps de prsence de chaque technicien
dpend du jour et de la session.
ditions Eyrolles
285
15/02/12 07:05
Exercice1.8 Lhritage
Organisme de formation
Lhritage permet de classifier chaque employ (consultant, formateur ou technicien). La
contrainte {incomplete,overlapping} signifie quun consultant peut tre formateur, et
rciproquement.
Comptes bancaires
Lhritage suivant permet de spcialiser un client en un ventuel mandataire. Le fait quun
mandataire dun compte ne soit pas le propritaire dudit compte napparat pas ici ; une
contrainte doit tre ajoute.
286
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Ancien rgime
En dissociant le certificat du vhicule, il est ais de modliser lhistorique des immatriculations successives. Certains attributs de la classe Vehicule semblent tre des identifiants
potentiels dautres classes (genre, type du vhicule, carrosserie et nergie). Il serait intressant
de dfinir ces classes et dy associer des libells.
ditions Eyrolles
287
15/02/12 07:05
Cot du cheval
La taxe fiscale dpend de la rgion et du nombre de chevaux. La composition permet didentifier (dune manire relative) une taxe par rapport une rgion.
Nouvelle numrotation
Le nouveau systme de numrotation rend le numro dimmatriculation de tout vhicule
invariable (attribut de la classe Vehicule). Lassociation fetiche permet de distinguer le
dpartement qui facture (association prefecture) le certificat de celui qui est choisi pour tre
accol la plaque dimmatriculation.
288
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Contrles techniques
Chaque contrle technique est rattach un certificat dimmatriculation et se droule dans
un centre de contrle (qui dpend dune enseigne). La classe artificielle Visite_Technique
permet de modliser facilement lhistorique des visites dun vhicule.
ditions Eyrolles
289
15/02/12 07:05
Match.allInstances()>forAll(m |
not (m.domicile.id_equipe = m.exterieur.id_equipe))
Match.allInstances()>forAll(m |
m.domicile.poule.id_groupe = m.exterieur.poule.id_groupe)
Organisme de formation
Un consultant doit proposer entre 2 et 4crneaux par semaine pour enseigner un cours.
En considrant le rle quand (sur lassociation planning du ct de la classe Creneau):
Formation.allInstances()>forAll(f |
f.quand.size() >= 2 and f.quand.size() <4)
Un technicien doit rdiger un mmo de ces actions pour toute formation quil a en charge.
context Compte-Rendu inv memo_non_nul : self.memo <> null
Le nombre de stagiaires ne doit pas dpasser la capacit dune salle pour toute session.
En considrant les rles stagiaires (sur lassociation participer du ct de la classe
Stagiaire) et local (sur lassociation lieu du ct de la classe Salle):
Session.allInstances()>forAll(s |
s.stagiaires.size() <= s.local.capacite)
Comptes bancaires
Un mandataire dun compte nest pas le propritaire.
En considrant les rles proprio (sur lassociation proprietaire du ct de la classe
Client) et madates (sur lassociation comptes_geres du ct de la classe Mandataire):
Compte.allInstances()>forAll(c | c
c.self.proprio.excludesAll(c.mandates))
290
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Virement.allInstances()>forAll(v |
not (v.donne.id_cpte = m.reoit.id_cpte))
Virement.allInstances()>forAll(v |
(v.donne.credit-v.donne.debit) >= v.montant)
ditions Eyrolles
291
15/02/12 07:05
292
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Exercice1.13 La thalasso
La particularit de ce schma est le positionnement de lheure (entre le soin et le planning)
pour autoriser quun soin puisse tre ralis diffrents moments.
ditions Eyrolles
293
15/02/12 07:05
294
ditions Eyrolles
15/02/12 07:05
ANNEXE A
ditions Eyrolles
295
15/02/12 07:05
Titre suprme
Cette solution distingue le premier du second tour par lexistence de deux associations distinctes. Les DOM-TOM peuvent tre considrs en tant que dpartement.
296
ditions Eyrolles
15/02/12 07:05
ANNEXE A
ditions Eyrolles
297
15/02/12 07:05
Ligne qui contient lensemble des numros et le nom des lignes; Station qui comporte
lensemble des noms des stations; Jour qui contient les 3libells Lundi Vendredi,
Ligne_jour qui permet de connatre les jours de sortie de chaque bus sur sa ligne.
fonction du jour.
Horaires qui permet de connatre les heures de passage de chaque bus, un jour donn,
sur sa ligne.
La dernire relation (Position) qui liste une srie de numros nest pas conserver en termes
de table.
298
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Exercice2.5 La normalisation
Une cl possible de la relation initiale est le couple (tournoi, annee). Dans ce cas, la relation
est en premire forme normale, mais ne respecte pas la troisime forme normale car la date de
naissance dpend directement du joueur.
Le fait de dterminer cette dpendance directe permet de dduire la relation Joueurs. Par
ailleurs, le nom du tournoi doit tre considr comme un libell et donc tre identifi dune
manire particulire. Il est donc ncessaire de crer la relation Tournois qui doit tre associe la relation Joueurs par une association plusieurs--plusieurs. La relation Gagnants
joue ce rle.
ditions Eyrolles
299
15/02/12 07:05
300
ditions Eyrolles
15/02/12 07:05
ANNEXE A
VARCHAR2(20),
CONSTRAINT pk_carte
PRIMARY KEY (code_fidelite));
CREATE TABLE passager
num_carte
code_fidelite NUMBER(1),
nom_client
VARCHAR2(40),
prenom_client VARCHAR2(40),
CONSTRAINT pk_passager
PRIMARY KEY (num_carte));
CREATE TABLE place
num_vol
(
VARCHAR2(8) NOT NULL,
heure_emb
heure_arriv
min_emb
min_dep
min_arr
CONSTRAINT pk_vol
PRIMARY KEY (num_vol));
ditions Eyrolles
301
15/02/12 07:05
Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables,
index et contraintes.
TableauA-2 : Cration des cls trangres et suppression des tables
Cls trangres
302
ditions Eyrolles
15/02/12 07:05
ANNEXE A
REFERENCES aeroport(code_oaci);
REFERENCES aeroport(code_oaci);
REFERENCES vol(num_vol);
CREATE TABLE
id_ligne
id_jour
id_sta
position
heure
minute
ditions Eyrolles
horaire (
NUMBER(2) NOT
NUMBER(1) NOT
NUMBER(3) NOT
NUMBER(2) NOT
NUMBER(2),
NUMBER(2),
NULL,
NULL,
NULL,
NULL,
303
15/02/12 07:05
lib_jour VARCHAR2(30),
CREATE TABLE ligne
ON ligne_jour_sta
(id_ligne ASC,id_jour ASC);
nom_ligne VARCHAR2(60),
id_sta
ordre
NUMBER(2),
id_sta
nom_station
VARCHAR2(25),
Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables, index et
contraintes.
304
ditions Eyrolles
15/02/12 07:05
ANNEXE A
ditions Eyrolles
305
15/02/12 07:05
Contraintes SQL
Contraintes SQL
306
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Contraintes SQL
ditions Eyrolles
307
15/02/12 07:05
308
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Exercice3.4 La dnormalisation
Carte dembarquement
Le nombre de vols dj effectus par tout passager est implment par un compteur dans la
table des passagers. Les donnes additionnelles prendre en compte (prix de chaque vol, noms
de la compagnie et des aroports, ainsi que lindicateur de places disponibles) sont disposer
dans la table des vols rels. Seules les tables qui sont impactes sont prsentes dans la figure
suivante.
ditions Eyrolles
309
15/02/12 07:05
310
ditions Eyrolles
15/02/12 07:05
ANNEXE A
La profession et la liste des prnoms des personnes familires au patient se traduisent par
de simples associations binaires.
Les mots-cls, postures affiches et comportements qui sont observs dpendent de chaque
rendez-vous.
Confrres et livres
ditions Eyrolles
311
15/02/12 07:05
Les circonstances de la premire rencontre avec chacun des spcialistes donnent lieu la
cration dune classe.
Le prt de livres est modlis avec la classe-association Retour qui ne permet pas de grer
un historique par ailleurs.
312
ditions Eyrolles
15/02/12 07:05
ANNEXE A
Acteurs
Lhritage permet de distinguer un lve pilote dun instructeur. Le prix dpend du type
davion utilis. Chaque sance de vol concerne un lve pilote, un avion et, ventuellement, un
instructeur. Chaque visite mdicale est identifie par la date et le numro du membre.
ditions Eyrolles
313
15/02/12 07:05
Rendez-vous
La classe crneau dsigne dune manire gnrique soit une rservation concernant un avion,
un lve et, ventuellement, un instructeur, soit un intervalle dindisponibilits qui ne concerne
quun avion.
314
ditions Eyrolles
15/02/12 07:05
AnnexeB
Ressources
Webographie
Outils de gnration SQL tudis
Enterprise Architect: http://www.sparxsystems.com.au/products/ea.html
MagicDraw UML: http://www.magicdraw.com
MEGA Designer: http://www.mega.com/en/product/mega_designer/index.asp?l=en
Objecteering: http://www.objecteering.com
PowerAMC: http://www.sybase.fr/products/modelingdevelopment/poweramc
Rational Rose: http://www.ibm.com
Visual Paradigm: http://www.visual-paradigm.com/product/vpuml/
WinDesign: http://www.win-design.com/fr/
ditions Eyrolles
315
15/02/12 07:05
Bibliographie
[AUD 09] L. Audibert, UML2: de lapprentissage la pratique, Ellipses Marketing, 2009.
[ADI 93] M. Adiba, C. Collet, Objets et Bases de donnes, le SGBD O2, Herms, 1993.
[ATK 89] M. Atkinson, F. Bancilhon, D. de Witt, K. Dittrich, D. Maier, S. Zdonik,
The Object-Oriented database manifesto, Proceedings of the Conference Deductive and
Object-Oriented DataBases, 1989.
[BOU 99] N. Boudjilda, Bases de donnes et systmes dinformations, le modle relationnel:
langages, systmes et mthodes, Dunod, 1999.
[BRO 10] F. Brouard, R. Bruchez, C. Soutou, SQL, 3e dition, Pearson Education, 2010.
[CHE 76] P. P. Chen, The Entity-Relationship Model: Towards a Unified View of Data,
ACM Transactions on Database Systems, Vol. 1, N1, 1976.
[COD 70] E. F. Codd, A Relational Model for Large Shared Data Banks, Communications
of the ACM, Vol 13, N6, 1970.
[COD 72] E. F. Codd, Further Normalization of the Data Base Relational Model, Data
Base Systems, Courant Computer Science Symposia Series 6, Prentice Hall, 1972.
[DEL 91] C. Delobel, C. Lcluse, P. Richard, Bases de donnes: des systmes relationnels
aux systmes objets, InterEditions, 1991.
[DEL 00] P. Delmal, SQL2-SQL3, Applications Oracle, De Boeck Universit, 2000.
[FAG 81] R. Fagin, A Normal Form for Relational Databases That Is Based on Domains and
Keys, ACM Transactions on Database Systems, Vol 6, N3, 1981.
[MAK 08] G. Maksay, Y. Pigneur, Modliser par lexemple, Presses polytechniques et universitaires romandes, 2008.
[MAR 94] C. Maree, G. Ledant, SQL 2 Initiation Programmation, Armand Colin, 1994.
[MOU 76] P. Moulin, J. Randon, S. Savoysky, S. Spaccapietra , H. Tardieu , M. Teboul,
Conceptual model as database design tool, Proceedings of the IFIP Working conference
on Modelling in Database Management Systems , G.M. Nijssen Ed., North-Holland, 1976.
316
ditions Eyrolles
15/02/12 07:05
ANNEXE B
Ressources
[MUL 99] R. J. Muller, Database Design for Smarties, Using UML for Data Modeling,
Morgan-Kaufman, 1999.
[MUL 00] P. A. Muller, N. Gaertner, Modlisation objet avec UML, Eyrolles, 2edition,
2000.
[NAN 01] D. Nanci, B. Espinasse, B. Cohen, Ingnierie des systmes dinformation: Merise
deuxime gnration, Vuibert, 4edition, 2001.
[SOU 08] C. Soutou, Programmer Objet avec Oracle, 2edition, Vuibert, 2008.
[TAR 79] H. Tardieu, D. Nanci, D. Pascot, A Method, A Formalism and Tools for Database
Design (three years of Experimental Practice), Proceedings of the International Conference
on Entity-Relationship Approach to Systems Analysis and Design, 1979.
[VAL 87] P. Valduriez, Objets complexes dans les systmes de bases de donnes relationnels, Techniques et science informatique, Vol. 6, N5, 1987.
[WAR 03] J.Warmer, A. Kleppe, The Object Constraint Language: Getting Your Models
Ready for MDA, Addison-Wesley, 2003.
ditions Eyrolles
317
15/02/12 07:05
15/02/12 07:05
Index
A
abme 69
agrgat 52
agrgation 51
composition 52
modle relationnel 120
partage 52
allInstances 80
ALTER TABLE 155
AMC*Designor 257
association 20
agrgation 51
binaire 28
drive 72
hritage 58
n-aire 41
navigable 72
plusieurs--plusieurs 29
modle relationnel 117
SQL 161
qualifie 72
rflexive 34
SQL 159
un--plusieurs 29
modle relationnel 117
SQL 157
ditions Eyrolles
un--un 28
modle relationnel 118, 119
SQL 158
attribut 20
atomique 66
calcul 68
modle relationnel 112
monovalu 84
multivalu 83
temporel 60
B
bag 76
base de donnes
hirarchique 2
relationnelle 4
rseau 4
BCNF 88
BUILD IMMEDIATE 223
C
cardinalit 30
cast 229
CHECK 155
319
15/02/12 07:05
Chen 18
chronologie 61
classe 20, 22
classe-association 37
modle relationnel 121
rflexive 40
cl trangre 112
cl primaire 112
COBOL 2
Codd 18, 112
collection 227
composition 52
SQL 161
contraintes
OCL 76
SQL 154
CREATE TABLE 155
D
database 152
dclencheur 166
dnormalisation 180, 218
dpendance
directe 87, 133
lmentaire 85, 132
fonctionnelle 81
modle relationnel 131
multivalue 142
Index
E
ENABLE QUERY REWRITE 223
entit 20
exclusivit 79
F
FOREIGN KEY 155
forme normale
Boyce-Codd 88, 139
cinquime 89, 142
deuxime 84, 136
domaine-cl 89, 141
premire 83, 133
quatrime 89, 142
troisime 86, 138
H
hritage 58
distinction 121
modle relationnel 121
push-down 121
push-up 121
SQL 165
historisation 62
dterminant 131
identifiant 23
alternatif 28
artificiel 26
naturel 25
identification artificielle 56
disjoint 79
incomplete 79
DKNF 89
dpendant 131
320
ditions Eyrolles
15/02/12 07:05
Index
isEmpty 76
isUnique 80
K
key preserved 205
O
Objecteering 253
OCL 76
oclIsKindOf 80
OID 227
OLAP 5
OLTP 5
libell 23
ordered 76
M
MagicDraw 244
PARENT 240
partition 79
MCD 19
MEGA 245
PowerDesigner 257
Merise/2 19
mthode 231
privilge 208
modle entit-association 18
proposition incomplte 64
proprit 20
Modelio 249
Morejon 53
multiplicit 30
multiset 229
R
rafrachissement 222
RAISE_APPLICATION_ERROR 167
Rational Rose 114, 262
redefined 76
REFERENCING 240
NIAM 19
rification 54
NO_DATA_FOUND 167
relation 112
normalisation 129
Rochfeld 53
rle 36
ditions Eyrolles
321
15/02/12 07:05
Index
UNIQUE 155
schma 152
schma conceptuel 11
SELF 231
sequence 76
seq 76
snapshot 221
SQL 151
SQL2 151
SQL3 151
subsets 75
SQL 174
substantification 54
UPPER 206
user 152
V
varray 228
ventilateur 68
Visual Paradigm 265
volumtrie 144
vue
complexe 198
matrialise 221
modifiable 203
monotable 200
multitable 202
objet 226
simple 198
T
table
dassociation 117
de jointure 117
key preserved 205
Tardieu 18
totalit 79
transitivit 70
type 228
U
UML 5
profil 262
union 76
322
X
xor 75
SQL 176
ditions Eyrolles
15/02/12 07:05