Académique Documents
Professionnel Documents
Culture Documents
Ulm2 PDF
Ulm2 PDF
2ee dition
Rattach l'quipe MACAO du laboratoire IRIT et au dpartement Rseaux et Tlcoms de l'IUT de Avec la collaboration de Frdric Brouard
Blagnac, il intervient autour des bases de donnes et des technologies de l'information (XML et Web
services) en licence et mastre professionnels, ainsi que pour le compte de la socit Orsys. Il est galement
l'auteur des ouvrages SQL pour Oracle et Programmer avec MySQL, parus aux ditions Eyrolles.
UML 2
Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
Au sommaire
ISBN : 978-2-212-13413-1
Code article : G13413
Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classes-
782212 134131
C. Soutou
associations 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
Avec 30
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au exercices
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues corrigs
9
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.
29,90
soutou 15/02/12 11:31 Page 1
2ee dition
Rattach l'quipe MACAO du laboratoire IRIT et au dpartement Rseaux et Tlcoms de l'IUT de Avec la collaboration de Frdric Brouard
Blagnac, il intervient autour des bases de donnes et des technologies de l'information (XML et Web
services) en licence et mastre professionnels, ainsi que pour le compte de la socit Orsys. Il est galement
l'auteur des ouvrages SQL pour Oracle et Programmer avec MySQL, parus aux ditions Eyrolles.
UML 2
Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
Au sommaire
ISBN : 978-2-212-13413-1
Code article : G13413
Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classes-
C. Soutou
associations 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
Avec 30
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au exercices
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues corrigs
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.
soutou titre 9/02/12 10:53 Page 2
UML 2
pour les
bases de donnes
2e dition
dU mme AUTEUR
Autres ouvrages
H. Balzert. UML2.
N11753, 2006, 88 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.
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
1 Le niveau conceptuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Analyse des besoins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Premiers exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Le jargon du terrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Ne confondez pas traitements et donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le dictionnaire des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Les concepts majeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Un peu dhistoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
ditions Eyrolles V
Dautres formalismes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Attribut ou information?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Classe ou entit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Qui dit libell, dit identifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Concrets ou abstraits? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Artificiels ou naturels?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Plusieurs, cest possible?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Les associations binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Multiplicits versus cardinalits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Le maximum est prpondrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Le minimum est-il illusoire?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Rflexivit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Les rles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Les associations plus complexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Les classes-associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Formalismes entit-association. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Rattacher une classe-association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Classe-association rflexive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Les associations n-aires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Savoir les interprter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Le langage du formalisme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Quelques btises du Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Quelques cas valides. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Comment se prmunir?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Les agrgations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Lidentification relative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Notations avec Merise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Rification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Exemples avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Lidentification artificielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
VI ditions Eyrolles
Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Identification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Hritage multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Aspects temporels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Modlisation dun moment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Modlisation de chronologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Modlisation de lhistorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
La dmarche adopter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Dcomposition en propositions lmentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Propositions incompltes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Chronologie des tapes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Quelques conseils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Les erreurs classiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Les concepts inutiles de UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Un seul schma valable? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Rgles mtier et contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Contraintes prdfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Contraintes personnalises (langage OCL). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Contraintes dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Rgles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Les dpendances fonctionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Vrification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Premire forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Deuxime forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Troisime forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Forme normale de Boyce-Codd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Forme normale domaine-cl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Quatrime et cinquime formes normales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Bilan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Dnormalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Les rgles de Brouard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
ditions Eyrolles IX
Modelio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Objecteering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
PowerAMC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Hritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Rational Rose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Visual Paradigm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
WinDesign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Hritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
X ditions Eyrolles
ditions Eyrolles XI
B Ressources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Webographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Bibliographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
ditions Eyrolles 1
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.
2 ditions Eyrolles
Les inconvnients rcurrents sont toujours la forte dpendance entre les donnes stockes et
les mthodes daccs. Les chanages internes impliquent forcment une programmation com-
plexe. 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
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 enre-
gistrements).
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 3
Bien que rsolvant quelques limitations du modle hirarchique et annonant des perfor-
mances 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:
Normalisation (dpendances fonctionnelles) et thorie des ensembles (algbre relation-
nelle).
Cohrence des donnes (intgrit rfrentielle).
Langage SQL (dclaratif et normalis).
Accs aux donnes optimis (choix du chemin par le SGBD).
Indexation, etc.
Les liens entre les enregistrements de la base de donnes sont raliss non pas laide de poin-
teurs physiques, mais laide des valeurs des cls trangres et des cls primaires. Pour cette
raison, le modle relationnel est dit modle valeurs.
4 ditions Eyrolles
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
Cet ouvrage sadresse toutes les personnes qui sintressent la modlisation et la conception
des bases de donnes.
Les architectes, chefs de projet, analystes, dveloppeurs et responsables mthode habitus
au modle entit-association y trouveront les moyens de raisonner avec le diagramme de
classes UML.
Les novices dcouvriront une mthode de conception, des rgles de normalisation et de
nombreux exercices mettant en jeu tous les niveaux du processus dune base de donnes.
ditions Eyrolles 5
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 modli-
sation 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 manuelle-
ment 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 trans-
formation de modles et dadopter une dmarche afin dutiliser loutil de manire optimale.
6 ditions Eyrolles
Guide de lecture
Cet ouvrage sorganise en 5chapitres qui suivent les tapes de modlisation illustres dans la
figure suivante.
ditions Eyrolles 7
Louvrage commence par dcrire la construction dun diagramme de classes UML en respec-
tant 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.
8 ditions Eyrolles
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 biblio-
graphie. Lindex propose les termes utiliss dans la dfinition des concepts et de certaines
instructions SQL.
ditions Eyrolles 9
Les pictogrammes
10 ditions Eyrolles
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 auto-
matiser, 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.
ditions Eyrolles 11
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 nom-
breux 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-performances-
petites.
Premiers exemples
Une organisation
Considrons le club de plonge qui dcide dabandonner la gestion papier de toutes ses pres-
tations. 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 docu-
ments 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 ditions Eyrolles
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 13
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 (dom-
mage). 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.
14 ditions Eyrolles
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.
Lors de la phase danalyse, il est souvent difficile de faire cracher le morceau aux inter-
views. 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 com-
mence 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 15
16 ditions Eyrolles
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);
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 17
de ces concepts, vous serez en mesure de concevoir votre base de donnes quel que soit le
domaine dapplication.
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 pro-
posant 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 Anglo-
Saxons, 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 ditions Eyrolles
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 19
Terminologie
Chaque concept de base se divise en sous-concepts comme le prsente le tableau suivant.
Tableau 1-3: Les trois concepts de base
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
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 Modle conceptuel de donnes (Merise)
Attribut ou information?
Lors de lanalyse de lexistant ou du domaine modliser, vous devrez faire la distinction entre
attribut et information.
20 ditions Eyrolles
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, calcu-
les 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.
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 21
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 sui-
vante 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;
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 ditions Eyrolles
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 dcou-
vrirez des nouvelles classes dfinir.
constructeur, au sein du service des mines, sur les cartes grises, etc.
Les prnom et nom (prenom_client et nom_client) du passager dun vol se trouveront
coup sr au niveau des cartes dembarquement, dans les e-mailings publicitaires, les
programmes de fidlit, etc.
Afin dviter en amont des probables redondances dinformations au niveau de la base de
donnes, vous devrez, pour chaque attribut de la sorte, y associer un identifiant ayant un nom
explicite. Ainsi, id_produit devra identifier nom_produit, id_type_voiture identifiera
type_voiture, id_client identifiera nom_client et prenom_client, etc.
Dans lexemple suivant, il apparat au premier abord trois attributs. Le titre des thmes tels
Lentretien et Les pices dusure (lib_theme), le titre des sujets (lib_sujet) et le
numro des pages du catalogue (num_page).
ditions Eyrolles 23
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
24 ditions Eyrolles
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 dparte-
ment 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 lexploita-
tion 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);
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 25
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
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
26 ditions Eyrolles
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 uti-
liser 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 27
Les autres identifiants potentiels (appels secondaires ou alternatifs) napparatront pas for-
cment 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.
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.
28 ditions Eyrolles
Les associations un--plusieurs (hirarchies) sont trs courantes car omniprsentes dans
notre environnement. titre dexemple, une compagnie arienne (classe) possde (associa-
tion) des avions (classe). Tout avion nappartient qu une seule compagnie.
Les associations plusieurs--plusieurs sont aussi courantes car trs prsentes dans notre
Nous pouvons maintenant relier les deux classes de lexemple du catalogue des services auto-
mobiles, 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 29
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 sman-
tique 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 repr-
sente le trajet complet dun train.
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 ditions Eyrolles
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.
0..1 0,1
1..1 (ou 1) 1,1
0..* (ou *) 0,N (ou 0,n)
1..* 1,N (ou 1,n)
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 multipli-
cits 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 31
Vous naurez pas le droit lerreur lorsque vous dterminerez le nombre maximum dune
multiplicit. En effet, le processus de transformation au niveau logique qui gnre les cls
trangres est bas sur le nombre maximum de toutes les multiplicits. La condition princi-
pale de ce processus est la suivante:
SI (multiplicite_maximum > 1) ALORS
Modlisation A
SINON
Modlisation B
FIN SI
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.
La mise en uvre de contraintes SQL sera ncessaire pour implmenter chaque multiplicit
minimale. Pour les cas simples des associations un--un et un--plusieurs, une contrainte
NOT NULL pourra suffire (processus en gnral automatis par les outils de conception). Pour
les autres cas, et par ordre de complexit, vous devrez ajouter des contraintes CHECK, des
colonnes (calcules ou pas), programmer des dclencheurs ou des transactions.
32 ditions Eyrolles
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
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 33
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 relation-
nels 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 (ventuel-
lement) 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 ditions Eyrolles
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 35
Ce nest pas la solution la plus simple pour modliser un tel graphe. Dune part, la rflexi-
vit 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 for-
tiori lorsque cette association est de nature rflexive.
Nous verrons, par la suite, quil est possible de relier une classe-association UML une asso-
ciation 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 ditions Eyrolles
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.
Les classes-associations
Une classe-association UML:
est une classe rattache une association plusieurs--plusieurs;
possde ventuellement des attributs, mais pas didentifiant;
est rattache ventuellement dautres classes.
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 37
Premier exemple
Dans lexemple suivant, la classe-association Comp_Aero modlise tous les couples (com-
pagnie, 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 indi-
querait 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 classe-
association.
Vous ne savez pas comment appeler une classe-association?Composez son nom avec les
prfixes des deux classes connectes.
38 ditions Eyrolles
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 39
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 auto-
routes. 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 dis-
tincts 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 ditions Eyrolles
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 41
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 rela-
tionnel 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 mca-
nisme dassociation. Enfin, vous dcouvrirez comment dcomposer une association n-aire en
une ou plusieurs classes-associations.
Avec le formalisme de Merise, les cardinalits sont lues du sens entit concerneentits
connectes.
Dans les autres formalismes entit-association et avec UML, les multiplicits dune classe sont
lues partir des autres classes de lassociation (sens classes connectesclasse concerne).
Pour les deux formalismes, une association n-aire peut contenir des attributs (par le biais
dune classe-association pour UML).
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 dex-
primer que des logiciels sont installs un certain jour (date_install) sur des serveurs par
des dpartements.
42 ditions Eyrolles
(Departement, Serveur);
ct Serveur, (0,n) signifie quun serveur peut tre associ aucun ou plusieurs couples
(Departement, Logiciel);
ct Departement, (0,n) signifie quun dpartement peut tre associ aucun ou plu-
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 dob-
jets 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 com-
pagnie (ou pour plusieurs).
ditions Eyrolles 43
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 pr-
cise 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 compa-
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 ditions Eyrolles
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
nimporte quelle anne dans nimporte quel type de bureau (mme si le bureau ou la voi-
ture 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 45
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 ditions Eyrolles
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 47
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 qua-
lifications 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 ditions Eyrolles
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 classes-
associations. 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 multipli-
cits 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 incom-
patibilits). 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 49
Une deuxime alternative consiste considrer les couples (logiciel, dpartement) qui recen-
sent 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). Lasso-
ciation 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 recen-
sent toutes les autorisations (vitant ainsi dinstaller un logiciel sur un serveur non accessible
par le dpartement). Cette solution est symtrique la prcdente.
50 ditions Eyrolles
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 judicieu-
sement 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. Lagrga-
tion 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 51
La composition requiert quun objet appartienne au plus une composition dobjets un instant
donn. Cette appartenance peut changer au cours du temps. La composition implique en outre
une forme de propagation entre le composite et le composant (en particulier la destruction du
composite entranera obligatoirement la destruction de ses composants). Cette agrgation est
reprsente par un losange noirci du ct du rle de la classe composite appele agrgat .
Lagrgation partage autorise quun objet appartienne simultanment diffrentes compo-
sitions dobjets. Cette agrgation est reprsente par un losange clair du ct du rle de la
classe concerne par lassociation appele agrgat .
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.
par un numro et le numro de son immeuble. Par ailleurs, il est entendu que sa destruction
entranera la destruction des appartements associs.
52 ditions Eyrolles
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 sup-
pression 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 53
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 associa-
tion): 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 ditions Eyrolles
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-associa-
tion pour dcrire chaque mission, alors que le second considre une mission comme un objet
artificiel quil est ncessaire didentifier.
ditions Eyrolles 55
Les diffrences vont se rencontrer au niveau logique. Il faudra alors prfrer la solution opti-
male 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 ban-
caires?
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 asso-
cier 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, lidentifica-
tion 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 ditions Eyrolles
Considrons lexemple des installations de logiciels (section Les associations n-aires). Bien
que la classe-association soit une solution satisfaisante, lidentification artificielle est aussi pos-
sible. Une installation est modlise en tant quobjet abstrait reli aux classes qui interviennent
dans lassociation.
ditions Eyrolles 57
Mise en pratique
Aidez-vous de lidentification artificielle pour:
complter lexercice1.5 Les comptes bancaires en modlisant les virements internes
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
ommercial de rcuprer les attributs nup, nom et salaire qui sont gnriques. Chaque
C
classe (gnrique ou spcifique) peut tre relie dautres en exprimant davantage de sman-
tique quen labsence dhritage.
58 ditions Eyrolles
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: existe-
t-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, lh-
ritage 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 59
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_nais-
sance, 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 ditions Eyrolles
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 61
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 vo-
lution) 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 das-
sociation), 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-asso-
ciation 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 ditions Eyrolles
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 63
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.
On peut modliser Client, Produit et Fournisseur en tant que classe. Achat sera la
classe-association reliant Fournisseur au couple (Client, Produit).
Propositions incompltes
Il ne doit pas exister de proposition incomplte. Ainsi toute proposition mettant en jeu plu-
sieurs 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 ditions Eyrolles
Il est peu probable que la rponse chacune de ces propositions soit oui. Vous traduirez ainsi
chaque proposition en associations binaires en incluant ventuellement des classes-associations.
ditions Eyrolles 65
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 catastro-
phiques lors de la monte en charge de la base.
lire sur le sujet : http://blog.developpez.com/sqlpro/p10070/langage-sql-norme/base-
de-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, Succur-
salle, 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 ditions Eyrolles
Pour complter cette modlisation, il faudrait connecter la classe Ville la classe Adresse.
ditions Eyrolles 67
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 com-
pose 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 ditions Eyrolles
Dans le second exemple, sil est vrai quun serveur est responsable de plusieurs tables, il appa-
rat 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 ser-
veurs 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 69
70 ditions Eyrolles
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 71
Donnes Tout passager dun vol commercial dispose dun sige numrot.
prpondrantes Un client cumule des miles chaque voyage.
Donnes et un peu de Un passager peut embarquer avec un bagage pas trop volumineux ni trop lourd.
traitement Un passager peut disposer ses affaires dans un coffre bagages.
Traitements Le solde du compte du client ne doit pas tre ngatif pour pouvoir commander un billet.
prpondrants Le montant du billet est dbit sur le compte du client ds la commande.
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 ques-
tions 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.
dune autre classe relie par une association. Concept analogue au private des
langages objet, il ne peut tre implment que par programmation. Dans lexemple
suivant, lassociation prefere vise interdire que tout candidat puisse connatre ses
lecteurs;
association drive : dductible de plusieurs autres associations. Prfixe par le symbole /,
grce une cl. Lexemple suivant est extrait de larticle Applying UML and Patterns: UML
Class Diagrams de C. Larman (disponible sur http://www.informit.com). Le qualificateur
itemID enrichit lidentifiant de la classe Product Catalog. Ainsi, tout couple (numro
de produit, itemID) est associ une seule description.
72 ditions Eyrolles
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 73
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, dclen-
cheurs 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 dou-
tils 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 diff-
rentes faons [AUD 09]:
en plaant la contrainte ct dun attribut ou lextrmit dune association;
en plaant la contrainte sur une flche en pointills joignant les deux lments de modle
74 ditions Eyrolles
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 75
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 ditions Eyrolles
Lexemple suivant sinspire de [MAK 08] et prsente deux contraintes bases sur des ensembles
dobjets.
ditions Eyrolles 77
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);
78 ditions Eyrolles
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.
Couverture Non-couverture
Disjonction (cas A) (cas B)
Merise/2: Partition(XT) Merise/2 : Exclusivit(X)
UML: {complete,disjoint} UML : {incomplete,disjoint} (par dfaut)
Non-Disjonction (cas C) (cas D)
Merise/2: Totalit (T) Merise/2 : pas de contrainte (par dfaut)
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 79
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 mod-
lisation lourdes de consquences au niveau de la base de donnes.
80 ditions Eyrolles
ditions Eyrolles 81
num_dossierjour_depart;
num_dossiernum_classe;
num_dossiernum_voiture;
num_dossiernum_siege;
num_trainville_depart (si on considre quun numro de train dsigne le mme
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_dossiernum_client (si on considre que tous les passagers sont fichs);
num_clientnom_passager.
Pour connatre la composition de chaque train (voiture12 en tte, voiture 14 en position2,
etc.), il convient de dterminer de quoi dpend la position dune voiture: du trajet un jour
donn. Ces deux attributs interviennent donc dans lidentifiant qui ncessite un troisime
composant (le numro de la voiture ou la position) afin de pouvoir dterminer le quatrime
(la position ou le numro de la voiture). Les deux dpendances suivantes sont donc quiva-
lentes:
num_train, jour_depart, num_voitureposition;
num_train, jour_depart, positionnum_voiture.
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 iden-
tifiants. 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 rela-
tionnel, il ne pose pas de problme au premier abord.
82 ditions Eyrolles
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 sou-
ligner 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 83
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 ditions Eyrolles
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 classe-
association.
ditions Eyrolles 85
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 ditions Eyrolles
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 87
88 ditions Eyrolles
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 redon-
dances et anomalies de mises jour.
En considrant que la catgorie dun avion est en relation directe avec son envergure, lasso-
ciation 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 89
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 qualifica-
tions 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 ditions Eyrolles
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 environne-
ment 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 91
92 ditions Eyrolles
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 93
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
attributs ne peut assurer ce rle);
classement qui concerne une quipe (et non un groupe). En effet chaque quipe doit tre
associe un seul classement, alors quun groupe peut tre associ plusieurs classements
(4 par groupe en fait).
Les six classes du schma sont prsent au complet. Vous devez les relier par des associations
judicieusement choisies.
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 ditions Eyrolles
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 95
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 ditions Eyrolles
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 diff-
rentes priodes. Les classes principales sont Stage, Ville et Periode.
ditions Eyrolles 97
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 ditions Eyrolles
Noubliez pas que vous devez tre en mesure dimprimer la demande ce tableau.
Associations binaires
Compltez le diagramme suivant pour modliser:
le nom du propritaire de chaque compte et la date douverture du compte;
les mandataires (clients non propritaires) des comptes et leurs divers droits asso-
cis (retrait, virement ou clture). Notez quun mandataire ne peut pas grer plus de
5comptes.
ditions Eyrolles 99
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;
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.
Modlisez un premier schma en fonction des attributs que vous devez considrer:
immatriculation, date_immat, mise_circu, nom_departement, taxe_region;
Cot du cheval
Modlisez le fait que chaque rgion (nom_region) fixe annuellement (annee) par dlib-
ration 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.
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 v-
nements 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.
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.
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 gale-
ment prendre en compte.
repas);
le taux de TVA dpend de chaque produit;
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.
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).
Lors de chaque sortie, plusieurs plongeurs sont embarqus. Ces plongeurs composent dif-
frentes 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 palan-
ques 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 profon-
deur maximale atteinte au cours de la plonge (duree_plongee et profondeur_max). Ces
deux chiffres doivent tre consigns.
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
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.
Le niveau logique
Ce chapitre dtaille la deuxime tape de conception dune base de donnes: il sagit dla-
borer 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);
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);
notamment);
calculer la volumtrie prvisionnelle.
Ce chapitre se divise en trois parties. La premire partie dcrit les concepts du modle rela-
tionnel. 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 lint-
grit 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.
Attribut : reprsentation dune information atomique qui prfigure une colonne dune
table. Un domaine de valeurs devrait tre dfini ainsi que dventuelles rgles de validation
(contraintes).
Cl primaire: attribut(s) identifiant une relation qui prfigure(nt) la primary key de la table.
Cl trangre: attribut(s) qui rfrence(nt) une tierce relation, prfigure(nt) une foreign key
de la table.
Le diagramme suivant illustre les principaux concepts du modle relationnel. Trois relations
simples sont prsentes (aucune des cls primaires ou trangres nest compose et il ny a pas
plusieurs cls trangres par relation). Chacune de ces relations dispose dune cl primaire
(note pk par loutil Power AMC). Les cls trangres sont notes fk.
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.
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.
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 asso-
ciation.
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.
En appliquant cette rgle lexemple suivant, la relation Aeroport prfigure la table de mme
nom.
Lattribut identifiant de la relation parent migre dans la relation enfant et devient cl trangre
dans la relation fils issue de lassociation.
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 tran-
gre.
Toute association plusieurs--plusieurs devient une relation qui porte le nom de lassociation.
La cl primaire de cette relation est compose par le couple des identifiants des deux relations
(initiales) qui sont dduites des classes connectes lassociation initiale. Chaque attribut cl
primaire de la nouvelle relation est une cl trangre vers la relation initiale associe.
De lapplication de cette rgle lexemple suivant, manent deux nouvelles relations. Liden-
tifiant 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 struc-
ture du schma relationnel gnr. Seule une programmation permettra de mettre en uvre
une telle contrainte.
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).
Toute association rflexive doit tre considre comme une association binaire et en fonction
des multiplicits existantes, il convient dadopter une des rgles prcites.
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.
En renommant les colonnes cls trangres provenant dassociations rflexives, vous amlio-
rerez 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.
Vous devez vous demander comment driver un schma relationnel lorsquune classe-asso-
ciation 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).
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).
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.
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 iden-
tifiants 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.
Ce principe de transformation est idal lorsque les multiplicits de vos associations sont sus-
ceptibles 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.
Il est vident que toutes les associations n-aires alourdissent les cls des tables dasso-
ciation. 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 asso-
ciative (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 duni-
cit 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.
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');
La requte suivante est correcte:
SELECT COUNT(SAV_APPAREIL) / CAST(COUNT(DISTINCT D) AS FLOAT) NB_
APPAREIL_PAR_JOUR FROM T_SAV
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.
domaine de valeurs).
Actualit: les donnes doivent tre jour au bon moment (vrification priodique?).
Comprhension: le nom dune colonne ne doit pas permettre dambigut sur son sens.
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).
Vous trouverez quelques pistes en parcourant les liens suivants:
documentation dOracle : http://download.oracle.com/docs/cd/E11882_01/appdev.112/
e17125/adfns_sqltypes.htm#i1006173;
types SQL-Server, MySQL et Access: http://www.w3schools.com/sql/sql_datatypes.asp;
documentation de MySQL: http://dev.mysql.com/doc/refman/5.0/en/choosing-types.html-
Billet;
propos de SQL-Server : http://www.techrepublic.com/blog/10things/10-common-
questions-about-sql-server-data-types/355.
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.
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 rper-
cute 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).
Enfin, il nexiste pas doutil daide au processus de normalisation (Embarcadero Schema Exa-
miner reste trs pauvre tout en tant relativement cher). Ainsi, encore une fois, la ressource
humaine est ncessaire et cest une bonne nouvelle. Pas doff-shore en Inde et ce ne sont pas
des programmeurs roumains qui vont normaliser vos bases de donnes.
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 fonctionna-
lit particulire. Le terme qui conviendrait mieux les qualifier serait donc: dpendances
de valeurs.
Plusieurs attributs peuvent apparatre dans la partie gauche dune DF. Plusieurs attributs peu-
vent 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.
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 res-
tant 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
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 cons-
quence, 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 dimma-
triculation 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
La relation Product ne respecte pas la rgle de la premire forme normale, car la colonne
color est prvue pour stocker diffrentes couleurs.
dans la majorit des lignes de la table. Modifier le libell dune couleur en particulier peut
savrer dangereux si toutes les rpercussions ne se produisent pas.
Lincohrence dinformations, suite une mise jour dfectueuse ou une insertion non
matrise, mne des rsultats errons (il est probable que la requte qui doit extraire les
produits de couleur bleue laide dune condition WHERE color LIKE %Blue% ne retrouve
pas le produit456
La complexit assure pour toutes les requtes relatives aux coloris, de mme que leur
Toutes les requtes relatives aux coloris se programmeront par jointures rendues perfor-
mantes 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 dcompo-
sables, 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))
Et deux intervalles se chevauchant: [33..52] et [47..49[.
Il ne semble pourtant pas vident de savoir ce quune contrainte dunicit (cl de la rela-
tion par exemple) doit faire dans un tel cas de figure!
On dit bien quun attribut doit tre atomique. Ce nest pas pour autant que lon devrait
cacher la non-atomicit par une fantaisie de modlisation Je mexplique. On trouve
souvent dans les tables des attributs de mme nom numrot de 1 , par exemple
TELEPHONE1, TELEPHONE2, TELEPHONE3 Et, pourquoi pas, 4, 5, voire 10tlphones?
Dans ce cas, cest un tableau de tlphone que lon devrait mettre. Or, un tableau nest
lvidence pas atomique, donc il se doit dtre transform en entit part entire.
Plus vicieux sont les attributs similaires non numrots. Par exemple: TELEPHONE_FIXE,
TELEPHONE_MOBILE, TELECOPIE, TELEPHONE_DOMICILE, TELEPHONE_TRAVAIL!
L aussi, la transformation est indispensable : une entit TELEPHONE avec un typage
des tlphones suffit. Songez donc au jour o votre patron vous demandera de retrouver
le client dont le numro de tlphone est 7578451579 Si vous avez dissmin vos
numros de tlphone travers plusieurs colonnes, voire plusieurs tables, ne vous tonnez
pas que la requte soit un veau et que tous les index du monde ny pourront rien en plus
de rendre les tables bovines
Tout attribut doit tre valu. Cette rgle est aussi imprative, contrairement SQL o
une colonne dune table peut ne pas avoir de valeurs (dans ce cas, le marqueur NULL y
figure, mais ce nest gnralement pas trs bon pour les performances). Se pose alors
la question de savoir comment modliser lorsque linformation est connue de manire
partielle?
Prenons par exemple le cas dune personne modlise traditionnellement avec les attributs
nom, prnom et date de naissance:
PERSONNE_PHYSIQUE (PRP_ID INT auto, PRP_NOM A60, PRP_PRENOM A32,
PRP_NAISSANCE DATE), lidentifiant tant PRP_ID.
Mais si nous ne connaissons pas le nom, ou le prnom ou la date de naissance dune per-
sonne, 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 op-
rations 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!
Une relation est en deuxime forme normale si la premire forme normale est assure et si
tout attribut non cl est en dpendance fonctionnelle lmentaire avec la cl.
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?).
les coloris possibles de ce produit. Modifier un poids peut savrer risqu si tous les coloris
ne se sont pas impacts simultanment.
Lincohrence dinformations, suite une mise jour incomplte dun poids.
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.
Une relation est en troisime forme normale si elle respecte la deuxime forme normale
et si les dpendances fonctionnelles entre la cl primaire et les autres attributs sont toutes
directes. En dautres termes, aucun attribut ne doit pouvoir tre identifi par autre chose que
la cl (primaire ou candidate).
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.
associs.
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.
Une relation est en forme normale de Boyce-Codd [COD74] si elle respecte la troisime forme
normale et que le seul dterminant (membre gauche dune DF) de la relation est la cl pri-
maire (mis par dventuels identifiants alternatifs). En dautres termes, aucune dpendance
vers une partie de la cl ne doit exister.
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.
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.
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.
Une relation est en forme normale domaine-cl si toutes les contraintes qui sappliquent la
relation sont la consquence logique des contraintes de domaines et des contraintes de cl.
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 vo-
luent. 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.
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.
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.
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 asso-
ciation 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:
Une fois toutes les tables renseignes en termes de volume, un calcul thorique peut tre ex-
cut. Dans lexemple suivant, il faudra disposer de plus de 103Mo.
Vous venez sans doute de constater quun bon modle de donnes est constitu dune mul-
tiplicit 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 mul-
tiples 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 infor-
mations 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/petites-
tables-grandes-tables-consequences-performances/.
Exercices
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.
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 relation-
nels (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:
SQL1 ISO9075:1986 (SQL86/SQL1) ISO 9075:1989 (SQL89);
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).
Vous trouverez les dernires spcifications relatives la gestion de donnes et SQL en
particulier sur http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_tc_browse.
htm?commid=45342.
Le langage SQL vous permettra de dclarer, de manipuler et dinterroger des donnes, mais
aussi de contrler leur accs. De plus, vous pourrez intgrer vos donnes dans vos programmes
crits dans tout langage (COBOL, C, C++, Java avec JDBC, C#, etc.), car il existe des API pour
chaque langage et chaque SGBD du march.
Les instructions du langage SQL qui nous intressent sont principalement CREATE TABLE
qui cre une table et ALTER TABLE qui permet dajouter une contrainte une table existante.
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 clus-
terise.
La notion de schma na pas la mme signification selon certains SGBD: certains lassi-
milent 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.
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.deve-
loppez.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.
Bien souvent, les dveloppeurs se posent cette question cruciale: Faut-il que je fasse
plusieurs schmas SQL ou est-il prfrable de passer par plusieurs bases? Mais cette
question est idiote! En effet, schmas et bases de donnes nont absolument pas le mme
rle et prendre lun pour lautre comme le fait MySQL peut savrer catastrophique tous
les plans (logique, physique et administratif).
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 fonc-
tionnels. 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 syn-
chrone 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 respon-
sable 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.
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:
UNIQUE (colonne1 [,colonne2]...)
PRIMARY KEY (colonne1 [,colonne2]...)
FOREIGN KEY (colonne1 [,colonne2]...)
REFERENCES nom_table_parent(colonne1 [,colonne2]...)
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;
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.
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.
tudions prsent les mcanismes qui rgissent le passage dun modle relationnel au script
SQL. Les exemples traits sont identiques ceux du chapitre 2 de manire ce que vous
puissiez retrouver facilement le modle conceptuel initial. Suivant ces principes, pour tous vos
futurs schmas, vous devriez obtenir des scripts SQL analogues.
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.
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).
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).
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, lins-
tant 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 den-
treprise 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 math-
matiques 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.
Vrifiez que la cl primaire de la table dassociation est compose de deux cls trangres.
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 lassocia-
tion 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.
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.
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
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.
Si vous ne souhaitez pas travailler avec des dclencheurs, vous devrez coder ces rgles
mtier dans vos procdures catalogues.
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 gale-
ment 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.
Contrainte de partition
La contrainte de partition (notation {complete, disjoint} avec UML) interdit les scna-
rios suivants.
Un personnel appartient simultanment plusieurs classifications (commercial, manager
ou administratif).
Un personnel nest associ aucune classification (ni commercial, ni manager, ni admi-
nistratif).
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 ras-
semble toutes les colonnes des tables gnriques.
Contrainte dexclusivit
La contrainte dexclusivit interdit le fait quun personnel appartienne plusieurs classifica-
tions (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 inva-
lide (personnel la fois commercial et administratif).
-- commercial
ALTER TABLE personnel INSERT INTO personnel VALUES
ADD CONSTRAINT ck_exclusivite (100,'F. Brouard',500,47800,NULL,NULL,NULL,NULL);
CHECK 1 row created.
((projet IS NOT NULL AND nbhmois IS NOT NULL
AND prime IS NULL
AND syndicat IS NULL -- manager
AND nbheuressupp IS NULL) INSERT INTO personnel VALUES
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.
Contrainte de totalit
La contrainte de totalit permet des multiqualifications mais interdit les personnels non quali-
fis. 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).
-- aucune qualification
INSERT INTO personnel VALUES
(103,'C. Bravo',457,NULL,NULL,NULL,NULL,
NULL);
*
ERROR at line 1:
ORA-02290: check constraint (SOUTOU.CK_
TOTALITE) violated
Absence de contrainte
Si lhritage ne prsente pas de restriction, aucune contrainte SQL nest mettre en uvre.
Dans le cas de la modlisation des hritages, les contraintes poser portent souvent sur
plusieurs tables. Rien nempche une contrainte SQL de table de sintresser aux donnes
prsentes dans dautres tables sauf certains diteurs de SGBDR!
En effet, Oracle sinterdit toutes contraintes de table portant sur une autre table et il ny
a aucune chappatoire possible, pareil pour MySQL En revanche, pour PostGreSQL,
comme pour MS SQL Server, mme sils nacceptent pas de rfrencer directement une
autre table dans une contrainte de validation CHECK , il est possible de biaiser en crant
une fonction utilisateur (ou UDF pour User Defined Function) qui lit une autre table afin
de fournir linformation ncessaire la contrainte.
En plus des contraintes classiques, la norme SQL dcrit les assertions de porte multi-
base. Pour une raison dfendable, la plupart des diteurs de SGBDR ont prfr ne pas
implmenter les assertions leur prfrant les dclencheurs (triggers en anglais). On reste
cependant confondus devant les simplicits dexpression dune assertion face lalterna-
tive CHECK+UDF ou trigger.
Voici un exemple dassertion pour assurer lexclusion mutuelle dans le cas dun hritage
entre les personnes physiques et les personnes morales:
CREATE ASSERTION a_exclure_personne AS
CHECK NOT EXISTS(SELECT *
FROM t_personne_physique AS pp
INNER JOIN t_personne_morale AS pm
ON pp.prs_id = pm.prs_id);
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;
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 forma-
tion 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.
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.
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.
ALTER TABLE consultant INSERT INTO projet VALUES (1, 40700, 'Viaduc de Millau');
ADD CONSTRAINT ck_xor CHECK INSERT INTO formation VALUES (10,'No SQL','SGBD Open source');
((id_proj IS NULL INSERT INTO consultant VALUES (100,1,NULL,'Fred
Brouard',SYSDATE,200);
AND formid IS NOT NULL)
INSERT INTO consultant VALUES (101,NULL,10,'Rudi
OR Bruchez',SYSDATE,150);
(id_proj IS NOT NULL
AND formid IS NULL))); SQL> INSERT INTO consultant VALUES (102,NULL,NULL,'Jean
Problem',SYSDATE,10);
ERROR at line 1: ORA-02290: check constraint
(SOUTOU.CK_XOR) violated
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 sappa-
rente 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 condi-
tions (viter lerreur des tables mutantes, avec Oracle: ORA-04091: table name is
mutating, trigger/function may not see it).
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
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 nor-
malises 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 sen-
siblement 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.
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.
Les inconvnients de ce mcanisme sont dune part lespace utilis, dautre part le risque din-
cohrence 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 redon-
dances 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.
Dans une base de donnes relationnelle, donc fortement transactionnelle, rien ne justifie
a priori la dnormalisation. Il faut avant tout normaliser au maximum. La dnormali-
sation 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 lex-
ploitation. 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 syst-
matiquement 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: lhypernormalisa-
tion (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 inconv-
nients. 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.
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 informa-
tions 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 lordon-
nancement des donnes (tri). La gestion des majuscules/minuscules, accents, ligatures
(par exemple, cur), etc. doit tre prvue.
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 pren-
nent 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 transac-
tions 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 dsas-
treuses 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 sou-
vent 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.
Exercices
Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.
code_OACI Le code des aroports est un classement gographique dfini par 4lettres
lOrganisation de laviation civile internationale.
heure_dep_reel, Heures de dpart et darrive relles. Les heures vont de 0 23, et Heures et
heure_arr_reelle, les minutes de 0 59. minutes:
min_dep_reel, 2chiffres
min_arr_reelle
Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.
id_jour, id_ligne Identifiants des jours (3occurrences), des lignes (moins dune Numriques de 1
et id_sta centaine) et des stations (plus de 300). 3positions
lib_jour, nom_ligne Libells des jours (30 caractres), des lignes (60 caractres) et Caractres de taille
et nom_station des stations (25 caractres). variable
heure, minute Heures et minutes de passage. Les heures vont de 0 23, les Numriques de
minutes de 0 59. 2positions
(mme si, parfois, il arrive quon atterrisse l o on dcolle, mais ce nest pas prvu au
programme en gnral).
Le nom des types de cartes est unique.
Les donnes dans les colonnes heures et minutes prvisionnelles doivent tre valides (entre
0 et 23 pour les heures, tous les quarts dheure pour les minutes).
Les heures de dpart sont infrieures dau moins une heure celles darrive.
Horaires de bus
Programmez les contraintes suivantes.
Pas plus de trois libells Lundi vendredi, Samedi et Dimanche et jours fris).
Les horaires sont afficher sous la forme hh.min (avec hh de 6 22 et min de 0 59).
Seuls les clients arrivs depuis plus de 4ans peuvent dtenir jusqu 5adresses e-mails.
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.
Horaires de bus
Rduisez le plus possible le schma relationnel normalis des horaires de bus quitte dnor-
maliser 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 pour-
suivre 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
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!
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, CES-
SNA-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 aro-
nefs 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 nces-
saires.
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 dis-
posent 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 mmo-
rise 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 gale-
ment 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.
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 mat-
rialises qui combinent les concepts de table et de vue).
La majeure partie des oprations ralises sur une vue sont des extractions, mais dans cer-
tains 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 consid-
res 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.
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 din-
terface 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!
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).
Une vue est cre laide dune instruction SELECT appele requte de dfinition. Cette
requte interroge une ou plusieurs tables, vues (ou vues matrialises). Une vue se recharge
chaque fois quelle est interroge.
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
seffectuera conformment au prdicat de la requte de dfinition.
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.
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.
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.
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.
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
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.
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 (cer-
tains 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.
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 dclen-
cheur 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 pr-
sente, 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).
Oprations Rsultat
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.
View created.
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 cer-
taine mesure, lorsquune table source est dite protge par sa cl (key preserved).
Une table est dite protge par sa cl (key preserved) si sa cl primaire est prserve dans
la clause de jointure et se retrouve en tant que colonne de la vue multitable (pouvant jouer le
rle de cl primaire de la vue).
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.
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.
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.
Requte Rsultat
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).
Oprations Rsultat
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 dpar-
tement 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 tem-
porelle. La vue suivante restreint les accs une table dun point de vue temporel.
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 prf-
rable 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).
GRANT SELECT ON soutou.v_employes_JO Accs pour tous (sous rserve dun jour ouvr) en lecture
TO PUBLIC; sur la vue v_employes_JO du schma soutou.
Simplification de requtes
Considrons la table jobs qui appartient aussi au schma hr dOracle. Une partie des donnes
est prsente ci-aprs.
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 dparte-
ment 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.
30 PU_CLERK 5
30 PU_MAN 1
40 HR_REP 1
50 SH_CLERK 20
50 ST_CLERK 20
50 ST_MAN 5
60 IT_PROG 5
70 PR_REP 1
80 SA_MAN 5
80 SA_REP 29
90 AD_PRES 1
90 AD_VP 2
100 FI_ACCOUNT 5
100 FI_MGR 1
110 AC_ACCOUNT 1
110 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.
30 PU_CLERK 5 3000
30 PU_MAN 1 7000
40 HR_REP 1 5000
50 SH_CLERK 20 3000
50 ST_CLERK 20 2992
50 ST_MAN 5 3000
60 IT_PROG 5 6000
70 PR_REP 1 6000
80 SA_MAN 5 10080
80 SA_REP 29 6008
90 AD_PRES 1 19920
90 AD_VP 2 15000
La troisime vue cumule le salaire mdian de chaque type demploi pour tout dpartement.
N_DEPTID_EMPLOI CUMUL
---------- ------------ ---------
80SA_MAN 50400
80SA_REP 174232
90 AD_PRES 19920
90 AD_VP 30000
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.
Lexemple le plus classique de simplification par les vues est la prsentation de linfor-
mation 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
TVA_TAUX FLOAT)
INSERT INTO T_TVA VALUES
('Super Rduit', '1982-07-01', 5.50),
('Super Rduit', '1989-01-01', NULL),
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!
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.
Toute suppression est possible travers la vue v2 (sous Suppression correcte (enfants absents):
rserve de lexistence dautres contraintes rfrentielles). DELETE FROM v1
WHERE department_id = 900;
Le raisonnement sur deux tables peut se gnraliser une hirarchie dassociations ou diff-
rentes associations issues de la mme table.
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 P1.PCG_NUMERO_POINT = P2.PCG_NUMERO_POINT
GROUP 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 VARCHAR(16) NOT NULL PRIMARY KEY,
PCL_SAISIE_FINALISE BOOLEAN NOT NULL DEFAULT 0);
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 T_CONTACT_CTC
WHERE CTC_ID IN (SELECT CTC_ID FROM T_COMMANDE_CMD);
Dnormalisation
Les vues peuvent aider dnormaliser un schma relationnel. Il est possible de crer volon-
tairement 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.
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.
Son formalisme a t labor par Peter Chen en 1976. Il compte des entits et des asso-
ciations. 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 traduc-
tion 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 rela-
tions, 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 nen-
tranent 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 com-
mune 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.
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 pos-
sible 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
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 dis-
ponibles 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.
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. Cepen-
dant, 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 automatique-
ment. 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.
CREATE MATERIALIZED VIEW LOG ON hr.departments d Cration du journal des oprations qui sera vid
WITH PRIMARY KEY, ROWID tous les 5jours.
PURGE REPEAT INTERVAL '5' DAY;
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 rsul-
tats 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 dagrga-
tion 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
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
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 pro-
grammeurs 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
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 } ];
OF nom_type prcise le nom du type qui forme la structure de la vue.
WITH OBJECT IDENTIFIER prcise la cl primaire de la table source.
UNDER spcifie lhritage de vue.
requte_SELECT requte de dfinition interrogeant une ou plusieurs tables ou vues.
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.
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.
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 conjointe-
ment 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.
Oracle dispose de nombreux oprateurs qui permettent de manipuler des collections au sein
de requtes (CARDINALITY, MULTISET EXCEPT, MULTISET INTERSECTION, MULTISET
UNION, etc.).
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.
CREATE OR REPLACE TYPE BODY departement_t AS Codage des deux mthodes. Le mot-cl SELF
MEMBER FUNCTION nbre_emp RETURN NUMBER IS dsigne lobjet qui appelle la mthode.
total NUMBER := 0;
BEGIN
SELECT COUNT(id_emp) INTO total
FROM TABLE
(SELECT emps_nt FROM v_obj_dept_emps
WHERE n_dept=SELF.n_dept);
RETURN total;
END nbre_emp;
MEMBER PROCEDURE ajoute_emp(id IN NUMBER,
pr IN VARCHAR, no IN VARCHAR, da IN DATE)
IS
BEGIN
INSERT INTO hr.employees
(employee_id,first_name,last_name,email,
phone_number, hire_date,job_id,salary,
commission_pct,manager_id,department_id)
VALUES (id,pr,no,'mail',NULL,da,'IT_PROG',
NULL,NULL,NULL,SELF.n_dept);
COMMIT;
END ajoute_emp;
END;
BEGIN
Employe ajoute
SELECT VALUE(d) INTO obj
Effectif pour 20 = 3
FROM 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.
Une mthode peut implmenter une transaction, car tous les mcanismes du langage proc-
dural du SGBD sont disponibles (validation, invalidation, points de sauvegarde, curseurs et
exceptions).
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 suppres-
sion). Le corps du dclencheur doit donc explicitement prendre en compte la contrainte.
linstar des dclencheurs traditionnels, il nest permis de programmer quun seul dclen-
cheur INSTEAD OF par table.
Considrons les vues relationnelles cres dans le premier paragraphe et quil ntait pas pos-
sible de mettre jour.
Shipping 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 pour-
ront tre modifis. Le dclencheur INSTEAD OF devra se charger de rechercher le code du
manager.
Le scnario suivant illustre deux modifications de la vue qui conduisent mettre jour la table
(la vue aussi par consquent).
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.
SQL> INSERT INTO v_dept_calculs Le nouveau dpartement Eyrolles Prod. est dirig par lemploy
(departement,manager) Austin (numro105).
VALUES ('Eyrolles Prod.',
'Austin');
1 row created.
Pour modifier cette vue en insertion, le dclencheur INSTEAD OF doit insrer des informa-
tions 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).
Le scnario suivant dcrit deux insertions dans la vue et la vrification des donnes dans les
tables au final.
SQL> INSERT INTO v_dept_emps Ajout dun nouveau dpartement et dun nouvel
(ndept, departement, id_emp, prenom, nom, employ.
DEPARTMENT_ID DEPARTMENT_NAME
-------------- ------------------------------
99 Eyrolles Design.
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 lins-
truction TABLE();
ne sexcute pas pour une mise jour globale de la collection NESTED TABLE (dans son
Dans le corps du dclencheur, il est possible davoir accs aux valeurs des donnes de la col-
lection 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);
Tableau 4-34: Dclencheur INSTEAD OF pour linsertion dans une collection dune vue
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.
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/
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 (proc-
dure denregistrement et multiples vrifications): nombre dobjets limits, fichiers en lecture
seule, le tout pour 27jours! Au secours!
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 lex-
plorateur, choix Properties, onglet Characteristics et trouvez le type adquat dans la liste
Expression Type.
Associations
Pour crer une classe-association, crez la classe du milieu et, laide du bouton Link, reliez
cette classe lassociation.
Un assistant en quatre tapes est alors lanc. Le modle relationnel est, par la suite, cr dans
le paquetage.
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.
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 Persis-
tant dans la fentre en bas droite dans longlet Persistent).
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. Lanno-
tation dune association vous permet de fixer les multiplicits.
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.
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.
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 navi-
gable 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).
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 transfor-
mations), 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.
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
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.
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).
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.
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.
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.
Identifiants
Pour identifier une classe, vous devez marquer lattribut en tant que Part of Object Iden-
tity. 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).
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.).
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 paque-
tage 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!
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. Cli-
quez 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.
Identifiants
Pour chaque classe, le bouton Details permet de saisir les attributs et leurs types. Lidenti-
fiant est cocher dans la case associe.
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.
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.
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.
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 Meta-
model 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 princi-
paux 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.
Associations binaires
Les associations binaires les plus conformes aux 6classes du schma sont les suivantes.
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 diff-
rentes 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 rap-
port lanne de la comptition. Cest le cas pour une rencontre dont le numro na pas de
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 par-
courir 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 ra-
lis.
Inscriptions
Il est prfrable de dfinir une classe pour hberger lattribut codent qui est un identifiant
potentiel. Le crneau de disponibilit (jsem et hrens) dpend du consultant responsable de
la formation.
Plannings
Le crneau de disponibilit (jsem et hrens) dpend dsormais de la formation et plus
seulement du consultant responsable.
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.
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).
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).
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.
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.
Identification relative
La classe Calendrier modlise les dates de rendez-vous de chaque conseiller. En asso-
ciant 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.
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.
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.
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.
Ancien rgime
En dissociant le certificat du vhicule, il est ais de modliser lhistorique des immatricu-
lations 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.
Cot du cheval
La taxe fiscale dpend de la rgion et du nombre de chevaux. La composition permet didenti-
fier (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.
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.
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):
context Formation inv plusieurs_creneaux :
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):
context Session inv nb_stagiaires :
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):
context Compte inv mandataire_proprio :
Compte.allInstances()>forAll(c | c
c.self.proprio.excludesAll(c.mandates))
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.
Titre suprme
Cette solution distingue le premier du second tour par lexistence de deux associations dis-
tinctes. Les DOM-TOM peuvent tre considrs en tant que dpartement.
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 asso-
cie la relation Joueurs par une association plusieurs--plusieurs. La relation Gagnants
joue ce rle.
Script SQL
Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables,
index et contraintes.
Script SQL
Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables, index et
contraintes.
Carte dembarquement
Le tableau suivant prsente les contraintes programmer pour implmenter les diffrentes
rgles mtier.
TableauA-5 : Programmation des rgles mtier (carte dembarquement)
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.
Aucun contrle possible de la cohrence de la composition des stations sur une ligne de bus
horaires dun jour sur une station donne et pour toutes les lignes).
Rendez-vous
La classe Rendez_vous modlise le Qui est venu la voir et quelle heure.
La classe Population recense la classification enfant, ado, femme, homme ou couple.
Chaque patient est associ une classification un instant donn, mais peut consulter dans
diffrents contextes au cours de sa vie.
La classe Connaissance recense les diffrents moyens de connaissance (bouche oreille,
autre patient, docteur, etc.).
Le retard du patient dpend de ses rendez-vous.
Le nombre maximum de 3 personnes durant la consultation apparat dans lassociation
entre un patient et son rendez-vous.
Le mode de rglement de la sance dpend de chaque rendez-vous.
Lanxit est ventuellement note pour un rendez-vous et un patient donns.
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
Les confrres et professions donnent lieu la cration de classes associes.
Les rendez-vous avec ses confrres et les consultations externes de ses patients utilisent la
mme classe: Rendez_vous.
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.
Flotte
Il est ncessaire de distinguer les aronefs en tant quobjets concrets (laronef rel) et quobjets
abstraits (type davion). La puissance et le prix horaire caractrisent lobjet abstrait. Limmatri-
culation identifie un objet rel qui est caractris par un nombre dheures de vol de la cellule
et du moteur.
Une visite de maintenance peut tre identifie par une date et limmatriculation de lappa-
reil visit. Chaque visite concerne un plan de maintenance (nombre dheures dutilisation) et
ncessite la commande de plusieurs pices qui sont achetes un prix qui peut voluer dans
le temps.
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.
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.
Ressources
Webographie
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 uni-
versitaires 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.
[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 relation-
nels, 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.
A un--un 28
modle relationnel 118, 119
abme 69
SQL 158
agrgat 52
attribut 20
agrgation 51
atomique 66
composition 52
modle relationnel 120 calcul 68
partage 52 modle relationnel 112
allInstances 80 monovalu 84
ALTER TABLE 155 multivalu 83
temporel 60
AMC*Designor 257
association 20
agrgation 51 B
binaire 28
bag 76
drive 72
hritage 58 base de donnes
n-aire 41 hirarchique 2
navigable 72 relationnelle 4
plusieurs--plusieurs 29 rseau 4
modle relationnel 117 BCNF 88
SQL 161 BUILD IMMEDIATE 223
qualifie 72
rflexive 34
SQL 159
C
un--plusieurs 29 cardinalit 30
modle relationnel 117 cast 229
SQL 157 CHECK 155
Chen 18 E
chronologie 61
ENABLE QUERY REWRITE 223
classe 20, 22
entit 20
classe-association 37 exclusivit 79
modle relationnel 121
rflexive 40
F
cl trangre 112
FOREIGN KEY 155
cl primaire 112
forme normale
COBOL 2
Boyce-Codd 88, 139
Codd 18, 112
cinquime 89, 142
collection 227 deuxime 84, 136
composition 52 domaine-cl 89, 141
SQL 161 premire 83, 133
contraintes quatrime 89, 142
OCL 76 troisime 86, 138
SQL 154
CREATE TABLE 155 H
hritage 58
D distinction 121
modle relationnel 121
database 152
push-down 121
dclencheur 166 push-up 121
dnormalisation 180, 218 SQL 165
dpendance historisation 62
directe 87, 133
lmentaire 85, 132 I
fonctionnelle 81
identifiant 23
modle relationnel 131
alternatif 28
multivalue 142
artificiel 26
dpendant 131 naturel 25
dterminant 131 identification artificielle 56
disjoint 79 incomplete 79
DKNF 89 intgrit rfrentielle 214
isEmpty 76 O
isUnique 80
Objecteering 253
OCL 76
K oclIsKindOf 80
key preserved 205 OID 227
OLAP 5
OLTP 5
L
ON NESTED TABLE 240
libell 23 ordered 76
overlapping 79
M
MagicDraw 244 P
materialized view 221 PARENT 240
materialized view log 224 partition 79
MCD 19 PowerAMC 16, 257
MEGA 245 PowerDesigner 257
Merise/2 19 PRIMARY KEY 155
mthode 231 privilge 208
modle entit-association 18 proposition incomplte 64
modle relationnel 112 proprit 20
Modelio 249
Morejon 53
R
multiplicit 30
rafrachissement 222
multiset 229
RAISE_APPLICATION_ERROR 167
Rational Rose 114, 262
N redefined 76
nested table 228 REFERENCING 240
NIAM 19 rification 54
NO_DATA_FOUND 167 relation 112
normalisation 129 Rochfeld 53
NOT NULL 117, 156 rle 36
S UNIQUE 155
UPPER 206
schma 152
user 152
schma conceptuel 11
SELF 231
sequence 76 V
seq 76
varray 228
snapshot 221
ventilateur 68
SQL 151
Visual Paradigm 265
SQL2 151
volumtrie 144
SQL3 151
vue
subsets 75
complexe 198
SQL 174
matrialise 221
substantification 54
modifiable 203
monotable 200
T multitable 202
table objet 226
dassociation 117 simple 198
de jointure 117
key preserved 205
W
Tardieu 18
totalit 79 WinDesign 53, 266
transitivit 70 WITH CHECK OPTION 198, 204, 233
type 228 WITH OBJECT IDENTIFIER 227
WITH READ ONLY 198
U
UML 5
X
profil 262 xor 75
union 76 SQL 176