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

Page 1

Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
SQLspot, entreprise d'audit et de conseil de bases de donnes et de serveurs SQL, et intervient dans
diffrentes coles (ISEN Toulon, Cesi Aix-en-Provence et Cesi Lyon, Cnam Toulon et universit Toulouse II).
Distingu MVP (Most Valuable Professional) par Microsoft titre d'expert SQL Server, il anime depuis plus
de 10 ans la clbre rubrique sqlpro consacre aux base de donnes et au langage SQL sur le site
www.developpez.com.
Concevoir une base de donnes grce UML 2
S'adressant aux architectes logiciels, chefs de projet, analystes, dveloppeurs, responsables mthode et tudiants en
informatique, cet ouvrage explique comment utiliser bon escient le diagramme de classes UML pour concevoir une base de
donnes, puis comment traduire correctement ce diagramme en langage SQL. Sa dmarche est indpendante de tout diteur
de logiciel et aisment transposable, quel que soit l'outil de conception choisi.
Le livre dcrit d'abord la construction dun diagramme de classes UML l'aide de rgles de validation et de normalisation.
Tous les mcanismes de drivation d'un modle conceptuel dans un schma relationnel sont clairement comments l'aide
d'exemples concrets. Le modle logique est ensuite optimis avant l'criture des scripts SQL. La dernire tape consiste
implmenter les rgles mtier en programmant des contraintes, dclencheurs ou transactions SQL. Le livre se clt par une
tude comparative des principaux outils de modlisation sur le march.
Entirement rcrite, cette deuxime dition est commente par Frdric Brouard, expert SQL Server et auteur de nombreux
ouvrages et articles sur le langage SQL. maille d'une centaine de schmas et d'illustrations, elle est complte par 30
exercices inspirs de cas rels.

Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classesassociations Agrgations Identification relative et artificielle Hritage Aspects temporels Dmarche adopter
Rgles mtier et contraintes Rgles de validation Le niveau logique. Du conceptuel au relationnel Typez vos
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.

29,90

Au sommaire

782212 134131

qui sadresse cet ouvrage ?


Aux tudiants en IUT, IUP, Deug et coles d'ingnieur, ainsi qu leurs professeurs
Aux professionnels souhaitant s'initier la modlisation de bases de donnes avec UML
tous les concepteurs de bases de donnes dsirant migrer de Merise UML

C. Soutou

Christian Soutou est matre de confrences l'universit Toulouse II et consultant indpendant.


Rattach l'quipe MACAO du laboratoire IRIT et au dpartement Rseaux et Tlcoms de l'IUT de
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.

2ee dition

11:31

UML 2 pour les bases de donnes

15/02/12

Code article : G13413


ISBN : 978-2-212-13413-1

soutou

Christian Soutou
Avec la collaboration de Frdric Brouard

UML
2
UML 2

pour
les
pour les
bases
de
donnes
bases de donnes
Modlisation
- Normalisation
Modlisation
- Normalisation
Gnration SQL - Outils
Gnration SQL - Outils
2ee dition

Avec 30
exercices
corrigs

Page 1

Frdric Brouard est spcialiste du langage SQL et des bases de donnes relationnelles. Il dirige
SQLspot, entreprise d'audit et de conseil de bases de donnes et de serveurs SQL, et intervient dans
diffrentes coles (ISEN Toulon, Cesi Aix-en-Provence et Cesi Lyon, Cnam Toulon et universit Toulouse II).
Distingu MVP (Most Valuable Professional) par Microsoft titre d'expert SQL Server, il anime depuis plus
de 10 ans la clbre rubrique sqlpro consacre aux base de donnes et au langage SQL sur le site
www.developpez.com.
Concevoir une base de donnes grce UML 2
S'adressant aux architectes logiciels, chefs de projet, analystes, dveloppeurs, responsables mthode et tudiants en
informatique, cet ouvrage explique comment utiliser bon escient le diagramme de classes UML pour concevoir une base de
donnes, puis comment traduire correctement ce diagramme en langage SQL. Sa dmarche est indpendante de tout diteur
de logiciel et aisment transposable, quel que soit l'outil de conception choisi.
Le livre dcrit d'abord la construction dun diagramme de classes UML l'aide de rgles de validation et de normalisation.
Tous les mcanismes de drivation d'un modle conceptuel dans un schma relationnel sont clairement comments l'aide
d'exemples concrets. Le modle logique est ensuite optimis avant l'criture des scripts SQL. La dernire tape consiste
implmenter les rgles mtier en programmant des contraintes, dclencheurs ou transactions SQL. Le livre se clt par une
tude comparative des principaux outils de modlisation sur le march.
Entirement rcrite, cette deuxime dition est commente par Frdric Brouard, expert SQL Server et auteur de nombreux
ouvrages et articles sur le langage SQL. maille d'une centaine de schmas et d'illustrations, elle est complte par 30
exercices inspirs de cas rels.
qui sadresse cet ouvrage ?
Aux tudiants en IUT, IUP, Deug et coles d'ingnieur, ainsi qu leurs professeurs
Aux professionnels souhaitant s'initier la modlisation de bases de donnes avec UML
tous les concepteurs de bases de donnes dsirant migrer de Merise UML
Au sommaire
Le niveau conceptuel. Analyse des besoins Concepts majeurs Identifiants Associations binaires et n-aires Classesassociations Agrgations Identification relative et artificielle Hritage Aspects temporels Dmarche adopter
Rgles mtier et contraintes Rgles de validation Le niveau logique. Du conceptuel au relationnel Typez vos
colonnes Normalisation Calculs de volumtrie Le niveau physique. Le langage SQL Passage du logique au
physique Programmation des contraintes Dnormalisation Le niveau externe. Vues relationnelles (SQL2) Vues
matrialises Vues objet (SQL3) Dclencheurs INSTEAD OF Les outils du march : de la thorie la pratique.

C. Soutou

Christian Soutou est matre de confrences l'universit Toulouse II et consultant indpendant.


Rattach l'quipe MACAO du laboratoire IRIT et au dpartement Rseaux et Tlcoms de l'IUT de
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.

2ee dition

11:31

UML 2 pour les bases de donnes

15/02/12

Code article : G13413


ISBN : 978-2-212-13413-1

soutou

Christian Soutou
Avec la collaboration de Frdric Brouard

UML
2
UML 2

pour
les
pour les
bases
de
donnes
bases de donnes
Modlisation
- Normalisation
Modlisation
- Normalisation
Gnration SQL - Outils
Gnration SQL - Outils
2ee dition

Avec 30
exercices
corrigs

soutou titre

9/02/12

10:53

Page 2

UML 2

pour les
bases de donnes
2e dition

dU mme AUTEUR
C. Soutou. SQL pour Oracle (5e dition).
N13329, 2011, 720 pages.
C. Soutou. Programmer avec MySQL.
N12869, 2011, 450 pages.

Autres ouvrages
P. Roques. Mmento UML 2.4 (2e dition).
N13268, 2011, 14 pages.
P. Roques. UML 2 par la pratique (7e dition).
N12565, 2009, 396 pages.
P. Roques. UML 2 par la pratique (6e dition).
N13344, 2011, 370 pages (format semi-poche).
P. Roques et F. Valle. UML 2 en action (4e dition).
N12104, 2007, 396 pages.
H. Balzert. UML2.
N11753, 2006, 88 pages.
F. Valle. UML pour les dcideurs.
N11621, 2005, 282 pages.
H. Bersini. La programmation oriente objet. Cours et exercices en UML 2 avec Java 6, C# 4, C++, Python, PHP 5 et LinQ.
N12806, 2011, 644 pages.
P. Roques. Mmento PHP 5 et SQL (2e dition).
N12457, 2009, 14 pages.

p2 Soutou.indd 1

15/02/12 09:13

soutou titre

9/02/12

10:53

Page 1

Christian Soutou

UML 2

pour les
bases de donnes
2e dition

DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage,
sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre Franais dexploitation du droit de copie,
20, rue des Grands Augustins, 75006 Paris.
Groupe Eyrolles, 2007, 2012, ISBN: 978-2-212-13413-1

Copyright Soutou.indd 1

15/02/12 09:12

Louise et mile-Barthlmy, mes grands-parents,


lisabeth, ma mre,
pour Paul, mon fils.

Livre SOUTOU.indb 3

15/02/12 07:04

Livre SOUTOU.indb 4

15/02/12 07:04

Table des matires


Avant-propos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

volution des modles de donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

Les fichiers et COBOL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Le modle hirarchique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le modle rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le modle relationnel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






2
2
3
4

qui sadresse cet ouvrage?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

Comment utiliser UML pour les bases de donnes? . . . . . . . . . . . . . . . . . . . . . . . . . . . 

Les diagrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Les outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

6
6

Guide de lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

Niveau conceptuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transformation et normalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
criture des scripts SQL et programmation des contraintes. . . . . . . . . . . . . . . . . . . . . . . . .
Les vues SQL2 et SQL3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les outils du march . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Annexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .








9
9
9
9
9
9

Les pictogrammes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

10

Contact avec lauteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

10

Le niveau conceptuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Analyse des besoins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

12

Premiers exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le jargon du terrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ne confondez pas traitements et donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le dictionnaire des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






12
14
16
16

Les concepts majeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

17

Un peu dhistoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

18

ditions Eyrolles

Livre SOUTOU.indb 5

15/02/12 07:04

UML 2 pour les bases de donnes

Table des matires

Dautres formalismes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Attribut ou information?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classe ou entit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






19
20
20
21

Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

23

Qui dit libell, dit identifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Concrets ou abstraits? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Artificiels ou naturels?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plusieurs, cest possible?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






23
24
25
27

Les associations binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

28

Multiplicits versus cardinalits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Le maximum est prpondrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le minimum est-il illusoire?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rflexivit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les rles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les associations plus complexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .









30
32
32
34
36
37
37

Les classes-associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

37

Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formalismes entit-association. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rattacher une classe-association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classe-association rflexive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .







38
39
39
40
41

Les associations n-aires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

41

Savoir les interprter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Le langage du formalisme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Quelques btises du Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Quelques cas valides. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Comment se prmunir?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .








42
43
44
46
46
51

Les agrgations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

51

Lidentification relative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

53

Notations avec Merise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Rification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemples avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

VI

Livre SOUTOU.indb 6







53
54
54
55
56

Lidentification artificielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

56

Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

58

ditions Eyrolles

15/02/12 07:04

Table des matires

UML 2 pour les bases de donnes

Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Identification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58
59
59
59
60

Aspects temporels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

60

Modlisation dun moment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Modlisation de chronologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modlisation de lhistorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






60
61
62
63

La dmarche adopter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

64

Dcomposition en propositions lmentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Propositions incompltes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chronologie des tapes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Quelques conseils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les erreurs classiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les concepts inutiles de UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Un seul schma valable? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .









Rgles mtier et contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 


Contraintes prdfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contraintes personnalises (langage OCL). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contraintes dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58







64
64
65
66
68
72
74

74






75
76
78
80

Rgles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

80

Les dpendances fonctionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 


Vrification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Premire forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Deuxime forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Troisime forme normale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Forme normale de Boyce-Codd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Forme normale domaine-cl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Quatrime et cinquime formes normales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

81
82
83
84
86
88
89
89
91

Bilan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

91

Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

91

Le niveau logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  111


Concepts du niveau logique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  112
Du conceptuel au relationnel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  115
Transformation des classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

ditions Eyrolles

Livre SOUTOU.indb 7

116

VII

15/02/12 07:04

UML 2 pour les bases de donnes

Table des matires

Transformation des associations un--plusieurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 


Transformation des associations plusieurs--plusieurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Cas particuliers des associations binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Transformation des classes-associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Transformation de lhritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
La solution universelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Les transformations viter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Traduire ou ne pas traduire?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

117
117
118
121
121
124
125
126
128

Typez vos colonnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  128


La normalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  129
Dpendances fonctionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

131
144

Calculs de volumtrie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  144


Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  147

Le niveau physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  151


Le langage SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  151
Les schmas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schmas SQL ou bases?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schmas et propritaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






152
153
154
154

Passage du logique au physique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  156


Traduction des relations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traduction des associations un--plusieurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traduction des associations un--un. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traduction des associations rflexives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traduction des agrgations (composition). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traduction des associations plusieurs--plusieurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solution universelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .










156
157
158
159
161
161
163
164

Programmation des contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  165


Hritage par distinction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage en push-down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage en push-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contraintes multitables (assertions). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contraintes prdfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contraintes personnalises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

VIII

Livre SOUTOU.indb 8









165
168
169
173
174
177
180

ditions Eyrolles

15/02/12 07:04

Table des matires

UML 2 pour les bases de donnes

Dnormalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  180
Les rgles de Brouard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

183
185

Exercices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  186

Le niveau externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  195


Les vues relationnelles (SQL2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  197
Cration dune vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vues monotables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vues complexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vues modifiables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Confidentialit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simplification de requtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contrles dintgrit rfrentielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnormalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .











198
198
200
202
203
207
208
214
218

Les vues matrialises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  221


Rcriture de requtes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  221
Cration dune vue matrialise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  222
Le rafrachissement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  224

Les vues objet (SQL3). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  226


tapes respecter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vue contenant une collection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rendre une vue modifiable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmer des mthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






227
227
230
231

Les dclencheurs INSTEAD OF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  233


Mise jour dune vue complexe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  233
Mise jour dune vue multitable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  237
Mise jour de tables et vues objet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  239

Les outils du march: delathorie la pratique. . . . . . . . . . . . . . . . . . . . . . . .  243


MagicDraw. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  244
MEGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  245
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ditions Eyrolles

Livre SOUTOU.indb 9







245
246
247
248
248

IX

15/02/12 07:04

UML 2 pour les bases de donnes

Table des matires

Modelio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  249
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






250
250
251
252

Objecteering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  253
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






254
255
255
256

PowerAMC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  257
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .








257
258
259
259
260
261

Rational Rose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  262


Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






263
264
265
265

Visual Paradigm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  265


WinDesign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  266
Identifiants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rtroconception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .








267
268
268
268
270
270

Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  271

Corrigs des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  273


Exercice1.1 La droute des bleus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  273
Associations binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  273
Classe-association. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  274
Historique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  274

Exercice1.2 Lorganisme de formation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  276


Inscriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Plannings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

Livre SOUTOU.indb 10

276
276

ditions Eyrolles

15/02/12 07:04

Table des matires

UML 2 pour les bases de donnes

Exercice1.3 Les lignes de facture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  278


Exercice1.4 La dcomposition des n-aires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  279
Visite des reprsentants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cote automobile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Horaires dune ligne de bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






279
281
281
282

Exercice1.5 Les comptes bancaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  282


Associations binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  282
Identification relative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  283
Identification artificielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  283

Exercice1.6 Le RIB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  284


Exercice1.7 Lorganisme de formation (suite). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  284
Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  285
Salles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  285

Exercice1.8 Lhritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  286


Organisme de formation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  286
Comptes bancaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  286

Exercice1.9 Les cartes grises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  287


Ancien rgime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cot du cheval. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nouvelle numrotation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contrles techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .






287
288
288
289

Exercice1.10 Les contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  289


Droute des bleus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  289
Organisme de formation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  290
Comptes bancaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  290

Exercice1.11 La carte dembarquement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  291


Exercice1.12 Deux cafs et laddition! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  292
Exercice1.13 La thalasso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  293
Exercice1.14 Le centre de plonge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  294
Exercice1.15 Llection prsidentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  295
Membres des partis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  295
Rsultats des lections passes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  295
Titre suprme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  296

Exercice2.1 Les associations binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  296


Exercice2.2 Lhritage et la composition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  297
Exercice2.3 Les classes-associations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  297
Exercice2.4 Traduire ou ne pas traduire?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  298
Exercice2.5 La normalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  299

ditions Eyrolles

Livre SOUTOU.indb 11

XI

15/02/12 07:04

UML 2 pour les bases de donnes

Table des matires

Exercice3.1 La cration de tables (carte dembarquement) . . . . . . . . . . . . . . . . . . . .  300


Exercice3.2 La cration de tables (horaires de bus) . . . . . . . . . . . . . . . . . . . . . . . . . .  303
Exercice3.3 La programmation de contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  306
Carte dembarquement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  306
Horaires des bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  306
E-mails des clients et prospects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  307

Exercice3.4 La dnormalisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  309


Carte dembarquement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  309
Horaires des bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  309

Exercice3.5 Ma psy oublie tout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  310


Rendez-vous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Confrres et livres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

310
311

Exercice3.6 Le planning dune cole de pilotage. . . . . . . . . . . . . . . . . . . . . . . . . . . . .  312


Flotte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Acteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
Rendez-vous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

312
313
314

Ressources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  315
Webographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  315
Bibliographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  316

Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

XII

Livre SOUTOU.indb 12

ditions Eyrolles

15/02/12 07:04

Avant-propos
Le but de cet ouvrage est dexpliquer tout dabord comment utiliser bon escient le diagramme
de classes UML pour concevoir une base de donnes, puis comment matriser la traduction
de ce diagramme en script SQL permettant de gnrer des tables normalises. La dmarche
propose dans ce livre est indpendante de tout diteur de logiciel et aisment transposable
quel que soit loutil de conception que vous adopterez.
Entirement rcrite, cette deuxime dition est maille de nombreux cas concrets prsents
sous forme dexercices. Le texte est par moments comment par Frdric Brouard alias SQLPro,
consultant indpendant et expert en bases de donnes (MS SQL Server en particulier).

volution des modles de donnes


Avant de rentrer dans le vif du sujet, rappelons brivement comment nous sommes arrivs
des bases de donnes essentiellement relationnelles. Avant elles, linformatique existait bien

Figure0-1. Historique des bases de donnes

ditions Eyrolles

Livre SOUTOU.indb 1

15/02/12 07:04

UML 2 pour les bases de donnes

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.

Les fichiers et COBOL


Le stockage des donnes a commenc dans les annes1960 avec les systmes de gestion de
fichiers et le langage COBOL (Common Business Oriented Language). Loin dtre dpass, ce
dernier fut le plus utilis entre 1960 et 1980. En 2002, il permet une programmation de type
objet, la gestion des informations Unicode et une intgration avec XML. En 2005, le Gartner
Group estimait que COBOL manipulait prs de 75% des donnes de gestion stockes.
Le principal inconvnient des applications COBOL est la forte dpendance qui existe entre les
donnes stockes et les traitements. En effet, le fait de dclarer dans chaque programme les
fichiers utiliss impose une maintenance lourde si la structure dun fichier doit tre modifie.
De plus, les instructions de manipulation (ouverture, lecture, criture et modification) sont trs
lies la structure de chaque fichier. La structure des fichiers de donnes sapparente celle
dune table (suite de champs de types numriques ou alphanumriques).

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.

Figure0-2. Modle de donnes hirarchique

Livre SOUTOU.indb 2

ditions Eyrolles

15/02/12 07:04

Avant-propos

Les inconvnients rcurrents sont toujours la forte dpendance entre les donnes stockes et
les mthodes daccs. Les chanages internes impliquent forcment une programmation complexe. Outre ces problmes de programmation, ce modle montre des lacunes lors de laccs
la base.
Extraire la liste des pilotes implique le parcours de toutes les compagnies.
Linsertion peut se rvler problmatique : lajout dun pilote sans compagnie nest pas
possible, moins dajouter une compagnie fictive.
La suppression peut se rvler dangereuse : une compagnie disparat, alors de fait ses
pilotes aussi.
La modification est souvent problmatique : les incohrences proviennent dventuelles
redondances (le nom ou ladresse dun pilote qui change doit se rpercuter tous les enregistrements).
Bien quil existe de nombreuses hirarchies autour de nous, le monde qui nous entoure nest
pas un arbre!

Le modle rseau
Quelques annes plus tard, C. W. Bachman, pionnier dans le domaine de linformatique, sest
essay aux bases de donnes en inventant un modle brisant cette hirarchie plutt arbitraire.
Les bases de donnes rseau taient nes avec le modle CODASYL, premire norme dcide
sans IBM.

Figure0-3. Modle de donnes rseau

ditions Eyrolles

Livre SOUTOU.indb 3

15/02/12 07:04

UML 2 pour les bases de donnes

Bien que rsolvant quelques limitations du modle hirarchique et annonant des performances en lecture honorables, le modle rseau nest ni plus ni moins quune usine gaz gave
de pointeurs. Pour preuve, plus personne nutilise de tels SGBD o la dpendance entre les
donnes stockes et les mthodes daccs existe toujours, et lvolution dune base de donnes
est trs coteuse en termes de recompilation de pointeurs.
Soyons honntes, le monde ressemble bien une telle usine gaz ! Mais pas question de
stocker ainsi les donnes, ce serait bien trop compliqu de concevoir le bon graphe. Le modle
de donnes se doit dtre plus simple.

Le modle relationnel
En 1970, E. Codd publie larticle de rfrence posant les bases du modle relationnel [COD
70]. Dun seul coup, toutes les limitations des prcdents modles sont rsolues. Le but initial
de ce modle tait damliorer lindpendance entre les donnes et les traitements. Cet aspect
des choses est russi et avec a dautres fonctionnalits apparaissent:

Normalisation (dpendances fonctionnelles) et thorie des ensembles (algbre relationnelle).

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 pointeurs physiques, mais laide des valeurs des cls trangres et des cls primaires. Pour cette
raison, le modle relationnel est dit modle valeurs.

Figure0-4. Modle de donnes relationnel

Livre SOUTOU.indb 4

ditions Eyrolles

15/02/12 07:04

Avant-propos

La force de ce modle de donnes rside dans le fait quil repose sur des principes simples et
permet de modliser des donnes complexes. Le modle relationnel est lorigine du succs
que connaissent aujourdhui les grands diteurs de SGBD, savoir Oracle, IBM, Microsoft et
Sybase dans diffrents domaines:

OLTP (OnLine Transaction Processing) o les mises jour des donnes sont frquentes,
les accs concurrents et les transactions ncessaires.
OLAP (Online Analytical Processing) o les donnes sont multidimensionnelles (cubes),
les analyses complexes et linformatique dcisionnelle.
Systmes dinformation gographiques (SIG) o la majorit des donnes sont exprimes en
2D ou 3D et suivent des variations temporelles.

Comment concevoir de telles relations ? Cest ce que nous allons voir tout au long de cet
ouvrage

qui sadresse 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.

Comment utiliser UML pour les bases de donnes?


Depuis plus de 30 ans, la conception des bases de donnes sappuie sur un formalisme
graphique appel entit-association que la mthode Merise avait adopt en son temps. Ce formalisme a fait ses preuves et bon nombre doutils de modlisation destins aux francophones
lutilisent encore aujourdhui.
La notation UML sest impose depuis quelques annes pour la modlisation et le dveloppement dapplications crites dans un langage objet (C++ et Java principalement). Les entreprises
du consortium initial ayant mis en place UML taient DEC, HP, IBM, Microsoft, Oracle et
Unisys pour parler des plus connues. Le march a suivi cette tendance car, aujourdhui, tous
les outils de modlisation utilisent cette notation.

ditions Eyrolles

Livre SOUTOU.indb 5

15/02/12 07:04

UML 2 pour les bases de donnes

Ladoption gnralise de la notation UML dpasse le simple effet de mode. La majorit des
nouveaux projets industriels utilisent la notation UML. Tous les cursus universitaires, quils
soient thoriques ou plus techniques, incluent ltude dUML. Cela ne signifie pas quUML
soit la panace, mais que cette notation est devenue incontournable. La dernire version de
la spcification UML, sortie en mai 2010, est la 2.3 (http://www.omg.org/spec/UML/2.3/).
Ce succs sexplique aussi par ladoption unanime des concepts objet, qui ont des avantages
indniables (rutilisabilit de composants logiciels, facilit de maintenance, prototypage et
extension des applications, etc.).

Les diagrammes
Les versions 1.x de la notation UML dfinissent neuf diagrammes : cinq pour les aspects
statiques (classes, objets, cas dutilisation, composants et dploiement) et quatre pour les
aspects dynamiques (squence, collaboration, tats-transitions, activits). Les spcifications
dUML2.x ajoutent le diagramme dinteraction, le diagramme de structure composite et le
diagramme temporel. Seul le diagramme de classes est intressant utiliser pour la modlisation dune base de donnes.
UML concerne en premier lieu le dveloppement logiciel et na pas t initialement pens
pour les bases de donnes. La notation UML permet toutefois doffrir un formalisme aux
concepteurs dobjets mtier et aux concepteurs de bases de donnes. Dautre part, les
concepts relatifs la modlisation de donnes (entits, associations, attributs et identifiants)
peuvent tre parfaitement intgrs aux diagrammes de classes. De plus, dautres concepts
(notamment les classes-associations, agrgats et contraintes) permettent denrichir un
schma conceptuel.

Les outils
De nombreux outils informatiques bass sur la notation UML existent depuis quelques
annes. Les plus sophistiqus permettent de gnrer des modles logiques ou des scripts
SQL. Alors que lautomatisation est quasiment assure (sous rserve de la qualit de loutil)
entre le modle conceptuel et la base de donnes, il nen est pas de mme de llaboration du
diagramme initial qui va conditionner toute la suite. Ici lhumain est au centre de tout et il
nest pas question de penser que cette tche puisse tre automatise (cest heureux pour les
concepteurs).
Par ailleurs, il est fort probable que les scripts SQL gnrs devront tre modifis manuellement par la suite, soit pour des raisons doptimisation, soit parce que loutil ne permet pas de
gnrer une caractristique particulire du SGBD (index, vues, types de donnes...), soit tout
simplement parce que le concepteur prfre utiliser une autre possibilit dimplmentation
pour traduire telle ou telle autre association.
Il est donc prfrable de matriser les concepts, de comprendre les mcanismes de transformation de modles et dadopter une dmarche afin dutiliser loutil de manire optimale.

Livre SOUTOU.indb 6

ditions Eyrolles

15/02/12 07:04

Avant-propos

Cetouvrage vous permettra, je lespre, de mieux apprhender le cheminement de la conception vers le codage en donnant des rgles prcises suivre dans llaboration des diffrents
modles pour viter de graves erreurs au niveau de la base. Le script SQL fera office de vritable rvlateur.

Figure0-5. Diagramme de classes

Guide de lecture
Cet ouvrage sorganise en 5chapitres qui suivent les tapes de modlisation illustres dans la
figure suivante.

ditions Eyrolles

Livre SOUTOU.indb 7

15/02/12 07:04

UML 2 pour les bases de donnes

Figure0-6. Niveaux de conception et dimplmentation

Louvrage commence par dcrire la construction dun diagramme de classes UML en respectant des rgles qui permettent de le valider et de le normaliser. Les mcanismes de drivation
dun modle conceptuel dans un schma de donnes relationnel sont clairement expliqus
laide dexemples concrets. Le modle logique est ensuite optimis avant lcriture des scripts
SQL. Il sagit ensuite dimplmenter les rgles mtier en programmant des contraintes ou des
dclencheurs SQL. La dernire tape consiste prparer des vues qui composeront linterface
de la base aux utilisateurs extrieurs.

Livre SOUTOU.indb 8

ditions Eyrolles

15/02/12 07:04

Avant-propos

Niveau conceptuel
Le chapitre 1 dcrit la premire tape du processus de conception dune base de donnes,
savoir la construction dun schma conceptuel. Le formalisme graphique prconis est le
diagramme de classes de la notation UML qui permet des quivalences des modles de type
entit-association.

Transformation et normalisation
Le chapitre2 dcrit les concepts du modle relationnel, puis prsente les rgles qui permettent
de driver un schma logique partir dun modle conceptuel. La dernire partie traite de la
normalisation et du calcul de volumtrie.

criture des scripts SQL et programmation des contraintes


Le chapitre3 dcrit la mise en uvre pour crire un script SQL driv dun modle de donnes
relationnel. Le niveau physique prsent dans ce chapitre correspond la dfinition des tables,
des cls trangres ainsi que limplmentation des ventuelles rgles mtier par des contraintes
de cls, de validation ou par dclencheurs.

Les vues SQL2 et SQL3


Le niveau externe dcrit au chapitre4 correspond la dfinition de vues qui agissent comme
des fentres sur la base de donnes. Ce chapitre dcrit les diffrents types de vues existantes
(vues relationnelles SQL2, vues matrialises et vues objet SQL3).

Les outils du march


Le chapitre5 confronte loffre des principaux outils UML du march (MagicDraw, MEGA
Designer, Modelio, Objecteering, PowerAMC, Rational Rose, Visual Paradigm et WinDesign). Chaque outil est valu sur diffrents critres (saisie dun diagramme de classes,
gnration dun modle relationnel, dun script SQL et rtroconception dune base de
donnes).

Annexes
Les annexes contiennent les corrigs dtaills des exercices, une webographie et une bibliographie. Lindex propose les termes utiliss dans la dfinition des concepts et de certaines
instructions SQL.

ditions Eyrolles

Livre SOUTOU.indb 9

15/02/12 07:04

UML 2 pour les bases de donnes

Les pictogrammes
Ce pictogramme introduit une dfinition, un concept ou une remarque importante.

Ce pictogramme indique une astuce ou un conseil personnel.

Ce pictogramme introduit une remarque, un avis divergent, un complment ou un coup


de gueule de Frdric Brouard.

Contact avec lauteur


Si vous avez des remarques formuler sur le contenu de cet ouvrage, nhsitez pas mcrire
(christian.soutou@gmail.com). Vous trouverez sur le site daccompagnement de cet ouvrage
accessible par la fiche du livre sur www.editions-eyrolles.com, les errata ainsi que dventuelles discussions.
Vous pouvez aussi poster des questions sur vos modles sur http://www.developpez.net/
forums/f940/general-developpement/conception/modelisation/, de nombreux contributeurs
sy retrouvent.

10

Livre SOUTOU.indb 10

ditions Eyrolles

15/02/12 07:04

Chapitre 1

Le niveau conceptuel
Ce chapitre dtaille la premire tape de conception dune base de donnes: il sagit dlaborer
un schma conceptuel. Bien que le formalisme graphique prconis soit le diagramme de
classes de la notation UML, vous trouverez toutes les quivalences avec les modles de type
entit-association.
La modlisation est un processus la fois incontournable et crucial. Incontournable, car mme
si vous matrisez le modle relationnel et connaissez parfaitement lenvironnement automatiser, vous ne pouvez pas raisonnablement crer directement les tables. Crucial, car cela
conditionne la structure de la base de donnes et donc influencera les performances venir.
Ce travail dabstraction concerne toute nouvelle conception et il est naturel dy consacrer du
temps.
Le schma conceptuel exprime une vue abstraite de la base de donnes qui, afin de prserver
lindpendance donnes/traitements, ne comporte aucune indication relative aux structures de
stockage ou techniques daccs aux donnes.
Lobjectif dun schma conceptuel nest pas de dcrire compltement un systme, mais de
modliser dans un premier temps les donnes qui seront stockes. Par ailleurs, des rgles
mtier peuvent enrichir un schma conceptuel afin de prparer au mieux la programmation
des applications.
Il faut comprendre que la modlisation conceptuelle base de classe ou dentit reprsente les aspects smantiques du modle de donnes, tandis que le modle physique
base de tables est une lecture purement technique de la base. Malheureusement, il est
de plus en plus frquent de voir des informaticiens ignorer la modlisation conceptuelle
pour sengouffrer directement sur le physique. Cest une erreur gravissime qui a des
consquences profondes et durables, comme la mauvaise interprtation du modle ou la
cration de tables obses.

ditions Eyrolles

Livre SOUTOU.indb 11

11

15/02/12 07:04

UML 2 pour les bases de donnes

Pour faire comprendre pourquoi il est frquent de mal interprter un modle physique, je montre mes
tudiants deux tables voiture et personne avec un lien 1:n de voiture vers personne et je leur
demande ce que ce modle dcrit. Il y a pratiquement autant de rponses que dtudiants, mais jamais
la bonne!
Imaginez ce que cela peut donner en entreprise quand la base de donnes doit tre utilise par de nombreux informaticiens pour dvelopper une mme application, chacun ayant sa propre interprtation des
liens entre les tables
Enfin, en ce qui concerne larrive de tables obses, elle est lie la non-utilisation du modle conceptuel.
Combien de fois ai-je entendu un dveloppeur demanderJai une nouvelle information stocker, je la
rattache quelle table? avec la fin des tables de 80colonnes inexploitables et contre-performantes
lors de la monte en charge
lire: http://blog.developpez.com/sqlpro/p10070/langage-sql-norme/base-de-donnees-et-performancespetites.

Analyse des besoins


Ne perdez jamais de vue que seules les donnes stocker sont la partie faire merger de
lanalyse. Le processus danalyse salimente de plusieurs lments et vnements: cahier des
charges, interviews, documents, formulaires, observation de lexistant (faits et vnements),
textes lgaux, etc.
Le premier rsultat de cette phase est le dictionnaire des donnes qui recense toutes les informations (avec quelques caractristiques comme le nom de la donne, une dsignation dun
ventuel domaine de valeurs, lunit de mesure souvent oublie , litre, mtre, etc.) quil
faudra stocker. Le rsultat final est la mise en diagramme, dune manire optimale, de toutes
ces donnes.

Premiers exemples
Une organisation
Considrons le club de plonge qui dcide dabandonner la gestion papier de toutes ses prestations. Lanalyse va consister recenser ses biens matriels, comprendre le fonctionnement
de la gestion des clients et comptabiliser les sorties des bateaux, etc. La visite des sites et la
rencontre avec chaque intervenant seront trs instructives (accueil, pilote du bateau, moniteurs
et directeur de plonge); elles permettront de bien apprhender le contexte. Ltude de documents papier permet souvent une investigation plus approfondie: le carnet de bord dun bateau
pour se rendre compte du nombre de sorties par jour, des cartes pour recenser les sites, les
habitudes ou rglementations associes, etc.

12

Livre SOUTOU.indb 12

ditions Eyrolles

15/02/12 07:04

Chapitre 1

Le niveau conceptuel

Figure 1-1. Le club de plonge

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.

Figure 1-2. Exemple dextrait dun texte lgal

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

Une interface graphique


Lanalyse dune interface (prvisionnelle ou existante) peut se rvler un trs bon moyen de
dduire la pertinence dinformations. Dans linterface suivante, qui dcrit des services offerts
par des supermarchs, plusieurs informations seront stocker.
A. Les codes postaux.

ditions Eyrolles

Livre SOUTOU.indb 13

13

15/02/12 07:05

UML 2 pour les bases de donnes

B. Les localits associes un code postal saisi.


C. Le nom du magasin (et celui de sa ville) ainsi quun kilomtrage.
D. Les types de services.
E. Un libell et une date associs chaque type de service pour un magasin choisi.
F. Un nombre de produits pour un magasin choisi.

Figure 1-3. Exemple dinterface de saisie

Le jargon du terrain
Lors de cette analyse, vous constaterez que le jargon du terrain nest pas toujours clair. Chaque
domaine a ses experts et son vocabulaire. Par exemple, des simples notions comme une date,
une dure ou un prix ne seront probablement pas perues de la mme manire dans un contexte
financier ou des travaux publics.
Si vous devez concevoir une base de donnes, mieux vaut ne pas connatre le domaine ou
feindre de ny rien comprendre afin que votre connaissance partielle ne vienne pas perturber
la ralit du systme. titre dexemple, supposons que vous soyez copropritaire et que vous
assistiez depuis de nombreuses annes aux runions houleuses organises par votre cher (dans
les deux termes?) syndic. Un jour, vous avez en charge dinformatiser un autre syndic (dommage). Vous constaterez sans doute que le fonctionnement de votre client est trs diffrent
de celui que vous supposiez. Ainsi, il est probable que cela vous pnalise davantage que si vous
tiez novice dans ce domaine de limmobilier.
Deux dmarches sont mener de front (oui, avec sa tte!):
dductive: vous devrez dcortiquer le discours en informations lmentaires;
inductive: vous mettrez en vidence partir des concepts du discours des informations.
Avec lexprience, vous analyserez les choses de cette manire.

14

Livre SOUTOU.indb 14

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Questionnez les experts du domaine en reformulant souvent vos interrogations. Nhsitez pas
changer dinterlocuteur afin davoir des points de vue complmentaires. Investiguez jusquau
moment o vous obtiendrez une rponse unique et sans ambigut chacune de vos questions.

Le tableau suivant prsente quelques questions qui ne peuvent tre rsolues par ltude seule
de documents initiaux (photos, fragments de texte et interface graphique) des trois exemples
prcdents. Vous devrez obtenir une rponse prcise chacune de ces questions.
Tableau 1-1: Questions additionnelles
Club de plonge

Textes de loi

Supermarchs

Un bateau peut-il sortir plusieurs fois par jour?

Un client peut-il plonger plusieurs fois par jour?

Quel type de matriel est disponible en location?

Les tarifs sont-ils identiques sur chaque site de plonge?

Un texte de loi peut-il tre associ plusieurs mots-cls?

Si la premire rponse est affirmative, doit-on privilgier un mot-cl parmi plusieurs?

Chaque texte de loi est-il numris dans un ou plusieurs fichiers?

Jusqu quel kilomtrage considre-t-on un supermarch dans le rayon dun autre (pour les
prsenter sur le mme cran)?

Un supermarch peut-il navoir aucun service proposer?

Existe-t-il un nombre plancher de produits en vente?

Lors de la phase danalyse, il est souvent difficile de faire cracher le morceau aux interviews. En effet, ils sont tellement dans leur univers quils nenvisagent mme pas quun
tiers, spcialiste de linformation et qui est plong dans leur univers, puisse ignorer ce
point leur mtier. Ils ont donc souvent des difficults faire comprendre ou simplifier
les rgles qui les rgissent ou quils ont eux-mmes cres. Pour sen convaincre, il ny a
qu voir la raction de non-informaticiens lorsquils participent une discussion entre
dveloppeurs passionns!
Cest pourquoi la matrise du vocabulaire client est essentielle et dterminante. Je commence toujours par cette phase, et je note et apprends par cur les dfinitions techniques
Au cours de la phase danalyse par interview, il est probable quil y ait toujours des zones
dombre, notamment sur les rgles de gestion, mme lorsque les explications viennent de
plusieurs sources. Dans ce cas, je fais mon simplet en revenant le soir ou le lendemain
avec une question-affirmation prenant lexact contraire de ce que jai pu comprendre, par
exemple: Si jai bien compris, lallotement rsiduel ne peut tre induit que par un tiers
au contrat. ce moment-l, tous les coups, mon interlocuteur rtorque: Mais,
non jai d mal mexpliquer je vais prendre un autre exemple
En gnral, l vous avez gagn car on progresse plus de ses erreurs que de ses russites!

ditions Eyrolles

Livre SOUTOU.indb 15

15

15/02/12 07:05

UML 2 pour les bases de donnes

Ne confondez pas traitements et donnes


Quelques-unes de vos premires interrogations relveront peut-tre davantage des traitements
que des donnes. Avec lexprience, vous les luderez petit petit pour rester concentr sur la
base de donnes cible de toutes vos attentions.
Les questions relatives aux traitements nont pas, en principe, dinfluence sur la structure de
la base, mais concerneront les transactions en charge dimplmenter chaque fonctionnalit.
Il revient au dveloppeur de les prendre en compte. Si vous avez la double casquette du
concepteur et du dveloppeur, vous gagnerez certainement du temps vous occuper la fois
de la base et des programmes.
Le tableau suivant prsente quelques questions qui ne concernent que des traitements. Si vous
tes en charge de la programmation, vous devrez probablement les implmenter dans le code.
Tableau 1-2: Questions relatives aux traitements
Club de plonge
Textes de loi

Supermarchs

Si la mto nest pas bonne, aucun bateau ne sort.

Un plongeur peut disposer de son propre matriel sans rien louer.

Quelle est la diffrence entre une loi et un dcret?

Qui signe un texte de loi?

Quels sont les dcrets les plus rcents?

Quelle est la priode de mise jour des informations qui apparaissent sur le site?

Que doit-on afficher sur le site si un magasin est en grve?

Le dictionnaire des donnes


La premire phase de lanalyse doit aboutir la production du dictionnaire de donnes. Ce
document recense, de manire exhaustive, les donnes stocker.
La figure suivante illustre un extrait de la liste des attributs (obtenue laide de loutil PowerAMC
de Sybase) de lexemple des supermarchs. Nous reviendrons ultrieurement la problmatique
qui consiste choisir le type de donnes le plus adquat.

Figure 1-4. Liste des attributs avec PowerAMC

16

Livre SOUTOU.indb 16

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

La majorit des outils de conception permettent de gnrer des rapports, plus ou moins
dtaills, listant les donnes du domaine associes certaines caractristiques importantes:
identificateur (nom de la donne);
dsignation (explication en quelques mots ou lignes de la smantique de la donne);
type de la donne (chane de caractres, date, numrique, rel, boolen);
caractre obligatoire ou facultatif.
Dautres caractristiques moins importantes peuvent prciser la nature des donnes (contrainte
de valeur, minimum, maximum, intervalle, valeur calcule).
La figure suivante illustre un extrait dun rapport gnr laide de loutil PowerAMC.

Figure 1-5. Rapport du modle des donnes avec PowerAMC

Les concepts majeurs


Par analogie avec le modle relationnel qui propose peu de concepts (colonnes, tables et cls)
pour constituer une base de donnes (de la plus simple comme la facturation dune PME la plus
stratgique comme celle dune place boursire ou dune centrale nuclaire), le modle conceptuel
dispose seulement de trois concepts majeurs pour modliser toute chose. Bien que le monde ne
soit ni un arbre, ni un graphe comme je lai entendu, lutilisation de ces concepts suffit.
Ces concepts majeurs sont les attributs, les entits (classes) et les associations (munies de leurs
cardinalits). Pour chaque concept, il existe des nuances: un attribut peut tre identifiant ou
pas, une association peut tre binaire ou dhritage, etc. En combinant astucieusement chacun

ditions Eyrolles

Livre SOUTOU.indb 17

17

15/02/12 07:05

UML 2 pour les bases de donnes

de ces concepts, vous serez en mesure de concevoir votre base de donnes quel que soit le
domaine dapplication.
Une erreur courante Quest-ce quune relation?
Il existe une grande confusion sur le terme relation. En effet, contrairement une croyance
populaire dissmine par de mauvaises traductions comme par des articles pseudo-techniques sur cette nouvelle Samaritaine que reprsente Internet, le terme relation dsigne
lorigine les objets mathmatiques contenant les donnes et non les liens! On a oubli
le sens primaire de relation. Il suffit daller sur nimporte quel dictionnaire, par exemple
le Larousse (http://www.larousse.fr/dictionnaires/francais/relation), pour lire la dfinition suivante: Action de rapporter en dtail ce dont on a t le tmoin ou dont on a eu
connaissance.
Autrement dit, la relation au sens mathmatique (MLD) est la traduction de lentit du
modle conceptuel et conduira la table dans le modle physique.

Un peu dhistoire
Le modle relationnel est n en 1970 des travaux de Edgar Frank Codd, mathmaticien
britannique, ex-pilote de chasse de la RAF, devenu ingnieur chez IBM.
Pendant les annes qui ont suivi, deux courants de recherches relatives la conception des
tables se sont dgags. Le premier visait contrler la qualit dun schma relationnel en proposant des rgles de normalisation (les formes normales seront tudies en dtail au chapitre
suivant). Le second visait sabstraire des structures de donnes stockes en introduisant un
niveau plus abstrait: le niveau conceptuel.
Le modle entit-association, appel entity-relationship (entit-relation) chez les AngloSaxons, a t propos des deux cts de lAtlantique. La paternit de ce modle fut attribue
Peter Chen en 1976 avec son article The Entity-Relationship Model-Toward a Unified View
of Data, mais il ntait sans doute pas le premier. Il est dailleurs amusant de lire le titre dun
des articles dHubert Tardieu paru en 1979 A Method, A Formalism and Tools for Database
Design (three years of Experimental Practice).

Les principales publications


E. F. Codd, A Relational Model for Large Shared Data Banks, Communications of the
ACM, Vol.13, n6, 1970
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
P. P. Chen, The Entity-Relationship Model: Towards a Unified View of Data , ACM
Transactions on Database Systems, Vol.1, N1, 1976

18

Livre SOUTOU.indb 18

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Comme tout ce qui a du succs, ces approches ont t reprises : en 1991 avec le modle
conceptuel des donnes (MCD) de Merise, tendu avec Merise/2 en 1994.
En 1997, dimportants acteurs (HP, Microsoft, Oracle, Unisys) utilisent des travaux de
G.Booch, J.Rumbaugh et I.Jacobson pour donner naissance la version1.0 dUML.

Dautres formalismes
Il existe toujours plusieurs autres formalismes graphiques. Citons le modle binaire NIAM
(Natural Language Information Analysis Method), IDEF1X (Integration Definition for
Information Modeling), la notation de Barker, etc. Seul le modle entit-association avait t
initialement reconnu par lISO.

Figure 1-6. Diffrents formalismes

Selon loutil que vous utiliserez, vous serez peut-tre amen les rencontrer. Par ailleurs, les
outils permettent aisment de gnrer un diagramme dans un autre formalisme.

ditions Eyrolles

Livre SOUTOU.indb 19

19

15/02/12 07:05

UML 2 pour les bases de donnes

Terminologie
Chaque concept de base se divise en sous-concepts comme le prsente le tableau suivant.
Tableau 1-3: Les trois concepts de base
Attribut (attribute)

Entit/classe (entity/class)

Le terme proprit est


aussi utilis.

Regroupe des objets mtier


(concrets ou abstraits).

Donne lmentaire
associe un domaine
de valeurs.

Dote dattributs, dont un


identifiant.

Association (relationship)

Relie des entits/classes (entre


2: associations binaires, entre n:
associations n-aires).

Agrgation.

Hritage.

Peut tre identifiant (ou


en faire partie).

Dans ltat actuel de vos connaissances, et en vous supposant dbutant, vous pourriez tablir
le tableau suivant sans vous prononcer davantage sur la suite des vnements.
Tableau 1-4: Les trois concepts du cas des supermarchs
Attribut (attribute)

Entit/classe
(entity/class)

code_postal, nom_ville
date_service, lib_service
nom_magasin, nbre_produits, distance_km

Association
(relationship)

Magasin?
Ville?
Service?

Le tableau suivant prsente les termes quivalents de la notation UML et des formalismes
entit-association (Merise compris).
Tableau 1-5: Terminologie
UML

Entit-association

Classe

Entit

Association

Association (Relation)

Objet

Occurrence

Multiplicit

Cardinalit

Diagramme de classes

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

Livre SOUTOU.indb 20

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les attributs caractrisent les donnes que vous stockerez en base. Vous les dcouvrirez
plus ou moins directement. Vous devrez en crer de toutes pices dans certains cas (les
identifiants en particulier).
Les informations incluent toutes les donnes de lunivers du discours. On y retrouve les
attributs et dautres donnes qui nauront pas tre stockes (informations dduites, calcules ou de traitements).
Lattribut est une donne brute et linformation est gnralement calcule ou compose
partir dautres donnes brutes (date et heure systme, par exemple). Le tableau suivant prsente
quelques exemples de bons ou de mauvais candidats devenir attribut.

Tableau 1-6 : Attribut ou information?


Attributs (exemples de valeurs)

Informations

mail (l.robert@orsys.com, pablo@mac.com)

age (valeur dduite)

nom_client (Brouard, Roux)

total_facture (valeur calcule)

indice_salarial (645, 756)

format_facture (traitement)

date_naissance (05/02/1965, 13/05/1995)


prix_prod_ht_euros_sans_remise (134.40, 120.50)
devise (, $, )

Au dbut vous ttonnerez, mais ensuite vous irez rapidement lessentiel, en laissant de ct
les informations qui nauront pas lieu dtre stockes, en amont du dictionnaire des donnes.

Par ailleurs, vous devrez veiller ce que chaque attribut soit indcomposable en termes de
structure. Autrement dit, toute valeur dun attribut doit tre atomique. Lexemple le plus parlant
est celui dune adresse qui ne doit pas tre modlise par un unique attribut adresse, mais
par autant dattributs qui la composent (nom de la voie, numro dans la voie, code postal,
cedex).

Cet aspect des choses sera argument au niveau physique; il est motiv principalement par
lextraction et lindexation future des donnes.

Classe ou entit?
Deux appellations identiques pour le mme concept, cest a linformatique : on aime bien
donner des noms diffrents aux choses ds quon change denvironnement.
Entit est la terminologie qui fut propose par les pionniers de la conception de base de
donnes.
Classe est la terminologie utilise par les pionniers de la conception objet et reprise par
UML.

ditions Eyrolles

Livre SOUTOU.indb 21

21

15/02/12 07:05

UML 2 pour les bases de donnes

Une entit (classe) est une description dun ensemble homogne dobjets (concrets ou
abstraits), chacun caractris par diffrents attributs.
Chaque entit (classe) doit disposer dun identifiant.
Les classes UML peuvent disposer de mthodes (mcanisme pas encore bien adapt aux
schmas relatifs aux bases de donnes).

Chaque outil a ses prfrences graphiques par dfaut qui diffrent dun autre; la figure suivante illustre quelques diffrences. En revanche, vous retrouverez les constantes suivantes:
un cadre reprsente une entit (classe), le nom de la classe dans le premier compartiment;
les attributs au centre du cadre;
les ventuelles mthodes dans un troisime compartiment.

Figure 1-7. Trois classes et une entit

Comme vous le constatez, le type des donnes peut apparatre (exemple de la seconde classe).
La visibilit des attributs aussi (private de la seconde classe). Ce mcanisme est issu de
lapproche objet et ne concerne pas les schmas relatifs aux bases de donnes.

Vous devrez affecter, chacune de vos classes, un identifiant. Un identifiant est une proprit
naturelle ou artificielle dune classe permettant de distinguer un objet de tous les autres (et
ce quel que soit lobjet considr). Un identifiant peut tre compos dun ou de plusieurs
attributs.
Si loutil que vous envisagez dutiliser ne permet pas cette fonctionnalit, et bien changez-le
pour un autre En effet, sans identifiant, vous ne pourrez gnrer aucun script SQL partir
de votre schma conceptuel.

22

Livre SOUTOU.indb 22

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les identifiants
Ltape didentification est fondamentale, elle va conditionner par la suite la composition des
index et des cls trangres de vos tables. Cest aussi grce aux identifiants que vous dcouvrirez des nouvelles classes dfinir.

Qui dit libell, dit identifiant


Qui dit libell, dit identifiant, force de le dire je lai crit. Un libell, cest une donne le
plus souvent textuelle que vous allez rencontrer et pour laquelle vous devrez vous demander si
cette dernire est susceptible dtre utilise travers diffrents contextes.
Voici quelques exemples.
Le nom dun produit (nom_produit) est susceptible dexister au niveau du fournisseur, du
dtaillant, de la facture, du grossiste, du transporteur, etc.
Le type dune voiture (type_voiture) est susceptible dtre utilis dans les catalogues du
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).

Figure 1-8. Des libells sans identifiant

ditions Eyrolles

Livre SOUTOU.indb 23

23

15/02/12 07:05

UML 2 pour les bases de donnes

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

Figure 1-9. Schma initial des classes UML

Pourquoi avoir dispos lattribut num_page dans la classe Sujets? Parce quil dpend
de cette classe. En effet, daprs lanalyse qui a t tablie, chaque sujet est dot dun libell
et une seule page du catalogue le concerne. Nous reviendrons plus loin sur cette notion de
dpendance.

Concrets ou abstraits?
Abstrait ou concret, tout objet se doit dtre identifiable.
Si une classe regroupe des objets concrets, lidentifiant est naturellement concret, mais
vous pourrez le considrer galement de nature abstraite.
Si une classe regroupe des objets abstraits, lidentifiant est naturellement abstrait, mais
vous pourrez le considrer galement de nature concrte.
Le contexte et le point de vue doivent vous conduire diffrencier, pour tout objet que vous
modliserez, le concret de labstrait et ce que vous dsirez stocker. Dans certains cas, les deux
aspects dune mme chose peuvent vous intresser simultanment.
En considrant les objets suivants, examinons les diffrents points de vue et contextes afin de
dterminer, pour chaque classe, lidentifiant adquat.

Figure 1-10. Objets concrets ou abstraits?

24

Livre SOUTOU.indb 24

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Lavion (ici, un A320): du point de vue de la compagnie arienne, chaque objet est concret,
dot dune immatriculation, dun numro de srie, dune date dacquisition, et associ des
vnements (vols et rvisons) etc. Limmatriculation ou le numro de srie sont de bons
candidats pour devenir identifiants. Du point de vue dune agence de voyages, cet objet est
abstrait; il importe peu de savoir quel aronef de la compagnie ralise le vol. Dans ce cas, le
type de lavion (ici, A320) suffirait lidentifier. Pour distinguer tout vol rel, lobjet concret
avion devient un composant de lidentifiant (il faudra utiliser lidentification relative).
La voiture (ici, une BMW 320Ci type E46): du point de vue de la concession, chaque objet
est concret, dot dun numro de srie et de bien dautres options. Le numro de srie est
un bon candidat pour devenir identifiant de chaque vhicule. Dun point de vue du dpartement des ventes, habitu des statistiques, chaque objet devient abstrait et associ un type
catalogue (ici, 320Ci E46). Ce type suffirait identifier toute voiture perue comme un
modle. Dans le contexte des cartes grises ou des services de police, plusieurs identifiants
seront ncessaires, le numro de srie (qui ne varie jamais) et le numro dimmatriculation.
Le livre (ici, SQL 3e dition): du point de vue de lditeur, chaque objet peut tre peru de
manire abstraite, dot notamment dun numro ISBN unique (il existe en fait plusieurs
classifications ISBN). Du point de vue dun libraire ou dun bibliothcaire, chaque objet est
concret et sera vendu ou prt. En consquence, un numro dexemplaire artificiel devra
tre ajout afin didentifier tout livre peru ici comme un exemplaire.
Le plat (ici, un steak-frites) : dans le contexte dun restaurant, chaque objet sera plutt
peru de manire abstraite (plusieurs steaks-frites correspondent au mme plat qui est
vendu la carte un certain prix). Un code suffira donc identifier ce plat. Sil advenait
quon doive tracer la provenance des viandes, il faudrait considrer lobjet comme concret
et associer chaque steak un numro unique afin de pouvoir relier ce dernier lexploitation dorigine. Dans ce cas, les deux identifiants (celui du steak et celui de lexploitation)
seraient utiliss conjointement.
Jappelle cela les notions gnrique et spcifique. Alors que Livre est une classe
gnrique (qui dcrit une uvre littraire, par exemple Les misrables de Victor Hugo),
Livre peut tre aussi spcifique (Les misrables, collection Folio, Gallimard). Enfin, Livre
peut tre un exemplaire dune bibliothque. Cela rejoint les notions de classe et dinstance.

Artificiels ou naturels?
Avant de parler de la nature dun identifiant, voquons les deux critres de qualit respecter:
stabilit (un objet ne doit pas changer didentifiant au cours du temps);
minimalit (en termes de taille et de complexit de valeurs).
Lorsque lattribut dun objet remplit les deux critres fondamentaux, on parle didentification
naturelle (lidentifiant a une smantique mtier; on parle de cl mtier).

ditions Eyrolles

Livre SOUTOU.indb 25

25

15/02/12 07:05

UML 2 pour les bases de donnes

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

Figure 1-11. Identifiants

Lidentifiant naturel de la banque LCL (id_banque): il est aussi possible didentifier une
banque par un numro artificiel (cest le cas du code attribu par la Banque de France:
30002 pour le Crdit Lyonnais).
Lidentifiant naturel de lagence (id_agence), indiqu en tant quindicatif du compte: cest
souvent un numro ou un code de la succursale (chaque tablissement bancaire est responsable
de cette codification: 4068 pour lagence de Ramonville Saint-Agne du Crdit Lyonnais).
Lidentifiant naturel du compte (id_compte): cest souvent un code compos de numros
et de lettres (chaque client connat ses numros ou est capable de les retrouver).
Lidentifiant articiel du client (id_client): le client ne le connat pas, mais le banquier
est capable de le retrouver.
Le code personnel ne peut ni jouer le rle didentifiant articiel du client (plusieurs clients peuvent choisir le mme code, peu probable, mais possible), ni permettre didentifier un compte
(pour la raison prcdente et parce quun client peut tre propritaire de plusieurs comptes).

Bannissez lidentifiant naturel!


Bien que dun point de vue scolaire, il faille chercher lidentifiant parmi les attributs
de lentit, cette vision conduit des problmatiques de performances particulirement
sensibles

26

Livre SOUTOU.indb 26

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Une cl naturelle peut ne pas tre connue lors de la saisie primale Que se passe-t-il si
le patient que vous avez modlis avec comme identifiant son numro de Scurit sociale
arrive lhpital sans ses papiers et dans le coma?
Une cl naturelle peut voluer dans le temps Que se passe-t-il si ayant modlis vos
adhrents par leurs nom et prnom, Marie DUPONT se marie avec Albert DUVAL? Quid
des donnes des nombreuses tables filles?
Une cl naturelle est souvent longue Un numro de Scurit sociale (13 caractres),
comme le couple nom et prnom (en moyenne, 15caractres), cest 3 4fois plus long
quun entier et permet environ 6fois moins de combinaisons (en pratique, on ne peut utiliser quune quarantaine de caractres sur les 25possibles). Cest donc facilement 24fois
moins performant!
Prfrez une cl arbitraire la plus courte possible. Par exemple, un entier auto-incrment
(SEQUENCE , IDENTITY en SQL). Lutilisation des GUID (Globally Unique IDentifier)
ou UUID (Universally Unique Identifier) posant dautres problmes en plus de ne pas
garantir lunicit absolue

Plusieurs, cest possible?


Un objet peut tre identifi par diffrents attributs. Lexemple suivant illustre cette possibilit:
tout livre peut tre rfrenc par plusieurs identifiants (un code diteur, des numros ISBN, des
codes-barres). Ce raisonnement vaut pour la majorit des autres types de produits.

Figure 1-12. Plusieurs identifiants

Il est possible de dfinir dans une classe plusieurs identifiants la condition quun seul soit
principal.

ditions Eyrolles

Livre SOUTOU.indb 27

27

15/02/12 07:05

UML 2 pour les bases de donnes

Les autres identifiants potentiels (appels secondaires ou alternatifs) napparatront pas forcment visuellement sur vos schmas conceptuels (cela dpend de loutil que vous utiliserez).
Ces identifiants secondaires se rendront plus utiles au niveau logique en jouant le rle de cl
candidate pouvant se substituer la cl primaire de la table. Des rfrences supplmentaires
pourront tre mises en place sans ncessairement utiliser la cl primaire de la table.
La figure suivante prsente la classe UML (incomplte) que lon peut dduire de cet exemple.
Lensemble des donnes quil faudrait recenser nest pas pris en compte (nom de lauteur,
traducteur). En revanche, les attributs identifiants potentiels sont tous rpertoris. Seul
lidentifiant principal est aisment reprable visuellement.

Figure 1-13. Plusieurs identifiants dans une classe UML (PowerAMC)

Les associations binaires


Comme son nom lindique, une association binaire relie deux classes. Quand la classe est
relie elle-mme, on parle dassociation rflexive. Les associations sont souvent dduites
des verbes du discours. Suivant le nombre dobjets concerns par lassociation, la terminologie permettant de classifier ces associations est la suivante : un--un, un--plusieurs,
plusieurs--plusieurs.

Figure 1-14. Classification des associations binaires

28

Livre SOUTOU.indb 28

Les associations un--un sont les moins courantes. titre dexemple, dans le contexte des
assurances, citons le contrat (classe) qui concerne (association) un vhicule (classe). Tout
vhicule nest concern que par un seul contrat.

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les associations un--plusieurs (hirarchies) sont trs courantes car omniprsentes dans
notre environnement. titre dexemple, une compagnie arienne (classe) possde (association) des avions (classe). Tout avion nappartient qu une seule compagnie.
Les associations plusieurs--plusieurs sont aussi courantes car trs prsentes dans notre
environnement. titre dexemple, une compagnie arienne (classe) affrte (association)
des avions (classe). Un avion peut tre affrt par diffrentes compagnies.
On classifie toute association laide dun couple de valeurs (nombre minimal et maximal
dobjets mis en association) lextrmit de chaque lien. UML parle de multiplicits (les
modles entit-association voquent les cardinalits).
Dans lexemple suivant, lassociation UML exprime quun exemplaire concerne un et un seul
livre (1..1). De plus, un livre peut ne pas exister en tant quexemplaire ou au contraire tre
prsent en plusieurs exemplaires (0..*).

Figure 1-15. Association UML un--plusieurs

Nous pouvons maintenant relier les deux classes de lexemple du catalogue des services automobiles, lassociation prcise quun thme inclut plusieurs sujets et un sujet ne dpend que
dun thme.

Figure 1-16. Thmes et sujets relis par une association UML un--plusieurs

Il est important de nommer chaque association par un verbe ou une forme nominale la plus
parlante possible.

Cela est particulirement intressant lorsque plusieurs associations relient deux mmes classes.
Le plus souvent, il ny a pas de corrlation entre les objets qui participent ces diffrentes

ditions Eyrolles

Livre SOUTOU.indb 29

29

15/02/12 07:05

UML 2 pour les bases de donnes

associations. Chaque lien exprime une smantique distincte. Dans le cas contraire, il sera
ncessaire dutiliser des contraintes (voir la fin de ce chapitre).
Le schma suivant prsente trois associations entre deux mmes classes. Bien que la smantique de ces trois associations soit distincte, il faudra par la suite contraindre ce schma en
prcisant que la gare de dpart doit tre diffrente de la gare darrive. De plus, ces deux gares
devront tre rpertories au sein de lassociation plusieurs--plusieurs desservir qui reprsente le trajet complet dun train.

Figure 1-17. Plusieurs associations binaires UML

La section suivante approfondit la classification des associations binaires en comparant les


cardinalits des modles entit-association aux multiplicits de la notation UML.

Multiplicits versus cardinalits


Multiplicits et cardinalits sont deux termes diffrents pour voquer le mme concept,
savoir prciser le nombre dobjets (Merise parlait doccurrences) concerns par chaque association. En revanche, la lecture des cardinalits de Merise est diffrente de celle des modles
entit-association et de la notation UML.

Les multiplicits de UML se notent x..y lextrmit de chaque lien (x et y valeur


entire : 0, 1), le symbole * dsigne plusieurs sans en limiter la valeur. La valeur x
prcise le nombre minimum dobjets relis, la valeur y exprime le nombre maximum.

Les cardinalits de Merise (et celles des autres formalismes entit-association) sont notes
par un couple de valeurs x,y. La lettre n (ou N) dsigne plusieurs sans en limiter la valeur.
Pour ces deux notations, il est vident que le nombre minimum doit tre toujours infrieur ou
gal au nombre maximum (xy).

Les cardinalits dune association binaire Merise sont inverses par rapport aux multiplicits
de la notation UML (qui se comporte comme les autres modles entit-association).

30

Livre SOUTOU.indb 30

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Le schma conceptuel Merise, quivalent du diagramme UML prcdent, illustre cette diffrence.

Figure 1-18. Associations binaires Merise

Le tableau suivant rsume les quivalences entre les critures des multiplicits de la notation
UML et les cardinalits des autres formalismes entit-association.
Tableau 1-7:quivalences entre multiplicits et cardinalits
Multiplicits UML

Cardinalits

0..1

0,1

1..1 (ou 1)

1,1

0..* (ou *)

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 multiplicits sont bornes. Ce schma exprime que tout administrateur se doit de conseiller entre 2 et
5holdings. Par ailleurs, tout holding sera associe au moins 3administrateurs et au plus 10.

Figure 1-19. Multiplicits UML bornes

ditions Eyrolles

Livre SOUTOU.indb 31

31

15/02/12 07:05

UML 2 pour les bases de donnes

Le maximum est prpondrant


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 principale 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.

Le minimum est-il illusoire?


Alors que le nombre maximal dune multiplicit ne doit pas porter confusion, les multiplicits minimales sont souvent les plus sujettes discussion. Surtout du ct de chaque lien, o
la multiplicit maximale est suprieure 1.
Dans certains cas, le nombre minimal exprime une rgle de fonctionnement (rgle mtier);
dans dautres cas, il sagira dexpliquer un tat initial des donnes.
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.

Les chapitres2 et 3 complteront ce propos.

32

Livre SOUTOU.indb 32

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Considrons la classe Aeroport qui est relie deux associations un--plusieurs ayant du
ct un les multiplicits minimales respectives1 et0.
Le 1 de lassociation situer du ct Ville exprime quun aroport est situ sur une
ville. Une contrainte NOT NULL sera gnre.
Le 0 de lassociation controler du ct Douanes exprime quun aroport peut ne pas
tre associ un service douanier. Aucune contrainte NOT NULL ne sera gnre.

Figure 1-20. Multiplicits minimales UML

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.

Figure 1-21. Multiplicits UML bornes

ditions Eyrolles

Livre SOUTOU.indb 33

33

15/02/12 07:05

UML 2 pour les bases de donnes

Le 1 au minimum du ct Mails de lassociation contacts nest pas sujet discussion, car cest lexpression du fait quun actionnaire dispose obligatoirement dun e-mail.
Une contrainte NOT NULL sera gnre pour implmenter ce contrle. En affectant 0
cette multiplicit, la contrainte ne sera pas gnre.
Le 1 au minimum du ct Actionnaires de lassociation contacts peut tre sujet
discussion. Il sagit de savoir si la base de donnes peut stocker des e-mails anonymes.
En thorie, il faudrait assurer un tel contrle au niveau de la programmation. En affectant
0 cette multiplicit, vous relchez ce contrle.
Le 0 au minimum du ct SARL de lassociation participation peut tre sujet
discussion. Il sagit de savoir si la base de donnes peut stocker des actionnaires qui ne
participent aucune SARL. Ici aucune contrainte nest mettre en uvre. Le fait de choisir
1 pour cette multiplicit ncessite, en thorie, la mise en uvre de ce contrle par
programmation (transaction ou dclencheur).
Le 2 au minimum du ct Actionnaires de lassociation participation nest
pas sujet discussion, cest lexpression dune rgle mtier. Une simple contrainte CHECK
ne suffit pas et du code SQL doit implmenter cette rgle (transactions et dclencheurs).
Ce code se chargera galement de vrifier le non-dpassement du nombre maximal de la
multiplicit (10).

Si vous hsitez entre 0 et 1 pour une multiplicit minimale, choisissez 0 de sorte moins
contraindre le schma SQL. Vous pourrez toujours ensuite programmer une nouvelle
contrainte.

Rflexivit
Une association binaire (un--un, un--plusieurs, plusieurs--plusieurs) qui relie une classe
elle-mme est dite rflexive.
Bien que sduisant par sa smantique, le concept de rflexivit produit des schmas relationnels plus complexes (en particulier avec des associations plusieurs--plusieurs) et induit une
programmation ardue qui peut savrer moins performante (requtes rcursives).
Afin de pallier ces problmes potentiels, nous verrons quune association rflexive peut se
reprsenter, dans certains cas, laide de plusieurs associations binaires non rflexives.
Le diagramme suivant dcrit lassociation un--plusieurs de parrainage qui relie (ventuellement) un client ses filleuls qui sont aussi des clients (0..*). Un filleul peut ntre associ
aucun parrain (0..1), ce qui exprime quun client peut tre ni parrain, ni filleul.

34

Livre SOUTOU.indb 34

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-22. Association UML rflexive un--plusieurs

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.

Figure 1-23. Autoroutes du Sud de la France

En utilisant la rflexivit, une association rflexive plusieurs--plusieurs peut dcrire ces


connexions.

Figure 1-24. Association UML plusieurs--plusieurs rflexive

ditions Eyrolles

Livre SOUTOU.indb 35

35

15/02/12 07:05

UML 2 pour les bases de donnes

Ce nest pas la solution la plus simple pour modliser un tel graphe. Dune part, la rflexivit nest pas le concept le plus adquat, dautre part, ce schma relie une ville plusieurs
autres sans prciser de quelle autoroute il sagit, alors quil existe une forte contrainte entre les
deux associations. Une solution plus simple consiste utiliser une classe supplmentaire pour
modliser un tronon (schma dcrit plus loin dans ce chapitre).
Les cardinalits Merise sont, comme au titre des associations binaires, simplement permutes
par rapport aux multiplicits (voir le schma suivant).

Figure 1-25. Association Merise rflexive

Il est important dutiliser des rles pour prciser la smantique dune association UML a fortiori lorsque cette association est de nature rflexive.
Nous verrons, par la suite, quil est possible de relier une classe-association UML une association rflexive la condition quelle soit de type plusieurs--plusieurs.

Les rles
Un rle UML se note sur un lien dassociation sous la forme dun nom (forme nominale ou
verbale) qui dcrit comment une classe source voit sa classe cible.
Dans lexemple suivant, les comptes dun client sont considrs comme un portefeuille, le
client dun compte est son dtenteur. Les rles inscrits sur lassociation rflexive prcisent le
sens de lecture et la smantique de lassociation.

Figure 1-26. Rles UML

36

Livre SOUTOU.indb 36

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Bien quil soit possible de nommer les associations et les rles dans un mme diagramme de
classes, cela nest pas forcment recommand pour des raisons de lisibilit.
Les rles sont particulirement utiles pour les concepteurs qui criront toutes leurs contraintes
laide du langage OCL (voir en fin de chapitre).

Mise en pratique
Testez ds prsent vos aptitudes grce lexercice1.1 La droute des bleus, la fin du
chapitre. Vous y modliserez le schma du premier tour de la coupe du monde de football2010
en Afrique du Sud. Vous naurez pas modliser le second tour (vous vous rappelez que notre
quipe de stars na pas t qualifie). Suite de lexercice peut-tre en 2014.

Les associations plus complexes


Bien que bon nombre de personnes soient qualifies de binaires (particulirement les informaticiens!), le monde que vous aurez modliser ne le sera pas. Il est fort peu probable que
vos schmas ne soient constitus que dassociations binaires.
En effet, parce que la nature est complexe, dautres types dassociations existent et la notation
UML permet de les modliser, par exemple:

les classes-associations pour composer des regroupements;

les associations n-aires quil faudra viter en se ramenant aux classes-associations;

lhritage que tout le monde connat depuis lavnement des langages objet;

les agrgations, qui permettent de traduire des compositions et dimplmenter lidentification


relative.

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

Livre SOUTOU.indb 37

37

15/02/12 07:05

UML 2 pour les bases de donnes

Premier exemple
Dans lexemple suivant, la classe-association Comp_Aero modlise tous les couples (compagnie, aroport) valides. chaque couple, des donnes peuvent tre associes. Ici, la date
darrive dune compagnie dans un aroport et le nombre de comptoirs dont elle dispose.

Figure 1-27. Classe-association UML

Notez que les deux attributs de cette classe-association ne peuvent pas tre disposs ailleurs.
La date darrive ne dpend pas de la compagnie seule (Air France peut rsider Orly
depuis lanne 1967 alors quelle est arrive Blagnac au cours de lanne 1969, par
exemple). Cette date darrive ne dpend pas non plus de laroport seul, car Orly qui a
accueilli Air France en 1967 a vu dbarquer Air Libert en 1990.
Le nombre de comptoirs ne dpend ni de la compagnie seule, ni de laroport seul. Sinon,
il sagirait de cumuls. Dans le premier cas, sil se trouvait dans la classe Compagnie,
lattribut indiquerait le nombre de comptoirs dtenus par la compagnie (sans prciser o
chacun se trouve). Dans le second, sil se trouvait dans la classe Aeroport, lattribut indiquerait le nombre de comptoirs qui se trouvent dans un aroport (sans prciser de quelle
compagnie il sagit).

Tout attribut dune classe-association doit dpendre simultanment des deux classes (pas
simplement de lune ou de lautre). Pour toute valeur dun couple dobjets connects, une
valeur au plus de lattribut doit tre associe, et cet attribut doit tre contenu dans la classeassociation.
Vous ne savez pas comment appeler une classe-association?Composez son nom avec les
prfixes des deux classes connectes.

Une classe-association ne doit pas contenir didentifiant, car lidentifiant de la classe-association


est en fait le couple des identifiants des classes connectes.

38

Livre SOUTOU.indb 38

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Formalismes entit-association
Avec Merise et les autres formalismes, ces attributs qui dpendent de deux entits se trouvent
aussi dans une association plusieurs--plusieurs.

Figure 1-28. Attributs dans une association Merise

Rattacher une classe-association


Une classe-association est considre comme une classe part entire, et ce titre, elle peut
tre rattache une autre.
Considrons nouveau les compagnies situes dans leurs aroports (ou les aroports qui
accueillent des compagnies, cest la mme smantique), et relions la classe-association une
autre classe. Par exemple les employs. Le schma suivant exprime que tout couple (compagnie, aroport) est associ un ou plusieurs employs et quun employ ne travaille que dans
un lieu pour le compte dune compagnie (cest une hypothse de travail pour prsenter ce
premier exemple).

Figure 1-29. Classe-association rattache une classe

ditions Eyrolles

Livre SOUTOU.indb 39

39

15/02/12 07:05

UML 2 pour les bases de donnes

Classe-association rflexive
Une classe-association peut tre lie une association rflexive ( condition quelle soit de type
plusieurs--plusieurs).
Le premier exemple reprend la premire modlisation des villes connectes par des autoroutes. Modlisons un tronon comme un couple de villes. Chaque tronon a t ouvert
une certaine date (postrieure celle de lautoroute, mais pas forcment identique) et chaque
tronon mesure une certaine distance.

Figure 1-30. Classe-association rflexive

Ce nest pas la modlisation la plus simple; il napparat pas explicitement la notion de sens,
du fait que les villes forment un graphe orient. Dans ce schma, on exprime toutefois quun
couple de villes forme un tronon tout en permettant quentre deux villes, deux tronons distincts existent: celui o vous roulez en regardant souvent votre compteur et votre avertisseur
de radar, et lautre o ceux de la voie den face font pareil.
Lautre problme de cette modlisation concerne le lien entre Ville et Autoroute qui nest
pas prcis (il ne respecte pas la hirarchie). La hirarchie veut quune autoroute soit compose
de tronons reliant chacun deux villes. Nous reviendrons sur cet cueil classique. Le schma
suivant est de meilleure qualit.

Figure 1-31. Respecter la hirarchie

40

Livre SOUTOU.indb 40

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Le second exemple de classe-association rflexive concerne les virements bancaires. Une


opration est modlise ici comme une association entre un couple de comptes (dbiteur,
crditeur) ou linverse, et plusieurs transactions caractrises par un montant et un moment.
Une opration ne concerne toujours quun couple de comptes.

Figure 1-32. Classe-association rflexive

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.

Les associations n-aires


Considre comme une notion complique et pour laquelle le plus grand nombre dneries
sont crites ou dites, lassociation n-aire modlise un fait ou un vnement impliquant simultanment plus de deux classes (n en fait). En lisant les quelques cas suivants, on peut sinterroger
sur le besoin dutiliser une association n-aire. En effet, chacun de ces faits ou vnements met
indubitablement en relation plusieurs classes qui sont indiques en italique.
Les employs des compagnies ariennes peuvent se trouver derrire plusieurs guichets
dans les diffrents aroports quils frquentent priodiquement.
Des compagnies ariennes affrtent des appareils pour effectuer des vols lorsque leur
flotte est rserve par ailleurs.
Les fermiers peuvent amener leurs vaches au cours de la saison dhiver dans diffrents prs.

ditions Eyrolles

Livre SOUTOU.indb 41

41

15/02/12 07:05

UML 2 pour les bases de donnes

Des logiciels sont installs sur des serveurs par des dpartements.
Les chantiers peuvent tre visits plusieurs fois par jour par les vhicules de la socit.

vitez dutiliser des associations n-aires, car votre modlisation produira un schma relationnel non contraint (dcidez plutt de ne pas contraindre un schma au niveau logique). La
majorit des associations n-aires doivent plutt scrire, dune manire hirarchique, laide
dune ou de plusieurs classes-associations.

Cette section dcrit tout dabord comment dcrypter une association n-aire. Ensuite, plusieurs
cas sont prsents qui mettrent en vidence le fait que lon puisse parfois se passer de ce mcanisme dassociation. Enfin, vous dcouvrirez comment dcomposer une association n-aire en
une ou plusieurs classes-associations.

Savoir les interprter


Avant tout, suivant le formalisme que vous rencontrerez (Merise ou les autres), la lecture des
couples (cardinalits/multiplicits) dune association n-aire est fondamentalement diffrente.
Il ne suffit pas dinverser les couples de valeurs puisquil y a plus de deux couples en jeu dans
lassociation.
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 dexprimer que des logiciels sont installs un certain jour (date_install) sur des serveurs par
des dpartements.

Figure 1-33. Association n-aire

42

Livre SOUTOU.indb 42

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les cardinalits de Merise se lisent de la manire suivante:


ct Logiciel, (0,n signifie quun logiciel peut tre associ aucun ou plusieurs couples
(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 plusieurs couples (Serveur, Logiciel).
Les multiplicits UML se lisent de la manire suivante:
ct Logiciel, (0..*) signifie quun couple (Departement, Serveur) peut tre associ
plusieurs logiciels (ou aucun);
ct Serveur, (0..*) signifie quun couple (Departement, Logiciel) peut tre associ
plusieurs serveurs (ou aucun);
ct Departement, (0..1) signifie quun couple (Serveur, Logiciel) nest associ qu
un seul dpartement (ou aucun).
Vous pouvez constater que UML offre, pour cet exemple, une lecture plus riche de smantique.
Dans ce cas, il apparat quun logiciel nest install par un dpartement que sur un seul serveur.
Pour faire dire la mme chose au modle Merise, il faudrait ajouter une contrainte dunicit.

Le langage du formalisme
Quel que soit le nombre dentits/classes connectes, le mcanisme de lecture est analogue
lexemple prcdent. Pour une association reliant 4entits/classes (de degr4), vous devrez
considrer la relation entre triplets et singletons en partant de la cible ou de la source.
Lexemple suivant illustre ce propos avec Merise. De chaque ct, il est exprim la cardinalit
(0,n) qui sinterprte pour toutes les entits ainsi: un objet est associ plusieurs triplets dobjets ou aucun. Du ct Employe, cette cardinalit signifie quun employ peut tre associ
plusieurs comptoirs dans diffrents aroports (ou dans le mme), pour le compte dune compagnie (ou pour plusieurs).

Figure 1-34. Association Merise 4-aire

ditions Eyrolles

Livre SOUTOU.indb 43

43

15/02/12 07:05

UML 2 pour les bases de donnes

Avec le formalisme Merise, vous ne pouvez pas dduire grand-chose des associations n-aires.
La majorit dentre elles ne contiennent que des cardinalits (0,n). La cardinalit (0,1) impose
une dcomposition en degr infrieur (une association 3-aire se dcompose en deux associations
binaires).
Avec le formalisme UML, les associations n-aires sont davantage parlantes. La multiplicit
(0..1) nimpose pas forcment une dcomposition en degr infrieur. Le schma suivant prcise quun employ qui se trouve dans un comptoir dun aroport ne travaille que pour le
compte dune seule compagnie. Symtriquement, un employ qui se trouve dans un comptoir
dune compagnie est situ dans un seul aroport.

Figure 1-35. Association UML 4-aire

Bien que UML semble plus explicite que Merise sur cet aspect des choses, ces deux schmas
ne sont pas satisfaisants. En effet, trop peu de contraintes sont prsentes entre les 4classes.
Pensez-vous rellement quen considrant un employ rpertori, un aroport, une compagnie et un comptoir existants, vous allez composer un fait cohrent stocker?
Ne croyez-vous pas que toutes les compagnies ne sont pas prsentes dans nimporte quel
aroport, quun comptoir ne se trouve que dans un aroport, quune compagnie nembauche
pas nimporte quel employ?
Ce sont toutes ces questions que vous devrez vous poser de sorte dcomposer au mieux cette
association tentaculaire (celle-l et toutes les autres que vous rencontrerez).

Quelques btises du Web


Maintenant que vous savez lire une association n-aire, dcryptons les erreurs typiques que
vous risquez de faire en utilisant ce mcanisme.
Dans le premier schma Merise, un pilote ne peut pas faire plusieurs fois le mme trajet avec
le mme avion (cest ce qui est indiqu avec la date et lheure de dcollage dans lassociation).

44

Livre SOUTOU.indb 44

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Cela va coter cher la compagnie qui devra renouveler sa flotte un rythme mensuel ou
hebdomadaire peut-tre
Dans le second schma Merise, vous permet facilement (enfin la structure de la base le permet)
un patient de se faire prescrire nimporte quel mdicament par tout mdecin

Figure 1-36. Associations 3-aires avec Merise

La notation UML nest pas en reste (mme dans la documentation officielle de lOMG).
Le premier schma prcise quune quipe peut faire jouer nimporte quel joueur quelle que
soit lanne (mme lanne o lquipe nexistait pas).
Le deuxime schma indique, sans rien prciser, quun type de voiture peut tre conu
nimporte quelle anne dans nimporte quel type de bureau (mme si le bureau ou la voiture nexistaient pas cette anne-l).
Le troisime schma indique quun professeur peut enseigner nimporte quelle matire
nimporte quel tudiant. Cest dans lair du temps la polyvalence, mais l, a sapparente
un grand cart (appelez le prof de gym!).

Figure 1-37. Associations 3-aires avec UML

ditions Eyrolles

Livre SOUTOU.indb 45

45

15/02/12 07:05

UML 2 pour les bases de donnes

Quelques cas valides


Dans quelques rares cas, lassociation n-aire peut tre considre comme valide et indcomposable dune manire hirarchique. La modlisation Merise suivante exprime le fait quun site
peut tre visit diffrentes priodes par plusieurs acteurs. En supposant quun acteur puisse
visiter tout site et qu tout moment un site puisse tre visit par nimporte quel acteur, lassociation n-aire peut tre considre comme valide et aucun contrle au niveau des insertions ne
pourra tre envisag.

Figure 1-38. Association 3-aire avec Merise

Comment se prmunir?
Avant de chercher systmatiquement utiliser une classe-association afin de contraindre une
association n-aire, vous devez essayer de rduire le degr de lassociation n-aire laide de
plusieurs associations de degr infrieur n. Ces cas se rencontrent lorsquil existe un lien fort
entre deux classes (entits) connectes indpendamment de lassociation, mais toutefois dans
le contexte. Le cas chant, une association 4-aire se dcomposera en une association 3-aire
et plusieurs binaires. Une association 3-aire se drivera ensuite ventuellement en plusieurs
associations binaires.

46

Livre SOUTOU.indb 46

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Dcomposition en associations binaires


Considrons nouveau lexemple dassociation 4-aire modlisant les compagnies qui font
travailler des employs derrire diffrents comptoirs daroports. Deux liens forts doivent
tre pris en compte; ils proviennent du fait quun comptoir est proprit dune compagnie
et quil se situe dans un seul aroport (en supposant ce contexte). Ces faits se traduisent par
deux associations binaires qui simplifient le modle initial, car elles concernent lassociation
n-aire.

Figure 1-39. Association Merise 4-aire

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.

Figure 1-40. Association 3-aire

ditions Eyrolles

Livre SOUTOU.indb 47

47

15/02/12 07:05

UML 2 pour les bases de donnes

Le contrat devient une simple association binaire reliant un vhicule sa compagnie dassurance.

Figure 1-41. Association 3-aire dcompose en deux binaires

Lexemple suivant utilise une association de degr3 pour lister les qualifications des pilotes
relatives certains types dappareils.

Figure 1-42. Association 3-aire

Le problme de cette association est quelle mlange deux faits: le premier concerne les qualifications quun avion impose (indpendamment du pilote) et le second que des pilotes soient
titulaires de diffrentes qualifications. Les associations binaires titulaire et necessite
simplifient le modle initial. La troisime association est plus discutable puisquelle peut tre
dduite des deux prcdentes. La normalisation forcene vous conduirait ne pas la dfinir,
lutilisation courante vous conseillera de la prserver.

Figure 1-43. Association 3-aire dcompose en trois binaires

48

Livre SOUTOU.indb 48

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Lorsquil ne vous est pas possible de rduire le degr dune association n-aire du fait quil
nexiste aucun lien entre les diffrentes classes connectes, part lassociation elle-mme,
trouvez sil existe (et cest souvent le cas) une hirarchie travers une ou plusieurs classesassociations. En effet, une association n-aire exprime implicitement dans la majorit des cas
une ou plusieurs contraintes dinclusion.

titre dexemple, considrons lassociation 3-aire Installer tudie au dbut de la section


qui exprime que des logiciels sont installs sur des serveurs par des dpartements. Il nest pas
possible de rduire cette association en plusieurs binaires, car lvnement dune installation
concerne simultanment les trois classes.

Dcomposition en classe-association
Le processus dcrit ici concerne une association de degr 3, mais il sapplique aux degrs
suprieurs par analogie de raisonnement.
Vous devez choisir le couple de classes le plus fort. Dans certains cas, le choix simpose
facilement, dans dautres, plusieurs couples peuvent tre candidats.
Reliez ces classes par une association plusieurs--plusieurs, si ce nest pas possible, votre
couple nest pas solide (enfin, ce nest pas ce que je veux dire!), piochez ailleurs (l non plus).
Attachez ensuite cette association une classe-association qui contiendra ventuellement
des attributs.
La classe restante est associer la classe-association et toutes les possibilits de multiplicits sont permises.

Concernant lexemple des installations de logiciels, un premier choix peut se porter sur les
couples (logiciel, serveur) qui recensent toutes les compatibilits (et vitent ainsi les incompatibilits). La classe-association contient la date dinstallation (qui dpend en fait du seul
couple). Lassociation dinstallation concerne bien simultanment les trois classes en reliant un
couple (logiciel, serveur) au dpartement acteur de lvnement.

Figure 1-44. Compatibilit assure

ditions Eyrolles

Livre SOUTOU.indb 49

49

15/02/12 07:05

UML 2 pour les bases de donnes

Une deuxime alternative consiste considrer les couples (logiciel, dpartement) qui recensent tous les achats (vitant ainsi dinstaller un logiciel non acquis par le dpartement). La
classe-association contient la date dinstallation (qui dpend en fait du seul couple). Lassociation dinstallation concerne toujours simultanment les trois classes en reliant un couple
(logiciel, dpartement) aux serveurs dont le but est lhbergement. La date dinstallation doit
se trouver au niveau de cette association avec cette modlisation.

Figure 1-45. Achats vrifis

Une troisime alternative consiste considrer les couples (dpartement, serveur) qui recensent toutes les autorisations (vitant ainsi dinstaller un logiciel sur un serveur non accessible
par le dpartement). Cette solution est symtrique la prcdente.

Figure 1-46. Autorisations acquises

50

Livre SOUTOU.indb 50

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

La dernire alternative consiste inclure ces trois contraintes dans le mme diagramme.
Il restera prciser ces contraintes laide dun langage naturel ou par lintermdiaire du
pseudo-code du langage OCL (voir la fin du chapitre).

Figure 1-47. Toutes les contraintes sont respectes

En dcomposant au maximum une association n-aire, vous compliquez le schma relationnel,


mais rduisez le risque dincohrences dans la base de donnes.
En prservant une association n-aire, vous simplifiez le schma relationnel mais risquez des
anomalies de stockage du fait dabsence de contrle en insertions et modifications.

Mise en pratique
Lexercice1.4 La dcomposition des n-aires vous permettra de dcomposer les prtendues
associations n-aires (en les rduisant des associations binaires ou en regroupant judicieusement des classes en couple reli une classe-association).

Les agrgations
La notion dagrgation a t lun des aspects les plus discuts de la notation UML. Lagrgation concerne seulement les associations binaires (rflexives ou non). Une agrgation nest pas
une association symtrique, car une des extrmits du lien dassociation joue toujours un rle
prdominant par rapport lautre.
Selon P. A.Muller, [MUL00], une agrgation est prconise dans les cas suivants:
une classe fait partie dune autre classe;
une action sur une classe implique une action sur une autre classe;
les objets dune classe sont subordonns aux objets dune autre classe.

ditions Eyrolles

Livre SOUTOU.indb 51

51

15/02/12 07:05

UML 2 pour les bases de donnes

Dans la littrature, plusieurs types dassociations sont recenss: component-integral,


material-object, portion-object, place-area, member-brunch et member-
partnership.
Avec UML, il existe deux familles dagrgation: lagration simple (partage) et la composition. La premire regroupe les associations binaires quon dsire renforcer suivant les critres
prcdemment cits (agrgations faibles). La seconde constitue les agrgations fortes, traduction
des associations binaires de type composite/composant ou fait partie de.
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 compositions 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.

Figure 1-48. Agrgations

Considrons lexemple ci-dessus faisant intervenir des agrgats.


La composition exprime quun appartement appartient un seul immeuble et est identifi
par un numro et le numro de son immeuble. Par ailleurs, il est entendu que sa destruction
entranera la destruction des appartements associs.

52

Livre SOUTOU.indb 52

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les agrgats partags (habiter et localiser) renforcent une simple association par le
fait que la perte dun copropritaire ou dun immeuble est susceptible dentraner la suppression des adresses associes. Il ne sagit pas ici dune relation composite/composant, car
une mme adresse (dun immeuble ou dun copropritaire) peut tre partage par diffrents
copropritaires.
Du fait que la suppression dun appartement nimplique pas la perte du copropritaire associ
(qui peut tre copropritaire dautres appartements), lassociation appartient est la moins
contrainte.

Dans un contexte de schma conceptuel de base de donnes, la notion dagrgation partage


est un peu trop vague et pas toujours implmente par les outils (en termes de traduction de
la nature des cls trangres). Mieux vaut programmer au niveau de SQL les contraintes de
chaque agrgation.
Concernant les agrgations fortes, il convient de les utiliser sans modration. Elles conviennent traduire toute composition, lidentification relative de classes et des aspects temporels.
Il est donc prfrable que lassociation de composition soit implmente par loutil de conception
que vous choisirez.

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.

Notations avec Merise


Une entit faible trouve son identification laide de la ou des classes fortes associes. Dans
loutil WinDesign, un lien dassociation connect une entit faible est not (R), PowerAMC
lindique avec (1,1).
Lexemple suivant modlise un appartement en tant quentit faible du fait que seul le numro
dappartement ne suffit pas identifier un appartement. Il est en effet possible quil existe
plusieurs appartements numrots 1A, A1 ou 23 par exemple. Pour permettre que
diffrents appartements disposent du mme numro, il faut les identifier relativement par rapport leur immeuble. En supposant deux immeubles numrots i1 et i2, les couples
(1A, i1) et (1A, i2) sont distinguables et permettent un mme code dappartement.

ditions Eyrolles

Livre SOUTOU.indb 53

53

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-49. Entit faible

Par analogie, en qualifiant de faible, la classe qui ncessite lidentifiant dune autre classe et
en utilisant lagrgation forte, UML implmente ce mcanisme.

Rification
Dans la smantique du discours, sous-tendue par la structure grammaticale, lorsquon passe
progressivement dune association (groupe verbal) un objet (groupe nominal), on parle
de rification (ou substantification). La modlisation conceptuelle est avant tout une vision
smantique: la perception en classe ou association prime sur la manire de lidentifier. Ce nest
pas lidentification qui dtermine la modlisation, mais le choix de modlisation qui implique
lidentification.
Le concept modliser peut apparatre de prime abord en tant que forme verbale (une association): un avion est affrt par une compagnie. Puis progressivement, la forme verbale devient
substantive: pour chaque affrtement, les vols affrts Ce groupe nominal (un objet dune
classe) intervient son tour dans des associations.

Exemples avec UML


La modlisation suivante permet didentifier un affrtement par le code de la compagnie,
limmatriculation de lavion et un jour de lanne. Si diffrents affrtements sont possibles au
cours dune journe; vous devrez ajouter lidentifiant de la classe faible Affretement la
proprit heure.

54

Livre SOUTOU.indb 54

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-50. Identification relative (exemple)

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.

Figure 1-51. Identification relative (rsultat)

Alternatives
la question Y a-t-il une unique solution toute conception?, la rponse est ngative;
plusieurs schmas diffrents peuvent modliser le mme systme. Selon le mcanisme que
vous utiliserez, diverses solutions peuvent merger. Les mcanismes qui sont potentiellement
interchangeables sont les classes-associations, les associations de composition et lidentification
artificielle.
Les modlisations suivantes sont quivalentes. Le premier schma utilise une classe-association pour dcrire chaque mission, alors que le second considre une mission comme un objet
artificiel quil est ncessaire didentifier.

ditions Eyrolles

Livre SOUTOU.indb 55

55

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-52. Alternatives lidentification relative

Les diffrences vont se rencontrer au niveau logique. Il faudra alors prfrer la solution optimale en termes de tables en raisonnant sur les index quil faudra gnrer.

Mise en pratique
Comment modliser lhistorique des rendez-vous de lexercice 1.5 Les comptes bancaires?
Trouvez les identifiants principaux et relatifs qui sont prsents dans lexercice 1.6 Le
RIB.

Lidentification artificielle
Lorsque lidentification dun objet est complexe ou met en jeu beaucoup trop dautres classes,
vous pouvez faire appel lidentification artificielle qui consiste dfinir une classe (le plus
souvent de nature abstraite) afin dhberger des attributs pour lesquels il est difficile dy associer un identifiant naturel ou relatif. Une fois dfinie, la classe ncessite un identifiant (artificiel)
qui sera dpourvu de toute smantique.
Considrons lexemple des tronons autoroutiers (section Les classes-associations). Alors
que la rflexivit ntait pas la solution la plus simple pour modliser un tel graphe, lidentification artificielle se rvle redoutable de simplicit. Un tronon est dsormais modlis en tant
quobjet reli deux villes. Lassociation de composition permet en plus de pouvoir utiliser un
mme numro de tronon pour diffrentes autoroutes.

56

Livre SOUTOU.indb 56

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-53. Identification artificielle pour des objets concrets

Considrons lexemple des installations de logiciels (section Les associations n-aires). Bien
que la classe-association soit une solution satisfaisante, lidentification artificielle est aussi possible. Une installation est modlise en tant quobjet abstrait reli aux classes qui interviennent
dans lassociation.

Figure 1-54. Identification artificielle pour des objets abstraits

ditions Eyrolles

Livre SOUTOU.indb 57

57

15/02/12 07:05

UML 2 pour les bases de donnes

Mise en pratique
Aidez-vous de lidentification artificielle pour:
complter lexercice1.5 Les comptes bancaires en modlisant les virements internes
entre comptes. Il sagit de connatre le montant en euros, le client initiateur et la date de
lopration;
finaliser le diagramme1.7 Lorganisme de formation (suite). Il sagit de modliser les
sessions de cours et diffrents vnements les concernant.

Lhritage
Lhritage est un mcanisme qui provient de la programmation objet et qui consiste rutiliser
du code (en termes de fonctionnalits). Dans le contexte dun modle conceptuel, lhritage va
permettre la rutilisation de structures (classes). Une classe gnrique (appeles surclasse) rend
possible la dfinition de classes plus spcifiques (appeles sous-classes). Par consquent, cette
dcomposition rend les associations entre classes plus prcises.
lorigine, les modles entit-association ne disposaient pas de ce concept. Des extensions
comme Merise/2 ont rendu possible le mcanisme dhritage qui permet dorganiser les entits
en hirarchies. La notation objet UML propose lhritage de classes depuis sa premire
spcification.

Dfinition

Vous devez dfinir un hritage entre les classes C1 et C2 si vous rpondez affirmativement
la question: la classe C1 est-elle une sorte de C2?
La surclasse gnralise le concept alors que les sous-classes le spcialisent.

Lhritage reprsente un lien trs fort entre classes. Avec UML, un lien dhritage est not par
une flche partant dune sous-classe vers sa surclasse.
Dans lexemple suivant, la surclasse Personnel permet aux sous-classes Navigant et
C
ommercial de rcuprer les attributs nup, nom et salaire qui sont gnriques. Chaque
classe (gnrique ou spcifique) peut tre relie dautres en exprimant davantage de smantique quen labsence dhritage.

58

Livre SOUTOU.indb 58

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-55. Hritage

Identification
Najoutez pas didentifiant une sous-classe, car lidentifiant dune sous-classe provient de
la surclasse.

Instances
Diffrents cas dhritage peuvent tre recenss en fonction de la population (instances) des
classes qui participent au graphe dhritage [ADI93].
Dans lexemple prcdent il faudra tre capable de rpondre aux questions suivantes: existet-il un personnel qui ne soit ni navigant ni commercial? Est-il possible quun navigant soit
aussi commercial?
Nous tudierons cette classification la section Rgles mtier et contraintes.

Hritage multiple
Relativement peu utilis par les programmeurs objet, car complexe mettre en uvre, lhritage multiple est le mcanisme qui autorise quune sous-classe hrite simultanment de
plusieurs surclasses. Dans lexemple suivant, il permet de rpondre laffirmative la question:
est-il possible quun navigant soit aussi commercial?

ditions Eyrolles

Livre SOUTOU.indb 59

59

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-56. Hritage multiple

Bien que sduisant, ce mcanisme nest implment dans aucune base de donnes objet et dans
trs peu de langages. De plus, il est possible de sen passer par lintermdiaire des contraintes
sur un hritage simple.

Mise en pratique
Appliquez ce mcanisme aux diffrents cas de lexercice1.8 Lhritage.

Aspects temporels
Il est trs frquent davoir prendre en compte des aspects temporels au niveau conceptuel. On
peut classifier trois modlisations: le moment, la chronologie et lhistorisation.

vitez de nommer un attribut temporel par un mot rserv du langage informatique (exemples:
date, month, day, etc.). Prfrez des identificateurs plus parlants (exemples: date_naissance, date_vente, mois_arrivee, etc.). Prcisez toujours au niveau du dictionnaire de
donnes le format que vous attendez (jour/mois, jour/mois/anne sur 4positions, etc.).

Modlisation dun moment


Il sagit de reprsenter des informations indiquant un moment (le plus souvent une date). Ce
moment est reprsent sous diverses formes: jour, mois, jour/mois, anne, mois/anne, jour/
mois/anne, avec ou sans les heures, minutes et secondes, etc. Le plus souvent, cet attribut sera
positionn dans une classe.

60

Livre SOUTOU.indb 60

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Lexemple dcrit quelques attributs temporels. On peut supposer que annee_creation et


annee_ouverture seront au format anne (entier sur 4positions), mois_ouverture au
format mois (entier sur 2positions) et date_contrat au format jour/mois/anne. Ce dernier
attribut se trouve dans la classe-association, car un supermarch peut tre en rapport avec
plusieurs fournisseurs, de mme un fournisseur peut traiter avec diffrents supermarchs. La
modlisation indique ici quune seule date sera mmorise pour tout supermarch avec un
fournisseur (cest donc probablement la dernire qui sera stocke).

Figure 1-57. Modlisation de moments

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.

Figure 1-58. Modlisation de chronologies

ditions Eyrolles

Livre SOUTOU.indb 61

61

15/02/12 07:05

UML 2 pour les bases de donnes

Modlisation de lhistorisation
On utilise ce type de modlisation quand on dsire conserver les valeurs antrieures dun
attribut. Citons quelques exemples comme le montant dun loyer (on dsire connatre son volution) ou la valeur du coefficient bonus/malus dun contrat dassurance. En contre-exemple
(trait dans les exercices), le nombre de passagers dun vol donn sera plutt trait comme une
chronologie.

Alors que Merise/2 dispose dun artifice pour noter lhistorisation (symbole H sur un lien dassociation), lhistorisation avec UML peut sapparenter de lidentification relative et donc
simplmenter laide dune association dagrgation forte (composition).

Lexemple suivant dcrit deux historisations modlises par une composition (une classe-association aurait aussi pu convenir). La classe Contrats permettra de lister les diffrents contrats
au cours du temps entre un supermarch et un fournisseur. La classe Gerances permettra de
faire voluer lappartenance dun supermarch une enseigne.

Figure 1-59. Modlisation dune historisation

62

Livre SOUTOU.indb 62

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Modles diachroniques, modles synchroniques et gestion du temps dans les donnes


La gestion du temps (date ou date+heure des faits) dans les bases de donnes relationnelles est un point crucial et complexe, qui, lorsquil est mal gr, peut conduire des
problmes de performances dramatiques. On appelle modle synchronique un modle
dont on copie les donnes un instant t afin de les statifier (copie synchrone au fait).
Par opposition, on appelle modle diachronique un modle dans lequel on historise
chaque volution des donnes (dia signifie jour).
Bien que le modle synchronique apparaisse plus simple, il possde souvent plus dinconvnients que davantages:
il est fortement redondant: par exemple, un mme libell de produit va apparatre de
nombreuses fois dans les commandes, les factures, les envois;
il induit une perte dinformation: si un produit ne sest pas vendu et quon le solde, il
nexiste aucun moyen de savoir quil avait t propos un prix antrieur et pendant
combien de temps.
Il est donc souvent intressant de passer au modle diachronique. Et comme les bases de
donnes voluent, il est probable que les SGBDR bitemporels fassent leur apparition dans
peu de temps, rduisant ainsi ces problmes des mcanismes internes optimiss. Pour en
savoir plus sur le sujet, consultez les sites suivants.
Bases de donnes bitemporelles:
http://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es_temporelle
Conception bitemporelle dune base : http://www.itpro.fr/sql-server/administration/
conception-bitemporelle-une-notion-du-temps-peut-en-cacher-une-autre/
Gestion bitemporelle des donnes:
ttp://www.trivadis.com/uploads/tx_cabagdownloadarea/F_Bitemp_ f.pdf
Sixime forme normale et temporalit:
http://fsmrel.developpez.com/basesrelationnelles/normalisation

Mise en pratique
Utilisez ces aspects temporels pour:
grer lhistorique des coupes du monde de football (suite de lexercice1.1 La droute des
Bleus);
faire voluer le prix dun produit et son taux de TVA (suite de lexercice1.3 Les lignes
de facture);
modliser le cycle de vie des vhicules dans lexercice1.9 Les cartes grises.

ditions Eyrolles

Livre SOUTOU.indb 63

63

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Dcomposition en propositions lmentaires


Dcomposez le discours en autant de propositions lmentaires (sujet-verbe-complment) que
ncessaire.
Tableau 1-8:Quelques propositions
Satisfaisantes

Incompltes

reformuler

Une commande est confirme par un reprsentant.

Un client est identifi par son e-mail.

Un texte de loi doit tre associ plusieurs mots-cls.

Un vol part dun aroport tous les jours la mme heure.

Les chantiers sont visits une fois par semaine.

La remise est proportionnelle la quantit achete.

Un logiciel est install par un dpartement sur un serveur.

Un personnel commercial travaille au comptoir de la compagnie dans un des


aroports de sa zone daffectation.

Un client ralise des achats de produits chez des fournisseurs.

Dcomposons de manire intuitive le dernier exemple de manire extraire des propositions


plus lmentaires.
Un achat est effectu par un client.
Un achat concerne plusieurs produits.
Un achat seffectue chez un fournisseur.
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 plusieurs classes Un logiciel est install par un dpartement sur un serveur. risque dtre
incomplte. Vous devrez prciser cet vnement en considrant les classes deux deux.
Un dpartement peut-il installer tout logiciel?

64

Livre SOUTOU.indb 64

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Un serveur peut-il accueillir tout logiciel?


Un dpartement peut-il utiliser tout serveur?
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.

Chronologie des tapes


La construction idale dun schma conceptuel suit les tapes suivantes. Les sections prcdentes vous permettent de rpondre jusquau point numro 5, les sections suivantes
complteront ce processus.
1. tablir la liste des attributs.
2. purer les attributs (viter les synonymes et polysmies, dcomposer les attributs complexes).
3. Reprer les identifiants (si ncessaire en crer) et en dduire les classes.
4. Disposer les attributs dans les classes (dpendances).
5. Dterminer les associations entre classes.
6 Rattacher les attributs orphelins (dans des classes ou classes-associations).
7. Valider le modle (dpendances).
8. Mise en place des contraintes.
Un attribut doit tre propre une entit
Ce simple prcepte est souvent mal compris par les dveloppeurs.
Prenons le classique cas dune entit modlisant une personne physique, pour laquelle on
veut recueillir le maximum dinformations, y compris les informations de contacts.
Sont propres lentit personne physique le nom, les prnoms, la date de naissance,
le poids, la taille, la couleur des yeux Mais de nombreux dveloppeurs y ajoutent les
numros de tlphone, le-mail, ladresse Or, aucune de ces informations nest propre
la personne. O trouvez-vous le numro de tlphone dune personne physique? Sous les
aisselles? tatou sur loreille? au bout de la langue?
La meilleure preuve quun tlphone ou une adresse nest pas un attribut dune personne
physique est que ces informations peuvent tre affrentes une personne morale: entreprise, collectivit, association Une autre preuve que le tlphone ou le-mail nest pas
un attribut de la personne est que certaines personnes nont ni tlphone ni e-mail! Ces
informations ne sont donc pas des attributs de la personne, mais des attributs relatifs
la personne (physique ou morale dailleurs). Et le mot relatif nest pas l par hasard, car
en franais il signifie (selon le Larousse) qui nexiste quen relation avec quelque chose
dautre, qui nest pas indpendant

ditions Eyrolles

Livre SOUTOU.indb 65

65

15/02/12 07:05

UML 2 pour les bases de donnes

Autrement dit, ces attributs doivent tre placs dans des entits secondaires associes
lentit primaire que constitue la personne. On aura donc trois entits supplmentaires:
lune pour les tlphones, lautre pour les adresses et la troisime pour les e-mails. Notez
que cette conception induit de multiples avantages parmi lesquels chaque personne peut
avoir un nombre indtermin de tlphones (fixe, fax ou GSM), plusieurs adresses et
une multiplicit de-mails, ce qui est courant!
Le fait de mettre tous les attributs de contacts dans une seule et mme entit personne
physique contribue crer des tables obses dont les performances seront catastrophiques lors de la monte en charge de la base.
lire sur le sujet : http://blog.developpez.com/sqlpro/p10070/langage-sql-norme/basede-donnees-et-performances-petites/.

Quelques conseils
Afin de rendre optimal un schma conceptuel (minimiser les modifications oprer avant de
crer des tables et index), quelques principes doivent tre adopts.

Dcomposez si ncessaire
Dcomposez tout attribut dont la structure est complexe en autant dattributs que ncessaire.
Chacun de ces attributs devra tre indcomposable (atomique). Lexemple le plus marquant est
ladresse norme dont chaque champ possde une smantique propre.

Figure 1-60. Adresse postale

Ainsi, prfrez lutilisation de la classe Adresse lattribut de mme nom. Dune part, cette
classe pourra tre connecte diffrentes autres classes (Client, Fournisseur, Succursalle, etc.). Dautre part, il sera possible dindexer diffrentes colonnes pour faciliter des
recherches dans la base de donnes (sur le code postal, le nom dune rue, etc.).

66

Livre SOUTOU.indb 66

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-61. Modlisation dune adresse

Pour complter cette modlisation, il faudrait connecter la classe Ville la classe Adresse.
Tous les attributs dune entit doivent tre atomiques
Cette rgle doit tre apprcie sa juste valeur Elle est en effet relative lunivers que
lon modlise. Par exemple, la modlisation dun simple numro de Scurit sociale sera
diffrente si vous lavez titre informatif (par exemple, dans le cadre de la gestion des
ressources humaines) ou titre fonctionnel (par exemple, dans le domaine de la sant).
titre informatif, un seul attribut de type chane de caractres de longueur13 suffit. titre
fonctionnel, il est important de dcouper ce numro en autant de parties:
le sexe sur un caractre;
lanne de naissance sur deux caractres;
le mois de naissance sur deux caractres;
le code Insee de la commune de naissance sur cinq caractres (et non le dpartement
puis la commune comme on le croit trop souvent);
le rang de naissance sur trois caractres.
En effet, il est possible que lon vous demande un jour dextraire toutes les femmes de la
tranche 45 60ans nes en rgion parisienne, pour une tude sur le cancer du sein
Un autre exemple nous est donn par les e-mails. On a tendance oublier quun e-mail
est compos de deux parties: partie locale (en gnral, un nom de personne ou de service)
et un DNS (Domain Name Server ou nom de domaine) le tout accol avec le caractre
@ (arobase) entre les deux. Il sera donc intressant de dcomposer les e-mails en deux
entits lies comme suit:
MAIL_USER (MLU_ID entier auto, MLU_LIBELLE A256), lidentifiant tant MLU_ID;
MAIL_DNS (MLD_ID entier auto, MLD_LIBELLE A256), lidentifiant tant MLD_ID.
Avec la cardinalit n:1 entre MAIL_USER et MAIL_DNS, la volumtrie est rduite: on vite
ainsi la redondance des wanadoo.fr, free.fr, etc., on contrle mieux la saisie, et lindexation est facilite. Bref, de nombreux bnfices pour les performances.

ditions Eyrolles

Livre SOUTOU.indb 67

67

15/02/12 07:05

UML 2 pour les bases de donnes

vitez les attributs calculs


Avant de penser la dnormalisation de vos tables, minimisez le nombre dattributs de
vos schmas. Ne considrez pas les attributs qui peuvent tre dduits par calcul dautres
attributs dj prsents dans le schma. Dans la facture suivante, le fait de rendre pertinents
les attributs ref_produit, prix_tarif, quantite et remise suffit calculer le prix
unitaire et le montant dune ligne. Il en va de mme pour les diffrents totaux intermdiaires
et finaux.

Figure 1-62. Attributs calculs

Les erreurs classiques


Pour viter de tomber dans certains piges, voici quelques erreurs caricaturalement prsentes.

Le ventilateur
Afin dviter le pige dit du ventilateur, soignez vos parcours dassociations (particulirement
pour les liens terminaison *) et suivez la hirarchie.
Dans le premier exemple, sil est vrai quun employ est embauch par une entreprise compose de dpartements, il apparat aussi quil est impossible de savoir quel dpartement est
rattach chaque employ (lien Composer terminaison *). En rorganisant la hirarchie de
ces classes, ce problme est rsolu.

68

Livre SOUTOU.indb 68

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-63. Le ventilateur, exemple 1

Dans le second exemple, sil est vrai quun serveur est responsable de plusieurs tables, il apparat aussi quil est impossible de savoir quel serveur a encaiss une note (lien planning
terminaison *). Une association supplmentaire rsout ce problme.

Figure 1-64. Le ventilateur, exemple 2

Labme
Le pige de labme concerne la prsence de multiplicits minimales zro sur le parcours
de lecture dassociations entre deux classes relies indirectement.
Dans lexemple suivant, la multiplicit 0..1 du lien gestionnaire signifie que certains serveurs peuvent tre anonymes en termes de propritaire. Pour remdier ce risque de perte
dinformations, il suffit de rajouter un lien dassociation rendant le parcours plus direct.

ditions Eyrolles

Livre SOUTOU.indb 69

69

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-65. Labme

Les liens transitifs


Ne supprimez pas systmatiquement les liens qui pourraient sembler redondants du fait dune
transitivit (si je sais aller de A B et de B C, pourquoi devrais-je ajouter que je sais aller
de A C?). Avant de simplifier au maximum vos schmas (et donc le nombre dassociations),
valuez les conditions initiales et projetez des volutions temporelles.
Dans le premier exemple, le lien concerne peut sembler redondant. Aucun risque dabme,
car les multiplicits minimales du parcours sont non nulles. En revanche, il se peut quon
connaisse le fournisseur concern par la commande avant quun reprsentant ne soit dsign
pour dclencher une commande.

Figure 1-66. Liens transitifs

70

Livre SOUTOU.indb 70

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Concernant le second exemple, le lien embaucher peut sembler redondant. Le problme vient
dun risque dabme en ne sachant pas de quelle entreprise un reprsentant dpend du fait que
ce dernier peut ne pas tre rattach une succursale.

Ne confondez pas conceptuel et logique


Un diagramme de classes UML ne rime pas forcment avec schma conceptuel. Vous tes en
prsence dun modle logique (voir le chapitre suivant) lorsquun attribut identifiant est prsent dans diffrentes classes. Ce sont les schmas quon peut crer laide des outils comme
Access, DB Designer, MySQL Workbench, etc.
Dans le schma suivant, les attributs CustomerId, OrderId, DeliveryId, OrderItemId et
ProductId se retrouvent dans diffrentes classes. Ce modle est plus proche des tables de la
base de donnes que ne le serait un schma conceptuel quivalent. Nanmoins, ce modle est
plus difficile concevoir en partant de rien (sans dbuter par le niveau conceptuel).

Figure 1-67. Schma logique avec

Les faits, seulement les faits!


Ne raisonnez pas en termes de traitements, mais seulement en termes de faits tangibles et
pertinents.
Le tableau suivant prsente quelques propositions faisant intervenir de plus en plus de traitements au dtriment des donnes.

ditions Eyrolles

Livre SOUTOU.indb 71

71

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 1-9 : Donnes et traitements


Donnes
prpondrantes

Tout passager dun vol commercial dispose dun sige numrot.

Un client cumule des miles chaque voyage.

Donnes et un peu de
traitement

Un passager peut embarquer avec un bagage pas trop volumineux ni trop lourd.

Un passager peut disposer ses affaires dans un coffre bagages.

Traitements
prpondrants

Le solde du compte du client ne doit pas tre ngatif pour pouvoir commander un billet.

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 questions telles que Doit-on stocker le volume ou le poids du bagage main des passagers?,
Doit-on connatre la contenance ou la charge limite dun coffre bagages utilis lors du
voyage?. Peut-tre des attributs tels que masse_bagage_main, masse_max et volume_
max devront tre pris en compte.
Les traitements sont prpondrants lorsquil sagit de processus dpendants de la valeur de
certains attributs dj existants ou mettant jour de tels attributs.

Les concepts inutiles de UML


Concernant les bases de donnes, tout nest pas bon prendre dans la notation UML. Ainsi,
les concepts suivants sont inutiles:
association navigable: les instances dune classe ne doivent pas connatre les instances
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 /,
lassociation sympathisant peut tre dduite (quoique), de la prsence des associations
prefere et appartenance;
association qualifie : permet de restreindre les objets rfrencs dans une association
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

Livre SOUTOU.indb 72

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-68. Association UML navigable et drive

Figure 1-69. Association UML qualifie

Les associations navigables ne sont pas significatives du point de vue des donnes, mais des
traitements.
Les associations drives peuvent tre perues comme redondantes, mais si elles doivent
tre dfinies, elles devront tre considres comme des associations binaires standard.
Les associations qualifies doivent tre mises en uvre par le concept dagrgation forte
(composition).

ditions Eyrolles

Livre SOUTOU.indb 73

73

15/02/12 07:05

UML 2 pour les bases de donnes

Un seul schma valable?


Ne vous dsolez pas si le schma que vous crez est diffrent de celui de votre collgue qui
rflechissait la mme conception. Il nexiste pas quun seul schma pour modliser un certain
univers. Dans la majorit des cas, le mcanisme didentification artificielle ou lagrgation
forte peuvent tre prfrs celui de la classe-association.
La qualit dun schma se jugera lors de la transformation en tables, cls et index. Moins vous
aurez agir pour rendre optimales vos tables, plus votre schma conceptuel sera idal. Lexprience venant, vous serez mme de mieux choisir en amont le mcanisme optimal pour
relier vos classes.

Rgles mtier et contraintes


Une contrainte indique en gnral une restriction ou donne des informations complmentaires
sur un modle dun point de vue smantique. Chaque contrainte peut formaliser une rgle
mtier et permet de prparer limplmentation la manire dun pseudo-algorithme.

Quelles que soient les contraintes que vous dfinirez dans vos diagrammes conceptuels,
aucune modification structurelle ne sera rpercute dans les schmas relationnels gnrs.
Toute contrainte devra tre implmente au niveau du code SQL (par contraintes, dclencheurs ou procdures catalogues).
Pour les contraintes personnalises, des rles doivent tre utiliss au niveau des associations
qui seront concernes par une contrainte.

La spcification UML2 ne propose pas beaucoup de contraintes prdfinies et bien peu doutils les incluent. En contrepartie, toute contrainte peut tre crite soit laide du langage OCL
(Object Constraint Language), soit en langage naturel.
Graphiquement, une contrainte est un texte encadr daccolades qui sapplique au niveau dun
attribut, dun rle, ou entre associations nommes.
Les contraintes qui sappliquent un ou entre plusieurs lments peuvent tre notes de diffrentes faons [AUD 09]:
en plaant la contrainte ct dun attribut ou lextrmit dune association;
en ajoutant une note associe llment contraindre;
en plaant la contrainte sur une flche en pointills joignant les deux lments de modle
contraindre ensemble, la direction de la flche constituant une information pertinente au
sein de la contrainte;
en plaant la contrainte sur un trait en pointill joignant les deux lments de modle
contraindre ensemble dans le cas o la contrainte est bijective;

74

Livre SOUTOU.indb 74

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

en utilisant une note relie, par des traits en pointills, chacun des lments de modle,
subissant la contrainte commune, quand cette contrainte sapplique sur plus de deux lments
de modle.

Contraintes prdfinies
Les contraintes prdfinies se notent en gnral lextrmit dun lien dassociation (au mme
niveau que le rle). Les plus intressantes dans un contexte de bases de donnes sont:
{subsets nom_rle} exprime linclusion dune association par rapport une autre;
{xor} qui indique le OU exclusif entre objets relis par deux associations.
Dans lexemple suivant, la contrainte xor prcise quun consultant est soit associ un projet,
soit une formation, mais jamais aux deux simultanment.

Figure 1-70. La contrainte du OU exclusif

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.

Figure 1-71. La contrainte dinclusion

ditions Eyrolles

Livre SOUTOU.indb 75

75

15/02/12 07:05

UML 2 pour les bases de donnes

Les autres contraintes prdfinies de UML sont les suivantes:

{redefined nom_rle} redfinit un rle;

{union} signifie que le rle rassemble une union de sous-ensembles;

{ordered} exprime un ordre au niveau des objets relis;

{bag} exprime quun mme objet cible peut apparatre plusieurs fois dans lassociation;
{sequence} note aussi {seq} combine les caractristiques de bag et de ordered.

En labsence de ces contraintes (cas le plus gnral et celui par dfaut), la terminaison dune
association est dite de type set (chaque objet reli nest prsent au plus quune seule fois
dans lassociation).

Pour formaliser toute autre contrainte, vous pouvez utiliser le langage OCL.

Contraintes personnalises (langage OCL)


OCL (Object Constraint Language) est un langage formel, bas sur la logique des prdicats du
premier ordre, pour annoter les diagrammes UML en permettant notamment lexpression de
contraintes. lorigine, OCL a t dvelopp en 1997 par Jos Warmer (IBM), sur les bases du
langage IBEL (Integrated Business Engineering Language). OCL existe depuis la version1.1
dUML et fait partie intgrante de la norme UML depuis la version1.3.
Dans le cadre dUML2.0, les spcifications du langage OCL figurent dans un document indpendant de la norme dUML, dcrivant en dtail la syntaxe formelle et la faon dutiliser
ce langage : http://www.omg.org/spec/OCL/2.0/PDF. Un ouvrage plus complet a t publi
[WAR 03].
OCL permet de spcifier des contraintes sur ltat dun objet ou dun ensemble dobjets principalement laide dinvariants sur des classes et des prconditions/postconditions lexcution
doprations. Une expression OCL dcrit une contrainte respecter et ne dcrit pas limplmentation dune mthode.
Lexemple suivant dcrit la contrainte OCL qui exprime, par lintermdiaire de rles, que tout
employ est soit:

76

Livre SOUTOU.indb 76

chef, et dans ce cas il na pas de chef (condition isEmpty vrifie);


sous la responsabilit dun chef qui doit tre employ dans la mme entreprise que lui
(deuxime partie de la condition).

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-72. Contrainte OCL base sur les rles

Lexemple suivant sinspire de [MAK 08] et prsente deux contraintes bases sur des ensembles
dobjets.

Figure 1-73. Contraintes OCL bases sur des ensembles dobjets

ditions Eyrolles

Livre SOUTOU.indb 77

77

15/02/12 07:05

UML 2 pour les bases de donnes

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

La rgle OCL (R2) qui formalise la contrainte de dates est la suivante:


context Contrat inv R2 :
self.clausesforAll
(c | c.sinistresforAll
(s | s.date_sinistre.isBefore
(self.date_contrat)))

Contraintes dhritage
Lhritage a t prsent la section Les associations plus complexes avec lexemple de la
surclasse Personnel qui permet de spcialiser les sous-classes Navigant et Commercial.
Dans tout graphe dhritage, diffrents cas peuvent tre recenss en fonction des instances des
classes. Ces cas traduisent des contraintes que Merise/2 nommait la partition (appele aussi
exclusion et totalit). En considrant les personnels comme navigants et commerciaux, cette
population peut tre compose:
de navigants ou commerciaux exclusivement (casA);
de navigants, de commerciaux et de personnels ni navigants ni commerciaux (casB);
de navigants, de commerciaux et de personnels la fois navigants et commerciaux (casC);
de toute possibilit (casD).

Figure 1-74. Diffrents cas dhritage

78

Livre SOUTOU.indb 78

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Contraintes prdfinies
Le tableau suivant illustre, pour chaque cas dhritage, la contrainte mettre en uvre dans
le formalisme Merise et la notation UML. Notez que labsence de contrainte dans un graphe
dhritage na pas la mme signification dans Merise/2 et dans UML. Le premier autorise
quune occurrence appartienne plusieurs entits sous-types. UML considre que par dfaut
un objet nexiste que dans une classe pour un niveau de hirarchie donn.
Tableau 1-10 : Hritage: couverture et disjonction
Couverture

Non-couverture

Disjonction (cas A)

(cas B)

Merise/2: Partition(XT)

Merise/2 : Exclusivit(X)

UML: {complete,disjoint}

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.

Figure 1-75. Hritage avec la contrainte de partition

Contraintes avec OCL


La programmation OCL permet galement de prciser ces types de contraintes, quil est possible de trouver ailleurs que dans un graphe dhritage.

ditions Eyrolles

Livre SOUTOU.indb 79

79

15/02/12 07:05

UML 2 pour les bases de donnes

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)

La deuxime, attache la classe Commercial signifie, dune manire symtrique, quun


commercial ne peut pas tre navigant.
context Commercial inv Partition2 :
Navigant.allInstances.nup->excludes(self.nup)

La troisime rgle doit tre attache la classe Personnel et signifie:


quun personnel est soit navigant, soit commercial (par le fait du ou exclusif). La fonction
oclIsKindOf permet de tester la nature de la classe dun type;
que le numro est lidentifiant (fonction isUnique).

context Personnel inv Partition3 :


(self.oclIsKindOf(Navigant) xor self.oclIsKindOf(Commercial))
and
(Personnel.allInstances.nupisUnique(c | c.nup))

Mise en pratique
Rendez-vous lexercice 1.10 Les contraintes pour crire formellement les expressions
OCL afin denrichir diffrents schmas.

Rgles de validation
La notation UML ne propose aucun moyen de sassurer de la cohrence dun diagramme de
classes. Cela est particulirement pnalisant pour les diagrammes qui visent modliser une
base de donnes. Les rgles que vous devrez adopter sinspirent des rgles de validation et de
normalisation introduites avec les modles entit-association et la mthode Merise. La plupart
de ces rgles datent du milieu des annes 1970. Ces rgles sont majoritairement bases sur les
dpendances fonctionnelles.
Il est ais de transposer ces rgles vos diagrammes de classes UML de manire obtenir
automatiquement un schma relationnel de qualit, en limitant les risques derreurs de modlisation lourdes de consquences au niveau de la base de donnes.

80

Livre SOUTOU.indb 80

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Les dpendances fonctionnelles


Edgar Codd fut le premier publier des crits sur les dpendances fonctionnelles [COD72].
La signification du terme fonctionnel nest pas vraiment celle qui est couramment utilise
dans le monde de linformatique de gestion, il sagit plutt dune dpendance de valeurs entre
attributs.
Lexplication de limportance dtablir toutes les dpendances principales qui rgissent
undiagramme de classes rside dans le fait que le schma crer est un modle relationnel
bas sur les cls primaires et trangres. Chaque attribut dun modle conceptuel doit tre
associ son identifiant, car aucune cl primaire ne pourrait tre dduite. Les cls trangres sont dduites du fait de lexistence des associations reliant des classes correctement
identifies.
Deux attributs a et b sont en dpendance fonctionnelle (note a b), si toute valeur de a, au
plus une valeur de b peut tre associe. On peut dire que b dpend de a. En dautres termes,
a permet didentifier b.

Considrons les attributs relatifs au billet de train: num_train, nom_passager, num_dossier, jour_depart, ville_depart, heure_depart, num_classe, num_voiture et
num_siege.

Figure 1-76. Billet de train et ses dpendances

Les dpendances minimales peuvent tre tablies:


num_dossier
nom_passager (si on considre quun seul passager est concern par
ce dossier);
num_dossier
num_train;

ditions Eyrolles

Livre SOUTOU.indb 81

81

15/02/12 07:05

UML 2 pour les bases de donnes

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 quivalentes:

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 identifiants. En ralit, ce diagramme dcrit un modle relationnel et non un modle conceptuel.
Dun point de vue conceptuel, ce diagramme nest pas correct, mais dun point de vue relationnel, il ne pose pas de problme au premier abord.

82

Livre SOUTOU.indb 82

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-77. Non-redondance

Bien que la normalisation soit un processus qui concerne le modle relationnel, il est toutefois
intressant de ltudier au niveau conceptuel, de sorte produire des diagrammes de classes
optimaux. Vous trouverez dans la littrature et sur le Web un trs grand nombre de dfinitions
mathmatiques des formes normales. Ne comptez pas sur moi ni pour en rajouter ni pour souligner les incohrences de lune ou de lautre. Je vais simplement illustrer chaque cas par un
exemple. Vous devrez transposer vos problmatiques chaque exemple prsent.

Premire forme normale


Afin de prserver la premire forme normale, vous devez examiner les attributs non identifiants.
Premire forme normale
Chaque attribut dune classe ou dune classe-association doit hberger une seule valeur un
instant t et plusieurs attributs ne doivent pas tre utiliss pour stocker plusieurs valeurs dun
mme type.
Une classe est en premire forme normale si chaque attribut est en dpendance fonctionnelle
avec lidentifiant.

Les attributs multivalus (associs plusieurs valeurs comme un tableau ou une liste) sont
proscrits de tout schma conceptuel. En revanche, un schma conceptuel doit tre compos

ditions Eyrolles

Livre SOUTOU.indb 83

83

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 1-78. Premire forme normale

La solution normalise vite lutilisation de tableaux ou de duplication dattributs. Les tables


issues de cette conception permettront une indexation optimale et viteront des valeurs nulles.

Deuxime forme normale


Afin de prserver la deuxime forme normale, vous devez examiner les attributs des classesassociations.
Deuxime forme normale
Chaque attribut dune classe-association dpend simultanment des identifiants des classes
connectes lassociation.

Le diagramme suivant ne respecte pas la deuxime forme normale, car plusieurs attributs de
la classe-association ne dpendent pas simultanment du couple (id_cli, immatriculation).

84

Livre SOUTOU.indb 84

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-79. Deuxime forme normale non assure

En raisonnant avec les dpendances fonctionnelles, toutes celles qui concernent les attributs
dune classe-association doivent tre lmentaires (minimales en partie gauche).
id_cli, immatriculation
date_achat minimale si on considre quun client ne
peut pas racheter une voiture lui ayant dj appartenu.
id_cli, immatriculation
mise_circulation non minimale, car la date de premire
mise en circulation ne dpend pas du client (immatriculationmise_circulation).
id_cli, immatriculation
km minimale si on dsire conserver le kilomtrage lors
de lachat.
id_cli, immatriculation
total_km non minimale, car le kilomtrage total ne
dpend que du vhicule (immatriculationtotal_km).
id_cli, immatriculation
tel_cli non minimale, car le tlphone du client ne
dpend pas du vhicule (id_clitel_cli).
En appliquant ces dpendances au diagramme prcdent, on rduit la complexit de la classeassociation.

Figure 1-80. Deuxime forme normale assure

ditions Eyrolles

Livre SOUTOU.indb 85

85

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 1-81. Deuxime forme normale amliore

Troisime forme normale


Afin de prserver la troisime forme normale, vous devez examiner les ventuelles dpendances entre attributs qui ne sont pas des identifiants de la classe o ils rsident.
Troisime forme normale
Chaque attribut doit dpendre dun identifiant dans le cas dune entit/classe ou de plusieurs
identifiants dans le cas dune association/classe-association et non dun autre attribut voisin
lui-mme dpendant dun ou de plusieurs identifiants.

La classe suivante ne respecte pas la troisime forme normale, car il existe une dpendance
entre deux attributs non identifiants (id_constructeurmarque). Il convient de prserver
cette dpendance dans une autre classe.

86

Livre SOUTOU.indb 86

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-82. Troisime forme normale non assure

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.

Figure 1-83. Troisime forme normale assure

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.

Figure 1-84. Troisime forme normale amliore

ditions Eyrolles

Livre SOUTOU.indb 87

87

15/02/12 07:05

UML 2 pour les bases de donnes

Forme normale de Boyce-Codd


Nomme par le patronyme de ses inventeurs, la forme normale de Boyce-Codd (BCNF) concerne
les attributs dune classe-association qui peuvent jouer le rle didentifiant dune autre classe.
Forme normale de Boyce-Codd
Aucun attribut dune classe-association ne doit pouvoir jouer le rle dun identifiant dune autre
classe.

La classe-association suivante ne respecte pas la forme normale de Boyce-Codd, car il existe


une dpendance entre un attribut non identifiant et un identifiant (nom_regionid_pays).

Figure 1-85. Forme normale de Boyce-Codd non assure

Il convient de prserver cette dpendance en transformant la classe-association en une classe


part entire et en ajoutant un identifiant pour y associer le libell que constitue le nom de la rgion.

Figure 1-86. Forme normale de Boyce-Codd assure

88

Livre SOUTOU.indb 88

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Ce diagramme prsente galement lavantage de respecter la hirarchie Vehicule-Region-Pays.


Fais-moi plaisir, rajoute la forme normale domaine-cl DKNF.

Forme normale domaine-cl


Dbusque par R.Fagin (encore un chercheur venant dIBM), la forme normale domaine-cl
(DKNF pour Domain Key Normal Form) concerne les dpendances par le biais de contraintes
de valeurs.
Forme normale domaine-cl
Le modle conceptuel ne doit pas contenir de contraintes autres que des contraintes de
domaine, de cl, prdfinies et personnalises.

Daprs moi, cette forme normale ne doit pas tre mise en uvre dun point de vue conceptuel.
Elle est davantage tudier au niveau logique ou physique afin dviter dventuelles redondances et anomalies de mises jour.
En considrant que la catgorie dun avion est en relation directe avec son envergure, lassociation appartient ne respecte pas la forme normale domaine-cl, car suivant la valeur de
lenvergure de chaque avion, on pourrait dduire cette information.

Figure 1-87. Forme normale domaine-cl non assure

Afin de normaliser ce modle, il conviendrait dliminer cette association et dajouter une


contrainte personnalise dcrivant lassociation sous-jacente.

Quatrime et cinquime formes normales


Les formes normales suprieures tudies ici (quatrime et cinquime) concernent les associations n-aires. Dans la mesure o je vous ai conseill de ne pas les utiliser (en dcomposant
le regroupement de classes laide de classes-associations), vos schmas respecteront les quatrime et cinquime formes normales.Lerreur, dans la plupart des cas, consiste modliser
plusieurs faits ou vnements dans une seule association n-aire. Lexemple suivant modlise le
fait quil est ncessaire pour chaque pilote de dtenir une liste de qualifications pour voler sur
un type dappareil donn.

ditions Eyrolles

Livre SOUTOU.indb 89

89

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-88. Quatrime forme normale non assure

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.

Figure 1-89. Quatrime forme normale assure

Si la modlisation initiale navait pas prvu le fait quun pilote puisse dtenir des qualifications indpendamment des avions sur lesquels il est apte voler, la cinquime forme normale
naurait pas t respecte. Le diagramme suivant pallie cet ventuel inconvnient.

90

Livre SOUTOU.indb 90

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-90. Cinquime forme normale assure

Mise en pratique
Respectez ces principes pour rsoudre les exercices1.11 La carte dembarquement, 1.12
Deux cafs et laddition ! , 1.13 La thalasso , 1.14 Le centre de plonge et 1.15
Llection prsidentielle.

Bilan
Aprs avoir examin diffrents formalismes de modlisation de bases de donnes(le modle
de Chen, le MCD de Merise et ses extensions Merise/2), la notation UML semble trs bien
adapte pour les raisons suivantes.
UML propose autant de concepts que Merise/2, avec la possibilit de dfinir en plus des
strotypes personnaliss.
La reprsentation de certaines contraintes sur des associations n-aires est implicite avec
les classes-associations.
Lutilisation de la notation UML permet aux concepteurs de travailler dans un environnement plus volutif, notamment avec la possibilit dinterfacer plus facilement les langages
volus C++ ou Java.

Exercices
Pour que vos diagrammes soient le plus en phase avec les corrigs (en annexes), le nom des
attributs est indiqu pour la plupart des exercices en police Courier.

ditions Eyrolles

Livre SOUTOU.indb 91

91

15/02/12 07:05

UML 2 pour les bases de donnes

Voici un petit rappel de la dmarche adopter pour dbuter une conception:


tablir la liste des attributs (sous la forme dun dictionnaire des donnes);
purer (viter les synonymes, les polysmies);
dcomposer les attributs structurs (adresse, nomenclature, etc.);
reprer les identifiants (si ncessaire, en crer);
dduire les classes (entits) partir de chaque identifiant;
disposer chaque attribut dans une classe (dpendance);
trouver un identifiant pour chaque classe;
dterminer les associations entre classes;
rattacher chaque attribut orphelin sa classe ou dans une classe-association.

1.1 La droute des bleus


Chacun des 6groupes est compos de 4quipes qui jouent toutes les unes contre les autres
lors du premier tour. Si vous ne connaissez pas le rglement rgissant ce premier tour, vous
vous souvenez srement du fiasco des bleus, la grve de lentranement, lentrain de nos
champions, la rsistance de certains abandonner leurs primes de participation nen jetez
plus! Bref, la fin du premier tour, les deux premires quipes de chaque groupe se qualifient pour le second tour.
Intressons-nous maintenant non pas la composition des quipes mais la composition des
classes UML.

Figure 1-91. Premiers rsultats

92

Livre SOUTOU.indb 92

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Dictionnaire des donnes


Les attributs suivants vous permettront de commencer votre modlisation. Il est toutefois
ncessaire den ajouter (les identifiants notamment).
Tableau 1-11 : Les attributs de dpart
Attribut

Dsignation

Type

lib_equipe

Libell de lquipe participante (pays)

Chane de caractres

lib_groupe

Libell du groupe (par exemple, GroupeA)

Chane de caractres

nom_ville

Nom de la ville (par exemple, Johannesburg)

Chane de caractres

nom_stade

Nom du stade (par exemple, Ellis Park)

Chane de caractres

jour_match

Jour dun match (par exemple, 11/06/2010)

Date

heure_match

Heure dun match (par exemple, 13h30)

Dcimal

score

Score dun match (par exemple, 1-2).

Chane de caractres

nom_chaine

Nom de la chane (par exemple, France 2)

Chane de caractres

classement

Classement de lquipe au sein du groupe

Entier court

Associations binaires
Qui dit libell, dit identifiant, et qui dit identifiant, dit classe. Voil donc les premires classes
simplement dcouvertes partir des attributs initiaux.

Figure 1-92. Classes initiales

ditions Eyrolles

Livre SOUTOU.indb 93

93

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 1-93. Classes finalises

Classe-association
Si vous savez vous servir dune classe-association, vous pouvez rflchir lvolution de ce
schma afin de prendre en compte laffichage des rsultats dans diffrentes langues. Ainsi,
le nom de lquipe dAfrique du Sud (lib_equipe) doit pouvoir tre associ diffrents
libells, par exemple South Africa en anglais ou frica del Sur en espagnol. Utilisez
la classe Langue constitue dun identifiant id_langue (par exemple, fr) et dun libell
lib_langue (par exemple, France).

Historique
Modifiez le diagramme pour mmoriser lhistorique des coupes du monde (qui a lieu tous
les 4ans: annee), notamment pour savoir quelle tait le pays organisateur et la composition

94

Livre SOUTOU.indb 94

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

des groupes de lpoque. Notez que le groupe nest pas compos selon lordre alphabtique.
En effet, la position (position) dans le groupe seffectue selon le classement lors du 1er tour.
Sachez galement que cet vnement ne peut tre organis que par 2pays maximum.

Figure 1-94. Compositions du groupeA

1.2 Lorganisme de formation


Au cours de lanne, un organisme assure diffrents cours auprs de stagiaires salaris en
formation continue.

Figure 1-95. Formateur en action

Inscriptions
En dbut danne, chaque salari remplit une fiche sur laquelle il indique son nom (nom), son
e-mail (mail), le code de son entreprise (codent) et la liste des formations quil envisage de

ditions Eyrolles

Livre SOUTOU.indb 95

95

15/02/12 07:05

UML 2 pour les bases de donnes

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.

1.3 Les lignes de facture


Dans toute facture, plusieurs produits peuvent tre commands et un produit peut se retrouver
dans diffrentes factures.

Figure 1-96. Exemple de facture

96

Livre SOUTOU.indb 96

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Compltez le diagramme suivant; les attributs considrer sont la quantit (quantite), le


prix unitaire de chaque produit (prix_unitaire_ht), lventuelle remise (remise) et les
informations relatives la TVA (code_tva et taux_tva).

Figure 1-97. Lignes de facture

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.

1.4 La dcomposition des n-aires


Dcomposez toute association n-aire que vous seriez tent de dfinir.

Visite des reprsentants


1. Dans chaque rgion, des reprsentants visitent des dpts. Les classes principales sont
Region, Representant et Depot.
2. Mmorisez les dates des diffrentes visites.
3. On dsire connatre quel vhicule de la socit le reprsentant a utilis (classe Vehicule et
sans identification artificielle).
4. Modlisez le cas prcdent avec lidentification artificielle.

Stages
Chaque stage rfrenc dans le catalogue peut se drouler dans diffrentes villes et diffrentes priodes. Les classes principales sont Stage, Ville et Periode.

ditions Eyrolles

Livre SOUTOU.indb 97

97

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-98. Stage informatique

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

Figure 1-99. Cote automobile

Horaires dune ligne de bus


Modlisez la base de donnes mmorisant les horaires de toutes les lignes de bus. Les classes
principales sont Station, Ligne, Jour et Horaire.

98

Livre SOUTOU.indb 98

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Noubliez pas que vous devez tre en mesure dimprimer la demande ce tableau.

Figure 1-100. Horaires dune ligne de bus

1.5 Les comptes bancaires


Les clients dune agence bancaire possdent des comptes.

Associations binaires
Compltez le diagramme suivant pour modliser:

ditions Eyrolles

Livre SOUTOU.indb 99

le nom du propritaire de chaque compte et la date douverture du compte;


les mandataires (clients non propritaires) des comptes et leurs divers droits associs (retrait, virement ou clture). Notez quun mandataire ne peut pas grer plus de
5comptes.

99

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-101. Virements bancaires

Identification relative
Modlisez lhistorique des rendez-vous de chaque client avec le conseiller rencontr et la date
de dernier entretien. Il est intressant de connatre les diffrents produits financiers qui auront
t vendus au client lors de ces rendez-vous. Chaque conseiller peroit une prime en fonction
du produit vendu pour toute souscription.

Identification artificielle
Modlisez les virements entre comptes. Il sagit de connatre le montant en euros, le client
initiateur et la date de lopration.

1.6 Le RIB
Positionnez-vous au niveau de la Banque de France en modlisant les comptes des clients de
tous les organismes bancaires. Considrez notamment les attributs suivants:
nom_banque, nom_agence, num_compte, cle_RIB, nom_client;
debit, credit, date_ouverture.

Figure 1-102. Un RIB

100

Livre SOUTOU.indb 100

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

1.7 Lorganisme de formation (suite)


Compltez le diagramme de lexercice1.2 qui modlise lorganisme de formation.

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?

1.9 Les cartes grises


Le but de cet exercice est de modliser le cycle de vie dun vhicule au travers de ses diffrents
propritaires et de la rglementation.

Ancien rgime
Le premier document analyser est le suivant. Lorsquun vhicule change de propritaire son
immatriculation est modifie.

ditions Eyrolles

Livre SOUTOU.indb 101

101

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 1-103. Premire moiti dune carte grise ancien rgime

Modlisez un premier schma en fonction des attributs que vous devez considrer:
immatriculation, date_immat, mise_circu, nom_departement, taxe_region;
nom_proprio, prenom_proprio, adresse_proprio;
genre, marque, type_veh, nserie_veh, carosserie, energie, puissance, num_
places.

Cot du cheval
Modlisez le fait que chaque rgion (nom_region) fixe annuellement (annee) par dlibration du conseil rgional la valeur du cheval fiscal (euros_cv) rentrant en compte dans le
calcul de la taxe du certificat dimmatriculation.

Nouvelle numrotation
Deux systmes cohabitent actuellement en France. Lancien systme bas sur un comptage
dpartemental, en place depuis 1950, est dsormais remplac depuis le 15avril2009 par un
systme entirement national.
Ce nouveau numro est attribu dfinitivement au vhicule, jusqu sa destruction ou son
exportation. La plaque intgre, sur sa partie droite, un identifiant territorial compos dun
numro de dpartement et du logo de la rgion correspondante. Cet identifiant est choisi par le
propritaire et na pas obligatoirement de rapport avec le lieu de rsidence.

102

Livre SOUTOU.indb 102

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-104. Immatriculation nouveau rgime

Dans quelle mesure votre diagramme doit-il voluer?

Contrles techniques
Indpendamment du systme dimmatriculation, chaque vhicule doit passer tous les deux
ans un contrle technique. Plusieurs enseignes existent et diffrents centres de contrle
dtenant un numro dagrment sont prsents en France. Modlisez lhistorique de ces vnements en prenant en compte de nouveaux attributs: limite_echeance, nom_enseigne,
adresse_centre, nom_centre, num_agrement, date_visite, num_visite et num_
carte_grise.

Figure 1-105. Seconde moiti dune carte grise

1.10 Les contraintes


Prcisez la smantique de vos diagrammes laide de contraintesOCL afin de formaliser les
faits suivants.

La droute des bleus

ditions Eyrolles

Livre SOUTOU.indb 103

Un match ne doit pas opposer une quipe avec elle-mme.


Un match doit opposer deux quipes du mme groupe.

103

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Les comptes bancaires

Un mandataire dun compte nest pas le propritaire.


Un virement se ralise entre deux comptes distincts.
Un virement ncessite un crdit suffisant.

1.11 La carte dembarquement


Tout passager est identifi par Air France par un numro unique (num_carte). Quatre types
de cartes de fidlit existent (ce sont des libells). Le titre IVORY (lib_fidelite) dcrit des
passagers occasionnels, puis viennent SILVER, GOLD et PLATINIUM acquis par accumulation de voyages.

Figure 1-106. Carte dembarquement

Vols catalogue
Les autres attributs que vous devez considrez apparaissent clairement sur le document et
sont les suivants : nom_client, prenom_client, num_vol, jour_mois, heure_dep,
heure_emb, nom_aeroport, num_porte et num_siege. Un aroport est identifi par un
code international (par exemple, Paris Orly est codifi LFPO par lOACI, lOrganisation
de laviation civile internationale).
Distinguez un vol catalogue dun vol rel. Le vol rel transporte plusieurs clients, tandis
que le vol catalogue renseigne les caractristiques dun trajet indpendamment du jour.

104

Livre SOUTOU.indb 104

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Vols rels
Modifiez le prcdent diagramme pour:
calculer des statistiques des retards en mmorisant les heures de dpart et darrive relles
(dep_reel, arrivee_reelle);
quun client puisse rserver plusieurs siges pour le mme trajet;
connatre le planning annuel de chaque vol. Dans lexemple suivant, le vol AF6146 nest
pas ouvert du samedi16 au mardi19. Lheure darrive catalogue (heure_arr) est galement prendre en compte.

Figure 1-107. Planning annuel des vols

1.12 Deux cafs et laddition!


Le document analyser est le suivant. Les lments prendre en compte sont entours.

Figure 1-108. Note de restaurant

ditions Eyrolles

Livre SOUTOU.indb 105

105

15/02/12 07:05

UML 2 pour les bases de donnes

Considrez les principaux attributs : nom_enseigne, adresse_resto, siret_resto,


tel_resto, num_table, nombre_couverts, nom_serveur, qte_produit, lib_produit, pu_ht_produit, date_repas, num_caisse et num_note.
Ajoutez votre diagramme les lments suivants:
la capacit de chaque table (diffrente du nombre de couverts servis une table pour un
repas);
le taux de TVA dpend de chaque produit;
plusieurs restaurants de cette enseigne peuvent exister en France;
chaque restaurant de cette enseigne numrote ses tables de 1 n;
les serveurs peuvent tre responsables de 3 10tables chaque jour.

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.

Figure 1-109. Sjour en thalasso

1.14 Le centre de plonge


Un club de plonge dcide dabandonner la gestion papier de toutes ses prestations. Il dispose
de plusieurs bateaux ayant diffrentes caractristiques (immat, nom_bateau, capacite,
date_conformite). Plusieurs types demploys (type_emp) travaillent pour ce club (moniteurs, pilotes, mcanicien, etc.). Lidentit de chaque employ (nom_emp) devra tre prise en
compte.

106

Livre SOUTOU.indb 106

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-110. La flotte du club

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

Figure 1-111. Les sites de plonge

ditions Eyrolles

Livre SOUTOU.indb 107

107

15/02/12 07:05

UML 2 pour les bases de donnes

Lors de chaque sortie, plusieurs plongeurs sont embarqus. Ces plongeurs composent diffrentes palanques (groupe dau maximum cinq plongeurs ralisant la mme plonge).
Un plongeur peut tre rattach un club extrieur pour lequel des accords ont t passs
avec lorganisateur. Chaque plongeur doit tre enregistr (num_brevet, nom_plongeur,
niveau_plong) et on doit pouvoir connatre le chef de chaque palanque. Certaines palanques sont diriges par des moniteurs du club.

Figure 1-112. Des plongeurs

Le prix de chaque plonge est indpendant du site, mais peut varier selon le mois. Il existe
deux tarifs (prix_plongee): en autonome et accompagn dun des moniteurs du club. la
fin de chaque plonge, le chef de palanque annonce la dure dimmersion, ainsi que la profondeur maximale atteinte au cours de la plonge (duree_plongee et profondeur_max). Ces
deux chiffres doivent tre consigns.

1.15 Llection prsidentielle


Dans notre pays, tous les cinq ans, le titre suprme est remis en jeu. Lobjectif de cet exercice
nest pas de modliser les promesses non tenues, les engagements utopiques ou les beaux discours crits par dautres. Il sagit simplement de compter les voix pour viter, dans la mesure
du possible, que notre pays soit codirig pendant un temps par deux prsident(e)s.

Membres des partis


Chaque membre de la vie politique (lu ou non) sinscrit dans un parti. En gnral, il y reste
durant toute sa carrire. Vous devez prvoir les partis qui changent de nom sans changer dobjectifs et les ventuels virements de bord dun politicien (priodes quil a passes au sein
dun parti).

108

Livre SOUTOU.indb 108

ditions Eyrolles

15/02/12 07:05

Chapitre 1

Le niveau conceptuel

Figure 1-113. Historique dun parti. Extrait du site http://fr.wikipedia.org

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.

Rsultats des lections passes


Avant de modliser les rsultats de la future lection, intressez-vous aux chiffres des ditions
prcdentes au niveau national.
Comme lillustre la figure suivante, les attributs que vous devrez considrer sont les suivants:
annee_election, score_1tour, score_2tour, pourcent_1tour et pourcent_2tour.

Figure 1-114. Historique des rsultats dun parti. Extrait du site http://fr.wikipedia.org

ditions Eyrolles

Livre SOUTOU.indb 109

109

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 1-115. Dcomposition des rsultats. Extrait du site http://www.interieur.gouv.fr

Quelle que soit la prcision choisie, le rsultat du premier tour est prsent sous la forme suivante.

Figure 1-116. Rsultats de la prsidentielle2007 en Midi-Pyrnes. Extrait du site http://www.interieur.gouv.fr

110

Livre SOUTOU.indb 110

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique
Ce chapitre dtaille la deuxime tape de conception dune base de donnes: il sagit dlaborer un schma logique (modle relationnel); la dernire tape tant la cration des tables
(gnration de scripts SQL) puis des vues (requtes SQL).
Les avantages dutiliser un modle logique de donnes sont nombreux:
rester indpendant du SGBD (mais plus proche des tables);
vrifier son modle avant de crer les tables dfinitives (normalisation);
rduire la complexit du modle (dcider de ne pas crer certaines tables dduites toutefois
du modle conceptuel);
renommer des objets (colonnes, cls, contraintes et tables);
typer les colonnes plus prcisment;
prvoir dajouter certaines contraintes de cls et de valeurs (contraintes UNIQUE et CHECK
notamment);
calculer la volumtrie prvisionnelle.
Ce chapitre se divise en trois parties. La premire partie dcrit les concepts du modle relationnel. La deuxime partie prsente les rgles qui permettent de driver un schma logique
partir dun modle conceptuel. La dernire partie traite de la normalisation et du calcul de
volumtrie.
Deux autres aspects importants du modle relationnel existent. Le premier concerne lintgrit des donnes qui est aborde au chapitre3 (contraintes SQL). Le dernier aspect recouvre
la manipulation des donnes au sens des oprateurs relationnels (algbre relationnelle, base
mathmatique du langage de requtes SQL). Vous trouverez de nombreuses ressources sur le
Web et dans la bibliographie.

ditions Eyrolles

Livre SOUTOU.indb 111

111

15/02/12 07:05

UML 2 pour les bases de donnes

Concepts du niveau logique


Le modle relationnel a vu le jour en 1970 avec les travaux de Edgar Frank Codd , la principale
publication est A Relational Model for Large Shared Data Banks, Communications of the
ACM, vol.13, n6, 1970.

Figure 2-1. Le pre du modle relationnel

Ce modle de donnes est construit principalement autour des concepts suivants.


Relation: structure de donnes qui prfigure la table qui sera cre laide du langage SQL.
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.

Figure 2-2. Principaux concepts du modle relationnel

112

Livre SOUTOU.indb 112

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

La relation Aeroport dispose dune cl trangre (attribut Vil_idville) qui rfrence la


relation Ville. La relation Ville dispose dune cl trangre (attribut idpays) qui rfrence
la relation Pays. Le nom des contraintes de cls trangres apparat ici. En revanche, le nom
des autres contraintes (cl primaire, unique ou de vrification) est absent de cet affichage.
Notez quune cl trangre peut porter un autre nom que le nom de la cl primaire (ou unique)
rfrence.
Une fois ce modle tabli (automatiquement par un outil de conception), vous pouvez le modifier
loisir. Changer le nom dun attribut (colonne), le type, etc.
Vous trouverez de nombreux formalismes graphiques qui reprennent ces fondamentaux. Le
diagramme suivant, issu du logiciel Access de Microsoft, illustre cinq relations et quatre cls
trangres. Les cls primaires sont indiques en gras.

Figure 2-3. Modle logique Access

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.

Figure 2-4. Modle logique DB Designer

ditions Eyrolles

Livre SOUTOU.indb 113

113

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 2-5. Modle logique de Rational

Depuis la version7, SQL Server propose un outil pour construire un modle de tables. Les
cls primaires sont notes laide dune icne cl, les cls trangres ne sont pas explicitement
distingues.

114

Livre SOUTOU.indb 114

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Figure 2-6. Modle logique de SQL Server

Du conceptuel au relationnel
Cette partie prsente les rgles qui permettent de crer un schma relationnel partir
dun modle conceptuel exprim par un diagramme de classes UML. Ces rgles sont
surtoutbases sur lexistence des associations et la valeur des multiplicits de chaque association.
Bien que ces rgles soient, en principe, correctement programmes dans tout outil digne
de ce nom, il est ncessaire de vrifier le schma rsultant avant de crer votre base.
Ainsi,laconnaissance de ces rgles vous permettra de vrifier la cohrence des relations
gnres.

ditions Eyrolles

Livre SOUTOU.indb 115

115

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 2-7. tapes de la conception

Transformation des classes


Chaque classe gnre une relation. La cl primaire de la relation provient de lidentifiant primaire. Pour chaque ventuel identifiant secondaire, une contrainte unique est gnre.

En appliquant cette rgle lexemple suivant, la relation Aeroport prfigure la table de mme
nom.

Figure 2-8. Transformation dune classe

116

Livre SOUTOU.indb 116

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Transformation des associations un--plusieurs


Ce sont les plus nombreuses en gnral dans un modle conceptuel; chaque association un-plusieurs dclenche la gnration dune cl trangre. Toute association un--plusieurs
connecte une classe parent (multiplicit maximale1) une classe enfant (multiplicit maximale*).
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.

Figure 2-9. Transformation dassociations un--plusieurs

Le fait que la multiplicit minimale du lien ct parent soit0 ou1 na pas dinfluence sur la
structure du schma relationnel gnr. Seul le modle physique permet de diffrencier ces
deux cas en ajoutant une ventuelle contrainte NOT NULL applique la colonne cl trangre.

Transformation des associations plusieurs--plusieurs


Prsentes en gnral dans la plupart des modles conceptuels, chaque association plusieurs-plusieurs dclenche la gnration dune relation munie de deux cls trangres. Cette nouvelle
relation prfigure la table appele souvent table dassociation (ou table de jointure).
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.

ditions Eyrolles

Livre SOUTOU.indb 117

117

15/02/12 07:05

UML 2 pour les bases de donnes

De lapplication de cette rgle lexemple suivant, manent deux nouvelles relations. Lidentifiant de chaque nouvelle relation est compos du couple didentifiants des deux relations
initiales. Les cls trangres relient la nouvelle relation ses deux relations initiales associes.

Figure 2-10. Transformation dassociations plusieurs--plusieurs

Le fait que la multiplicit minimale dun lien soit0, 1 ou n (n>1) na pas dinfluence sur la structure du schma relationnel gnr. Seule une programmation permettra de mettre en uvre
une telle contrainte.

Cas particuliers des associations binaires


Concernant les associations binaires, deux cas particuliers existent: les associations un--un
et les associations rflexives. Concernant les premires, vous devrez raisonner comme pour les
associations un--plusieurs. Concernant les rflexives, vous devrez raisonner comme pour des
associations binaires simples en fonction des multiplicits existantes.

Transformation des associations un--un


Pour toute association un--un, considrez la relation du ct de la multiplicit 1..1 en tant
que parent et appliquez la transformation dune association un--plusieurs. Si aucune multiplicit na cette valeur (les deux valant 0..1), appliquez la transformation dune association
un--plusieurs sans considrer une relation en tant que parent en particulier. Si les deux multiplicits valent 1..1, vous devriez visiblement modifier votre schma en fusionnant les deux
classes en une seule

118

Livre SOUTOU.indb 118

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Appliquons cette rgle lexemple suivant, deux cls trangres doivent tre gnres. La
premire cl trangre (num_proj dans Collaborateur) qui concerne lassociation un-plusieurs devrait apparatre naturellement. En revanche, vous devrez vous assurer du bon
positionnement de la seconde cl trangre (id_coll dans Projet).

Figure 2-11. Transformation dune association un--un

En considrant ainsi la relation parent comme tant celle du ct de la multiplicit minimale1,


vous rduirez considrablement le nombre de valeurs NULL dans les colonnes cls trangres de vos tables.

Transformation des associations rflexives


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.
De lapplication de ce principe lexemple suivant, manent deux cls trangres. La premire provient de lassociation un--plusieurs et la seconde de lassociation un--un. La classe
Employe joue le double rle de parent et denfant pour ces deux associations.

ditions Eyrolles

Livre SOUTOU.indb 119

119

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 2-12. Transformation dassociations rflexives

En renommant les colonnes cls trangres provenant dassociations rflexives, vous amliorerez considrablement, par la suite, la lisibilit de la table. Les rles UML peuvent vous aider
dans ce sens. Dans lexemple prcdent, il convient de renommer par exemple id_emp2 par
id_mon_pote et id_emp3 par id_manager.

Transformation des agrgations (de type composition)


La transformation dune agrgation de type composition dclenche deux mcanismes. Dune
part, la gnration dune cl trangre du fait de lexistence de lassociation un--plusieurs.
Dautre part, lajout de cette colonne la cl primaire de la relation enfant du fait de lenrichissement de lidentifiant.
Appliquons cette rgle lexemple suivant, et constatons la gnration de la cl trangre
id_emp qui fait dsormais partie de la cl primaire de la relation enfant.

Figure 2-13. Transformation dagrgation de type composition

120

Livre SOUTOU.indb 120

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Transformation des classes-associations


La transformation dune classe-association sapparente celle de lassociation plusieurs-plusieurs. Ainsi, une nouvelle relation est gnre (et porte en principe le nom de la
classe-association). De plus, si la classe-association contient des attributs, ils apparaissent dans
la nouvelle relation (sans tre cl toutefois).
En appliquant cette rgle lexemple suivant, la nouvelle relation contient lattribut de la
classe-association.

Figure 2-14. Transformation dune classe-association

Vous devez vous demander comment driver un schma relationnel lorsquune classe-association est relie une autre classe. Eh bien, le plus naturellement du monde: en considrant
la classe-association comme une classe part entire et en adoptant les rgles prcites en
fonction des multiplicits de lassociation traduire.

Nous verrons plus loin quelques exemples qui incluent des classes-associations connectes
dautres classes.

Transformation de lhritage
Il existe trois transformations possibles pour chaque association dhritage.
Il nexiste pas de solution miracle et vous devrez choisir la meilleure option en fonction de
la nature de la contrainte qui concerne lhritage (partition, exclusion, totalit ou absence de
contrainte).
Vous pouvez traduire une association dhritage par:
distinction: en crant autant de relations que de classes (surclasse et sous-classes). Lidentifiant de la surclasse est propag dans toutes les relations et devient la cl primaire pour
chacune delles. Ce mme identifiant joue galement le rle de cl trangre vers la relation
dduite de la surclasse (qui prfigure la table de rfrence);
push-down: en migrant tous les attributs de la surclasse dans les sous-classes;
push-up: en migrant tous les attributs des sous-classes dans la surclasse.

ditions Eyrolles

Livre SOUTOU.indb 121

121

15/02/12 07:05

UML 2 pour les bases de donnes

Le premier exemple concerne la classification des personnels en trois populations: commerciaux, managers (chacun responsable de plusieurs personnels) et administratifs. En labsence
de contrainte, ce diagramme UML signifie quil existe des personnels non classifis (ni commerciaux, ni managers, ni administratifs) et quaucun dentre eux ne peut appartenir plus
dune classification.
La transformation par distinction implmente correctement cet tat de fait.

Figure 2-15. Transformation dun hritage par distinction

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 deuxime exemple considre quil nexiste aucun personnel ntant ni commercial, ni


manager, ni administratif et que chacun est cantonn un seul type demploi (contrainte UML
complete, disjoint). La transformation par push-down implmente correctement cette
hypothse.

Figure 2-16. Transformation dun hritage par push-down

122

Livre SOUTOU.indb 122

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Le troisime exemple prsente la transformation dun hritage simple par push-up. Cette
solution permet dimplmenter toutes les contraintes, mais convient vraiment mieux lorsque
chaque personnel peut occuper plus dun type demploi.

Figure 2-17. Transformation dun hritage par push-up

Le tableau suivant prcise les options souhaitables pour chaque contrainte dhritage. Quelle
que soit la solution que vous choisirez, vous devrez programmer la contrainte sous la forme
de directives SQL CHECK, dclencheurs ou lintrieur de vos procdures catalogues (voir
le chapitre3), sauf en ce qui concerne la transformation par distinction et lorsquil nest pas
ncessaire dassurer lexclusivit.
Tableau 2-1 : Transformation de lhritage
Options de
transformation

Compatibilit avec les contraintes

Distinction

Exclusivit: {incomplete,disjoint} (par dfaut)


Pas de contrainte: {incomplete,overlapping}

Push-down

Partition: {complete,disjoint}
Totalit: {complete,overlapping}, redondance dinformations

Push-up

Totalit: {complete,overlapping}
Autres cas: prsence de nombreuses valeurs NULL

ditions Eyrolles

Livre SOUTOU.indb 123

123

15/02/12 07:05

UML 2 pour les bases de donnes

En pratique, il est rare dutiliser la technique de rassemblement des donnes quest le


push-down, car le modle relationnel est fait pour viter les redondances. Or, la migration de tous les attributs de la surclasse dans les sous-classes entrane systmatiquement
de la redondance, sauf dans le cas ou la surclasse ne contient que la cl (et dans ce cas,
on en revient la distinction).
De mme, la technique du push-up est rare, car elle cre des tables avec un fort taux de
NULL si les sous-classes sont exclusives. Et dans ce cas, il convient de grer proprement
les conditions de NULLification laide de contraintes souvent complexes.
Enfin, mme si la technique de distinction est la plus souvent implmente, il ne faut pas
oublier quelle ncessite lajout de contraintes complexes, lorsquil y a exclusivit entre
les membres des sous-classes.
Pour autant, la technique de lhritage induit dexcellents bnfices en termes de performances, en rduisant le nombre de colonnes des tables et en permettant llision de
jointures (dans le cas dhritages successifs, il nest pas utile de passer par toutes les
classes descendantes pour joindre la racine une feuille).

La solution universelle
Il existe une transformation qui peut convenir toute association binaire (un--un, un-plusieurs, plusieurs--plusieurs et rflexive). Il sagit de gnrer une nouvelle relation munie
de deux cls trangres (qui prfigure la table dassociation ou table de jointure). La cl
primaire de cette relation est compose soit par un des identifiants, soit par le couple des identifiants des deux relations initiales.
Appliquons cette rgle lexemple de deux associations binaires. Deux relations doivent tre
gnres. Lassociation un--un est traduite par la relation diriger et lassociation un-plusieurs est traduite par la relation affecter.

Figure 2-18. Solution universelle

Pour sassurer quun collaborateur ne dirige quun projet, il conviendra dajouter, au niveau
physique, une contrainte UNIQUE sur la cl trangre (id_coll) dans la table diriger.

124

Livre SOUTOU.indb 124

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Danslautre table dassociation, la cl primaire id_coll permettra de sassurer quun collaborateur ne puisse tre affect plusieurs projets.

Ce principe de transformation est idal lorsque les multiplicits de vos associations sont susceptibles de changer avec le temps (dans notre exemple, le fait quun collaborateur puisse
diriger plusieurs projets ou participer diffrents projets). En ce cas, et mme avec des donnes
en base, il suffira dactiver ou de dsactiver telle contrainte ou telle cl.

Ainsi, pour lassociation universelle de type un--un, il faut choisir la cl primaire de


la table de jointure qui peut venir indiffremment de lune ou lautre des entits. Mon
conseil est donc le suivant: prenez toujours celle de lentit qui existe avant lautre. Dans
lexemple propos, la table de jointure diriger se voit dote dune cl primaire venant
de lentit Projet. Cest mon sens une erreur, car il me semble difficile quun projet
existe dans votre entreprise, si vous navez aucun collaborateur!

Les transformations viter


Je vais encore dire du mal des associations n-aires, mais la plupart dentre elles le mritent.
Considrons nouveau le premier exemple de la section Les associations n-aires du chapitre1, lassociation n-aire Installer exprimait le fait que des logiciels soient installs sur
des serveurs par des dpartements.
La transformation de toute association n-aire entrane lapparition dune nouvelle relation. Si
les multiplicits sont toutes de type plusieurs--plusieurs, la cl primaire de la nouvelle relation sera compose des cls de toutes les relations connectes. Si la multiplicit dun lien de
lassociation n-aire vaut1, le degr de la cl primaire est rduit dune colonne.

Figure 2-19. Une transformation viter

Cette transformation est viter, car la table dassociation quon obtiendra ne permettra aucun
contrle de cohrence. Ainsi, avec ce schma, il est possible dinstaller un logiciel qui nest pas
compatible avec un serveur ou quun dpartement ne dtient pas par exemple.

ditions Eyrolles

Livre SOUTOU.indb 125

125

15/02/12 07:05

UML 2 pour les bases de donnes

Il est vident que toutes les associations n-aires alourdissent les cls des tables dassociation. Chercher donc rduire le nombre de colonnes est important et lorsque lon ne
peut pas le faire, il devient souvent intressant de crer artificiellement une entit associative (classe artificielle en UML) afin dallger la cl primaire ce qui est grandement
bnfique pour les performances. Il faudra, dans ce cas, ajouter une contrainte dunicit pour lensemble des cls trangres composant lassociation. Cette technique rajoute
effectivement une colonne, mais allge bien des objets physiques sous-jacents la table,
comme lcriture de certaines requtes. La plupart des outils de modlisation permettent
dautomatiser ce genre de transformation.

Traduire ou ne pas traduire?


Du fait que toutes les relations ne doivent pas forcment tre traduites en tables, certaines
classes ne doivent exister quau niveau conceptuel. Le procd qui consiste ne pas traduire
une relation en table relve davantage dun point de vue oprationnel que dun point de vue
conceptuel. En gnral, il sopre au niveau physique, o, avant de crer les tables, on se rend
compte de linutilit de telle ou telle table et on les limine du script.
Lexemple suivant illustre la transformation dun modle conceptuel qui comporte une classe
relativement abstraite puisquil sagit dune date. Le modle logique fait apparatre une relation
qui rsulte de la traduction de cette classe.

Figure 2-20. Une relation ne pas transformer

Dans la majorit des cas, il nest pas utile de traduire cette relation en table. Elle est toutefois
indispensable au niveau conceptuel, car elle permet de faire migrer dans la table dassociation
la colonne qui reprsente le jour de visite. Certains la traduiront pour disposer dune table de
rfrence de dates, astuce qui permet de faciliter les requtes interrogeant la base propos de
dates o aucune visite na t ralise.

126

Livre SOUTOU.indb 126

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Les classes qui ont une smantique faible et qui ne sont relies aucune autre classe, part
dans le cadre dune association, sont en gnral de bons exemples de classes qui ne doivent
pas ncessairement tre transformes en tables.

La question dune entit DATE (ou parfois NOMBRE) parat anodine, mais savre
cruciale.
Dans un modle de donnes, il devrait toujours figurer une table des dates et une table des
nombres. En effet, un problme important rsoudre dans les requtes est de retrouver
des donnes qui ne figurent pas dans la base. Pour cela, il faut artificiellement crer ces
donnes pour des ensembles continus. Par exemple, une table des dates sur quelques
sicles. Il devient alors facile et pertinent de retrouver des dates absentes des donnes
de production laide dune jointure externe droite sur la table des dates. Un exemple
que je donne en dmonstration est celui dun SAV ou je montre une table avec des lignes
dappareils ports en rparation pendant toute une semaine. Jy omets sciemment un jour,
mettons le mercredi et demande calculer le nombre moyen dappareils traits par jour
au cours de cette semaine. La plupart du temps, la requte produite sera fausse, car le
jour absent nest pas compt!
CREATE TABLE T_SAV (SAV_DATE DATE, SAV_APPAREIL VARCHAR(16));
INSERT INTO T_SAV VALUES
('2011-11-12', 'TV'), ('2011-11-14', 'RADIO'), ('2011-11-12', 'FRIGO'),
('2011-11-13', 'FOUR'), ('2011-11-16', 'RADIO'), ('2011-11-14', 'RADIO'),
('2011-11-12', 'FOUR'), ('2011-11-13', 'FOUR'), ('2011-11-16', 'TV');
requte nave:
SELECT COUNT(*) / CAST(COUNT(DISTINCT SAV_DATE) AS FLOAT) AS NB_
APPAREIL_PAR_JOUR FROM T_SAV;
NB_APPAREIL_PAR_JOUR
---------------------2,25

Ce rsultat est faux, car la date du 15novembre2011 ne figure pas dans la table (peut-tre
une grve?). La solution consiste donc rajouter une table de date:
CREATE TABLE T_DATE (D DATE);
INSERT INTO T_DATE VALUES ('2011-11-12'), ('2011-11-13'),
('2011-11-14'), ('2011-11-15'), ('2011-11-16');

La requte suivante est correcte:


SELECT COUNT(SAV_APPAREIL) / CAST(COUNT(DISTINCT D) AS FLOAT) NB_
APPAREIL_PAR_JOUR FROM T_SAV

ditions Eyrolles

Livre SOUTOU.indb 127

127

15/02/12 07:05

UML 2 pour les bases de donnes

RIGHT OUTER JOIN T_DATE


NB_APPAREIL_PAR_JOUR
---------------------1,8

ON T_SAV.SAV_DATE = T_DATE.D

Il est ensuite facile de rajouter cette table de dates dautres informations: numro de
jour, semaine, mois, anne, trimestre, semestre, jours fris, congs et dindexer cette
table tout en la dclarant en lecture seule afin dviter tout verrou!

Mise en pratique
Les exercices2.1 Les associations binaires, 2.2 Lhritage et la composition, 2.3 Les
classes-associations et 2.4 Traduire ou ne pas traduire ? vous proposent de traduire
manuellement diffrents modles conceptuels en schmas relationnels.

Typez vos colonnes


Au moment de choisir un type pour vos colonnes, vous devez avoir lesprit diffrents critres
visant optimiser la qualit de vos donnes.
Prcision (exactitude), le typage ne doit pas entraner de calculs errons (dcimales ou
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.
Compltude: vitez tant que possible les valeurs NULL.
Confiance: ce critre dpendra toujours de la provenance de la saisie.
Considrons lexemple suivant qui concerne la relation modlisant les produits:

Figure 2-21. Qualit des futures donnes

128

Livre SOUTOU.indb 128

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

La colonne prix nest pas prcise (de quelle devise sagit-il?). Cette colonne sera-t-elle
actualise au bon moment ? Cette colonne nest pas comprhensible (sagit-il dun prix
TTC, HT, unitaire, de revient, etc. ?). Enfin, le type flottant (FLOAT) peut rserver des
surprises lors de calculs intermdiaires importants (12.499999999 ou 12.5000000001?).
La colonne quantite nest ni prcise (les dcimales doivent-elles tre acceptes, pour
stocker par exemple 1,5 pour un kilo et demi?), ni comprhensible (quelle est lunit du
produit, des mtres, des kilos, des livres, etc.?), ni complte (les contraintes NOT NULL
sont absentes du fait que la case O comme obligatoire nest pas coche).

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.htmlBillet;
propos de SQL-Server : http://www.techrepublic.com/blog/10things/10-commonquestions-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.

ditions Eyrolles

Livre SOUTOU.indb 129

Ajout dun client sil nest pas inscrit un cours (la cl primaire de la table Inscriptions
est compose des colonnes et interdit donc quune des deux colonnes soit nulle).
Modification du nom dun client ou de la socit dun client (la mise jour doit tre rpercute dans toutes les lignes concernes). Si une modification est partielle, la table est tout
bonnement inexploitable (au niveau de ces deux colonnes).
Suppression dune inscription (qui entranerait la perte des donnes du client).

129

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 2-22. Pourquoi normaliser?

Le seul inconvnient quon peut trouver la normalisation rside dans laugmentation du


nombre de tables dun schma. Par consquent, lutilisation systmatique de jointure sera
ncessaire toute requte. Cela nest pas forcment pnalisant et il existe des techniques
doptimisation dextraction (indexation, tables temporaires, partitionnement, etc.).
Le schma suivant prsente la solution normalise de lexemple prcdent.

Figure 2-23. Schma normalis

Avec ces structures, tous les inconvnients prcdents sont rsolus.


Lajout dun client sil nest pas inscrit un cours est possible.

130

Livre SOUTOU.indb 130

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

La modification du nom dun client ou de celui de sa socit nentrane aucune redondance.


La suppression dune inscription nentrane aucune perte des donnes du client.
Enfin, il nexiste pas doutil daide au processus de normalisation (Embarcadero Schema Examiner 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.

Normaliser, cest bon pour les performances


La normalisation va conduire immanquablement un grand nombre de petites tables
(petites par leur nombre de colonnes) et par consquent, beaucoup de jointures. Les dveloppeurs nafs pensent toujours que les jointures, cest mal! a bouffe du temps Cest
une vision simpliste due au fait que le dveloppeur se croit seul au monde et utilise habituellement un jeu dessais plus que restreint.
Lorsque la concurrence daccs commence se faire sentir, les tables obses (ces tables
fourre-tout que le dveloppeur a modlises en y mettant le maximum de colonnes) commencent devenir inaccessibles pendant de longs moments, car chaque criture verrouille
de manire exclusive. Ainsi, la simple modification dun numro de tlphone empchera
la lecture dun nom, dune adresse ou dun e-mail, dans ce genre de table.
En revanche, dans une base bien modlise, limpact dune telle mise jour est beaucoup
plus rapide (car moins de donnes) et quasi invisible pour qui extrait des donnes des
autres tables De plus, il est trs facile dindexer une petite table, alors que pour une
grosse, lindexation devient rapidement inefficace.
Cest pourquoi en audit je mintresse toujours dbusquer les tables de plus de 20colonnes
en pensant que leur normalisation est a priori mauvaise. Ce critre de 20colonnes est le
fruit de lexprience, mais comme toute rgle, il existe des exceptions.

Dpendances fonctionnelles
La normalisation est base sur les dpendances fonctionnelles (DF). E.Codd fut le premier
publier sur ce type de dpendances [COD72]. Bien que le qualificatif de fonctionnelles soit
communment utilis, ces dpendances sont davantage lies aux valeurs qu une fonctionnalit particulire. Le terme qui conviendrait mieux les qualifier serait donc: dpendances
de valeurs.
Un attribut b dpend fonctionnellement dun attribut a si une valeur de a correspond au plus
une valeur de b. La dpendance fonctionnelle est note ab.
Le membre droit de lcriture sappelle le dpendant, le membre gauche sappelle le dterminant, ce dernier devient en gnral cl primaire (ou alternative, aussi appele candidate).

ditions Eyrolles

Livre SOUTOU.indb 131

131

15/02/12 07:05

UML 2 pour les bases de donnes

Plusieurs attributs peuvent apparatre dans la partie gauche dune DF. Plusieurs attributs peuvent apparatre dans la partie droite dune DF. Dans ce cas, il convient de considrer chaque
DF en gardant la partie gauche et en faisant intervenir un seul attribut dans la partie droite.
On apprend scolairement, laide de techniques formelles, que la rduction dun
modle peut se faire partir des dpendances fonctionnelles et de certaines rgles
(Armstrong, fermeture, couverture minimale jen passe et des meilleures). Tout cela
est bien joli de la part dun mathmaticien, mais na en pratique aucun intrt, car la
difficult de la modlisation nest pas dans lapplication bte et mchante de rgles
mcaniques que certains outils mathmatiques incorporent, mais bien dans le dbusquage des dpendances fonctionnelles! L, il ne sagit plus de mathmatiques, mais de
smantique, de comprhension, dintrospection, de maquettage, voire de tests Aprs,
les choses sclaircissent naturellement et comme dirait Boileau les mots pour le dire
arrivent aisment!

Exemples
tudions les exemples suivants inspirs du monde aronautique commercial. Chaque pilote est
dot dun numro, dun nom et dune fonction (copilote, commandant ou instructeur).
Lcriture num_pilote
nom_pil,fonction est quivalente aux critures num_
pilotenom_pil et num_pilotefonction qui sont deux DF, car tout pilote nest
dot que dun seul nom et dune fonction tout instant. Avec ces hypothses, lcriture
num_pilotenom_pil,fonction est une DF.
Lcriture num_pilote,jour
nb_heures_vol peut tre considre comme une DF
si tout couple cohrent et susceptible dtre stock (num_pilote, jour), on dsire
associer au plus un nombre dheures de vol (qui sera le cumul de tous ses vols journaliers).
Lcriture nom_pilote
fonction peut tre considre comme une DF si on suppose
quil nexistera aucun homonyme dans la population des pilotes (cas peu probable). En restant dans le cadre le plus gnral, cette criture ne doit pas tre considre comme une DF.
Lcriture fonction
nom_pilote nest videmment pas une DF, car plusieurs pilotes
peuvent tre dots de la mme fonction.

La notion de dpendance fonctionnelle simple permet de dtecter les anomalies de premire


forme normale.

DF lmentaire
Une DF a, bc est lmentaire si ni ac, ni bc ne sont des DF.

132

Livre SOUTOU.indb 132

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Considrons les exemples suivants.


La dpendance fonctionnelle num_pilote,jour
nb_heures_vol est lmentaire dans
lhypothse du stockage des cumuls journaliers. En effet, num_pilotenb_heures_
vol ne doit pas tre considre comme une DF, car chaque jour, il est ncessaire de pouvoir
associer un nombre diffrent dheures de vol. Lcriture journb_heures_vol nest
videmment pas une DF, car chaque jour plusieurs pilotes sont en mesure de voler.
Lcriture num_pilote,nom_pil
fonction nest pas une dpendance fonctionnelle
lmentaire, car le numro du pilote suffit pour retrouver sa fonction (num_pilotefonction est une DF).

La notion de dpendance fonctionnelle lmentaire permet de dtecter les anomalies de


deuxime forme normale.

DF directe
Une DF ac est directe si elle ne peut pas tre dduite par transitivit de deux DF avres,
cest--dire que les critures suivantes ab et bc ne sont pas des DF.

Il est difficile de statuer sur le fait quune DF est directe. En revanche, il est plus facile de
dterminer quune DF est indirecte (si on trouve un parcours de DF cohrent). En consquence, toutes les DF qui ne sont pas considres comme indirectes doivent tre considres
comme directes.
Considrons lexemple qui fait intervenir les attributs suivants : (immat : numro dimmatriculation dun avion, type_avion: type de laronef, nom_const: nom du constructeur
de laronef). Lcriture immatnom_const nest pas une DF directe, car les dpendances
suivantes sont directes:

immattype_avion

type_avionnom_const

La notion de dpendance fonctionnelle directe permet de dtecter les anomalies de troisime


forme normale.

Premire forme normale


Une relation est en premire forme normale si:
toute colonne est en dpendance fonctionnelle avec la cl primaire;
il nexiste pas de valeurs multiples dans une colonne;
il nexiste pas plusieurs colonnes homognes (pour stocker diffrentes valeurs similaires).

ditions Eyrolles

Livre SOUTOU.indb 133

133

15/02/12 07:05

UML 2 pour les bases de donnes

La relation Product ne respecte pas la rgle de la premire forme normale, car la colonne
color est prvue pour stocker diffrentes couleurs.

Figure 2-24. Premire forme normale non respecte

Plusieurs problmes potentiels rsultent de ce choix.


Lindexation nest pas possible, car une liste de valeurs ne peut convenir dfinir un index
de qualit.
La redondance dinformations: plusieurs libells de couleur vont se rpter probablement
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
probable pitre performance (absence dindex).
La normalisation en premire forme normale de ce schma est la suivante.

Figure 2-25. Premire forme normale respecte

Cette solution vite tous les inconvnients prcdents.


Lindexation est maintenant possible, car chaque colonne ne contient quune seule valeur.
La redondance dinformations est vite: chaque libell de couleur se trouve centralis
dans la table Colors.

134

Livre SOUTOU.indb 134

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Toutes les requtes relatives aux coloris se programmeront par jointures rendues performantes par la prsence dindex et par le type de la cl trangre (ici numrique).
Daccord, il sagit de prvoir que chaque attribut soit atomique. Mais il ne faudrait pas
oublier que tout attribut dune relation doit tre valu (donc pas de NULL)! (en sus du
fait que la relation doit imprativement avoir une cl).
Mais quest-ce que latomicit dun attribut? Une date est-elle atomique? Nest-elle pas
elle-mme compose dune anne, dun mois et dun jour? Un numro de Scurit sociale
nest, par nature, pas du tout atomique. Il incorpore plusieurs notions telles que le sexe,
lanne, le mois et la commune de naissance
Pour autant, on peut inverser le problme. Demandez donc un vendeur de listes si
ladresse dont il a fourr tous les lments (nom de voie, type de voie, numro dans la
voie) dans un seul et mme attribut considre que cette information nest pas atomique!
Bref, la notion datomicit est relative la problmatique du modle analys
Pour autant, certaines informations sont composes de plusieurs lments dcomposables, et peuvent bien entendu tre considres comme atomiques. Cest le cas par
exemple des priodes (un dbut+une fin) et plus gnralement des intervalles, mais aussi
des objets gographiques (points, lignes, polygones). Il devient alors trs complexe de
savoir ce que reprsentent certaines notions dunicit dans ce genre de cas de figure.
titre dexemple, voici deux polygones identiques (SQL SIG):
POLYGON ((3 7, 5 7, 5 2, 4 2, 3 7))
POLYGON ((4 2, 3 7, 5 7, 5 2, 4 2))

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

ditions Eyrolles

Livre SOUTOU.indb 135

135

15/02/12 07:05

UML 2 pour les bases de donnes

Premire forme normale et le marqueur NULL


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 personne, alors que faire? Il suffit tout simplement de dcomposer lentit en trois:
PERSONNE_PHYSIQUE_NOM
(PRP_ID INT auto, PRP_NOM A60),
l'identifiant tant PRP_ID.
PERSONNE_PHYSIQUE_PRENOM
(PRP_ID INT auto, PRP_PRENOM A32),
l'identifiant tant PRP_ID.
PERSONNE_PHYSIQUE_NAISSANCE (PRP_ID INT auto, PRP_NAISSANCE
DATE), l'identifiant tant PRP_ID.

Pour reconstituer linformation dune personne, il suffira de faire des jointures externes
bilatrales. A priori ce dcoupage semble utopique, car il va gnrer de nombreuses oprations de jointures Pour autant, certains SGBDR comme Sybase IQ le font sans vous
le dire, car ce modle (toutes les tables sont dotes dune cl et au plus dun seul attribut),
en sus dtre parfait, est extrmement performant sur de grands volumes et de nombreuses
transactions. En effet:
il rpartit la charge de mise jour sur diffrents objets, ce qui est moins bloquant que
davoir un seul objet bloqu pour tout un tas de mises jour diffrentes;
il conomise du volume (on ne stocke pas de lignes pour le NULL);
il permet une indexation systmatique de tous les objets (il suffit de poser un seul index
sur le seul attribut pour que tout soit index).
Bien entendu, si votre SGBDR ne dispose pas dun tel mcanisme, vous pouvez le simuler
avec des vues!

Deuxime forme normale


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.

136

Livre SOUTOU.indb 136

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

La relation Coloris ne respecte pas la rgle de la deuxime forme normale, car la colonne
poids_kg ne dpend que du produit et non de la couleur (enfin, en gnral, cest comme a).
En revanche, il est plausible que le prix dun produit dpende aussi de sa couleur (avez-vous
remarqu que les iPhone blancs sont plus chers?).

Figure 2-26. Deuxime forme normale non respecte

Le non-respect de la deuxime forme normale induit les problmes potentiels suivants.


La redondance dinformations: le poids dun produit va se rpter lidentique pour tous
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.
Davantage de jointures pour toutes les requtes relatives aux poids.
La normalisation en deuxime forme normale de ce schma est la suivante.

Figure 2-27. Deuxime forme normale respecte

Cette solution vite les inconvnients prcdents.

ditions Eyrolles

Livre SOUTOU.indb 137

137

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Troisime forme normale


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.

Figure 2-28. Troisime forme normale non respecte

Le non-respect de la troisime forme normale induit les problmes potentiels suivants.


La redondance dinformations: le nom de la marque va se rpter lidentique pour tous
les produits dune marque donne.
Lincohrence, si la modification du nom dune marque ne se rpercute pas tous les produits
associs.

138

Livre SOUTOU.indb 138

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

La normalisation en troisime forme normale de ce schma est la suivante.

Figure 2-29. Troisime forme normale respecte

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.

Forme normale de Boyce-Codd


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 primaire (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.

ditions Eyrolles

Livre SOUTOU.indb 139

139

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 2-30. Forme normale de Boyce-Codd non respecte

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.

Figure 2-31. Forme normale de Boyce-Codd respecte

La thorie montre que toute relation a une dcomposition sans perte en forme normale de
Boyce-Codd. En revanche, une telle dcomposition ne prserve pas toutes les DF (dans
lexemple la DF itemID, id_paysregion a t supprime). Il est cependant possible de
la retrouver en ralisant une jointure entre les relations normalises.


140

Livre SOUTOU.indb 140

Seules les relations ayant des cls primaires composes sont potentiellement concernes par
la forme normale de Boyce Codd.
Une jointure permet de reconstituer la relation originale. Une vue peut tre programme cet
effet.

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Forme normale domaine-cl


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.

La classification suivante des avions dpend de leur envergure.

Figure 2-32. Classification FAA des avions

Le premier schma relationnel ne vrifie pas la forme normale domaine-cl, car la relation
Avion contient le code catgorie (id_cat) qui peut tre calcul en fonction de la colonne
envergure. Cette redondance est problmatique si les rgles rgissant les catgories voluent. En effet, ladoption de lclatement du groupe I pour former deux nouveaux groupes
Ia concernant les avions denvergure infrieure 20ft et Ib pour ceux denvergure
jusqu 49ft ncessiterait la mise jour de nombreuses lignes de la table. Si ces mises jour
ne forment pas une transaction, des anomalies de mises jour peuvent se produire.

Figure 2-33. Passage la forme normale domaine-cl

ditions Eyrolles

Livre SOUTOU.indb 141

141

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Quatrime et cinquime formes normales


Ds quune relation modlise trop de faits, il y a de grandes chances quelle ne respecte pas les
formes normales suprieures (4e et 5e).
Lexemple suivant prsente la relation Qualifier qui vise modliser les qualifications imposes par chaque type dappareil pour tous les pilotes. Cette relation nest pas en quatrime
forme normale, car la liste des qualifications ncessaires pour chaque type dappareil est indpendante du nombre de personnels navigant qualifis. En effet, pour tout couple de pilotes
qualifis sur un type dappareil, ces deux pilotes sont toujours mettre en association avec
les mmes qualifications. Cette dpendance se nomme multivalue et se note id_type_
avid_qual | id_brevet.

Figure 2-34. Quatrime forme normale non respecte

Afin de dissocier ces deux tats de faits, il est ncessaire de dcomposer Qualifier en deux
relations Qualif_necessaire (constitue les correspondances entre un type davion et les
qualifications) et Aptitude (pour connatre quels sont les pilotes qualifis pour chaque type
dappareil).
Considrons nouveau la relation initiale Qualifier et supposons quelle inclut galement
les qualifications que possde chaque pilote, sans pour autant que ces qualifications soient
concernes par un type dappareil quelconque. Cette relation ne respecte pas la cinquime
forme normale, car il existe des dpendances de jointure.

142

Livre SOUTOU.indb 142

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Figure 2-35. Quatrime forme normale respecte

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.

Figure 2-36. Cinquime forme normale respecte

ditions Eyrolles

Livre SOUTOU.indb 143

143

15/02/12 07:05

UML 2 pour les bases de donnes

Seules les relations ayant des cls primaires composes de plus de deux colonnes sont
potentiellement concernes par les quatrime et cinquime formes normales.
Si vous suivez les prconisations du chapitre1, vous viterez de modliser chaque association n-aire en ltat (sans dcomposition systmatique en classes-associations), et
vous obtiendrez un schma qui respecte naturellement les quatrime et cinquime formes
normales.

Finalement la 6e forme normale


Vous trouverez rarement un auteur, comme un enseignant, vous parlant de la 6e forme
normale. Chris Date y a consacr un ouvrage, et les lments ont t repris par Snodgrass
dont vous trouverez les lucubrations en ligne lURL: http://www.cs.arizona.edu/~rts/
tdbbook.pdf
Finalement, cela peut se rsumer un concept ultrasimple repris actuellement (et trs
la mode) dans les SGBDD (D, pour dcisionnels). Toute entit ne devrait finalement
comporter quune cl (ventuellement compose de plusieurs attributs) et au plus dun
attribut non cl
Songez donc ce que serait une entit comme PERSONNE (N, nom, prnom, date de naissance). Il faudrait la dcomposer en au moins trois entits, chacune ayant une partie de
la relation dorigine Absurde me direz-vous? Et pourtant, dans ce modle dune redoutable efficacit, tout est index et rien nest nul!!! Donc on ne stocke que de linformation
et on respecte lart de la modlisation la lettre
Peu pratique certes, mais cela existe bien dans des produits phares comme Sybase IQ, que
SAP a rachet prix dor et dont la dernire version de MS SQL Server 2012 sinspire,
avec la notion de columnStore Index!

Mise en pratique
Lexercice2.5 La normalisation vous propose de normaliser une relation qui contient peu
de colonnes, mais beaucoup dinformations.

Calculs de volumtrie
Lanalyse de la volumtrie dune base est un calcul a priori. Pour chaque relation, vous devrez
estimer la longueur dun n-uplet (une ligne): l. En considrant, dune part, une valeur moyenne
de la taille de chaque colonne:

144

Livre SOUTOU.indb 144

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

CHAR(n), VARCHAR(n): noctets;

NCHAR(n), NVARCHAR(n), NTEXT(n): 2noctets (Unicode: 2octets);

INT: 4 octets, BIGINT: 8octets, SMALLINT: 2octets;

NUMERIC, NUMBER ou DECIMAL: de 4 20octets;

FLOAT: de 4 8octets;

DATE, TIME: de 4 6octets;

TIMESTAMP: de 8 10octets.

Dautre part, vous devrez, pour chaque relation, estimer le nombre de lignes (nl). Le volume
dune relation (vr) en octets est donn par la formule suivante: vr=l nl. De la somme de
tous ces volumes, on calcule la taille prvisionnelle de toutes les relations: vri (i=1
nb_relations).
Il est communment admis quen appliquant un coefficient de 2,5 (indexation, espace perdu,
fragmentation, rserv libre pour dventuelles mises jour, etc.), on obtient un bon indicateur
final.
Les outils disposent en gnral dune aide ce calcul. Considrons la prvision suivante applique au prcdent schma: 150types davion, 3500pilotes et 450qualifications. Le volume
dune table dassociation est le produit des volumes des deux tables associes comme lillustre
la figure suivante.

Figure 2-37. Calcul de volumtrie (exemple)

Une fois toutes les tables renseignes en termes de volume, un calcul thorique peut tre excut. Dans lexemple suivant, il faudra disposer de plus de 103Mo.

ditions Eyrolles

Livre SOUTOU.indb 145

145

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 2-38. Calcul de volumtrie (rsultat)

Vous venez sans doute de constater quun bon modle de donnes est constitu dune multiplicit dentits. Sans doute beaucoup plus que vous ne lauriez imagin et certainement
plus que ce que vous avez dj fait, si jamais vous avez commenc travailler les bases
de donnes sans passer par ltape modlisation.
Pour autant, vous vous posez avec srnit la question des performances du fait des multiples jointures faire lors du codage des applications, et donc de lexploitation de la
base. Bien entendu, toute opration de jointure a un cot. Mais ce cot peut devenir trs
minime en face du bnficie considrable dune bonne modlisation Autrement dit, vous
ne devez pas avoir peur du nombre dentits et donc de tables de votre base.
Mais crire de multiples jointures pour la moindre requte vous fatigue ! Vous avez
raison, un bon informaticien doit tre faignant La solution rside donc dans la cration
des vues. Ainsi, pour une personne dont vous voulez, et les donnes personnelles, et les
donnes de contact, crez une vue synthtisant toutes ces informations. Nhsitez pas
lutiliser systmatiquement dans tous vos codes, mme pour la mise jour (nous verrons
comment mettre jour les vues dans un chapitre ultrieur).
Sachez quun bon SGBDR ignorera certaines jointures inutiles dune vue, si les informations retourner ne sont pas utiles pour votre requte. Sachez aussi que le nombre
de jointures quun SGBDR peut supporter est assez lev. Cest en gnral plusieurs
centaines. Sachez enfin que le cot dune jointure entre une cl primaire (identifiant de
lentit) et une cl trangre (qui se doit dtre indexe) est trs minime si vous avez opt
pour une cl auto-incrmente (SEQUENCE ou IDENTITY). Apprenez que le cot dune
jointure entre deux tables de 100millions de lignes, devant retourner une unique ligne,
ne dpasse pas six lectures
Enfin, si tout cela ne vous a pas convaincu, venez en discuter ici : http://www.
developpez.net/forums/d1099389/bases-donnees/decisions-sgbd/optimisations/petitestables-grandes-tables-consequences-performances/.

146

Livre SOUTOU.indb 146

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Exercices
2.1 Les associations binaires
Dduisez manuellement (sans laide dun outil) les relations des associations binaires avec
leurs cls trangres ncessaires limplmentation du modle conceptuel suivant.

Figure 2-39. Associations binaires traduire

2.2 Lhritage et la composition


Mme question pour le modle conceptuel suivant.

Figure 2-40. Hritage et composition traduire

ditions Eyrolles

Livre SOUTOU.indb 147

147

15/02/12 07:05

UML 2 pour les bases de donnes

2.3 Les classes-associations


Mme question pour le modle conceptuel suivant.

Figure 2-41. Classes-associations traduire

2.4 Traduire ou ne pas traduire?


En fonction des classes-associations prsentes dans le diagramme conceptuel suivant, dduisez
manuellement le modle relationnel avec ses cls trangres. Dterminez ensuite les relations
qui sont susceptibles de ne pas tre transformes en tables.

148

Livre SOUTOU.indb 148

ditions Eyrolles

15/02/12 07:05

Chapitre 2

Le niveau logique

Figure 2-42. Classes-associations traduire

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.

Figure 2-43. Relations normaliser

ditions Eyrolles

Livre SOUTOU.indb 149

149

15/02/12 07:05

Livre SOUTOU.indb 150

15/02/12 07:05

Chapitre 3

Le niveau physique
Le niveau physique prsent dans ce chapitre correspond la dfinition des tables, des cls
trangres ainsi qu limplmentation des ventuelles rgles mtier par des contraintes de cls,
de validation ou par des dclencheurs.

Le langage SQL
Le langage SQL provient du langage SystemR dIBM. SQL est implant dans des produits
commerciaux la fin des annes 1970 avec la premire version dOracle et de SQL/DS
dIBM. SQL est une norme ANSI depuis 1986 et une norme ISO depuis 1987. La norme
ANSI (SQL-86) est le rsultat dun compromis entre constructeurs, mais a t fortement
influence par le dialecte dIBM.
La version SQL2 (appele aussi SQL-92) a t normalise par lANSI et lISO en 1992. Les
langages proposs par les SGBD actuels sont proches de cette norme qui dfinit trois niveaux
de conformit: le niveau dentre (entry level), le niveau intermdiaire (intermediate level) et
le niveau maximum (full level). Les langages SQL des principaux diteurs de SGBD relationnels (Oracle, IBM, Microsoft, Sybase) sont conformes au premier niveau et ont beaucoup de
caractristiques qui relvent des niveaux suprieurs.
SQL3 comporte de nombreuses parties (On Line Analytical Processing, sries temporelles,
accs des sources non SQL, rplication des donnes, objet, XML, etc.).
Les diffrentes normes sont reconnues et numrotes de la manire suivante:

ditions Eyrolles

Livre SOUTOU.indb 151

SQL1 ISO9075:1986 (SQL86/SQL1) ISO 9075:1989 (SQL89);

151

15/02/12 07:05

UML 2 pour les bases de donnes

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 clusterise.
La notion de schma na pas la mme signification selon certains SGBD: certains lassimilent la notion de database (MySQL) la notion de user comme Oracle. SQL Server est
multischma et multibase. Un schma joue le rle de bibliothque (tel un espace de noms) dans
lequel les privilges se grent plus facilement.

Figure 3-1. Notion de schma

152

Livre SOUTOU.indb 152

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Un serveur SQL (aussi appel instance ) est une machine logique installe sur un
ordinateur lui-mme physique ou logique. La plupart des diteurs permettent dinstaller
plusieurs serveurs SQL sur une mme machine. Dans chaque serveur SQL, il peut y avoir
plusieurs bases de donnes (limit 32000) et dans chaque base des schmas SQL (la
limite thorique tant 4milliards par bases) qui constituent autant despace logique,
dont le but est triple:
fournir un moyen de ranger les diffrents objets en diffrentes catgories (par exemple,
un schma pour les ressources humaines, un autre pour la comptabilit, un troisime
pour la production);
permettre dassocier des privilges au niveau du schma des utilisateurs, ce qui
allge la tche dadministration de scurit pour les objets futurs (par exemple, GRANT
SELECT ON SCHEMA::COMPTA TO DOMINIQUE);
autoriser dans un ordre CREATE SCHEMA de crer des objets mutuellement dpendants
sans pour cela se contraindre un ordre logique particulier (voir http://blog.developpez.com/sqlpro/p5835/langage-sql-norme/de-l-interet-des-schema-sql/ et http://
docs.postgresqlfr.org/9.0/sql-createschema.html).
Il existe toujours un schma par dfaut pour la base et pour lutilisateur.
En cas dabsence du prfixe de schma pour atteindre un objet, le serveur doit effectuer
une rsolution de nom en commenant par chercher lobjet dans le schma associ
lutilisateur, et sil ne le trouve pas, le serveur lassocie au schma par dfaut de la base.
Dans tous les cas, cette phase prend du temps et peut conduire des problmes de pertes
de cache donc, de mauvaises performances. Il vaut donc mieux tre prcis et prfixer tous
les objets de vos requtes par le schma dans lequel ils ont t crs.
MySQL nimplmente pas la notion de schmas SQL, mais laisse entendre que cela est
similaire la cration de multiples bases dans une mme instance. Certains SGBD, en
particulier MS SQL Server et MySQL, autorisent nativement des requtes interbases avec
des noms qualifis (par exemple MaBase.MonSchema.MaTable pour MS SQL Server).
Pour faire cela, sous Oracle ou PostGreSQL, il faut recourir un mcanisme de DBlink
qui semble plus lourd et moins performant.

Schmas SQL ou bases?


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

ditions Eyrolles

Livre SOUTOU.indb 153

153

15/02/12 07:05

UML 2 pour les bases de donnes

Le schma SQL est un conteneur logique pour les objets dune base. Il na donc rien
voir avec un stockage physique. Si votre SGBDR gre correctement les espaces de
stockage, vous pouvez avoir n tables toutes cres dans un schmaS1 et chacune de ces
tables peut stocker ses donnes o bon lui semble et pourquoi pas un espace de stockage
spcifique chaque table.
Rpartir les objets dune base de donnes dans diffrents schmas SQL est une excellente
approche, car cela permet dorganiser la base en diffrents pans smantiques ou fonctionnels. En revanche, rpartir les objets dune mme application dans diffrentes bases,
pose des problmes impossibles rsoudre.
On ne peut pas faire de contraintes SQL dune base une autre. En revanche, au sein
dune mme base et mme si les objets sont dans diffrents schmas SQL cest possible.
On ne peut pas sauvegarder les donnes de deux bases diffrentes de manire synchrone alors que la sauvegarde dune base emporte la sauvegarde de tous les schmas
dun seul coup au mme point de synchronisation.
La gestion des privilges est spcifique une base. Elle couvre les schmas, mais elle
ne peut passer de base en base (MS SQL Server est le seul SGBDR permettre cette
fonction, mais elle savre complexe mettre en uvre).

Schmas et propritaires
Comme tout objet de la base, un schma est cr par un utilisateur, ce qui confre cet
utilisateur dtre le propritaire du schma, moins quil ne spcifie un autre utilisateur
dans lordre SQL CREATE SCHEMA .
Le propritaire dun schma est un peu comme un chtelain du Moyen ge Il a le droit
de vie ou de mort sur ses sujets, je voulais dire ses objets, tout le temps quil est responsable de la cration des objets figurant lintrieur de son schma. Mais rien nempche
de crer au sein du schma de Pierre un objet dont le propritaire est Paul (une sorte de
concession en somme)!
Il y a longtemps eu une confusion au sein des diteurs de SGBDR entre la notion de
propritaire (la norme SQL parle dautoris) et la notion de schma. Cest ainsi que
dans certains SGBDR le schma par dfaut porte le mme nom que lutilisateur qui en est
propritaire, histoire dentretenir la confusion!

Les contraintes
Les objectifs des contraintes au niveau des tables sont multiples: renforcer lintgrit de la
base, programmer des rgles de gestion lmentaires et allger la programmation ct client.

154

Livre SOUTOU.indb 154

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

La mise en uvre des contraintes va soprer lors de la cration des tables (ou ultrieurement),
la dclaration dune contrainte lors de la cration SQL peut tre ralise en ligne (in line sur la
mme ligne que la colonne de la table elle-mme) ou hors ligne (out of line). Les principales
contraintes de SQL que vous avez disposition sont:

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;
ALTER TABLE [nom_schema.]nom_table
ADD CONSTRAINT nom_contrainte type_contrainte;

De plus, il faudrait signaler lunicit des noms des objets travers les schmas (tables,
contraintes) et la possibilit davoir des doublons de noms sur les objets primaires des
bases si on les situe dans diffrents schmas.
Dautres instructions SQL peuvent aussi se trouver dans le script:

Afin de rendre les scripts plus clairs, les instructions SQL sont notes en majuscules et les
noms dobjets (tables, colonnes et contraintes) apparaissent en minuscules.

ditions Eyrolles

Livre SOUTOU.indb 155

la cration des index (CREATE INDEX) sur certaines colonnes (les cls trangres en
principe);
la destruction des objets crs pour pouvoir relancer la demande le script de cration
(ALTER TABLE DROP CONSTRAINT, DROP INDEX et DROP TABLE).

155

15/02/12 07:05

UML 2 pour les bases de donnes

Passage du logique au physique


Si vous nutilisez aucun outil, le processus de transformation sera manuel, cette section va
vous expliquer les procdures suivre pour crer vos tables. Si vous envisagez dutiliser un
outil, la cration des tables (colonnes et cls) sera automatique. Vous devrez vrifier toutefois si
les tables et contraintes rfrentielles obtenues sont en adquation avec ce que vous attendiez.
Dans les deux cas, il vous restera des tches accomplir qui ne peuvent pas sautomatiser:
contraintes autres que les cls et programmation des rgles mtier (directives SQL CHECK
ou mise en place de dclencheurs);
index additionnels;
procdures catalogues qui implmentent vos transactions.
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.

Traduction des relations


Chaque relation devient une table. Les attributs de la relation forment les colonnes de la table.
Lidentifiant de la relation devient la cl primaire de la table (primary key).

Le tableau suivant dcrit la transformation dune relation simple.


Tableau 3-1:Transformation des relations
Schma relationnel

Script SQL
DROP TABLE Aeroport CASCADE CONSTRAINTS;

Figure 3-2. Relation traduire


156

Livre SOUTOU.indb 156

CREATE TABLE Aeroport (


code_aero
VARCHAR2(4) NOT NULL,
nom_aero
VARCHAR2(50),
nb_pistes
SMALLINT,
capacite
INTEGER,
CONSTRAINT pk_aeroport
PRIMARY KEY (code_aero));

La contrainte NOT NULL oblige la colonne contenir une valeur non nulle (qui est diffrente de
0, blanc ou plusieurs espaces). Certains outils disposent systmatiquement cette contrainte
sur les cls primaires.

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Traduction des associations un--plusieurs


Le tableau suivant dcrit la transformation de deux associations un--plusieurs. Il apparat
deux colonnes cls trangres et deux contraintes du mme type.
Tableau 3-2:Transformation des associations un--plusieurs
Schma relationnel

Script SQL
ALTER TABLE Aeroport
DROP CONSTRAINT fk_aero_situer_ville;
ALTER TABLE Ville
DROP CONSTRAINT fk_ville_localisation_reg;
DROP TABLE Aeroport CASCADE CONSTRAINTS;
DROP TABLE Region
CASCADE CONSTRAINTS;
DROP TABLE Ville
CASCADE CONSTRAINTS;
CREATE TABLE Aeroport (
code_aero
VARCHAR2(4) NOT NULL,
id_ville
SMALLINT
NOT NULL,
nom_aero
VARCHAR2(50),
nbPistes
SMALLINT,
capacite
INTEGER,
CONSTRAINT pk_aeroport
PRIMARY KEY (code_aero));
CREATE TABLE Region (
id_region
SMALLINT NOT NULL,
nom_region
VARCHAR2(30),
CONSTRAINT pk_region
PRIMARY KEY (id_region));
CREATE TABLE Ville (
id_ville
SMALLINT NOT NULL,
id_region
SMALLINT,
nom_ville
VARCHAR2(40),
codePostal
SMALLINT,
CONSTRAINT pk_ville
PRIMARY KEY (id_ville));

Figure 3-3. Associations un--plusieurs


traduire

ditions Eyrolles

Livre SOUTOU.indb 157

ALTER TABLE Aeroport


ADD CONSTRAINT fk_aero_situer_ville
FOREIGN KEY (id_ville)
REFERENCES Ville (id_ville);
ALTER TABLE Ville
ADD CONSTRAINT fk_ville_localisation_reg
FOREIGN KEY (id_region)
REFERENCES Region (id_region);

157

15/02/12 07:05

UML 2 pour les bases de donnes

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

Traduction des associations un--un


Le tableau suivant dcrit la transformation de deux associations binaires entre les relations
Projet et Collaborateur.
Lassociation daffectation (de nom affecter au niveau conceptuel) est de type de un-plusieurs et doit se traduire comme prcdemment. Lassociation qui modlise le fait quun
projet soit dirig par un seul collaborateur qui ne peut en diriger plusieurs (de nom diriger
au niveau conceptuel) est de type un--un et doit se traduire par une cl trangre et par une
contrainte dunicit (index unique). Cette cl trangre (ici, id_coll) doit tre prsente dans
la relation considre comme enfant pour lassociation un--un (multiplicit minimale 0),
ici Projet.
Tableau 3-3: Transformation dune association un--plusieurs et dune association un--un
Schma relationnel

Script SQL
DROP INDEX diriger_fk;
ALTER TABLE collaborateur
DROP CONSTRAINT fk_affecter_projet;
ALTER TABLE projet
DROP CONSTRAINT fk_diriger_collabor;
DROP TABLE collaborateur CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;
CREATE TABLE collaborateur (
id_coll
VARCHAR2(5) NOT NULL,
num_proj
VARCHAR2(6),
nom_coll
VARCHAR2(50),
indice
INTEGER,
CONSTRAINT pk_collaborateur
PRIMARY KEY (id_coll));

Figure 3-4. Association un--un diriger traduire

158

Livre SOUTOU.indb 158

CREATE TABLE projet (


num_proj
VARCHAR2(6) NOT NULL,
id_coll
VARCHAR2(5) NOT NULL,
duree
INTEGER,
budget
NUMBER(9,2),
designation_proj VARCHAR2(60),
CONSTRAINT pk_projet
PRIMARY KEY (num_proj));

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Schma relationnel (suite)

Script SQL (suite)


ALTER TABLE collaborateur
ADD CONSTRAINT fk_affecter_projet
FOREIGN KEY (num_proj)
REFERENCES projet (num_proj);
ALTER TABLE PROJET
ADD CONSTRAINT fk_diriger_collabor
FOREIGN KEY (id_coll)
REFERENCES collaborateur (id_coll);
CREATE UNIQUE INDEX diriger_fk
ON projet (id_coll ASC);

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

Traduction des associations rflexives


Le tableau suivant dcrit la transformation de deux associations rflexives. Lassociation
manager est de type un--plusieurs et doit se traduire classiquement (cl trangre). Lassociation meilleur_ami est de type un--un et peut se traduire aussi par une cl trangre.
Tableau 3-4: Transformation de deux associations rflexives
Schma relationnel

Script SQL
ALTER TABLE employe
DROP CONSTRAINT fk_manager;
ALTER TABLE employe
DROP CONSTRAINT fk_meilleur_ami;
DROP TABLE employe CASCADE CONSTRAINTS;

Figure 3-5. Associations rflexives traduire

ditions Eyrolles

Livre SOUTOU.indb 159

CREATE TABLE employe (


id_emp
INTEGER NOT NULL,
id_manager
INTEGER,
id_ami
INTEGER,
nom_emp
VARCHAR2(50),
date_embauche DATE,
salaire
NUMBER(7,2),
CONSTRAINT pk_employe
PRIMARY KEY (id_emp));

159

15/02/12 07:05

UML 2 pour les bases de donnes

Schma relationnel (suite)

Script SQL (suite)


ALTER TABLE EMPLOYE
ADD CONSTRAINT fk_manager
FOREIGN KEY (id_manager)
REFERENCES EMPLOYE (id_emp);
ALTER TABLE EMPLOYE
ADD CONSTRAINT fk_meilleur_ami
FOREIGN KEY (id_ami)
REFERENCES EMPLOYE (id_emp);

De la mme manire quil existe trois sortes de cardinalits de liens entre deux relations,
il en existe autant pour les autorfrences dune mme relation.
Autorfrence avec cardinalit un--un : le cas est rarissime. On peut donner un
exemple dun point de vue statique. Dans une table de personnes physiques et dans nos
religions occidentales, une personne ne peut avoir quun seul conjoint. Ainsi, linstant t, une occurrence de personne peut tre en lien 0 ou 1 une autre personne (peu
importe quil soit homme ou femme, certains pays ayant admis le mariage homosexuel
et cest le cas du Pacs en France).
Autorfrence avec cardinalit un--plusieurs: cest un cas trs courant, car il conduit
modliser une arborescence. On le trouve typiquement dans les organigrammes dentreprise pour savoir qui est le chef. Il est aussi souvent prsent dans les nomenclatures
pour lesquelles les donnes sont embotes.
Autorfrence avec cardinalit plusieurs--plusieurs: cest le cas des graphes mathmatiques qui reprsentent des rseaux (lignes de mtro, de bus, rseaux routiers,
tlcommunications, rseaux informatiques). Dans ce cas, le graphe peut tre
vu de deux faons: orient ou non, conduisant une multiplicit des cardinalits.
Graphe non orient : cest le cas notamment des rseaux de type full duplex. Par
exemple, si lon veut modliser la distance des routes ariennes entre deux aroports,
peu importe le sens, car il ny a pas de couloir arien sens unique! Le rsultat est
que la matrice des combinaisons est triangulaire. Il est ainsi inutile de stocker
la distance pour laller et le retour, une seule de ces deux informations suffit. En
revanche, pour la circulation des bus dans une grande ville, la prsence de voies
sens unique va multiplier les trajets orients et donc doubler potentiellement le
nombre des combinaisons.

160

Livre SOUTOU.indb 160

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Traduction des agrgations (composition)


Le tableau suivant dcrit la transformation dune agrgation de composition. Lassociation doit
se traduire par deux mcanismes: migration dune cl trangre du composite et enrichissement de la cl primaire du composant.
Tableau 3-5: Transformation dun agrgat
Schma relationnel

Script SQL
ALTER TABLE histo_annee
DROP CONSTRAINT fk_histo_employe;
DROP TABLE employe CASCADE CONSTRAINTS;
DROP TABLE histo_annee CASCADE CONSTRAINTS;
CREATE TABLE employe (
id_emp
INTEGER NOT NULL,
nom_emp
VARCHAR2(50),
date_embauche DATE,
CONSTRAINT pk_employe PRIMARY KEY (id_emp));
CREATE TABLE histo_annee

Figure 3-6. Agrgation traduire

id_emp
annee
indice
salaire
CONSTRAINT

INTEGER NOT NULL,


INTEGER NOT NULL,
INTEGER,
NUMBER(7,2),
pk_histo_annee

PRIMARY KEY (id_emp, annee));


ALTER TABLE histo_annee
ADD CONSTRAINT fk_histo_employe
FOREIGN KEY (id_emp)
REFERENCES employe (id_emp);

Vrifiez que la cl primaire de la table composant est constitue en partie de la cl primaire


de la table composite.

Traduction des associations plusieurs--plusieurs


Le tableau suivant dcrit la transformation dune association plusieurs--plusieurs (rsultant
dune classe-association au niveau conceptuel).

ditions Eyrolles

Livre SOUTOU.indb 161

161

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 3-6: Transformation dune association plusieurs--plusieurs


Schma relationnel

Script SQL
ALTER TABLE detail
DROP CONSTRAINT fk_configure_avion;
ALTER TABLE DETAIL
DROP CONSTRAINT fk_configure_options;
DROP TABLE avion CASCADE CONSTRAINTS;
DROP TABLE detail CASCADE CONSTRAINTS;
DROP TABLE options CASCADE CONSTRAINTS;
CREATE TABLE avion (
immat
VARCHAR2(6) NOT NULL,
type_av
VARCHAR2(40),
nb_h_vol
INTEGER,
CONSTRAINT pk_avion PRIMARY KEY (immat));

Figure 3-7. Association plusieurs--plusieurs


traduire

CREATE TABLE detail (


immat
VARCHAR2(6) NOT NULL,
id_opt
INTEGER
NOT NULL,
date_pose DATE,
CONSTRAINT PK_DETAIL
PRIMARY KEY (immat, id_opt));
CREATE TABLE OPTIONS (
id_opt
INTEGER NOT NULL,
designation VARCHAR2(60),
prix_opt
NUMBER(7,2),
CONSTRAINT pk_options
PRIMARY KEY (id_opt));
ALTER TABLE detail
ADD CONSTRAINT fk_configure_avion
FOREIGN KEY (immat)
REFERENCES avion (immat);
ALTER TABLE detail
ADD CONSTRAINT fk_configure_options
FOREIGN KEY (id_opt)
REFERENCES options (id_opt);


162

Livre SOUTOU.indb 162

Vrifiez que la cl primaire de la table dassociation est compose de deux cls trangres.

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Solution universelle
Le tableau suivant dcrit la transformation de deux associations binaires entre les relations
Projet et Collaborateur. Lassociation affecter est de type de un--plusieurs lassociation diriger est de type de un--un.
Chaque association doit se traduire par une table dassociation munie de deux cls trangres.
Les contraintes UNIQUE et NOT NULL sur chacune de ces cls permettront dimplmenter telle
ou telle multiplicit.
Tableau 3-7: Transformation de deux associations binaires par la solution universelle
Schma relationnel

Script SQL
ALTER TABLE affecter
DROP CONSTRAINT fk_affecter_collabor;
ALTER TABLE affecter
DROP CONSTRAINT fk_affecter_projet;
ALTER TABLE diriger
DROP CONSTRAINT fk_diriger_collabor;
ALTER TABLE diriger
DROP CONSTRAINT fk_diriger_projet;
DROP TABLE collaborateur CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;
DROP TABLE affecter CASCADE CONSTRAINTS;
DROP TABLE diriger CASCADE CONSTRAINTS;

Figure 3-8. Associations binaires traduire

ditions Eyrolles

Livre SOUTOU.indb 163

CREATE TABLE collaborateur (


id_coll
VARCHAR2(5) NOT NULL,
nom_coll VARCHAR2(50),
indice
INTEGER,
CONSTRAINT pk_collaborateur
PRIMARY KEY (id_coll));
CREATE TABLE projet (
num_proj
VARCHAR2(6) NOT NULL,
duree
INTEGER,
budget
NUMBER(9,2),
designation_proj VARCHAR2(60),
CONSTRAINT pk_projet
PRIMARY KEY (num_proj));
CREATE TABLE affecter (
num_proj
VARCHAR2(6),
id_coll
VARCHAR2(5) NOT NULL,
CONSTRAINT pk_affecter
PRIMARY KEY (id_coll);

163

15/02/12 07:05

UML 2 pour les bases de donnes

Schma relationnel (suite)

Script SQL (suite)


CREATE TABLE diriger (
num_proj VARCHAR2(6) NOT NULL,
id_coll
VARCHAR2(5) NOT NULL,
CONSTRAINT pk_diriger
PRIMARY KEY (num_proj),
CONSTRAINT AK_DIRIGER UNIQUE(id_coll));
ALTER TABLE affecter
ADD CONSTRAINT fk_affecter_collabor
FOREIGN KEY (id_coll)
REFERENCES collaborateur (id_coll);
ALTER TABLE affecter
ADD CONSTRAINT fk_affecter_projet
FOREIGN KEY (num_proj)
REFERENCES projet (num_proj);
ALTER TABLE diriger
ADD CONSTRAINT fk_diriger_collabor
FOREIGN KEY (id_coll)
REFERENCES collaborateur (id_coll);
ALTER TABLE diriger
ADD CONSTRAINT fk_diriger_projet
FOREIGN KEY (num_proj)
REFERENCES projet (num_proj);

La contrainte NOT NULL sur la colonne id_coll dans la table diriger signifie que tout
projet est dirig par un collaborateur (multiplicit minimale 1). La contrainte UNIQUE sur
cette mme colonne implmente le fait quun collaborateur ne peut diriger plusieurs projets
(multiplicit maximale1).
Labsence de contrainte NOT NULL sur la colonne num_proj dans la table affecter signifie
quun collaborateur ne peut participer aucun projet (multiplicit minimale0). La contrainte
UNIQUE (du fait de la cl primaire) sur la colonne id_coll de cette mme table implmente le
fait quun collaborateur ne peut participer plusieurs projets (multiplicit maximale1).

Cette solution prsente lavantage dtre la plus volutive si les multiplicits viennent
changer. En effet, nul besoin de modifier la structure dune table, seules des contraintes seront
activer ou dsactiver.

Mise en pratique
Les exercices3.1 La cration de tables (carte dembarquement) et 3.2 La cration de tables
(horaires de bus) vous proposent de dduire le script SQL partir de diffrents modles
conceptuels.

164

Livre SOUTOU.indb 164

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Programmation des contraintes


Cette section dtaille dune part la programmation des contraintes dhritage et des contraintes
prdfinies de UML (la contrainte dinclusion et celle du ou exclusif). Dautre part, elle prsente la traduction dune contrainte personnalise.
Il existe trois familles de dcomposition pour traduire une association dhritage (voir le chapitre2): dcomposition par distinction, descendante (push-down) et ascendante (push-up).

Hritage par distinction


Suivant le principe de dcomposition par distinction, autant de tables que de relations sont
cres et la cl primaire de la table gnrique se propage dans les tables plus spcifiques.
Tableau 3-8: Transformation de lhritage par distinction
Schma relationnel

Script SQL
ALTER TABLE administratif
DROP CONSTRAINT fk_admin_personne;
ALTER TABLE commercial
DROP CONSTRAINT fk_commerci_personne;
ALTER TABLE manager
DROP CONSTRAINT fk_manager_personne;
DROP TABLE administratif CASCADE CONSTRAINTS;
DROP TABLE commercial CASCADE CONSTRAINTS;
DROP TABLE manager CASCADE CONSTRAINTS;
DROP TABLE personnel CASCADE CONSTRAINTS;

Figure 3-9. Hritage par distinction

ditions Eyrolles

Livre SOUTOU.indb 165

CREATE TABLE administratif (


idpers
INTEGER NOT NULL,
syndicat
VARCHAR2(60),
nbheuressupp INTEGER,
CONSTRAINT pk_administratif
PRIMARY KEY (idpers));
CREATE TABLE commercial (
idpers INTEGER NOT NULL,
prime FLOAT,
CONSTRAINT pk_commercial
PRIMARY KEY (idpers));
CREATE TABLE manager (
idpers
INTEGER NOT NULL,
nbhmois INTEGER,

165

15/02/12 07:05

UML 2 pour les bases de donnes

Schma relationnel (suite)

Script SQL (suite)

projet
VARCHAR2(254),
CONSTRAINT pk_manager
PRIMARY KEY (idpers));
CREATE TABLE PERSONNEL (
idpers INTEGER NOT NULL,
nom
VARCHAR2(40),
indice INTEGER,
CONSTRAINT pk_personnel
PRIMARY KEY (idpers));
ALTER TABLE administratif
ADD CONSTRAINT fk_admin_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);
ALTER TABLE commercial
ADD CONSTRAINT fk_commerci_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);
ALTER TABLE manager
ADD CONSTRAINT fk_manager_personne
FOREIGN KEY (idpers)
REFERENCES personnel (idpers);

Contrainte dexclusivit
La contrainte dexclusivit (cas par dfaut, le diagramme de classes UML ne comporte aucune
indication) exprime les rgles mtier suivantes.
Il nest pas possible quun personnel appartienne simultanment plusieurs classifications
(commercial, manager ou administratif).
Il est possible quun personnel ne soit associ aucune classification (commercial, manager
et administratif).
La premire rgle de gestion simplmente laide de trois dclencheurs: un sur chaque table
spcifique (commercial, manager et administratif). Il sagit dinterdire quun manager
de numro100 soit aussi galement rfrenc dans une autre table spcifique avec ce mme
numro (commercial et administratif). Le raisonnement devra sappliquer lidentique
pour les tables des commerciaux et celles des administratifs.
Le premier dclencheur est dcrit dans le tableau suivant avec une syntaxe Oracle. Si vous
aviez le programmer avec SQL Server, vous devriez utiliser les pseudo-tables Inserted et
Updated.

166

Livre SOUTOU.indb 166

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Tableau 3-9: Dclencheur pour lhritage par exclusivit


Dclencheur Oracle

Jeu dessai

CREATE TRIGGER tri_manager


BEFORE INSERT OR UPDATE OF idpers ON manager
FOR EACH ROW
DECLARE
numero INTEGER;
BEGIN
SELECT idpers INTO numero
FROM commercial WHERE idpers =
:NEW.idpers;
RAISE_APPLICATION_ERROR(-20001,'Le '
||numero||' est commercial...');
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT idpers INTO numero
FROM administratif WHERE idpers
= :NEW.idpers;
RAISE_APPLICATION_ERROR(-20002,'Le '
||numero||' est administratif...');
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- la contrainte est vrifie, mise
jour autorise
NULL;
END;
END;

SQL> INSERT INTO PERSONNEL VALUES


(100,'F. Brouard',456);
1 row created.
SQL> INSERT INTO COMMERCIAL VALUES
(100,14506.40);
1 row created.
SQL> INSERT INTO MANAGER VALUES
(100,52,'SQL Spot Design');
*
ERROR at line 1:
ORA-20001: Le 100 est commercial...
ORA-06512: at "SOUTOU.TRI_MANAGER", line 6
ORA-04088: error during execution of
trigger 'SOUTOU.TRI_MANAGER'

La clause RAISE_APPLICATION_ERROR permet dinvalider la transaction en cours et de faire


passer un message applicatif.
La clause NO_DATA_FOUND permet de ne pas interrompre le bloc de traitement si une requte
ne retourne aucun enregistrement.
Les deux autres dclencheurs devront tre programms par analogie: celui portant sur la table
des commerciaux interrogeant les tables des managers et administratifs et celui de la table des
administratifs interrogeant les tables des managers et commerciaux.

Si vous ne souhaitez pas travailler avec des dclencheurs, vous devrez coder ces rgles
mtier dans vos procdures catalogues.

La deuxime rgle de gestion se programme naturellement du fait de lexistence de la cl


trangre dans chaque table spcifique (commercial, manager et administratif) qui
rfrence la mme table gnrique (personnel). En effet, il est possible que le personnel
numro100 ne soit rfrenc dans aucune table spcifique avec ce mme numro.

ditions Eyrolles

Livre SOUTOU.indb 167

167

15/02/12 07:05

UML 2 pour les bases de donnes

Absence de contrainte
Labsence de contrainte (notation {incomplete, overlapping} avec UML) permet les
scnarios suivants.
Il est possible quun personnel appartienne une ou plusieurs classifications (commercial,
manager ou administratif).
Il est possible quun personnel ne soit associ aucune classification (ni commercial, ni
manager, ni administratif).
Le premier scnario simplmente naturellement du fait de lexistence de la cl trangre dans
chaque table spcifique. En effet, il est autoris que le personnel numro100 soit aussi galement rfrenc dans nimporte quelle table spcifique avec ce mme numro.
La deuxime rgle de gestion est programme aussi du fait de lexistence de la cl trangre de
la mme manire quau cas prcdent.

Hritage en push-down
Suivant le principe de la dcomposition descendante, seules les tables spcifiques cres et
toutes les colonnes et la cl primaire de la table gnrique se propagent.
Tableau 3-10: Transformation de lhritage en push-down
Schma relationnel

Script SQL
DROP TABLE administratif CASCADE CONSTRAINTS;
DROP TABLE commercial CASCADE CONSTRAINTS;
DROP TABLE manager CASCADE CONSTRAINTS;
CREATE TABLE administratif (
idpers
INTEGER NOT NULL,
syndicat
VARCHAR2(254),
nbheuressupp INTEGER,
nom
VARCHAR2(40),
indice
INTEGER,
CONSTRAINT pk_administratif
PRIMARY KEY (idpers));

Figure 3-10. Hritage par push-down

CREATE TABLE commercial (


idpers INTEGER NOT NULL,
prime
FLOAT,
nom
VARCHAR2(40),
indice INTEGER,
CONSTRAINT pk_commercial
PRIMARY KEY (idpers));

168

Livre SOUTOU.indb 168

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Schma relationnel (suite)

Script SQL (suite)


CREATE TABLE manager (
idpers INTEGER NOT NULL,
nbhmois INTEGER,
projet VARCHAR2(60),
nom
VARCHAR2(40),
indice INTEGER,
CONSTRAINT pk_manager
PRIMARY KEY (idpers));

Contrainte de partition
La contrainte de partition (notation {complete, disjoint} avec UML) interdit les scnarios suivants.
Un personnel appartient simultanment plusieurs classifications (commercial, manager
ou administratif).
Un personnel nest associ aucune classification (ni commercial, ni manager, ni administratif).
La premire rgle de gestion simplmente laide de trois dclencheurs: un sur chaque table
spcifique. Il sagit dinterdire quun manager de numro100 soit galement rfrenc dans
une autre table spcifique avec ce mme numro (commercial et administratif). Le
raisonnement devra sappliquer lidentique pour les tables des commerciaux et celle des
administratifs. Le code du dclencheur est dcrit au paragraphe prcdent.
La deuxime rgle simplmente naturellement du fait de linexistence dune table gnrique.
Ici seuls managers, commerciaux ou administratifs peuvent tre stocks.

Totalit ou absence de contrainte


La contrainte de totalit (notation UML {complete, overlapping}) et labsence de
contrainte (notation UML {incomplete, overlapping}) autorisent le scnario dans lequel
un personnel nest associ aucune classification (ni commercial et ni manager ou administratif).
Cette contrainte est impossible mettre en uvre du fait de linexistence dune table gnrique. Si telle est la contrainte implmenter, vous devrez opter pour une autre dcomposition
de lhritage (distinction ou push-up).

Hritage en push-up
Suivant le principe de la dcomposition ascendante, seule la table gnrique est cre et rassemble toutes les colonnes des tables gnriques.

ditions Eyrolles

Livre SOUTOU.indb 169

169

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 3-11: Transformation de lhritage en push-up


Schma relationnel

Script SQL
DROP TABLE personnel CASCADE CONSTRAINTS;

Figure 3-11. Hritage par push-up

CREATE TABLE personnel (


idpers
INTEGER NOT NULL,
nom
VARCHAR2(40),
indice
INTEGER,
prime
FLOAT,
nbhmois
INTEGER,
projet
VARCHAR2(60),
syndicat
VARCHAR2(254),
nbheuressupp INTEGER,
CONSTRAINT pk_personnel
PRIMARY KEY (idpers));

Contrainte dexclusivit
La contrainte dexclusivit interdit le fait quun personnel appartienne plusieurs classifications (commercial, manager ou administratif) tout en permettant un personnel de ntre
rattach aucune classification.
La premire rgle de gestion simplmente laide dune contrainte de vrification (CHECK).
Il sagit dinterdire que toutes les colonnes provenant des tables spcifiques disposent toutes
dune valeur. Si les colonnes relatives un manager sont renseignes, alors les autres (relatives
aux commerciaux et aux administratifs) doivent tre nulles. Le mme raisonnement devra
sappliquer pour les colonnes des commerciaux et des administratifs.
Le tableau suivant prsente cette contrainte ainsi que quelques insertions valides et une invalide (personnel la fois commercial et administratif).
Tableau 3-12 : Contrainte dexclusivit pour lhritage push-up
Contrainte dexclusivit
ALTER TABLE personnel
ADD CONSTRAINT ck_exclusivite
CHECK
((projet IS NOT NULL AND nbhmois IS NOT NULL
AND prime IS NULL
AND syndicat IS NULL
AND nbheuressupp IS NULL)

170

Livre SOUTOU.indb 170

Jeu dessai
-- commercial
INSERT INTO personnel VALUES
(100,'F. Brouard',500,47800,NULL,NULL,NULL,NULL);
1 row created.

-- manager
INSERT INTO personnel VALUES

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Contrainte dexclusivit (suite)


OR
(projet IS NULL AND nbhmois IS NULL
AND prime IS NOT NULL
AND syndicat IS NULL
AND nbheuressupp IS NULL)
OR
(projet IS NULL AND nbhmois IS NULL
AND prime IS NULL
AND syndicat IS NOT NULL
AND nbheuressupp IS NOT NULL)
OR
(projet IS NULL AND nbhmois IS NULL
AND prime IS NULL
AND syndicat IS NULL
AND nbheuressupp IS NULL));

Jeu dessai (suite)


(101,'C. Date',450,NULL,45,'SQL SPOT',NULL,NULL);
1 row created.
-- administratif
I SERT INTO personnel VALUES
(102,'E. Codd',480,NULL,NULL,NULL,'C.F.D.T.',17);
1 row created.
-- aucune qualification
INSERT INTO personnel VALUES
103,'C. Bravo',457,NULL,NULL,NULL,NULL,NULL);
1 row created.
-- commercial et administratif
INSERT INTO personnel VALUES
(104,'M. Denizot',457,1500,NULL,NULL,
'C.F.D.T.',17);
*
ERROR at line 1:
ORA-02290: check constraint (SOUTOU.CK_
EXCLUSIVITE) violated

La deuxime rgle de gestion simplmente dans cette mme contrainte en permettant que
toutes les colonnes spcifiques soient nulles simultanment.

Contrainte de partition
La contrainte de partition simplmente en interdisant que toutes les colonnes spcifiques
soient nulles simultanment. Il suffit denlever la dernire partie de la condition compose. Le
tableau suivant dcrit lcriture de cette contrainte avec deux insertions invalides: la premire
du fait dun personnel non qualifi, la seconde cause dune double qualification.
Tableau 3-13: Contrainte de partition pour lhritage push-up
Contrainte de partition

Jeu dessai

ALTER TABLE personnel


ADD CONSTRAINT ck_partition
CHECK
((projet IS NOT NULL AND nbhmois IS NOT NULL
AND prime IS NULL

-- invalide : aucune qualification


INSERT INTO personnel VALUES
(103,'C. Bravo',457,NULL,NULL,NULL,NULL,
NULL);
*
ERROR at line 1:

ditions Eyrolles

Livre SOUTOU.indb 171

171

15/02/12 07:05

UML 2 pour les bases de donnes

Contrainte dexclusivit (suite)

Jeu dessai (suite)

AND syndicat IS NULL


AND nbheuressupp IS NULL)

ORA-02290: check constraint (SOUTOU.CK_


PARTITION) violated

(projet IS NULL AND nbhmois IS NULL


AND prime IS NOT NULL
AND syndicat IS NULL
AND nbheuressupp IS NULL)

-- invalide (commercial et adminstratif par


exemple)
INSERT INTO personnel VALUES
(104,'M. Denizot',457,1500,NULL,NULL,'C.F
.D.T.',17);
*
ERROR at line 1:
ORA-02290: check constraint (SOUTOU.CK_
PARTITION) violated

OR

OR
(projet IS NULL AND nbhmois IS NULL
AND prime IS NULL
AND syndicat IS NOT NULL
AND nbheuressupp IS NOT NULL));

Contrainte de totalit
La contrainte de totalit permet des multiqualifications mais interdit les personnels non qualifis. Le tableau suivant dcrit lcriture de cette contrainte avec deux insertions invalides: la
premire du fait dun personnel non qualifi, la seconde cause dune double qualification. La
contrainte doit signifier que les colonnes spcifiques ne doivent pas tre nulles simultanment
(ce qui ninterdit pas des nullits partielles).
Tableau 3-14: Contrainte de totalit pour lhritage push-up
Contrainte de totalit

Jeu dessai

ALTER TABLE personnel


ADD CONSTRAINT ck_totalite
CHECK
((projet||nbhmois||prime
||syndicat||nbheuressupp) IS NOT NULL);

-- valide (commercial et adminstratif par


exemple)
INSERT INTO personnel VALUES
(104,'M. Denizot',457,1500,NULL,NULL,'C.F
.D.T.',17);
1 row created.
-- 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.

172

Livre SOUTOU.indb 172

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Contraintes multitables (assertions)


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 multibase. 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 lalternative 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;
ALTER TABLE t_personne_physique
ADD CONSTRAINT ck_exclure_personne_pp
CHECK(f_check_exclure_personne (prs_id) = 0);
ALTER TABLE t_personne_morale
ADD CONSTRAINT ck_exclure_personne_pm
CHECK(f_check_exclure_personne (prs_id) = 0);

ditions Eyrolles

Livre SOUTOU.indb 173

173

15/02/12 07:05

UML 2 pour les bases de donnes

Contraintes prdfinies
cLe chapitre1 a prsent deux contraintes prdfinies de UML: subsets (qui exprime une
contrainte dinclusion) et xor (qui indique un ou exclusif).

Contrainte dinclusion
Dans lexemple suivant, la contrainte subsets exprime le fait quune inscription une formation par un stagiaire (relation effectue) ne sera possible que si ce mme stagiaire a choisi au
pralable cette formation (relation vux). Le script SQL dcrit ninclut pas la contrainte qui
nest pas gnre automatiquement, mais quil faudra coder manuellement.
Tableau 3-15: Contrainte dinclusion
Schma relationnel

Script SQL
ALTER TABLE voeux
DROP CONSTRAINT fk_voeux_stagiair;
DROP TABLE formation CASCADE
CONSTRAINTS;
DROP TABLE stagiaire CASCADE
CONSTRAINTS;
DROP TABLE effectue CASCADE
CONSTRAINTS;
DROP TABLE voeux CASCADE CONSTRAINTS;

Figure 3-12. Contrainte dinclusion

174

Livre SOUTOU.indb 174

CREATE TABLE formation (


id_form
INTEGER NOT NULL,
nom_formation VARCHAR2(50),
duree
INTEGER,
prix_ht
FLOAT,
CONSTRAINT pk_formation
PRIMARY KEY (id_form));
CREATE TABLE stagiaire (
id_stag
INTEGER NOT NULL,
prenom_stag VARCHAR2(40),
nom_stag
VARCHAR2(50),
mail_stag
VARCHAR2(60),
CONSTRAINT pk_stagiaire
PRIMARY KEY (id_stag));
CREATE TABLE effectue (
id_stag INTEGER NOT NULL,
id_form INTEGER NOT NULL,
CONSTRAINT pk_effectue
PRIMARY KEY (id_stag, id_form));
CREATE TABLE voeux (
id_stag INTEGER NOT NULL,
id_form INTEGER NOT NULL,
CONSTRAINT pk_voeux
PRIMARY KEY (id_stag, id_form));

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Schma relationnel (suite)

Script SQL (suite)


ALTER TABLE effectue
ADD CONSTRAINT fk_effectu_forma
FOREIGN KEY (id_form)
REFERENCES formation (id_form);
ALTER TABLE effectue
ADD CONSTRAINT fk_effectue_
stagiair
FOREIGN KEY (id_stag)
REFERENCES stagiaire (id_stag);
ALTER TABLE voeux
ADD CONSTRAINT fk_voeux_form
FOREIGN
KEY (id_form)
REFERENCES formation (id_form);
ALTER TABLE voeux
ADD CONSTRAINT fk_voeux_stagiair
FOREIGN KEY (id_stag)
REFERENCES stagiaire (id_stag);

Le codage de cette contrainte se rsume la dclaration dune nouvelle cl trangre (compose de deux colonnes) qui aura pour but de vrifier si tout couple (stagiaire, formation)
dcrivant une inscription existe au pralable dans la table de rfrence des vux.
Tableau 3-16: Codage dune contrainte dinclusion
Contrainte dinclusion
ALTER TABLE effectue
ADD CONSTRAINT fk_inclusion
FOREIGN KEY (id_stag,id_form)
REFERENCES voeux (id_stag,id_form);

Jeu dessai
INSERT INTO formation VALUES (1,'SQL',4,1750);
INSERT INTO formation VALUES (2,'C++',3,1050);
INSERT INTO formation VALUES (3,'Cobol',5,1900);
INSERT INTO stagiaire VALUES
(100,'Fred','Brouard','sqlspot@gmail.com');
INSERT INTO stagiaire VALUES
(101,'Rudi','Bruchez','rudi@gmail.com');
INSERT INTO voeux VALUES (100,2);
INSERT INTO voeux VALUES (101,1);
INSERT INTO voeux VALUES (101,2);
SQL> INSERT INTO effectue VALUES (100,2);
1 row created.
SQL> INSERT INTO effectue VALUES (100,1);
*
ERROR at line 1:
ORA-02291: integrity constraint (SOUTOU.FK_
INCLUSION) violated - parent key not found

ditions Eyrolles

Livre SOUTOU.indb 175

175

15/02/12 07:05

UML 2 pour les bases de donnes

Contrainte du ou exclusif
Analogue lhritage par exclusion, la contrainte xor suivante prcise quun consultant est
soit associ un projet, soit une formation, mais pas aux deux simultanment. Loutil ne
gnre pas cette contrainte dans le script SQL.
Tableau 3-17: Contrainte xor
Schma relationnel

Script SQL
ALTER TABLE consultant
DROP CONSTRAINT fk_consul_forma;
ALTER TABLE consultant
DROP CONSTRAINT fk_consult_projet;
DROP TABLE consultant
CASCADE CONSTRAINTS;
DROP TABLE formation
CASCADE CONSTRAINTS;
DROP TABLE projet CASCADE CONSTRAINTS;

Figure 3-13. Contrainte xor

CREATE TABLE consultant (


id_emp
INTEGER NOT NULL,
id_proj
INTEGER,
formid
INTEGER,
nom_emp
VARCHAR2(50),
date_emb
DATE,
prime_emp INTEGER,
CONSTRAINT pk_consultant
PRIMARY KEY (id_emp));
CREATE TABLE formation (
formid
INTEGER NOT NULL,
lib_cours VARCHAR2(60),
theme
VARCHAR2(30),
CONSTRAINT PK_formation
PRIMARY KEY (formid));
CREATE TABLE projet (
id_proj INTEGER NOT NULL,
budget
FLOAT,
lib_proj VARCHAR2(80),
CONSTRAINT pk_projet
PRIMARY KEY (id_proj));
ALTER TABLE consultant
ADD CONSTRAINT fk_consul_forma
FOREIGN KEY (formid)
REFERENCES formation (formid);
ALTER TABLE CONSULTANT
ADD CONSTRAINT fk_consult_projet
FOREIGN KEY (id_proj)
REFERENCES projet (id_proj);

176

Livre SOUTOU.indb 176

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

La condition xor se programme laide dune contrainte de vrification qui vrifiera que tout
consultant soit associ une formation ou un projet, mais pas aux deux ou aucun.
Tableau 3-18: Codage dune contrainte xor
Contrainte ou exclusif

Jeu dessai

ALTER TABLE consultant


ADD CONSTRAINT ck_xor CHECK
((id_proj IS NULL
AND formid IS NOT NULL)
OR
(id_proj IS NOT NULL
AND formid IS NULL)));

INSERT INTO projet VALUES (1, 40700, 'Viaduc de Millau');


INSERT INTO formation VALUES (10,'No SQL','SGBD Open source');
INSERT INTO consultant VALUES (100,1,NULL,'Fred
Brouard',SYSDATE,200);
INSERT INTO consultant VALUES (101,NULL,10,'Rudi
Bruchez',SYSDATE,150);
SQL> INSERT INTO consultant VALUES (102,NULL,NULL,'Jean
Problem',SYSDATE,10);
ERROR at line 1: ORA-02290: check constraint
(SOUTOU.CK_XOR) violated
SQL> INSERT INTO consultant VALUES (103,1,10,'Ren
Bug',SYSDATE,10);
ERROR at line 1: ORA-02290: check constraint (
SOUTOU.CK_XOR) violated

La contrainte de simultanit pourrait aisment se programmer dune manire analogue en


interdisant quune des deux cls trangres soit nulle.

Contraintes personnalises
Le chapitre1 a prsent quelques possibilits du langage OCL afin de spcifier des contraintes
laide dinvariants de classes, de prconditions et postconditions lexcution doprations.
Lutilisation de rles au niveau des liaisons entre classes du modle conceptuel est bien souvent
ncessaire. Une expression OCL ne dcrit pas limplmentation dune mthode, mais sapparente un pseudo-algorithme.

Du fait de la complexit des rgles mtier, de simples contraintes de validation (CHECK)


oucls trangres (FOREIGN KEY) ne suffisent pas implmenter la rgle. Vous devrez utiliser des dclencheurs (triggers) ou programmer la rgle dans vos procdures catalogues si
le dclencheur nest pas programmable ou si vous ne dsirez pas procder de cette manire.

Lexemple suivant dcrit la contrainte que tout employ est soit chef, soit sous la responsabilit
dun chef qui doit tre employ dans la mme entreprise que lui. Loutil ne gnre pas cette
contrainte dans le script SQL. Il est prfrable dutiliser la solution universelle pour traduire
lassociation rflexive de faon pouvoir programmer un dclencheur dans de bonnes conditions (viter lerreur des tables mutantes, avec Oracle: ORA-04091: table name is
mutating, trigger/function may not see it).

ditions Eyrolles

Livre SOUTOU.indb 177

177

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 3-19: Contrainte personnalise


Schma relationnel

Script SQL
CREATE TABLE employe (
id_emp
INTEGER NOT NULL,
id_ent
INTEGER,
prenom_emp VARCHAR2(40),
nom_emp
VARCHAR2(40),
mail_emp
VARCHAR2(60),
salaire
FLOAT,
CONSTRAINT pk_employe
PRIMARY KEY (id_emp));
CREATE TABLE entreprise (
id_ent
INTEGER NOT NULL,
nom_entreprise VARCHAR2(50),
budget
FLOAT,
CONSTRAINT pk_entreprise
PRIMARY KEY (id_ent));
CREATE TABLE chef_de (
id_emp
INTEGER NOT NULL,
id_chef
INTEGER,
CONSTRAINT pk_chef_de
PRIMARY KEY (id_emp));

Figure 3-14. Contrainte OCL

ALTER TABLE employe


ADD CONSTRAINT fk_emp_entrepri
FOREIGN KEY (id_ent)
REFERENCES entreprise (id_ent);
ALTER TABLE chef_de
ADD CONSTRAINT fk_chef_emp
FOREIGN KEY (id_chef)
REFERENCES employe (id_emp);
ALTER TABLE chef_de
ADD CONSTRAINT fk_emp_emp
FOREIGN KEY (id_emp)
REFERENCES employe (id_emp);

La rgle se programme finalement par un dclencheur sur la table dassociation chef_de. Ce


dclencheur devra sassurer, aprs chaque ajout ou modification dun chef, que le chef et son
subalterne appartiennent la mme entreprise.

178

Livre SOUTOU.indb 178

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Tableau 3-20: Codage dune contrainte OCL


Dclencheur

Jeu dessai

CREATE TRIGGER trg_chef_meme_entreprise


AFTER INSERT OR UPDATE OF id_chef
ON chef_de
FOR EACH ROW
DECLARE
v_id_ent_chef entreprise.id_ent%TYPE;
v_id_ent_emp entreprise.id_ent%TYPE;
BEGIN
IF NOT (:NEW.id_chef IS NULL) THEN
SELECT id_ent INTO v_id_ent_chef
FROM employe WHERE id_emp = :NEW.id_chef;
SELECT id_ent INTO v_id_ent_emp
FROM employe WHERE id_emp = :NEW.id_emp;
IF NOT (v_id_ent_chef = v_id_ent_emp) THEN
RAISE_APPLICATION_ERROR(-20101,'Le chef et
l''employe n''ont pas la meme entreprise...');
END IF;
END IF;
END;

INSERT INTO entreprise VALUES (2,'Air


France',90000);
INSERT INTO entreprise VALUES
(3,'Airbus',190000);
INSERT INTO employe VALUES (100,3,'Fred
','Brouard','sqlspot@gmail.com',4000);
INSERT INTO employe VALUES (101,3,'Fred
','Brouard','sqlspot@gmail.com',4000);
INSERT INTO employe VALUES (102,2,'Rudi
','Bruchez','bruchez@gmail.com',3000);
SQL> INSERT INTO chef_de VALUES
(100,NULL);
1 row created.
SQL> INSERT INTO chef_de VALUES
(101,100);
1 row created.
SQL> INSERT INTO chef_de VALUES
(102,100);
*
ERROR at line 1:
ORA-20101: Le chef et l'employe n'ont
pas la meme entreprise...
ORA-06512: at "SOUTOU.TRG_CHEF_MEME_
ENTREPRISE", line 10

Je nai jamais rien compris cette histoire de tables mutantes, limitation qui, ma
connaissance, nexiste que chez Oracle. La norme SQL accepte quun dclencheur puisse
accder la table cible dudit dclencheur. SQL Server la mis en uvre:
CREATE TRIGGER e_personne ON t_personne FOR UPDATE
AS
UPDATE t_personne SET nom = UPPER(nom)
WHERE prs_id IN (SELECT prs_id FROM inserted) -- table
comportant les donnes modifies (quivalent du NEW)
GO

ditions Eyrolles

Livre SOUTOU.indb 179

179

15/02/12 07:05

UML 2 pour les bases de donnes

Mise en pratique
Lexercice3.3 La programmation de contraintes vous propose de programmer quelques
contraintes sur diffrentes tables.

Dnormalisation
Avant de penser la dnormalisation, il faut que vous soyez assur que vos tables sont normalises au pralable La majorit des problmes de performances des applications en
production survient la monte en charge au niveau du volume des donnes. En dautres
termes, manipuler des tables mal conues devient seulement pnalisant quand elles deviennent
volumineuses et ne tiennent plus en RAM. Quand les experts tudient le code et se rendent
compte que les tables ne sont pas normalises, il est souvent dj un peu trop tard. Partez sur
de bonnes bases (cest le cas de le dire): normalisez au maximum en amont!
Si vos tables sont normalises et vos cls trangres indexes, le plus gros du travail est fait.
Vous disposez dautres outils que sont le partitionnement ou les vues matrialises. Si malgr
tout a, vos temps de rponse sont inacceptables, vous pouvez essayer de dnormaliser certaines
tables.
Vous pouvez dnormaliser une table en ajoutant des colonnes qui permettront de stocker
soit des colonnes calcules (qui viteront des calculs), soit des donnes redondantes (mais
plus accessibles) ou des cls primaires (de taille plus rduite: une squence par exemple) ou
trangres (qui diminueront les jointures). Dans bien des cas, vous devrez programmer des
dclencheurs afin de maintenir lintgrit dans le temps de votre nouvelle base. Si vous ntes
pas un adepte des dclencheurs, ce traitement devra tre cod dans vos procdures.
La dnormalisation sera profitable si votre application effectue beaucoup de lectures et peu de
mises jour. Si beaucoup de mises jour sont ralises, la dnormalisation dgradera sensiblement certaines performances. En revanche, si votre application effectue peu de lectures,
dnormaliser ne sert rien (a fortiori lorsquil existe beaucoup de mises jour).

Colonnes calcules
Dans lexemple suivant, lajout des colonnes totaljp (nombre de jours facturer) et totalj
(nombre de jours de formation dans lanne) vitera tout calcul impliquant des jointures avec
la table Inscriptions.

180

Livre SOUTOU.indb 180

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Figure 3-15. Dnormalisation par colonnes calcules

Le revers de la mdaille consiste en la ncessit de programmer plusieurs dclencheurs sur


la table Inscriptions qui mettront jour ces deux colonnes chaque inscription et toute
dsinscription. Une ou plusieurs vues matrialises peuvent tre galement utilises.

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.

Figure 3-16. Dnormalisation par ajout de colonnes

ditions Eyrolles

Livre SOUTOU.indb 181

181

15/02/12 07:05

UML 2 pour les bases de donnes

Les inconvnients de ce mcanisme sont dune part lespace utilis, dautre part le risque dincohrence si le nom dun client vient changer (ou le nom de sa socit). La solution consiste
utiliser un dclencheur sur la table Client ou une vue matrialise (contenant entre autres
ces colonnes additionnelles).

Ajout de cls trangres


Dans lexemple suivant, lajout de la colonne nseg (numro de segment) vitera toute jointure
avec la table Salles pour relier des postes leur segment. Ici on rgresse de la troisime la
deuxime forme normale.

Figure 3-17. Dnormalisation par ajout de cl

On retrouve les mmes inconvnients que prcdemment (espace perdu et redondances). Pour
y remdier, il faudra programmer un dclencheur ou passer par une vue matrialise.

Exemple de stratgie
Dnormaliser est une action forte sur la base, car la structure des tables sera altre, des redondances vont apparatre et des dclencheurs seront mettre en uvre. En consquence, cette
technique doit tre la dernire rponse un problme de temps de rponse en exploitation et
en aucun cas justifie par lintrt du programmeur.


182

Livre SOUTOU.indb 182

Normalisez au maximum avant de mettre en exploitation puis auditez rgulirement quelques


semaines, mois ou annes suivant la monte en charge.
Appliquez les requtes les plus pnalisantes une base dnormalise, mais quivalente en
termes de donnes. Comparez les temps de rponse entre les deux bases. Si le temps de
rponse est de plus de 30% infrieur, il devient vraiment intressant de dnormaliser.

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Dans une base de donnes relationnelle, donc fortement transactionnelle, rien ne justifie
a priori la dnormalisation. Il faut avant tout normaliser au maximum. La dnormalisation tant un acte fort, elle ne peut que rsulter dune dcision risque prise en pleine
connaissance de cause laide des critres suivants.
Le gain de dnormalisation doit tre prouv: il faut donc mettre lpreuve la base
avec un volume de donnes significatif et une concurrence quivalente celle de lexploitation. Cela ne peut se faire gnralement quen cours dexploitation
Le gain doit tre trs important. Un gain minime sera gnralement perdant long
terme du fait du surcrot de volume gnr par la redondance et laccroissement des
temps de transaction (plus de donnes mettre jour, cest toujours plus long).
Le gain doit sanalyser globalement. Lerreur la plus courante est de ne mesurer que
le gain apport la table qui est dnormalise. Or, la dnormalisation entrane systmatiquement des effets de bord, quil est souvent difficile de mesurer de prime abord.
Par exemple, laccroissement du volume des donnes comme lallongement du temps
de mise jour induit par la dnormalisation, a des rpercussions sur les transactions
dont la dure augmente. De ce fait, les verrous durent plus longtemps et les risques de
blocage comme dinterblocage sont accrus.
Plus une table est petite (en nombre de colonnes), plus elle est facile indexer. Dailleurs,
le respect absolu de la normalisation des relations (pas de valeurs NULL) conduit une
base dont les tables sont formes dune cl et dau plus un attribut non cl.
Enfin, avant de dnormaliser, il existe dautres techniques telles que: lhypernormalisation (par exemple ajouter une table des prnoms au lieu de mettre la colonne prnom dans
la table personne) ou le partitionnement.
Quelle que soit la solution dimplmentation que vous choisirez: normaliser au maximum,
dnormaliser, indexer telle ou telle colonne, programmer une contrainte dans une procdure
plutt que dans un dclencheur, etc., vous rencontrerez des avantages, mais aussi des inconvnients. Vous devrez toujours peser le pour et le contre de toute implmentation ou optimisation
pour dcider finalement le plus souvent aprs des tests grandeur nature.

Les rgles de Brouard


Pour en terminer avec ces mcanismes doptimisation, quelques conseils dordre gnral
propos de vos requtes et de lutilisation dun SGBD. Parues en 2008 sur le blog de F.Brouard
(http://blog.developpez.com/sqlpro), voil les 10meilleures pratiques pour dvelopper avec un
SGBDR.
1. Une base de donnes relationnelle doit grer des relations et non des fichiers.
Assurez-vous que vos tables ne contiennent pas un nombre trop important de colonnes.
Respectez la normalisation introduite par le modle relationnel. Contrairement une

ditions Eyrolles

Livre SOUTOU.indb 183

183

15/02/12 07:05

UML 2 pour les bases de donnes

ide reue, composer sa base avec plus de tables ayant peu de colonnes rendra meilleures
les performances de vos requtes.
2. Une cl primaire artificielle est prfrable une cl mtier (smantique).
En choisissant le numro dimmatriculation dune voiture, qui vous dit qu la cration
de lenregistrement, linformation sera connue ou que cette valeur nvoluera pas dans
le temps (entranant des effets de bord trs coteux). La cl mtier est en gnral plus
volumineuse quune simple colonne NUMBER . Lidal, cest de dfinir une cl primaire
artificielle et de disposer aussi dune cl mtier (contrainte UNIQUE).
3. Ne codez jamais ( part dans vos tests ou dmonstrations), une requte du type SELECT
* , cela pour les trois raisons principales suivantes:
Moins il y a de donnes qui circulent sur le rseau, plus les temps de rponse sont courts.
Il est donc prfrable dindiquer dans la liste des colonnes uniquement celles qui sont
ncessaires.
Allgez la charge du transformateur de requtes en lui vitant de rechercher les informations dans les tables systme pour dduire la liste de toutes les colonnes et les privilges
associs.
Allez-vous interdire implicitement que vos tables voluent en termes de structure? Ajouter
ou supprimer une colonne risque de rendre le code inoprant tout endroit o cette
instruction se trouvera.
4. vitez si possible dutiliser des curseurs dans vos transactions.
Les curseurs imposent une programmation itrative (o les donnes sont traites ligne
par ligne comme avec un simple fichier) et non ensembliste. Un SGBD est optimis pour
traiter de manire ensembliste les donnes avec SQL. Depuis la version SQL:1999, la
rcursivit est prise en charge et SQL devient un langage complet (au sens de la machine
de Turing) o tout traitement peut tre thoriquement programm laide de requtes.
5. courtez la dure de vos transactions et programmez ct serveur (procdures cata
logues).
Une transaction ncessite daccder souvent exclusivement aux donnes et des verrous
sont mis en uvre automatiquement. Les verrous induisent des temps dattente pour les
utilisateurs concurrents. Si votre code nest pas optimis ou sil sexcute du ct du client,
la contention devient invitable.
6. Utilisez le SQL dynamique pour crire des requtes simples.
Le fait dcrire une instruction avec du SQL dynamique vite au transformateur de
requtes un certain nombre de tches et permet la rutilisation du plan dexcution.
7. Paramtrez la bonne collation.
Une collation sert grer la manire dont les chanes de caractres, constituant les
donnes de la base, vont se comporter face aux oprateurs de comparaisons et lordonnancement des donnes (tri). La gestion des majuscules/minuscules, accents, ligatures
(par exemple, cur), etc. doit tre prvue.

184

Livre SOUTOU.indb 184

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

8. Nutilisez jamais une requte du type SELECT MAX(...)+1 pour gnrer une cl
primaire.
Ce mode de calcul est proscrire, car il peut conduire un jour ou lautre au mieux un
tlescopage de cl, au pire un blocage total. En effet, tant que la nouvelle ligne pourvue
de cette nouvelle cl nest pas encore insre dans la base, toute autre transaction peut
effectuer le calcul gnrant la mme valeur. Afin de rendre cohrent ce mcanisme, il
faudrait programmer une transaction intgrant le calcul du max+1 et lordre dinsertion
avec la nouvelle cl (ce qui nest pas aussi simple quil y parat).
Prfrez le mcanisme dauto-incrment de votre SGBD qui pour Oracle est la squence.
SEQUENCE et IDENTITY ont t normaliss (SQL:2008) SQL Server et IBM DB2 prennent les deux en charge. PostGreSQL propose le SERIAL (quivalent du IDENTITY en
plus de la squence).
9. Utilisez avec parcimonie les tables temporaires.
Chaque objet temporaire cr au sein dun SGBDR dclenche une criture coteuse au
journal de transactions et dans le dictionnaire des donnes. Si de nombreuses transactions sont effectues en parallle et quelles gnrent de nombreux objets temporaires, des
points de contention peuvent apparatre. Prfrez lutilisation de requtes contenant des
fonctions table ou des CTE.
10. Utilisez des index, mais bon escient.
Indexez vos cls trangres et choisissez bien le mode dindexage (B-tree, bitmap ou IOT).
Si une table IOT convient une squence, elle peut mener des performances dsastreuses pour une cl smantique alphanumrique de taille variable.
Peu importe le nombre dindex dune table, si chaque index apporte un gain considrable.
Avec un gain de 100 voire 1000 (facilement obtenu sur des tables ayant un grand nombre
de lignes) cest autant de temps de gagner pour les mises jour, dont on oublie trop souvent quelles ncessitent pour la plupart une lecture positionelle qui sera dautant plus
rapide quil existe un index adquat!

Mise en pratique
Lexercice3.4 La dnormalisation vous invite dnormaliser un schma, mais quelle table
sera impacte?
Dans lexercice3.5 Ma psy oublie tout, vous devez aider ma psy qui oublie tout.
Lexercice3.6 Le planning dune cole de pilotage est consacr la gestion dun planning
dune cole de pilotage.

ditions Eyrolles

Livre SOUTOU.indb 185

185

15/02/12 07:05

UML 2 pour les bases de donnes

Exercices
3.1 La cration de tables (carte dembarquement)
crire le script SQL (en liminant les tables inutiles) permettant de crer les tables correspondant au modle conceptuel suivant.

Figure 3-18. Modle conceptuel de la carte dembarquement

Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.

186

Livre SOUTOU.indb 186

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Tableau3.21 : Dictionnaire des donnes


Colonne

Dsignation

Type de
donnes

code_OACI

Le code des aroports est un classement gographique dfini par


lOrganisation de laviation civile internationale.

4lettres

code_fidelite

Identifiant de la carte de fidlit.

Entier
1position

heure_dep, heure_emb,
heure_arr

Heures de dpart, darrive et dembarquement prvues (catalogue).


Les heures vont de 0 23, seuls les quarts dheure sont accepts (0,
15, 30 ou 45).

Heures et
minutes:
2chiffres

heure_dep_reel,
heure_arr_reelle,
min_dep_reel,
min_arr_reelle

Heures de dpart et darrive relles. Les heures vont de 0 23, et


les minutes de 0 59.

Heures et
minutes:
2chiffres

jour_mois

Jour et mois de lanne (par exemple, 01-MAR).

6caractres

jour_mois_planning

Numro du jour de lanne.

3positions

lib_fidelite

Libell de la carte de fidlit (IVORY, SILVER, GOLD, etc.).

20caractres

nom_aeroport

Nom de laroport.

50caractres

num_carte

Numro du client.

Entier
12positions

num_porte

Numro de la porte dembarquement (par exemple, 20L).

3caractres

num_siege

Numro du sige dans lavion (par exemple, 12A).

3caractres

num_vol

Numro de vol est un code alphanumrique, compos du code


AITA de la compagnie arienne (3lettres) et dun nombre de 3 ou
4chiffres.

8caractres
(par exemple,
AF-6145)

prenom_client,
nom_client

Identit du client.

40caractres
pour chaque

ditions Eyrolles

Livre SOUTOU.indb 187

187

15/02/12 07:05

UML 2 pour les bases de donnes

3.2 La cration de tables (horaires de bus)


crire le script SQL permettant de crer les tables correspondant au modle conceptuel suivant.

Figure 3-19. Modle conceptuel des horaires de bus

Vous devez dfinir un index sur chaque cl trangre et typer les colonnes de la manire la
plus adquate.
Tableau3.22 : Dictionnaire des donnes
Colonne

Dsignation

Type de donnes

id_jour, id_ligne
et id_sta

Identifiants des jours (3occurrences), des lignes (moins dune


centaine) et des stations (plus de 300).

Numriques de 1
3positions

lib_jour, nom_ligne
et nom_station

Libells des jours (30 caractres), des lignes (60 caractres) et


des stations (25 caractres).

Caractres de taille
variable

heure, minute

Heures et minutes de passage. Les heures vont de 0 23, les


minutes de 0 59.

Numriques de
2positions

ordre, position

Ordre de la station en fonction du jour et de la ligne de bus.


Position en colonne de lheure de passage.

Numriques de
2positions

188

Livre SOUTOU.indb 188

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

3.3 La programmation de contraintes


Carte dembarquement
Programmez les contraintes suivantes.
Pour tout vol prsent au catalogue, laroport de dpart est diffrent de celui darrive
(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).
Chaque ligne nest pas forcment planifie tous les jours.
Il ny a pas plus de 15stations sur un mme trajet.
Les horaires sont afficher sous la forme hh.min (avec hh de 6 22 et min de 0 59).
Il ny a pas plus de 8colonnes dhoraires afficher.

E-mails des clients et prospects


Considrez le schma relationnel suivant qui vise dcrire une population distincte de clients
et prospects.

Figure 3-20. Modle physique des clients et prospects

ditions Eyrolles

Livre SOUTOU.indb 189

189

15/02/12 07:05

UML 2 pour les bases de donnes

Programmez les contraintes suivantes.


Une adresse e-mail est unique dans la base de donnes.
Un client nest pas un prospect, et rciproquement.
Un prospect ne peut pas dtenir plusieurs adresses e-mails (une maximum).
Un client peut dtenir au maximum 3adresses e-mails.
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.

Figure 3-21. Liste des vols rels disponibles

190

Livre SOUTOU.indb 190

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

Horaires de bus
Rduisez le plus possible le schma relationnel normalis des horaires de bus quitte dnormaliser certaines tables ou abandonner de la cohrence.

3.5 Ma psy oublie tout


Ma psy oublie tout: lheure de mon rendez-vous, mon deuxime prnom, mme la date de mon
anniversaire! En cherchant sans ses lunettes dans ses fiches manuscrites, elle a confondu ma
fiche avec celle de Ren Soustout, ancien pilier du Stade toulousain, devenu pilier de bar, qui
lavait consulte quelques annes auparavant.

Figure 3-22. Stockage des fiches patients

Rendez-vous
Pour sa fte, ma psy a reu un ordinateur dun patient passionn. Connaisant ma nvrose
du rangement et de lorganisation des donnes, elle ma demand de laider mettre un peu
dordre dans ses fiches patients. Voici les donnes conserver.
Qui est venu la voir et quelle heure. La classification qui lintresse est la suivante :
enfant, ado, femme, homme ou couple. Notez que les sances dun couple peuvent se poursuivre individuellement et quun patient ado peut revenir quelques annes plus tard en tant
quadulte.
Par quel moyen (autre patient, docteur, bouche oreille, Pages Jaunes, Internet, etc.) le
patient la-t-elle connue (elle est curieuse!).

ditions Eyrolles

Livre SOUTOU.indb 191

191

15/02/12 07:05

UML 2 pour les bases de donnes

La date de la premire consultation et si le patient est en retard son rendez-vous.


Le mode de rglement de la sance.
Pour les consultations pour anxit, lindicateur de 0 10 que le patient sattribue (enfin sil
peut parler encore).
Certains critres (profession du patient, liste des prnoms des personnes familires, etc.)
consulter avant le rendez-vous.
Certains mots-cls (expressions utilises loral par le patient), dventuelles postures
affiches et certains comportements observs au cours de la sance nots aprs le rendezvous.
Notez que la psy prend au maximum 3 patients pour une mme consultation (de toute
manire, il ny a que deux siges et un fauteuil!).

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.

Figure 3-23. Les psys de ma psy

Les rendez-vous avec ses confrres doivent tre modliss. Elle dsire noter les circonstances
de la premire rencontre avec chacun des spcialistes ctoys, pour raisons professionnelles
ou prives.
Elle envoie galement certains de ses patients en consultations ponctuelles chez ses confrres
qui lui transmettent par la suite un mmo rsumant la sance.
De plus, elle prte galement des livres ses patients, sans retour parfois. Elle souhaite donc
endiguer ce phnomne. Par contre, elle passe sous silence le fait que certains patients lui prtent
des livres quelle dispose ensuite dans sa bibliothque
Ma psy ne fait pas un boulot facile alors ne ratez pas sa base de donnes!

192

Livre SOUTOU.indb 192

ditions Eyrolles

15/02/12 07:05

Chapitre 3

Le niveau physique

3.6 Le planning dune cole de pilotage


Pour finir avec un peu plus de lgret, modlisez la base de donnes visant grer le planning
et la comptabilit des vols dune cole de pilotage.

Flotte
La flotte de lcole est compose de diffrents aronefs. Les types se caractrisent le plus
souvent par un libell avec ou sans code (par exemple, Aquila-AT01, Robin DR400-120, CESSNA-172N, DA40, SR20-G3, TB20, etc). Limmatriculation de lavion, sa puissance et son
prix horaire doivent aussi tre sauvegards. Il est possible que lcole possde plusieurs aronefs de mme type. Pour chaque avion 2indicateurs sont importants mettre jour: le nombre
dheures de vol de la cellule et le nombre dheures de vol du moteur (qui est chang plusieurs
fois au cours de la vie de lappareil).

Figure 3-24. La flotte de lcole

Chaque aronef doit tre rvis priodiquement en fonction du nombre dheures dutilisation
(50h, 100h, 500h, 1000h ou 2000h). Les dates de ces visites de maintenance doivent tre
mmorises de mme quun ventuel commentaire. Il en va de mme pour le dtail des pices
achetes (prix TTC) lors de lentretien, ainsi que le nombre total dheures de travail ncessaires.

ditions Eyrolles

Livre SOUTOU.indb 193

193

15/02/12 07:05

UML 2 pour les bases de donnes

Acteurs
lves pilotes et instructeurs voluent dans cette structure. Les lves sinscrivent une date
qui doit tre mmorise. Pour tous, les nom, prnom et adresse doivent tre connus. Tous disposent dun compte sur lequel ils peuvent dposer une somme dargent. Les sommes prleves
correspondent au montant du vol effectu par un lve pilote ou par un instructeur sil rserve
lavion pour lui.
Les instructeurs, qui sont identifis sur le planning par un trigramme inspir de leur nom,
bnficient dune rduction sur le cot horaire (diffrente en fonction de chaque type davion).
Notez quun instructeur nest pas forcment qualifi sur tous les types dappareils de lcole.
Chaque sance de vol (soit en instruction, soit en solo lorsque llve pilote vole seul) effectue
est dcompte en diximes dheures (par exemple, 1.5 signifie 1h30 de vol) et doit tre mmorise avec la date du vol. Le nombre total dheures de vol pour un lve ou pour un instructeur
doit tre facilement accessible, que ce soit pour les vols dinstruction (en double commande)
ou en solo.
lves et pilotes doivent passer annuellement ou semestriellement une visite mdicale. Sa date
et son rsultat (apte ou inapte) doivent tre consigns, ainsi quun ventuel commentaire.

Rendez-vous
Tous peuvent effectuer des rservations. Il suffit de sinscrire sur le planning en slectionnant
laronef, la plage horaire et, ventuellement, linstructeur dsign par ses initales. Il est galement possible de noter un commentaire et le nombre de places disponibles. Notez que certains
avions peuvent tre indisponibles, durant une priode plus ou moins longue, pour cause de
maintenance.

Figure 3-25. Planning de lcole

194

Livre SOUTOU.indb 194

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe
Le niveau externe prsent dans ce chapitre concerne la dfinition et la manipulation des
vues (views). Les vues agissent comme des fentres sur la base de donnes. Une vue est
construite laide dune requte qui retourne un rsultat tabulaire. Cest pour cette raison
quun vue apparat un utilisateur sous la forme dune table. En ralit, une vue ne contient
pas de donnes (except les vues matrialises), elle ne fait que filtrer les donnes issues de
tables.
Pour tout dveloppement de qualit, les vues sont indispensables pour viter tout accs direct
aux tables. En pratique, bon nombre dapplications se passent de ce concept, en manipulant
directement les tables.
En plus dun contrle fin laccs aux donnes (confidentialit, scurit et privilges), une vue
permet de masquer la complexit ou de dnormaliser des schmas relationnels, dimplmenter
des contraintes de valeur (ou dintgrit) et de simplifier la formulation de requtes complexes.
La figure suivante illustre trois accs une base de donnes. Chaque utilisateur opre sur un
schma externe compos des vues accessibles pour son profil. Les donnes peuvent provenir
de diffrentes tables et sont toujours stockes dans des tables (sauf pour le cas des vues matrialises qui combinent les concepts de table et de vue).

ditions Eyrolles

Livre SOUTOU.indb 195

195

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 4-1. Les vues

La majeure partie des oprations ralises sur une vue sont des extractions, mais dans certains cas, une vue peut tre modifiable (les mises jour impacteront alors la table source). Par
ailleurs, nous verrons quun type de dclencheur (instead of trigger) permet de programmer
des mises jour de vues multitables.
Le niveau externe concerne aussi les routines SQL permettant de prsenter ou de mettre
jour les donnes de manire indirecte (procdures stockes, dclencheurs et UDF ou
User Defined Function).
Somme toute, une vue nest quun nom de table donn une requte dextraction de
donnes (SELECT) et on constatera daprs la norme SQL que les vues sont considres
comme des tables dun type particulier VIEW, les tables conventionnelles tant considres en tant que BASE TABLE . Notons ds prsent quil est possible, dans certains cas,
de mettre jour par INSERT, UPDATE , DELETE ou MERGE , les donnes des tables travers
les vues.
Une catgorie particulire de routines, les fonctions table, permet de mettre en uvre des
vues avances. Le fait quune fonction table admette des paramtres en entre et retourne
un jeu de donnes, rend possible la ralisation de vues paramtrables.
Globalement, les procdures stockes permettent de raliser des traitements complexes
de mise jour en masquant la complexit lutilisateur. Une procdure stocke peut aussi
renvoyer un ou plusieurs jeux de donnes.

196

Livre SOUTOU.indb 196

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Enfin, des dclencheurs dun type particulier, les trigger INSTEAD OF, permettent de
raliser des traitements complexes, la manire des procdures, lorsque survient une
opration de mise jour (INSERT, UPDATE ou DELETE).
Tous ces lments constituent le modle externe de donnes (MED).
Pour tout dveloppement de qualit, les objets du MED sont indispensables pour viter
tout accs direct aux tables. En pratique, bon nombre dapplications se passent de ce
concept en manipulant directement les tables. Et cest une erreur! En effet, la couche dinterface ou dabstraction apporte par le modle externe de donnes rend indpendants la
structure de la base et laccs aux donnes. En gros, une modification de la structure des
tables de la base naffecte pas la couche externe et si lapplication a t dveloppe sur
cette couche, il nest gnralement pas ncessaire de la modifier pour quelle continue de
fonctionner, sauf si les modifications de structure apportent de nouvelles fonctionnalits
ou portent atteinte aux donnes stockes dans la base.
En combinant vues, fonctions table, dclencheurs INSTEAD OF et procdures stockes,
on peut concevoir des structures de donnes proches de celles des objets applicatifs et y
greffer les mthodes CRUD de manipulation desdits objets (INSERT, SELECT, UPDATE ,
DELETE). En fait, le modle externe de donnes simule de manire performante ce quun
ORM (Object Relational Mapping) fait de manire contre-performante!
Ce chapitre dcrit les diffrents types de vues qui existent:
les vues relationnelles issues de tables SQL2;
les vues matrialises issues de tables SQL2;
les vues objet issues de tables SQL2 ou SQL3.
La syntaxe SQL utilise dans ce chapitre est celle dOracle; elle est relativement proche du
standard en comparaison avec dautres SGBD (except concernant les vues objet).

Les vues relationnelles (SQL2)


Une vue SQL2 est une table virtuelle du fait quelle noccupe aucun espace disque pour
contenir ses donnes (seules les donnes filtres de la table sont montes en mmoire chaque
sollicitation). Une vue relationnelle na pas dexistence propre (elle ne stocke pas de donnes),
seule sa structure est stocke dans le dictionnaire de donnes.
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.

ditions Eyrolles

Livre SOUTOU.indb 197

197

15/02/12 07:05

UML 2 pour les bases de donnes

Cration dune vue


La syntaxe simplifie de cration dune vue SQL2 est la suivante:
CREATE VIEW [nom_schma.]nom_vue
[ (alias1, alias2 ) ]
AS requte_SELECT
[WITH { READ ONLY | CHECK OPTION } ];

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.

En thorie, la clause ORDER BY (qui nest pas, au passage, un oprateur relationnel), ne


doit pas figurer dans la dfinition dune vue relationnelle.

Classification
On distingue les vues simples des vues complexes en fonction de la nature de la requte de
dfinition. Le tableau suivant rsume cette classification.
Tableau 4-1: Classification des vues

198

Livre SOUTOU.indb 198

Requte de dfinition

Vue simple

Vue complexe

Nombre de tables

1 (monotable)

1 ou plusieurs (multitable)

Fonction dagrgat (MAX, SUM , etc.)

Non

Oui

Regroupement

Non

Oui

Mises jour possibles

Oui

Pas toujours

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Une vue monotable est aussi considre comme tant complexe si la requte comporte le
mot-cl DISTINCT, les clauses HAVING , GROUP BY ou WINDOW, une fonction de fentrage,
ou des colonnes dfinies par des expressions calcules ou constantes.

Avec Oracle, une vue est complexe si la requte comporte le mot-cl DISTINCT, ROWNUM
ou ROW_NUMBER, ORDER BY, HAVING ou CONNECT BY, des colonnes dfinies par des
expressions ou des colonnes NOT NULL dans les tables qui ne sont pas slectionnes par
la vue.

Considrons les clbres tables dOracle employees et departments du schma exemple


hr dont une partie des colonnes et des donnes est prsente.

Figure 4-2. Les tables exemples

La structure de ces tables est prsente dans le tableau suivant. Les colonnes NOT NULL
doivent tre tout particulirement considres lors dventuelles mises jour.

ditions Eyrolles

Livre SOUTOU.indb 199

199

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-2 : Description des tables sources


Table departments

Table employees

SQL> desc hr.employees


Name
Null?
Type
--------------------- -------- ---------EMPLOYEE_ID
NOT NULL NUMBER(6)
FIRST_NAME
VARCHAR2(20)
LAST_NAME
NOT NULL VARCHAR2(25)
EMAIL
NOT NULL VARCHAR2(25)
VARCHAR2(20)
PHONE_NUMBER
HIRE_DATE
NOT NULL DATE
JOB_ID
NOT NULL VARCHAR2(10)
SALARY
NUMBER(8,2)
COMMISSION_PCT
NUMBER(2,2)
MANAGER_ID
NUMBER(6)
DEPARTMENT_ID
NUMBER(4)

SQL> desc hr.departments


Name
Null?
-------------------- ---------DEPARTMENT_ID
NOT NULL
DEPARTMENT_NAME
NOT NULL
MANAGER_ID
LOCATION_ID

Type
---------NUMBER(4)
VARCHAR2(30)
NUMBER(6)
NUMBER(4)

En considrant ces tables sources, composons diffrentes vues.

Vues monotables
Le tableau suivant cre la vue monotable v_employes dans le schma soutou. Cette vue
dcrit les employs dont le salaire dpasse 10000 (restriction du WHERE) et masquant certaines
colonnes (restriction du SELECT). Notez les alias de colonnes qui permettent de masquer le
nom des colonnes originales de la table source.
Tableau 4-3: Cration dune vue monotable
Cration de la vue

Structure de la vue

CREATE VIEW soutou.v_employes


(id_emp, prenom, nom, mail,
date_embauche, id_emploi)
AS SELECT employee_id, first_name,
last_name,email,
hire_date, job_id
FROM
hr.employees
WHERE
salary > 9000;

SQL> desc soutou.v_employes;


Name
---------------------------ID_EMP
PRENOM
NOM
MAIL
DATE_EMBAUCHE
ID_EMPLOI

200

Livre SOUTOU.indb 200

Null?
Type
-------- --------NOT NULL NUMBER(6)
VARCHAR2(20)
NOT NULL VARCHAR2(25)
NOT NULL VARCHAR2(25)
NOT NULL DATE
NOT NULL VARCHAR2(10)

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Une fois cre, la vue sinterroge comme une table par un utilisateur, sous rserve de dtenir
le privilge de lecture (GRANT SELECT ON nom_vue TO nom_schema). Le tableau suivant
prsente deux extractions de cette vue.
Tableau 4-4: Interrogation dune vue
Besoin

Requte et rsultat

Employs de 2005 dont le-mail dpasse 5caractres.

SELECT id_emp, prenom, nom, mail, date_


embauche
FROM
soutou.v_employes
WHERE EXTRACT (YEAR FROM date_embauche) =
2005
AND
LENGTH(mail) > 5
ORDER BY 5;

ID_EMP
------146
150
147
175
151
101
162

PRENOM
--------------Karen
Peter
Alberto
Alyssa
David
Neena
Clara

Nombre demploys tris par type demploi.

NOM
--------------Partners
Tucker
Errazuriz
Hutton
Bernstein
Kochhar
Vishney

MAIL
--------------KPARTNER
PTUCKER
AERRAZUR
AHUTTON
DBERNSTE
NKOCHHAR
CVISHNEY

SELECT
FROM
GROUP BY
ORDER BY

DATE_EMBAUCHE
---------------05-JAN-05
30-JAN-05
10-MAR-05
19-MAR-05
24-MAR-05
21-SEP-05
11-NOV-05

id_emploi, COUNT(id_emp)
soutou.v_employes
id_emploi
2 DESC;

ID_EMPLOI COUNT(ID_EMP)
----------- -------------SA_REP
14
SA_MAN
5
AD_VP
2
MK_MAN
1
PR_REP
1
AD_PRES
1
PU_MAN
1
AC_ACCOUNT
1
AC_MGR
1
FI_MGR
1

ditions Eyrolles

Livre SOUTOU.indb 201

201

15/02/12 07:05

UML 2 pour les bases de donnes

Vues complexes
Une vue complexe est caractrise par le fait quelle contient, dans sa dfinition, plusieurs
tables (jointures, sous-requtes, expressions de tables : CTE), une fonction applique
des regroupements, une fonction de fentrage, le mot-cl DISTINCT ou des expressions de
colonnes.
La mise jour directe (par INSERT ou UPDATE ou DELETE) de telles vues nest pas possible
sans programmer un dclencheur INSTEAD OF.
Le tableau suivant prsente la vue multitable v_dept_calculs du schma soutou qui extrait
pour chaque dpartement, le nom du manager, le nombre demploys, ainsi que les salaires
minimum, maximum et moyens.
Tableau 4-5: Cration dune vue complexe
Cration de la vue

Structure de la vue

CREATE VIEW soutou.v_dept_calculs

SQL> DESC soutou.v_dept_calculs;

(departement, manager, employes,


min_sal, max_sal, moyenne_sal)

Name

Null?

Type

---------------------- ---------

------------

DEPARTEMENT

NOT NULL

VARCHAR2(30)

COUNT(e.department_id), MIN(e.salary),

MANAGER

NOT NULL

VARCHAR2(25)

MAX(e.salary), ROUND(AVG(e.salary),1)

EMPLOYES

AS SELECT d.department_name, m.last_name,

FROM hr.employees e,
hr.departments d, hr.employees m
WHERE e.department_id = d.department_id
AND

d.manager_id

NUMBER

MIN_SAL

NUMBER

MAX_SAL

NUMBER

MOYENNE_SAL

NUMBER

= m.employee_id

GROUP BY d.department_name, m.last_name


ORDER BY 1;

Conseil avis
Il est toujours prfrable de programmer une jointure laide de loprateur relationnel
INNER JOIN plutt que dans WHERE : dune part, pour des raisons de performances (certains SGBD y sont sensibles), dautre part, dun point de vue de la maintenance du code
(il est plus efficace de modifier une requte ainsi crite).
Une fois cre, la vue multitable sinterroge simplement (sans jointure). Le tableau suivant
prsente une extraction de cette vue.

202

Livre SOUTOU.indb 202

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-6: Interrogation dune vue complexe


Besoin

Requte et rsultat

Nom des dpartements et du manager o la moyenne


des salaires dpasse 9000 en affichant lcart entre le
plus haut et le plus bas salaire, en triant sur la moyenne
des salaires.

SELECT departement, manager,


(max_sal - min_sal) ecart_max,
moyenne_sal
FROM soutou.v_dept_calculs
WHERE moyenne_sal > 9000
ORDER BY 4;;

DEPARTEMENT
-----------------Sales
Marketing
Public Relations
Accounting
Executive

MANAGER
ECART_MAX MOYENNE_SAL
----------- ----------- ------------Russell
7290
9492.6
Hartstein
7700
10450
Baer
0
11000
Higgins
4078.8
11169.4
King
7000
19333.3

Il est possible de mettre jour toutes les vues, soit directement, soit indirectement par
lintermdiaire de dclencheurs INSTEAD OF (RULE et FUNCTION pour PostgreSQL).

Vues modifiables
Lorsquil est possible dexcuter des instructions insert, update ou delete directement sur
une vue, elle est dite modifiable (updatable view). Pour mettre jour une vue simple, il doit
exister une correspondance biunivoque entre les lignes de la vue et celles de lobjet source.
Pour pouvoir mettre jour une vue complexe, il est ncessaire de programmer un dclencheur de type INSTEAD OF.

Il va de soi quune vue cre avec la directive WITH READ ONLY ne peut tre mise jour quelle
que soit sa structure
La premire vue monotable (employs dont le salaire dpasse 10000) cite en exemple est
modifiable sous rserve de renseigner les colonnes dclares non nulles (la cl primaire en fait
partie). Ici, la condition de correspondance biunivoque est respecte.
En revanche, la deuxime vue multitable (employs, manager et dtails sur les employs) ne
peut pas tre mise jour dune manire directe, car dune part, la cl primaire nest pas prsente, dautre part, les rsultats fournis proviennent de calculs dagrgats et il serait insens de
vouloir insrer un calcul directement.
Le tableau suivant prsente quelques mises jour possibles (sous rserve de respecter en amont
les contraintes de cls et de valeurs qui existent au niveau de la table source).

ditions Eyrolles

Livre SOUTOU.indb 203

203

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-7: Mises jour dune vue


Oprations

Rsultat

INSERT INTO soutou.v_employes

Ajout dune ligne dans la table

(id_emp, prenom, nom, mail, date_embauche, id_emploi)

employees du schma hr.

VALUES (99,'Fred','Brouard','sqlpro',SYSDATE,'IT_PROG');
Modification dune colonne dune ligne
dans la table employees du schma
hr.

UPDATE soutou.v_employes
SET mail = 'WIGIETZ'
WHERE

id_emp = 206;

DELETE FROM soutou.v_employes


WHERE

id_emp IN (150,151);

Suppression de deux lignes dans la


table employees du schma hr.

La premire instruction est un peu paradoxale, car elle permet lajout, en passant par la vue,
dun employ qui ne repassera plus par la suite le filtre de la vue (linformation du salaire est
manquante et forme la condition de filtre de la vue).

La directive WITH CHECK OPTION, qui empche un ajout ou une modification non conforme
la dfinition de la vue, permet dviter ce genre deffets de bord qui peuvent tre indsirables
pour lintgrit de la base.

Contrainte de vrification
Il est ncessaire de redfinir la vue, le tableau suivant dcrit cette action et la tentative dajout
dun employ non dot de salaire.
Tableau 4-8: Vue avec WITH CHECK OPTION
Cration de la vue

Insertion interdite

SQL> CREATE VIEW soutou.v_employes


(id_emp, prenom, nom, mail,
date_embauche, id_emploi)
AS SELECT employee_id, first_name,
last_name, email, hire_date, job_id
FROM
hr.employees
WHERE
salary > 9000
WITH CHECK OPTION;

SQL> INSERT INTO soutou.v_employes


(id_emp, prenom, nom, mail,
date_embauche, id_emploi)
VALUES (99, 'Fred', 'Brouard',
'sqlpro', SYSDATE, 'IT_PROG');
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION whereclause violation

View created.

204

Livre SOUTOU.indb 204

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Les rgles qui rgissent les insertions ne sont pas identiques celles qui concernent les
mises jour ou suppressions. Des vues complexes peuvent tre modifiables, dans une certaine mesure, lorsquune table source est dite protge par sa cl (key preserved).

Tables protges (key preserved tables)


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.
Tableau 4-9: Vue multitable
Cration de la vue

Structure de la vue

CREATE VIEW soutou.v_dept_emps

SQL> DESC soutou.v_dept_emps;

(ndept,departement,id_emp,prenom,
nom,mail,date_embauche,id_emploi)
AS SELECT d.department_id,

FROM

Name

Null?

Type

---------------------

--------- ---------

NDEPT

NOT NULL NUMBER(4)

d.department_name, e.employee_id,

DEPARTEMENT

NOT NULL VARCHAR2(30)

e.first_name, e.last_name,

ID_EMP

NOT NULL NUMBER(6)

e.email, e.hire_date, e.job_id

PRENOM

hr.employees e, hr.departments d

VARCHAR2(20)

NOM

NOT NULL VARCHAR2(25)

WHERE e.department_id = d.department_id

MAIL

NOT NULL VARCHAR2(25)

ORDER BY 2,4;

DATE_EMBAUCHE
ID_EMPLOI

NOT

NULL DATE

NOT NULL VARCHAR2(10)

En ralit, seule la table employees est protge par cl dans cette vue, car elle joue le rle de
la relation enfant tandis que la table departments joue le rle de parent. En effet, toute ligne
de cette table contiendra un unique numro demploy, tandis que le numro de dpartement
est susceptible de se dupliquer.

ditions Eyrolles

Livre SOUTOU.indb 205

205

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-10: Interrogation de la vue multitable


Contenu partiel de la vue
SQL> SELECT ndept, departement, id_emp, prenom, nom, date_embauche
FROM soutou.v_dept_emps;
NDEPT
--------110
110
10
90
90
90
100
100
...

DEPARTEMENT
ID_EMP PRENOM
------------------ ---------- --------------Accounting
205 Shelley
Accounting
206 William
Administration
200 Jennifer
Executive
102 Lex
Executive
101 Neena
Executive
100 Steven
Finance
109 Daniel
Finance
111 Ismael

NOM
--------------Higgins
Gietz
Whalen
De Haan
Kochhar
King
Faviet
Sciarra

DATE_EMBAUCHE
------------------07-JUN-02
07-JUN-02
17-SEP-03
13-JAN-01
21-SEP-05
17-JUN-03
16-AUG-02
30-SEP-05

Avec Oracle, afin de savoir dans quelle mesure les colonnes dune table sont modifiables par
une vue (insertion, modification ou suppression), il faut interroger le dictionnaire des donnes
par lintermdiaire de la vue USER_UPDATABLE_COLUMNS.

Linterrogation suivante illustre ce mcanisme (UPPER convertit en majuscules une chane de


caractres, utile ici car le nom des objets dOracle est stock en majuscules dans le dictionnaire
des donnes).
Tableau 4-11: Caractristiques des colonnes dune vue
Requte
SELECT
FROM
WHERE

206

Livre SOUTOU.indb 206

Rsultat
COLUMN_NAME, INSERTABLE,
UPDATABLE, DELETABLE
USER_UPDATABLE_COLUMNS
TABLE_NAME = UPPER('v_dept_emps');

COLUMN_NAME
--------------------------DEPARTEMENT
ID_EMP
PRENOM
NOM
MAIL
DATE_EMBAUCHE
NDEPT
ID_EMPLOI

INS
--NO
YES
YES
YES
YES
YES
NO
YES

UPD
--NO
YES
YES
YES
YES
YES
NO
YES

DEL
--NO
YES
YES
YES
YES
YES
NO
YES

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Le tableau suivant prsente quelques mises jour valides (sous rserve de respecter en amont
les contraintes de cls et de valeurs qui existent au niveau de la table source).
Tableau 4-12: Mises jour de vue
Oprations

Rsultat

INSERT INTO soutou.v_dept_emps


(id_emp,prenom,nom,mail,date_embauche,id_emploi)
VALUES (99,'Fred','Brouard','sqlpro',SYSDATE,'IT_PROG');

employees du schma hr.

UPDATE soutou.v_dept_emps
SET
date_embauche = SYSDATE
WHERE id_emp = 206;

Modification dune colonne dune ligne


dans la table employees du schma
hr.

DELETE FROM soutou.v_dept_emps


WHERE id_emp IN (150,151);

Suppression de deux lignes dans la


table employees du schma hr.

Ajout dune ligne dans la table

La premire instruction est encore un peu trange, car elle permet lajout, en passant par la
vue, dun employ qui ne repassera plus par la suite le filtre de la vue (linformation du dpartement dappartenance est manquante).

Critres de mises jour

Les conditions qui rgissent ces limitations sont les suivantes.


Une vue multitable est modifiable (updatable join view ou modifiable join view) si la requte
de dfinition ne contient pas loption WITH READ ONLY et la mise jour (INSERT, UPDATE,
DELETE) naffecte quune seule table.
Seuls des enregistrements de la table protge peuvent tre insrs (si la clause WITH
CHECK OPTION est utilise, aucune insertion ne sera possible).
Seules les colonnes de la table protge peuvent tre modifies.
Seuls les enregistrements de la table protge peuvent tre supprims.

Les vues peuvent galement servir assurer la confidentialit, simplifier lcriture de requtes
complexes, implmenter lintgrit rfrentielle et dnormaliser.

Confidentialit
La confidentialit reste une des vocations premires des vues. En plus de renommer ou de
masquer des colonnes, il est possible de restreindre laccs des donnes dune manire temporelle. La vue suivante restreint les accs une table dun point de vue temporel.

ditions Eyrolles

Livre SOUTOU.indb 207

207

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-13: Vue monotable restreinte dans le temps


Dfinition de la vue

Rsultat

CREATE VIEW soutou.v_employes_JO


(id_emp, prenom, nom, mail,
date_embauche, id_emploi,
salaire, bonus, id_manager, n_dept)
AS SELECT employee_id, first_name,
last_name, email, hire_date,
job_id, salary, commission_pct,
manager_id, department_id
FROM
hr.employees
WHERE
TO_CHAR(SYSDATE,'D') BETWEEN 2 AND 6
AND
TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))
BETWEEN 8 AND 17
WITH CHECK OPTION;

Restriction en lecture et criture (du fait de la


directive WITH CHECK OPTION), sur la table
employees du schma hr, des jours ouvrables
de 8 17h.

Il est possible de restreindre davantage les accs un utilisateur particulier en utilisant les
mcanismes de transmission ou de rvocation de privilges. Il est par ailleurs toujours prfrable quun utilisateur transmette des droits sur ses donnes en utilisant des vues.
Les privilges objet (en opposition aux privilges systme comme pouvoir dmarrer la base,
crer un schma, etc.) quil est possible dattribuer sur une vue sont les mmes que ceux qui sont
applicables sur une table ( savoir SELECT et UPDATE sur des colonnes, INSERT et DELETE).
Tableau 4-14: Privilges sur les vues
Attribution du privilge

Signification

GRANT SELECT ON soutou.v_employes_JO


TO PUBLIC;

Accs pour tous (sous rserve dun jour ouvr) en lecture


sur la vue v_employes_JO du schma soutou.

GRANT INSERT ON soutou.v_employes_JO


TO celine;

Accs en criture sur la vue v_employes_JO du schma


soutou lutilisateur celine.

GRANT UPDATE (mail,salaire)


ON soutou.v_employes_JO
TO paul;

Modification possible de le-mail et du salaire sur la vue v_


employes_JO du schma soutou pour lutilisateur paul.

Simplification de requtes
Considrons la table jobs qui appartient aussi au schma hr dOracle. Une partie des donnes
est prsente ci-aprs.

208

Livre SOUTOU.indb 208

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Figure 4-3. Table jobs

La requte simplifier est celle qui doit extraire, pour chaque dpartement, la masse salariale
mdiane de chaque dpartement en fonction des types demplois. Par exemple, le dpartement 90 est compos dun employ de type AD_PRES et de deux employs de type AD_VP. Le
montant calcul pour ce dpartement doit tre gal : 1(4000020080)+2(30000
15000)=49920.

Figure 4-4. Rsultat attendu

Construisons les vues ncessaires pour simplifier cette requte. La premire vue groupe les
effectifs de chaque dpartement par type demploi.

ditions Eyrolles

Livre SOUTOU.indb 209

209

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-14: Calcul des effectifs


Vue monotable

Rsultat

CREATE VIEW soutou.v_job_emps


(n_dept, id_emploi, effectif)
AS SELECT department_id, job_id,
COUNT(employee_id)
FROM
hr.employees
WHERE
department_id IS NOT NULL
GROUP BY department_id, job_id
ORDER BY 1;

SQL> SELECT n_dept, id_emploi, effectif


FROM
soutou.v_job_emps;
N_DEPT
---------10
20
20
30
30
40
50
50
50
60
70
80
80
90
90
100
100
110
110

ID_EMPLOI
EFFECTIF
---------------------1
AD_ASST
MK_MAN
1
MK_REP
1
PU_CLERK
5
PU_MAN
1
HR_REP
1
20
SH_CLERK
ST_CLERK
20
ST_MAN
5
IT_PROG
5
PR_REP
1
SA_MAN
5
SA_REP
29
AD_PRES
1
AD_VP
2
FI_ACCOUNT
5
1
FI_MGR
AC_ACCOUNT
1
AC_MGR
1

La deuxime vue joint ces effectifs pour extraire le salaire mdian de chaque type demploi. Il
sagit ici dune vue complexe interrogeant conjointement une table et une autre vue.
Tableau 4-15: Jointure avec les salaires mdians
Vue complexe dune vue

Rsultat

CREATE VIEW soutou.v_v_job_emps


(n_dept, id_emploi, effectif, montant)
AS SELECT v_j.n_dept, v_j.id_emploi,
effectif,
(j.max_salary-j.min_salary)
FROM
soutou.v_job_emps v_j, hr.jobs j
WHERE
v_j.id_emploi = j.job_id
ORDER BY 1;

SQL> SELECT n_dept, id_emploi, effectif, montant


FROM
soutou.v_v_job_emps;

210

Livre SOUTOU.indb 210

EFFECTIF
MONTANT
N_DEPTID_EMPLOI
---------- ---------- ----------- ----------10 AD_ASST
1
3000
1
6000
20 MK_MAN
20 MK_REP
1
5000

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Vue complexe dune vue (suite)

Rsultat (suite)
N_DEPT
---------30
30
40
50
50
50
60
70
80
80
90
90
100
100
110
110

ID_EMPLOI
EFFECTIF
MONTANT
---------- ------------ ----------PU_CLERK
5
3000
1
7000
PU_MAN
HR_REP
1
5000
20
3000
SH_CLERK
ST_CLERK
20
2992
ST_MAN
5
3000
5
6000
IT_PROG
1
6000
PR_REP
SA_MAN
5
10080
29
6008
SA_REP
AD_PRES
1
19920
2
15000
AD_VP
5
4800
FI_ACCOUNT
FI_MGR
1
7800
1
4800
AC_ACCOUNT
AC_MGR
1
7800

La troisime vue cumule le salaire mdian de chaque type demploi pour tout dpartement.
Tableau 4-16: Cumul par type demploi et dpartement
Vue complexe dune vue

Rsultat

CREATE VIEW soutou.v_v_v_emps_cumul


(n_dept, id_emploi, cumul)
AS SELECT
n_dept, id_emploi,
SUM(effectif*montant)
FROM
soutou.v_v_job_emps
GROUP BY
n_dept, id_emploi
ORDER BY 1,2;

SQL> SELECT
FROM

n_dept, id_emploi, cumul


soutou.v_v_v_emps_cumul;

CUMUL
N_DEPTID_EMPLOI
---------- ----------- ---------10 AD_ASST
3000
20 MK_MAN
6000
20 MK_REP
5000
30 PU_CLERK
15000
30 PU_MAN
7000
40 HR_REP
5000
50 SH_CLERK
60000
50 ST_CLERK
59840
50 ST_MAN
15000
60 IT_PROG
30000
70 PR_REP
6000

ditions Eyrolles

Livre SOUTOU.indb 211

211

15/02/12 07:05

UML 2 pour les bases de donnes

Vue complexe dune vue

Rsultat
N_DEPTID_EMPLOI
CUMUL
---------- ------------ --------80SA_MAN
50400
174232
80SA_REP
90 AD_PRES
19920
30000
90 AD_VP
100 FI_ACCOUNT
24000
100 FI_MGR
7800
110 AC_ACCOUNT
4800
7800
110 AC_MGR

La requte finale cumule ces sommes pour chaque dpartement. Aucune jointure nintervient
et toute la complexit est masque par les trois niveaux de vues en amont. Essayez dcrire
cette requte sans utiliser de vues intermdiaires, vous men direz des nouvelles.
Tableau 4-17: Requte simplifie
Requte sur une vue
SELECT
FROM
GROUP BY
ORDER BY

n_dept, SUM(cumul)
soutou.v_v_v_emps_cumul
n_dept
1;

Rsultat
N_DEPT SUM(CUMUL)
---------- ---------10
3000
20
11000
30
22000
40
5000
50
134840
60
30000
70
6000
80
224632
90
49920
100
31800
110
12600

Lexemple le plus classique de simplification par les vues est la prsentation de linformation par tranches Par exemple, lvolution des taux de TVA est fonction dune date
dapplication, qui rend de fait caduque lapplication du barme prcdent la date J-1
CREATE TABLE T_TVA
(TVA_TYPE
TVA_DATE_APPLICATION

212

Livre SOUTOU.indb 212

VARCHAR(32) NOT NULL,


DATE NOT NULL,

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

TVA_TAUX
FLOAT)
INSERT INTO T_TVA VALUES
('Super Rduit',
'1982-07-01', 5.50),
('Super Rduit',
'1989-01-01', NULL),
('Rduit',
('Rduit',
('Rduit',
('Rduit',
('Rduit',
('Intermdiaire',
('Intermdiaire',
('Intermdiaire',
('Intermdiaire',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',
('Normal',

'1968-01-01',
'1968-12-01',
'1970-01-01',
'1973-01-01',
'1989-01-01',
'1968-01-01',
'1968-12-01',
'1970-01-01',
'1982-07-01',
'1968-01-01',
'1968-12-01',
'1970-01-01',
'1973-01-01',
'1977-01-01',
'1982-07-01',
'1995-08-01',
'2000-04-01',

6.38),
7.53),
7.50),
7.00),
5.50),
14.92),
15.65),
17.60),
NULL),
20.00),
23.46),
23.00),
20.00),
17.60),
18.60),
20.60),
19.60),

('Major',
'1968-01-01', 25.00),
('Major',
'1968-12-01', 33.33),
('Major',
'1989-01-01', 28.00),
('Major',
'1989-09-15', 25.00),
('Major',
'1991-01-01', 22.00),
('Major',
'1993-01-01', NULL);
CREATE VIEW V_TVA AS
SELECT TVA_TYPE, TVA_DATE_APPLICATION AS TVA_DATE_DEBUT_
APPLICATION,
COALESCE((SELECT MIN(TVA_DATE_APPLICATION) - 1 DAY
FROM
T_TVA AS T2
WHERE T1.TVA_TYPE = T2.TVA_TYPE
AND T1.TVA_DATE_APPLICATION< T2.TVA_DATE_APPLICATION),
'9999-12-31')
AS TVA_DATE_FIN_APPLICATION, TVA_TAUX
FROM
T_TVA AS T1;

ditions Eyrolles

Livre SOUTOU.indb 213

213

15/02/12 07:05

UML 2 pour les bases de donnes

Et voici les donnes prsentes par cette vue.


TVA_TYPE
---------------Super Rduit
Super Rduit
Rduit
Rduit
Rduit
Rduit
Rduit
Intermdiaire
Intermdiaire
Intermdiaire
Intermdiaire
Normal
Normal
...

TVA_DATE_DEBUT_APPLICATION
---------------------------1982-07-01
1989-01-01
1968-01-01
1968-12-01
1970-01-01
1973-01-01
1989-01-01
1968-01-01
1968-12-01
1970-01-01
1982-07-01
1968-01-01
1968-12-01

TVA_DATE_FIN_APPLICATION
--------------------------1988-12-31
9999-12-31
1968-11-30
1969-12-31
1972-12-31
1988-12-31
9999-12-31
1968-11-30
1969-12-31
1982-06-30
9999-12-31
1968-11-30
1969-12-31

TVA_TAUX
-------5,5
NULL
6,38
7,53
7,5
7
5,5
14,92
15,65
17,6
NULL
20
23,46

Ce serait une norme faute que de rajouter la table une date de fin dapplication, car en cas derreur de
saisie, on pourrait se retrouver soit avec plusieurs taux diffrents pour un mme jour, soit aucun
noter: la prsence dune ligne avec un taux NULL signifie tout simplement la disparition de ce taux
de TVA!

Contrles dintgrit rfrentielle


Une vue peut contrler la validit des rfrences entre tables. En labsence du mcanisme de
cls trangres, vous pouvez programmer lintgrit rfrentielle (un autre moyen plus coteux
est dutiliser des dclencheurs).

La cohrence rfrentielle entre deux tables t1 (table parent) et t2 (table enfant) se


programme:
du parent vers lenfant par lutilisation dune vue v1 de la table t1 dfinie avec la clause NOT
EXISTS;
de lenfant vers le parent par lutilisation dune vue v2 de la table t2 dfinie avec la clause
WITH CHECK OPTION.

Considrons la table des dpartements (renomme t1 et jouant le rle de parent : CREATE


TABLE t1 AS SELECT * FROM hr.departments) et celle des employs (renomme t2
et jouant le rle de lenfant: CREATE TABLE t2 AS SELECT * FROM hr.employees).
Puisquil nexiste aucune cl trangre entre ces tables, les vues crer sont les suivantes.

214

Livre SOUTOU.indb 214

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-18: Vues crer


Code SQL

Commentaire

CREATE VIEW v1
AS SELECT * FROM t1 pere
WHERE NOT EXISTS
(SELECT employee_id
FROM t2
WHERE department_id=pere.department_id);

Vue pour assurer la cohrence du parent vers lenfant.

CREATE VIEW v2
AS SELECT * FROM t2
WHERE (department_id IN
(SELECT department_id FROM t1)
OR department_id IS NULL)
WITH CHECK OPTION;

Vue pour assurer la cohrence de lenfant vers le parent.

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.

Manipulons prsent les donnes de notre exemple par ces vues.


Tableau 4-19: Manipulations des vues pour lintgrit rfrentielle
Cohrence filspre

Cohrence prefils

Insertion correcte:

Toute insertion travers la vue v1 est possible (sous


rserve de la validit du type des colonnes et de
lexistence dautres contraintes rfrentielles).

INSERT INTO v2
(employee_id, first_name, last_name, email,
hire_date, job_id,salary, commission_pct,
manager_id, department_id )
VALUES (99,'Fred','Brouard','sqlpro',
SYSDATE,'IT_PROG',3400,0,100,90);

ditions Eyrolles

Livre SOUTOU.indb 215

Insertion correcte:
INSERT INTO v1
(department_id, department_name,
manager_id, location_id)
VALUES (800,'Eyrolles info.', 100,1700);

215

15/02/12 07:05

UML 2 pour les bases de donnes

Cohrence filspre (suite)

Cohrence prefils (suite)

Insertion incorrecte (le dpartement 999 est un parent


absent):
INSERT INTO v2
(employee_id, first_name, last_name, email,
hire_date, job_id, salary, commission_pct,
manager_id, department_id )
VALUES (98,'Fred','Comby','bezier',
SYSDATE,'IT_PROG',5400,0,100,999);
Modification correcte:
UPDATE v2
SET
department_id = 10
WHERE

employee_id=99;

Modification incorrecte (parent absent):


UPDATE v2
SET
department_id = 999
WHERE employee_id=99;

Toute suppression est possible travers la vue v2 (sous


rserve de lexistence dautres contraintes rfrentielles).

Modification correcte (le dpartement 900 na aucun


employ):
UPDATE v1
SET
department_id = 77
WHERE department_id = 900;
Modification incorrecte (enfant prsent: le dpartement
90 a des employs et le mcanisme de cascade nest
pas pris en compte):
UPDATE v1
SET
department_id = 77
WHERE department_id = 90;
Suppression correcte (enfants absents):
DELETE FROM v1
WHERE department_id = 900;
Suppression incorrecte (enfants prsents):
DELETE FROM v1
WHERE department_id = 90;

Le raisonnement sur deux tables peut se gnraliser une hirarchie dassociations ou diffrentes associations issues de la mme table.

Un avantage spectaculaire et peu connu des vues: les contraintes dynamiques


Dans une base de donnes, les contraintes sont statiques, cest--dire quelles empchent dintroduire des donnes qui ne respectent pas les rgles. Mais comment faire pour
stocker quand mme certaines donnes intermdiaires et ne prsenter aux utilisateurs
que les ensembles de donnes valides? La rponse est une vue Imaginons un gomtre
qui doit stocker dans une table ses relevs de mesure de parcelles de terrain. Voici la
table:

216

Livre SOUTOU.indb 216

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

CREATE TABLE T_PARCELLE_GEOMETRIE_PCG


(PCL_NUMERO_CADASTRAL

VARCHAR(16) NOT NULL,

PCG_NUMERO_POINT

INT NOT NULL,

PCG_LATITUDE

FLOAT NOT NULL,

PCG_LONGITUDE

FLOAT NOT NULL,

PCG_ALTITUDE

FLOAT,

CONSTRAINT PK_PCG PRIMARY KEY (PCL_NUMERO_CADASTRAL,


PCG_NUMERO_POINT));

Chacun sait quune parcelle de terrain est un polygone et quun polygone se doit davoir
au moins 3sommets. Tant que lon na pas saisi 3points, pas de polygone. Or, aucune
contrainte ne peut attendre larrive du troisime point pour valider ou invalider les
donnes. Dans ce cas, la solution rside dans la vue:
CREATE VIEW V_PARCELLE_GEOMETRIE_PCG AS
SELECT * FROM T_PARCELLE_GEOMETRIE_PCG AS P1
WHERE

EXISTS(SELECT 1
FROM

T_PARCELLE_GEOMETRIE_PCG AS P1 AS P2

WHERE

P1.PCL_NUMERO_CADASTRAL = P2.PCL_NUMERO_CADASTRAL

AND
GROUP

P1.PCG_NUMERO_POINT = P2.PCG_NUMERO_POINT
BY P2.PCG_NUMERO_CADASTRAL, P2.PCG_NUMERO_POINT
HAVING COUNT(*) >= 3);

Cette dernire ne fera apparatre que les donnes des points des parcelles pour celles
formant des polygones Mais comme on ne sait pas lavance le nombre de points dun
polygone, la manire la plus pratique est de rajouter cette information de fermeture
du polygone un niveau suprieur:
CREATE TABLE T_PARCELLE_PCL
(PCL_NUMERO_CADASTRAL
PCL_SAISIE_FINALISE

VARCHAR(16) NOT NULL PRIMARY KEY,


BOOLEAN NOT NULL DEFAULT 0);

ALTER TABLE T_PARCELLE_GEOMETRIE_PCG


ADD CONSTRAINT FK_PCG_PCL
FOREIGN KEY (PCL_NUMERO_CADASTRAL)
REFERENCES T_PARCELLE_GEOMETRIE_PCG (PCL_NUMERO_CADASTRAL);

ditions Eyrolles

Livre SOUTOU.indb 217

217

15/02/12 07:05

UML 2 pour les bases de donnes

Ds lors, lorsque le gomtre a termin sa saisie, il fait passer linformation PCL_


SAISIE_FINALISE 'true' et le polygone reprsentant la parcelle devient visible
travers la vue suivante:
CREATE VIEW V_PARCELLE_GEOMETRIE_PCG AS
SELECT * FROM T_PARCELLE_GEOMETRIE_PCG AS PCG
INNER JOIN T_PARCELLE_PCL AS PCL
ON PCL.PCL_NUMERO_CADASTRAL = PCG.PCL_NUMERO_CADASTRAL
WHERE

PCL_SAISIE_FINALISE;

Un autre exemple concerne les clients et les prospects. Un prospect nest autre quun
client qui na jamais effectu de commande. Ds lors, clients et prospects peuvent figurer
dans la mme table physique (CONTACT) ce qui simplifie beaucoup les choses. Il ny aura
qu crer deux vues modifiables, chacune delles avec toutes les colonnes de la table des
contacts, lune prsentant les donnes des prospects, lautre celle des clients, avec les
dfinitions de vues suivantes:
CREATE VIEW V_CLIENT_CLI AS
SELECT * FROM
WHERE

T_CONTACT_CTC

CTC_ID IN (SELECT CTC_ID FROM T_COMMANDE_CMD);

CREATE VIEW V_PROSPECT_PSP AS


SELECT * FROM T_CONTACT_CTC
WHERE

CTC_ID NOT IN (SELECT CTC_ID FROM T_COMMANDE_CMD);

Dnormalisation
Les vues peuvent aider dnormaliser un schma relationnel. Il est possible de crer volontairement des rsultats tabulaires qui ne respectent aucune des formes normales (de la 1re
la 5e).
Lexemple suivant ne respecte pas la deuxime forme normale. En effet, la cl tant id_emp,
la prsence de la colonne department (nom du dpartement qui dpend davantage dun code
dpartement) fait abandonner la troisime forme normale.

218

Livre SOUTOU.indb 218

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-20: Deuxime forme normale


Cration de la vue

Structure

CREATE VIEW soutou.v_dept_emps_pas3FN


(id_emp,identite,date_embauche,
ndept,departement)
AS SELECT e.employee_id,
e.first_name||' '||e.last_name,
TO_CHAR(e.hire_date,'DD/MM/YYYY'),
d.department_id,d.department_name
FROM
hr.employees e, hr.departments d
WHERE
e.department_id = d.department_id
ORDER BY e.last_name;

SQL> DESC soutou.v_dept_emps_pas3FN;


Name
Null?
Type
-------------------- --------- --------ID_EMP
NOT NULL NUMBER(6)
IDENTITE
VARCHAR2(46)
DATE_EMBAUCHE
VARCHAR2(10)
NDEPT
NOT NULL NUMBER(4)
DEPARTEMENT
NOT NULL VARCHAR2(30)

SQL> SELECT id_emp, identite, date_embauche, ndept, departement


FROM
soutou.v_dept_emps_pas3FN;
DATE_EMBAUCHE
NDEPT DEPARTEMENT
ID_EMPIDENTITE
---------- ------------------------------------------ ----------- -----------------174 Ellen Abel
11/05/2004
80 Sales
166 Sundar Ande
24/03/2008
80Sales
130 Mozhe Atkinson
30/10/2005
50 Shipping
105 David Austin
25/06/2005
60 IT
204 Hermann Baer
07/06/2002
70 Public Relations
116 Shelli Baida
24/12/2005
30 Purchasing
167 Amit Banda
21/04/2008
80 Sales
172 Elizabeth Bates
24/03/2007
80 Sales
...

Pour quitter la virtualisation, si vous rendez cette vue physiquement existante (materialized
view), vous implmentez une dnormalisation.

Lorsque lon parle de modle relationnel, ce nest pas un modle particulier que
nous nous adressons, mais lensemble des modles ncessaires la fabrication dune
base de donnes. Ainsi, comme nous lavons vu, ce fameux modle relationnel se dcline
en (dans lordre) MCD, MLD, MPD et MED. Piqre de rappel
Le modle conceptuel de donnes est le premier des modles relationnels qui doit tre
tabli. Il dcoule de lanalyse et permet de rendre compte de la smantique des donnes.

ditions Eyrolles

Livre SOUTOU.indb 219

219

15/02/12 07:05

UML 2 pour les bases de donnes

Son formalisme a t labor par Peter Chen en 1976. Il compte des entits et des associations. Ces objets peuvent tre reprsents par diffrentes notations comme la trs
franaise MERISE, la plus moderne UML2 ou encore IDF1X, ER, etc.
Le modle logique de donnes est le deuxime des modles et se trouve tre la traduction mathmatique du premier. Ce modle, labor par Frank Edgar Codd dans les
annes1970, comporte des relations (cest--dire des objets mathmatiques porteurs
dinformations) constitues dattributs dont certains, communs entre diffrentes relations, servent de liens. Il permet daffiner le modle conceptuel dun point de vue logique,
mais pas physique.
Le modle physique de donnes est le troisime des modles et dcoule directement du
second dont il nest que la traduction physique, cest--dire sur une machine SQL. Ce
modle a aussi t labor par Frank Edgar Codd, mais cest Larry Ellison, alors tout
jeune entrepreneur, qui en fait la premire implmentation sur un produit quil dnomme
Oracle V2 (version2, la premire nayant jamais exist). Selon que lon utilise Oracle,
SQL Server, DB2 ou PostgreSQL, le modle est lgrement diffrent, car il rsulte de la
capacit prendre en compte ou non tel ou tel type de donnes, telle ou telle contrainte
Il est constitu de tables et de colonnes, mais aussi de contraintes et dindex.
Le modle externe de donnes est le dernier des modles relationnels. Souvent oubli, il
permet de prsenter les informations dune manire lisible, simplifie et enrichie de faon
faciliter le travail des dveloppeurs et rendre vidente la comprhension des donnes
par les utilisateurs. Il est constitu de vues et de routines SQL: procdures, dclencheurs,
fonctions. nouveau, il a t labor par Franck Edgar Codd, dans les annes1980, au
tout dbut des premires expriences sur les SGBDR commerciaux que sont Sytme R
et Oracle. Son but est de rendre indpendante la structure physique de la base, de celle
perue au niveau du dveloppement, afin que des modifications apportes aux tables nentranent que peu deffets sur le code applicatif.
Bien que les dveloppeurs ne pensent jamais utiliser proprement le modle externe de
donnes, ils en utilisent gnralement une partie, celle consacre aux routines, force
de constater que les performances du code de traitement dun SGBDR sont sans commune mesure avec celles quils peuvent obtenir dun traitement itratif dans un langage
hte, ds que la monte en charge se fait sentir (accroissement du volume des donnes
ou de la concurrence). Il est alors dommage de constater labsence de vues, qui leur
auraient grandement facilit le travail, surtout en termes dvolution de la structure de
la base
De mme, lutilisation inconsidre des ORM (Hibernate, Symfony, Doctrine)nest
quun pis-aller de substitution au MED et possde linconvnient majeur de dgrader
singulirement les performances applicatives. En effet, il nest pas rare quun ORM
multiplie par 10 ou 20 les temps de rponse par rapport une approche procdurale
en SQL.

220

Livre SOUTOU.indb 220

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Les vues matrialises


Les vues (dmatrialises) prcdemment tudies offrent bon nombre de fonctionnalits
(notamment de simplification dcriture de requtes complexes), mais ne garantissent rien en
regard des performances. Dans le pire des cas, une vue peut tre consommatrice de ressources
si dautres vues sont impliques en cascade dans la requte.
Les vues matrialises (materialized views, anciennement appeles snapshots avec Oracle)
sont formes partir de requtes dont le rsultat est physiquement stock (comme les lignes
dune table).
La requte de dfinition dune vue matrialise peut interroger des tables, des vues et des vues
matrialises. Dans un contexte de rplication, une vue matrialise sappelle master table.
Dans un contexte de data warehouse, une vue matrialise est nomme detail table.

Figure 4-5. Vues matrialises Documentation Oracle

Les vues matrialises contribuent lamlioration des jointures du fait du stockage de lignes
prcalcules et de la possibilit de rcriture de requtes (query rewrite). De plus, il est possible dutiliser le partitionnement et lindexation sur une vue matrialise.

Rcriture de requtes
La rcriture de requtes est une technique doptimisation qui transforme une requte complexe
mise sur une table volumineuse en une requte smantiquement quivalente interrogeant la vue
matrialise. Ds quil est plus intressant dutiliser la vue matrialise parce quelle contient des
rsultats dj calculs (agrgats et jointures), toute requte est rcrite par le moteur relationnel

ditions Eyrolles

Livre SOUTOU.indb 221

221

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 4-6. Rcriture de requtes

En gnral, les vues matrialises sont bases sur la cl primaire des tables sources (ou sur la
colonne rowid). Dans un contexte dentrepts de donnes, les vues matrialises composent
gnralement des regroupements (agrgations) et des jointures.
Du fait du stockage de donnes redondantes (lignes prsentes physiquement la fois dans les
tables sources et dans la vue matrialise), des mthodes de rafrachissement (refresh) sont disponibles et peuvent tre de nature incrmentale (fast refresh) ou complte (complete refresh).
Les vues matrialises (vues indexes chez MS SQL Server) se basent le plus souvent sur
la cl primaire ou sur un identifiant interne de ligne (rowid pour Oracle) de manire
connatre la provenance des donnes.
La mise jour dune vue peut tre synchrone ou asynchrone. Dans le cas dune mise
jour synchrone, la vue et les tables sous-jacentes doivent avoir une relation univoque de
manire savoir quelle ligne est modifier dans la vue du fait des changements dans les
tables sources. En effet, la modification des donnes de la vue se fait par diffrence et
non par recalcul afin de minimiser limpact des mises jour dans les tables sources. Pour
les vues asynchrones, on peut gnralement choisir la mthode de rafrachissement des
donnes de la vue comme sa frquence. Oracle supporte les vues asynchrones, MS SQL
Server ne propose pour lheure que des vues synchrones.

Cration dune vue matrialise


Utilisons une vue matrialise pour prparer les extractions des employs appartenant aux
dpartements situs lemplacement de numro1700.

222

Livre SOUTOU.indb 222

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-21: Cration dune vue matrialise


Code SQL

Commentaire

CREATE MATERIALIZED VIEW soutou.v_mat_emps_lieu_1700


(ndept,departement,id_emp,prenom,nom,mail,
date_embauche,id_emploi,salaire,id_chef)
TABLESPACE users
BUILD IMMEDIATE
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT d.department_id, d.department_name,
e.employee_id, e.first_name, e.last_name,
e.email, e.hire_date, e.job_id, e.salary,
e.manager_id
FROM
hr.employees e, hr.departments d
WHERE
e.department_id = d.department_id
AND
d.location_id = 1700
ORDER BY 2,5;

Cration de la vue matrialise situe dans


lespace logique users.

La construction est immdiate et la vue est


ligible la rcriture de requte (ENABLE
QUERY REWRITE).

Le rafrachissement complet se produit la cration de la vue matrialise (dfinie avec BUILD


IMMEDIATE). Bien que ce procd puisse tre coteux si les volumes de donnes manipuls sont
importants, les requtes interrogeant ces tables ultrieurement seront bien plus performantes.

Figure 4-7. Vue matrialise obtenue

ditions Eyrolles

Livre SOUTOU.indb 223

223

15/02/12 07:05

UML 2 pour les bases de donnes

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

Un pari dun million de dollars


En novembre 1998, Larry Ellison, le P.-D.G. dOracle (alors la version8i), lance un
dfi Microsoft formul de la manire suivante: Si vous arrivez rendre SQL Server7
100fois plus rapide quOracle, je vous donne un million de dollars Le test porte sur
un benchmark de lorganisme indpendant TPC (http://www.tpc.org/) et en particulier
sur la requte n5 du TPC-C.
Quelques mois plus tard, Microsoft prsente sa solution, mais Larry Ellison, mauvais
joueur, sentant le vent tourner, a dcid de clore son pari de faon anticipe, sconomisant ainsi son million La solution de Microsoft tait construite autour des vues
matrialises!
http://findarticles.com/p/articles/mi_m0FOX/is_8_4/ai_54409926/
http://tutorials.beginners.co.uk/professional-sql-server-2000-programming-part-6-indexed-materialized-views.htm

Le rafrachissement
Le rafrachissement incrmental vite de reconstruire la vue matrialise entirement. Cependant, ce mcanisme doit soprer relativement rapidement ( la demande ou priodiquement)
pour garantir lintgrit des donnes. Chaque table est associe un journal doprations
(materialized view log) qui recense toutes les modifications effectues sur la table.
Dans un contexte de rplication, les vues matrialises permettent de maintenir sur une base
locale des copies de donnes distantes. Ces copies peuvent tre modifiables (sous rserve que
le SGBD le permette, avec Oracle il sagit de loption Advanced Replication).
Le rafrachissement automatique ncessite de crer un journal doprations par table interroge.
Les exemples suivants dcrivent des vues matrialises qui se mettront jour automatiquement. La premire vue (tous les employs) sera mise jour ds que la table employees sera
modifie. La deuxime (tous les dpartements) sera systmatiquement actualise tous les
lundis 15h.
Tableau 4-22: Rafrachissement automatique
Code SQL

Commentaire

CREATE MATERIALIZED VIEW LOG ON hr.employees


WITH PRIMARY KEY, ROWID;

Cration du journal des oprations.

224

Livre SOUTOU.indb 224

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Code SQL (suite)

Commentaire (suite)

CREATE MATERIALIZED VIEW soutou.v_mat_employes


REFRESH FAST ON COMMIT
WITH PRIMARY KEY
AS SELECT
employee_id, first_name, last_name,
email, hire_date, job_id,
salary, commission_pct, manager_id,
department_id
FROM hr.employees e;

Cration de la vue matrialise des employs


avec une contrainte primary key (colonne cl
primaire de la table).

CREATE MATERIALIZED VIEW LOG ON hr.departments d


WITH PRIMARY KEY, ROWID
PURGE REPEAT INTERVAL '5' DAY;

Cration du journal des oprations qui sera vid


tous les 5jours.

CREATE MATERIALIZED VIEW soutou.v_mat_


departements
REFRESH FAST
START WITH ROUND(SYSDATE + 1) + 11/24
NEXT NEXT_DAY(TRUNC(SYSDATE),'LUNDI') + 15/24
WITH PRIMARY KEY
AS SELECT department_id, department_name,
manager_id, location_id
FROM
hr.departments;

Cration de la vue matrialise des dpartements


avec une contrainte primary key (colonne cl
primaire de la table).

Rafrachissement incrmental (fast) aprs


modifications sur la table.

Rafrachissement incrmental, premire


actualisation: le lendemain 11h puis tous les
lundis 15h.

Les vues indexes ou matrialises ne sont pas la panace et doivent tre abordes avec
circonspection
Tout dabord, la vue doit tre dterministe, cest--dire toujours fournir les mmes rsultats si les tables sources ont les mmes donnes, ce qui exclut lappel des fonctions
comme celles fournissant la date et lheure courantes ou encore celles renvoyant des
donnes alatoires (RAND, GUID ou UUID).
Il existe de nombreuses restrictions lcriture de vues synchrones. Comme les lignes
originelles doivent pourvoir tre retrouves, cela exclut certains oprateurs dagrgation autres que SUM , COUNT, MAX et MIN , les jointures externes, les sous-requtes, les
valeurs non dfinies (NULL), les oprations ensemblistes (UNION , INTERSECT, EXCEPT),
loprateur DISTINCT, les fonctions de fentrage, les groupages OLAP (CUBE , ROLLUP,
GROUPING) et presque tous les oprateurs particuliers spcifiques certains SGBDR.
Lorsque la vue contient des calculs mathmatiques, il est important (mais pas impratif)
que les expressions intgrent des calculs prcis, cest--dire effectus sur des types SQL
prcision fixe, dfinie et limite. On devra alors utiliser du DECIMAL (ou NUMERIC) ou des
entiers (SMALLINT, INT, BIGINT). En effet, lemploi dun type de donnes numriques

ditions Eyrolles

Livre SOUTOU.indb 225

225

15/02/12 07:05

UML 2 pour les bases de donnes

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 (SQL3)


Prsente avec Oracle et IBM DB2, une vue objet (object view) est une vue relationnelle tendue.
Les vues objet permettent de construire dynamiquement des objets analogues aux structures
C, classes C++ ou Java. Ce procd bnficie de la technologie du cache objet ct client et
rduit ainsi le trafic rseau (donnes extraites et modifies) entre la base et le programme dapplication. Il est possible de dfinir une vue objet partir de tables (elles-mmes relationnelles
ou objet) ou de vues (relationnelles, objet ou matrialises).

Figure 4-8. Vues objet

226

Livre SOUTOU.indb 226

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Les vues objet de tables relationnelles permettent de conserver les donnes telles quelles, sans
modifier structurellement la base. Ce mcanisme est intressant, car il permettra aux programmeurs de migrer sans effet de bord vers la technologie objet. Par la suite, des mthodes
peuvent tre programmes. Ces mthodes peuvent coder des transactions tout en manipulant
des donnes tabulaires.
Dcrivons les mcanismes quOracle propose.

tapes respecter
Plusieurs tapes sont ncessaires la dfinition dune vue objet.
Utiliser un type (existant ou crer) qui formera la structure de la vue. Ce type peut inclure
des colonnes composes, rfrences, collections ou mthodes.
crire la requte de dfinition qui extrait les donnes et charge la vue dobjets.
Spcifier un identifiant (OID), valeur unique base sur un attribut cl primaire en gnral.
Cet identifiant permettra de crer une rfrence vers chaque objet de la vue (comme pour
les tables objet qui peuvent tre accessibles par rfrences).
Si la vue doit tre modifiable (updatable object view), il faudra programmer un dclencheur
INSTEAD OF.
La syntaxe simplifie de cration dune vue SQL3 est la suivante.
CREATE VIEW [nom_schma.]nom_vue
[ (alias1, alias2 ) ]
OF [schma.]nom_type
{ WITH OBJECT IDENTIFIER { DEFAULT | ( colonne [, colonne]...) }
| UNDER [nom_schma.]nom_super_vue }
AS requte_SELECT
[WITH { READ ONLY | CHECK OPTION } ];

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.

Vue contenant une collection


Dfinissons la vue v_obj_dep_emps qui caractrise lassociation entre les tables employees
et departments. En disposant la collection emps_nt dans la vue des dpartements, on peut

ditions Eyrolles

Livre SOUTOU.indb 227

227

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 4-9. Vue contenant une collection

En construisant des rsultats tabulaires incluant des collections, vous dnormalisez en de


de la premire forme normale.

Trois types sont ncessaires pour composer la structure de la vue: celui de llment de la
collection, celui de la collection elle-mme et celui du type de la vue qui contient la collection.
Tableau 4-23 : Types crer
Cration des types

Commentaire

CREATE TYPE elt_emp_t AS OBJECT


(id_emp NUMBER(6), prenom VARCHAR(20),
nom
VARCHAR(25), date_embauche DATE)
/

Type de llment de la collection.

CREATE TYPE emp_nt_t AS TABLE OF elt_emp_t


/

Type de la collection NESTED TABLE.

CREATE TYPE departement_t AS OBJECT


(n_dept
NUMBER(4), nom_dept VARCHAR(30),
id_manager NUMBER(6), lieu
NUMBER(4),
emps_nt
emp_nt_t)
/

Type de la vue.

228

Livre SOUTOU.indb 228

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Il est possible de construire dynamiquement des collections (NESTED TABLE ou VARRAY) lors
de la cration dune vue objet laide des directives CAST et MULTISET. La directive cast
convertit un rsultat dans un type (ici, la requte cre une collection qui est nomme). Si le
rsultat dune requte retourne plusieurs enregistrements, il est ncessaire dutiliser conjointement la directive multiset.
La dfinition de la vue inclut la spcification de lOID bas sur la cl primaire de la table source
(colonne department_id). La requte extrait, dans un premier temps, quatre colonnes de
la table departments. Par la suite, pour chaque enregistrement de la table employees, la
directive MULTISET construit un ensemble dlments compos de plusieurs colonnes de la
table enfant. La directive CAST nomme lensemble obtenu emps_nt, collection affecte la
dernire colonne du type de la vue.
Tableau 4-24 : Cration de la vue objet
Cration de la vue

Structure de la vue

CREATE VIEW v_obj_dept_emps OF


departement_t

SQL> DESC v_obj_dept_emps

WITH OBJECT IDENTIFIER(n_dept)


AS SELECT d.department_id,

Name

Null?

Type

----------------------- -------- -----------N_DEPT

NUMBER(4)

d.department_name,

NOM_DEPT

VARCHAR2(30)

d.manager_id, d.location_id,

ID_MANAGER

NUMBER(6)

CAST(MULTISET

LIEU

NUMBER(4)

EMPS_NT

EMP_NT_T

(SELECT e.employee_id, e.first_name,


e.last_name, e.hire_date
FROM

hr.employees e

WHERE e.department_id=d.department_id)
AS emp_nt_t
) AS emps_nt
FROM hr.departments d;

Il est possible prsent de bnficier de la jointure implicite offerte par la collection. La


requte suivante affiche la totalit de la vue.

ditions Eyrolles

Livre SOUTOU.indb 229

229

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 4-10. Interrogation 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.).

Rendre une vue modifiable


Comme les vues relationnelles, les vues objet ne sont pas toutes modifiables. Par ailleurs, toute
mise jour est possible sous rserve de prserver les contraintes de colonnes des tables sources
(non nullit, domaine de valeurs et intgrit rfrentielle).
La vue de notre exemple est modifiable au premier niveau de son corps (except la collection),
car il existe une correspondance directe avec les colonnes de la table source. Le tableau suivant
dcrit quelques mises jour, travers la vue, quil est possible de programmer directement.
Tableau 4-25: Mises jour de la vue
Mises jour

Commentaire

INSERT INTO v_obj_dept_emps


(n_dept,nom_dept,id_manager,lieu)
VALUES (77,'Eyrolles production', 200, 1800);

Insertion dun nouveau dpartement en initialisant la


collection associe emps_nt NULL.

UPDATE v_obj_dept_emps
SET
lieu
= 2400
WHERE n_dept = 30;

Modification du lieu du dpartement 30.

DELETE FROM v_obj_dept_emps


WHERE n_dept = 77;

Suppression du dpartement 77 (sous rserve des


contraintes rfrentielles existantes).

230

Livre SOUTOU.indb 230

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Pour toute mise jour quil nest pas possible dcrire directement, vous devrez programmer
un dclencheur INSTEAD OF qui se chargera de propager les nouvelles valeurs des colonnes
modifies de manire cohrente travers les tables sources.

Programmer des mthodes


Lavantage de disposer de types est de pouvoir dclarer et implmenter des mthodes afin
dencapsuler tout traitement ou instruction complexe.
Tableau 4-26: Programmation de mthodes
Code SQL

Commentaire

ALTER TYPE departement_t


ADD MEMBER FUNCTION nbre_emp RETURN NUMBER;

Dclaration de deux nouvelles mthodes: une


fonction qui comptera le nombre demploys dun
dpartement et une procdure qui ajoute un employ
un dpartement.

ALTER TYPE departement_t


ADD MEMBER PROCEDURE
ajoute_emp(id IN NUMBER, pr IN VARCHAR,
no IN VARCHAR, da IN DATE);
CREATE OR REPLACE TYPE BODY departement_t AS
MEMBER FUNCTION nbre_emp RETURN NUMBER IS
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;

ditions Eyrolles

Livre SOUTOU.indb 231

Codage des deux mthodes. Le mot-cl SELF


dsigne lobjet qui appelle la mthode.

231

15/02/12 07:05

UML 2 pour les bases de donnes

Code SQL (suite)

Commentaire (suite)

DECLARE

Appel des deux mthodes dans un bloc anonyme. Le


rsultat est le suivant:

obj departement_t;
BEGIN

Employe ajoute
Effectif pour 20 = 3

SELECT VALUE(d) INTO obj


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.

Figure 4-11. Interrogation de la vue

232

Livre SOUTOU.indb 232

Une mthode peut implmenter une transaction, car tous les mcanismes du langage procdural du SGBD sont disponibles (validation, invalidation, points de sauvegarde, curseurs et
exceptions).

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Les dclencheurs INSTEAD OF


Un dclencheur instead of permet de mettre jour une vue qui ne peut pas tre modifie directement par INSERT, UPDATE ou DELETE. Lexpression instead of est explicite: le
dclencheur programmera des actions au lieu dinsrer, de modifier ou de supprimer dans
une vue.
Ce mcanisme peut tre particulirement intressant dans un contexte de bases de donnes
rparties o une action sur la base doit tre duplique via le rseau (database links).
Les dclencheurs INSTEAD OF sont des dclencheurs ligne (option for each row), ils ne
sappliquent quaux vues relationnelles ou objet et ne font pas intervenir les directives BEFORE
et AFTER au niveau de lvnement dclencheur. La syntaxe simplifie dun dclencheur INSTEAD OF.
CREATE TRIGGER nom_declencheur
INSTEAD OF { UPDATE [OR INSERT] [OR DELETE] } ON nom_vue
[ REFERENCING NEW AS v1 OLD AS v2 ]
FOR EACH ROW
DECLARE

BEGIN

END;

Loption de contrle (WITH CHECK option) dune vue nest pas vrifie si un dclencheur
INSTEAD OF est programm sur lvnement en question (ajout, modification ou suppression). Le corps du dclencheur doit donc explicitement prendre en compte la contrainte.
linstar des dclencheurs traditionnels, il nest permis de programmer quun seul dclencheur INSTEAD OF par table.

Considrons les vues relationnelles cres dans le premier paragraphe et quil ntait pas possible de mettre jour.

Mise jour dune vue complexe


La vue suivante prsente plusieurs obstacles sa mise jour directe: sa requte de dfinition
contient des fonctions dagrgat et elle ne contient pas la cl primaire quelle filtre.

ditions Eyrolles

Livre SOUTOU.indb 233

233

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-27: Vue complexe


Structure de la vue

Contenu partiel

SQL> DESC soutou.v_dept_calculs;


Name
Null?
Type
------------------ --------- -----------DEPARTEMENT
NOT NULL VARCHAR2(30)
MANAGER
NOT NULL VARCHAR2(25)
EMPLOYES
NUMBER
NUMBER
MIN_SAL
MAX_SAL
NUMBER
MOYENNE_SAL
NUMBER

SQL> SELECT departement,manager,employes,moyenne_sal


FROM soutou.v_dept_calculs;
DEPARTEMENT
---------------Accounting
Administration
Executive
Finance
Human Resources
IT
Marketing
Public Relations
Purchasing
Sales
Shipping

MANAGER
EMPLOYES MOYENNE_SAL
------------ --------- -----------11169.4
Higgins
2
Whalen
1
4840
King
3
19333.3
Greenberg
6
8601.3
7150
Mavris
1
Hunold
5
5760
3
10450
Hartstein
Baer
1
11000
Raphaely
6
4150
Russell
34
9492.6
Fripp
45
3618.4

Permettons cette vue des insertions et modifications (il sagit de mettre jour la table
departments). En modification, seuls le nom du dpartement et celui du manager pourront tre modifis. Le dclencheur INSTEAD OF devra se charger de rechercher le code du
manager.
Tableau 4-28: Dclencheur INSTEAD OF pour la modification
Code du dclencheur

Commentaire

CREATE TRIGGER trg_update_v_dept_calculs


INSTEAD OF UPDATE ON v_dept_calculs
FOR EACH ROW
DECLARE
id_dept NUMBER(4);
id_mgr NUMBER(6);
BEGIN

Cration du dclencheur et
description de lvnement
dclencheur.

SELECT department_id INTO id_dept


FROM hr.departments
WHERE UPPER(department_name)=UPPER(:OLD.departement);

234

Livre SOUTOU.indb 234

Mmorisation du numro de
dpartement modifi.

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Code du dclencheur (suite)

Commentaire (suite)

IF NOT (:OLD.manager = :NEW.manager) THEN


SELECT employee_id INTO id_mgr
FROM hr.employees
WHERE UPPER(last_name)=UPPER(:NEW.manager);
UPDATE hr.departments SET manager_id = id_mgr
WHERE department_id = id_dept;
END IF;

Modification du manager:
recherche du numro et
modification de la table.

IF NOT (:OLD.departement = :NEW.departement) THEN


UPDATE hr.departments
SET department_name = :NEW.departement
WHERE department_id = id_dept;
END IF;

Modification du nom du
dpartement: modification de la
table.

Exception traiter si le nouveau


manager nest pas rfrenc.

EXCEPTION
WHEN NO_DATA_FOUND THEN
id_mgr := NULL;
END;

Le scnario suivant illustre deux modifications de la vue qui conduisent mettre jour la table
(la vue aussi par consquent).
Tableau 4-29: Modification dune vue complexe
Code SQL

Commentaire

SQL> UPDATE soutou.v_dept_calculs


Lemploy de nom 'Partners' remplace 'Russell' pour le
dpartement 'Sales'.
SET
manager = 'Partners'
WHERE
departement='Sales'; 1 row updated.
SQL> UPDATE soutou.v_dept_calculs
Le dpartement 'Sales' est renomm en 'Ventes'.
SET
departement='Ventes'
WHERE departement='Sales'; 1 row updated.
SQL> SELECT *
FROM hr.departments
WHERE department_name='Ventes';
SELECT departement,manager,
employes,moyenne_sal
FROM soutou.v_dept_calculs
WHERE departement='Ventes';

ditions Eyrolles

Livre SOUTOU.indb 235

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID


-------------- ---------------- ----------- ------------80 Ventes
146
2500
DEPARTEMENT MANAGER
------------ ----------Ventes
Partners

EMPLOYES MOYENNE_SAL
---------- ------------34
9492.6

235

15/02/12 07:05

UML 2 pour les bases de donnes

En insertion, le dclencheur INSTEAD OF devra se charger daffecter une valeur (unique) la


cl primaire, de rechercher le code du manager et daffecter NULL la colonne manquante de
la vue (location_id).
Tableau 4-30 : Dclencheur INSTEAD OF pour linsertion
Code du dclencheur

Commentaire

CREATE TRIGGER trg_insert_v_dept_calculs

Cration du dclencheur et
description de lvnement
dclencheur.

INSTEAD OF INSERT ON v_dept_calculs


FOR EACH ROW
DECLARE
id_dept NUMBER(4);
id_mgr

NUMBER(6);

BEGIN
SELECT MAX(department_id)+ABS(MOD(DBMS_RANDOM.RANDOM,100))
INTO id_dept FROM hr.departments;
SELECT employee_id INTO id_mgr

Gnration du numro du nouveau


dpartement.
Recherche du numro du manager.

FROM hr.employees
WHERE UPPER(last_name)=UPPER(:NEW.manager);
INSERT INTO hr.departments

Insertion du nouveau dpartement.

(department_id,department_name,manager_id,location_id)
VALUES (id_dept,:NEW.departement,id_mgr,NULL);
EXCEPTION
WHEN NO_DATA_FOUND THEN

Exception traiter si le nouveau


manager nest pas rfrenc.

id_mgr := NULL;
END;

Le scnario suivant dcrit une insertion dans la vue qui met jour la table. Les nouvelles
donnes napparaissent pas dans initialement la vue, car le dpartement est pour linstant non
pourvu demploys.

236

Livre SOUTOU.indb 236

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-31: Insertion dune vue complexe


Code SQL

Commentaire

SQL> INSERT INTO v_dept_calculs

Le nouveau dpartement Eyrolles Prod. est dirig par lemploy

Austin (numro105).

(departement,manager)
VALUES ('Eyrolles Prod.',
'Austin');
1 row created.
SQL> SELECT *
FROM

hr.departments

WHERE department_name=

DEPARTMENT_ID DEPARTMENT_NAME
MANAGER_ID LOCATION_ID
-------------- ------------------ ------------ -----------283 Eyrolles Prod.
105

'Eyrolles Prod.';

Mise jour dune vue multitable


La jointure de la vue v_dept_emps prsente un obstacle sa mise jour directe. De ce fait,
seules les donnes de la table prserve par cl sont modifiables (ici, employees).

Figure 4-12. Contenu partiel de la vue multitable

Pour modifier cette vue en insertion, le dclencheur INSTEAD OF doit insrer des informations simultanment dans les tables sources employees et departments. Si le dpartement
existe dj, il ne faut pas le recrer. Le salaire de lemploy doit tre estim puisquil nest pas
prsent dans la vue (on prend le salaire moyen pour le type demploi concern).

ditions Eyrolles

Livre SOUTOU.indb 237

237

15/02/12 07:05

UML 2 pour les bases de donnes

Tableau 4-32: Dclencheur INSTEAD OF pour linsertion dune vue multitable


Code du dclencheur

Commentaire

CREATE TRIGGER trg_insert_v_dept_emps

Cration du dclencheur et description de


lvnement dclencheur.

INSTEAD OF INSERT ON v_dept_emps


FOR EACH ROW
DECLARE
nb_dept NUMBER(1);
v_salaire NUMBER(8,2);
BEGIN

SELECT COUNT(*) INTO nb_dept

Test de lexistence du dpartement.

FROM hr.departments WHERE department_id = :NEW.ndept;


IF (nb_dept = 0) THEN
INSERT INTO hr.departments

Insertion du nouveau dpartement.

(department_id,department_name,
manager_id,location_id)
VALUES (:NEW.ndept,:NEW.departement,NULL,NULL);
END IF;
SELECT (max_salary-min_salary)/2 INTO v_salaire

Recherche du salaire moyen.

FROM hr.jobs WHERE job_id = :NEW.id_emploi;


INSERT INTO hr.employees

Insertion du nouvel employ.

(employee_id, first_name, last_name, email,


hire_date, job_id,
salary, commission_pct, manager_id, department_id)
VALUES (:NEW.id_emp,:NEW.prenom,:NEW.nom,:NEW.mail,
:NEW.date_embauche,:NEW.id_emploi,v_salaire,
NULL,NULL,:NEW.ndept);
END;

Le scnario suivant dcrit deux insertions dans la vue et la vrification des donnes dans les
tables au final.

238

Livre SOUTOU.indb 238

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-33: Insertion dune vue complexe


Code SQL

Commentaire

SQL> INSERT INTO v_dept_emps

Ajout dun nouveau dpartement et dun nouvel


employ.

(ndept, departement, id_emp, prenom, nom,


mail, date_embauche, id_emploi)
VALUES
(99,'Eyrolles Design.',999,'Fred','Brouard',
'sqlpro',SYSDATE,'IT_PROG');
1 row created.

Ajout dun nouvel employ rattach un


dpartement existant.

SQL> INSERT INTO v_dept_emps


(ndept, departement, id_emp, prenom, nom,
mail, date_embauche, id_emploi)
VALUES
(99,'Eyrolles Design.',998,'Rudi','Bruchez',
'babaluga',SYSDATE-10,'IT_PROG');
1 row created.
SQL> SELECT department_id,department_name
FROM
hr.departments
WHERE department_id = 99;
DEPARTMENT_ID DEPARTMENT_NAME
-------------- -----------------------------99 Eyrolles Design.

SQL> SELECT employee_id, first_name, last_name, salary, hire_date, job_id, department_id


FROM

hr.employees

WHERE

employee_id IN (999,998);

EMPLOYEE_ID
-----------998
999

FIRST_NAME
-----------Rudi
Fred

LAST_NAME
-------------------Bruchez
Brouard

SALARY
-------3000
3000

HIRE_DATE
---------20-OCT-11
30-OCT-11

JOB_ID
------IT_PROG
IT_PROG

DEPARTMENT_ID
-------------99
99

Mise jour de tables et vues objet


Dans le contexte objet, les dclencheurs INSTEAD OF trouvent un autre champ dactions
[SOU 08]. Ils permettent la modification de structures de donnes complexes (tables ou vues
objet) incluant des rfrences physiques (pointeurs) et des collections de type NESTED TABLE.

ditions Eyrolles

Livre SOUTOU.indb 239

239

15/02/12 07:05

UML 2 pour les bases de donnes

Avec Oracle, un dclencheur INSTEAD OF peut tre programm au niveau dune collection
NESTED TABLE dune vue objet. Ce type de dclencheur:
sexcute seulement si un lment de la collection NESTED TABLE est modifi par linstruction TABLE();
ne sexcute pas pour une mise jour globale de la collection NESTED TABLE (dans son
intgralit, il ny a pas daccs un lment en particulier).
Programmons linsertion dun lment de la collection suivante. Il sagit dajouter les nouvelles
donnes dans une table relationnelle.

Figure 4-13. Vue multitable avec collection

Dans le corps du dclencheur, il est possible davoir accs aux valeurs des donnes de la collection mise jour, mais aussi de lenregistrement qui contient la collection (parent row). Des
directives permettent de rpercuter dans la table les modifications ralises au niveau de la
collection:
ON NESTED TABLE dsigne la collection surveille (ici, emps_nt);
REFERENCING permet de renommer les pseudo-variables:NEW et:OLD;
PARENT dsigne le niveau parent de la collection (ici, dpartement).

240

Livre SOUTOU.indb 240

ditions Eyrolles

15/02/12 07:05

Chapitre 4

Le niveau externe

Tableau 4-34: Dclencheur INSTEAD OF pour linsertion dans une collection dune vue
Code du dclencheur

Commentaire

CREATE TRIGGER trg_insert_v_obj_dept_emps


INSTEAD OF INSERT
ON NESTED TABLE emps_nt OF v_obj_dept_emps
REFERENCING NEW AS emp PARENT AS dept
FOR EACH ROW
BEGIN

Cration du dclencheur et description de


lvnement dclencheur.

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
(:emp.id_emp,:emp.prenom,:emp.nom,
UPPER(SUBSTR(:emp.prenom,1,1)||:emp.nom),NULL,
:emp.date_embauche,'IT_PROG',NULL,
NULL,NULL,:dept.n_dept);
END;

Insertion du nouvel employ (e-mail


automatiquement construit, emploi affect
arbitrairement 'IT_PROG').

Le scnario suivant dcrit une insertion dans la collection de la vue et vrifie la prsence des
donnes dans la table source et dans la vue objet.
Tableau 4-35: Insertion dune vue complexe
Code SQL

Commentaire

SQL> INSERT INTO TABLE


(SELECT emps_nt FROM v_obj_dept_emps
WHERE n_dept=40) VALUES
(elt_emp_t(999,'Fred','Brouard',SYSDATE));
1 row created.

Ajout dun nouvel employ rattach au


dpartement40.

SQL> SELECT employee_id,first_name,last_name,email,


hire_date,job_id,department_id FROM hr.employees
WHERE employee_id = 999;
EMPLOYEE_ID FIRST_NAME
LAST_NAME
EMAIL
HIRE_DATE
JOB_ID
------------ ------------- ------------- ------------- ----------- ------999 Fred

Brouard

FBROUARD

31-OCT-11

DEPARTMENT_ID
--------------

IT_PROG

40

SQL> SELECT v.nom_dept,ant.id_emp,ant.prenom,ant.nom


FROM v_obj_dept_emps v, TABLE(v.emps_nt) ant
WHERE v.n_dept=40;
NOM_DEPT
ID_EMP PRENOM
---------------------------------- --------- --------------------Human Resources
999 Fred
Human Resources
203 Susan

ditions Eyrolles

Livre SOUTOU.indb 241

NOM
---------Brouard
Mavris

241

15/02/12 07:05

Livre SOUTOU.indb 242

15/02/12 07:05

Chapitre 5

Les outils du march:


delathorie la pratique
Ce chapitre finalise la dmarche thorique de cet ouvrage en comparant les outils du march
qui mettent en uvre la notation UML et la gnration de script SQL ou linterconnexion une
base de donnes, le plus souvent par un pilote ODBC ou JDBC.
Le classement que javais tabli en 2007 tait le suivant. Javais not les produits du moment en
fonction de leur qualit traduire un modle conceptuel, de leur robustesse, ergonomie, documentation et support ventuel que javais d solliciter. La coquille de lpoque concernait le
prix de PowerAMC qui en vrit tait bien plus lev que celui affich (le module objet ntait
pas pris en compte), il devait dj avoisiner les 5000euros.

Figure 5-1. Le classement de 2007

ditions Eyrolles

Livre SOUTOU.indb 243

243

15/02/12 07:05

UML 2 pour les bases de donnes

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/

MEGA Designe: http://www.mega.com/en/product/mega_designer/index.asp?l=en

Modelio: http://www.modeliosoft.com/

Objecteering: http://www.objecteering.com/

PowerAMC: http://www.sybase.fr/products/modelingdevelopment/poweramc

Rational Rose: http://www.ibm.com/

Visual Paradigm: http://www.visual-paradigm.com/product/vpuml/

WinDesign: http://www.win-design.com/fr/

Ces outils proposent tous un processus de conception bas sur les diffrents niveaux du conceptuel au physique (forward engineering), un processus de rtroconception (reverse engineering)
et un processus dinterchange (round-trip engineering) entre modles.
La partie consacre aux bases de donnes nest pas forcment prpondrante. Dautres
fonctionnalits concernent la modlisation de processus mtier BPM (Business Process
Models) qui peuvent tre imports ou exports conformment au langage BPEL4WS
(Business Process Execution Language for Web Services). Nombre dentre eux fournissent
un rfrentiel utile aux architectes des systmes dinformation qui en seront les principaux
utilisateurs. Certains outils se combinent avec Hibernate, ce qui narrange pas nos affaires
en vrit.
Ce chapitre ne se substitue videmment pas la documentation des produits, il illustre seulement certaines fonctionnalits des diteurs de logiciels. Chaque outil est valu sur la qualit
de traduction dun diagramme de classes incluant toutes sortes dassociations. La capacit de
rtroconception dune base de donnes est galement tudie.

MagicDraw
La version Architect ou Enterprise de MagicDraw prsente sur le site Web des fonctionnalits
relatives la gnration de code SQL. La version dvaluation est plus que restrictive (procdure denregistrement et multiples vrifications): nombre dobjets limits, fichiers en lecture
seule, le tout pour 27jours! Au secours!

244

Livre SOUTOU.indb 244

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-2. Environnement de travail de MagicDraw

Le clou de lessai: limpossibilit de dfinir un identifiant de classe. En cinq ans: zro progrs.
Fermez le ban!

MEGA
Loffre logicielle de la socit MEGA regroupe quatre catgories doutils pour la modlisation,
le contrle, les transformations et les outils de communication. Loutil de modlisation est ici
brivement prsent.
Pour dbuter, crez un projet, un paquetage et reliez le paquetage la base de donnes. Cette
commande nest pas active par dfaut et ncessite une action manuelle (menu Tools>Options,
dossier Compatibility>Others, cochez loption Data Package dans la partie droite de la
fentre).

Identifiants
Un clic droit sur la classe choix Attributes vous permettra de crer des attributs. Slectionnez
ensuite lidentifiant. Pour le typage, slectionnez chaque attribut par un clic droit dans lexplorateur, choix Properties, onglet Characteristics et trouvez le type adquat dans la liste
Expression Type.

ditions Eyrolles

Livre SOUTOU.indb 245

245

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-3. Identification des classes

Associations
Pour crer une classe-association, crez la classe du milieu et, laide du bouton Link, reliez
cette classe lassociation.

Figure 5-4. Associations

246

Livre SOUTOU.indb 246

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Gnration du modle relationnel


Afin de gnrer un modle logique, positionnez-vous sur votre base, dun clic droit, choisissez
Edit puis Outils (synchroniser du conceptuel au logique).

Figure 5-5. Gnration du modle relationnel

Un assistant en quatre tapes est alors lanc. Le modle relationnel est, par la suite, cr dans
le paquetage.

Figure 5-6. Modle relationnel

ditions Eyrolles

Livre SOUTOU.indb 247

247

15/02/12 07:05

UML 2 pour les bases de donnes

Gnration des tables


Pour obtenir le script SQL, positionnez-vous sur votre base, et dun clic droit, choisissez Generate puis SQL.

Figure 5-7. Gnration de la base

Rtroconception
Crez une base vide de tout diagramme, et renseignez le type du SGBD (Properties), dun clic
droit Reverse Target Database. Vous avez le choix entre slectionner une source de donnes
ODBC pralablement dfinie ou un script SQL. Pour ce dernier cas, MEGA fournit un outil
qui se connecte une base par ODBC et gnre automatiquement un fichier XML dcrivant
les tables et cls.
Afin de gnrer un modle conceptuel, vrifiez que vous avez accs au Meta Model en mode
Avanced, dans le menu Tools>Options. Un assistant en quatre tapes se lance et produit un
nouveau modle de donnes (Data Model). Dans ce modle, crez un diagramme de donnes
(clic droit New>Data Diagram) puis insrez dans ce diagramme par un glisser-dposer les
entits que vous avez obtenues aprs rtro-ingnierie.

248

Livre SOUTOU.indb 248

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-8. Rtroconception dune base

Les schmas obtenus par rtroconception sont de trs bonne qualit. Dans lexemple, seules les
agrgations devraient tre notes en tant que compositions. Les points forts de cet outil sont
la robustesse, lergonomie de loutil de synchronisation par tapes et les passerelles possibles
avec dautres outils.

Modelio
Modelio est distribu par Modeliosoft, filiale de Softeam, socit franaise. Ce produit est
bas sur larchitecture dObjecteering (prsent plus loin) et prsente une interface au look
Eclipse.
Avant tout, installez les modules Persistent Profile et SQL Designer (MDA>Installer un
module) avant de crer un projet puis, lintrieur de celui-ci, un diagramme de classes.
Chaque classe, attribut et association doivent tre dclars persistants (cochez Element Persistant dans la fentre en bas droite dans longlet Persistent).

ditions Eyrolles

Livre SOUTOU.indb 249

249

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 5-9. Identification des classes

Associations
Chaque type dassociation (classe-association, composition, etc.) dispose de son icne. Lannotation dune association vous permet de fixer les multiplicits.

250

Livre SOUTOU.indb 250

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-10. Associations

Gnration du modle relationnel


La gnration du diagramme du modle de donnes (que Modelio nomme diagramme de
classes persistantes) se ralise au niveau du projet qui contient le diagramme (clic droit puis
SQL Designer>Transformation: UML en modle de donnes).
Le problme que jai rencontr se situe ce niveau et concerne la transformation des classesassociations. Pour des questions dintgration du module SQL avec le gnrateur Hibernate
et Java, ce type de transformation nest pas encore implment. Pour contourner ce problme, il faut agir soit au niveau du modle de donnes, soit modliser chacune de vos
classes-associations en tant que classes normales. Ce nest pas satisfaisant, mais a vous
vitera un blocage.

ditions Eyrolles

Livre SOUTOU.indb 251

251

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-11. Gnration du modle de donnes

Gnration des tables


La gnration du diagramme des tables (que Modelio nomme diagramme SQL) se lance par un
clic droit sur le modle de donnes puis SQL Designer>Transformation: Modle de donnes
vers modle de tables. Vous choisirez ensuite le SGBD cible (SQL92, Oracle, MySQL ou SQL
Server).

Figure 5-12. Gnration des tables

252

Livre SOUTOU.indb 252

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

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.

Figure 5-13. Rtroconception dun script SQL

La simplicit des menus et lergonomie de cet outil sont apprciables de mme quun forum
ractif. En revanche, il manque un peu de fluidit dans la manipulation graphique des schmas.
Lexistence dun modle de donnes intermdiaire et la volont dintgrer Hibernate dans le
mme contexte entravent, mon sens, la qualit de gnration entre des modles UML et
SQL et inversement. Un autre point faible concerne lincapacit traiter automatiquement les
classes-associations.

Objecteering
Objecteering est un autre produit franais de la socit Softeam qui est un acteur majeur dans
la communaut des technologies objet et premier membre europen de lOMG.

ditions Eyrolles

Livre SOUTOU.indb 253

253

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 5-14. Identification des classes

254

Livre SOUTOU.indb 254

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Associations
En double-cliquant sur un lien dassociation, vous obtenez une fentre avec diffrents onglets,
vous pouvez nommer lassociation, les rles, les multiplicits, etc. Dcochez la case Est navigable qui ne sert rien.

Figure 5-15. Dtails des associations

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

Gnration du modle relationnel


La gnration dun schma relationnel se ralise au niveau du paquetage contenant votre
diagramme de classes (clic droit MDA Components>SQL Designer>Gnrer un modle physique).

ditions Eyrolles

Livre SOUTOU.indb 255

255

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-16. Gnration du modle relationnel

Gnration des tables


Dans la fentre Explorer, le choix MDA Components>SQL Designer>Gnrer les fichiers
SQL, au niveau du paquetage contenant le modle physique, permet de gnrer un script SQL.

Figure 5-17. Gnration de la base

Un grand nombre de points forts sont noter: rigueur de la dmarche et ergonomie la fois
sobre et puissante, documentation dtaille du module SQL Designer (principes de transformations), ractivit et efficacit du support ainsi que lexistence dun forum ddi. Les points
faibles concernent le nombre rduit de SGBD pris en compte et surtout labsence de processus
de rtroconception.

256

Livre SOUTOU.indb 256

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

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.

Figure 5-18. Environnement de travail

La fentre de gauche contient tous les dtails du diagramme de classes.

Identifiants
Pour chaque classe, vous devez dfinir un identifiant primaire. Le nom de lidentifiant importe
peu, vous navez pas le modifier. Slectionnez lattribut (ou les attributs), cliquez sur la cl et
suivez le guide

ditions Eyrolles

Livre SOUTOU.indb 257

257

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-19. Cration dun identifiant

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.

Figure 5-20. Dtails dune association

258

Livre SOUTOU.indb 258

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

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.

Figure 5-21. Dtails des liens dhritage

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

Gnration du modle relationnel


Le choix Outils/Gnrer un Modle Physique de Donnes permet de transformer le diagramme de classes en modle relationnel. Des botes de dialogue donnent accs un certain
nombre doptions, notamment choisir son SGBD et les classes traduire.

ditions Eyrolles

Livre SOUTOU.indb 259

259

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-22. Gnration du modle relationnel

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.

Figure 5-23. Modle physique des donnes

Gnration des tables


Le choix SGBD/Gnrer la base de donnes permet de transformer un schma relationnel
en script SQL ou directement en tables par une connexion ODBC au SGBD. Des botes de
dialogue donnent accs un certain nombre doptions, notamment aux relations traduire,
la forme du script SQL, etc. Un aperu du code SQL est galement prsent.

260

Livre SOUTOU.indb 260

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-24. Gnration de la base

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.

Figure 5-25. Options de rtroconception

Un modle physique des donnes est ensuite automatiquement gnr.

ditions Eyrolles

Livre SOUTOU.indb 261

261

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 5-26. Icnes du profil UML de Rational

Le profil UML de Rational concerne le niveau logique. Le concept dassociation faible


reprsente un lien entre deux tables par une cl trangre classique. Le concept dassociation
forte reprsente un lien entre deux tables par une cl trangre qui fait partie aussi de la cl
primaire (implmentation des tables dassociation, de lhritage par distinction ou des associations de composition).
Il est ncessaire dans un premier temps de crer un composant Database dans le rpertoire
Component View (clic droit Data Modeler>New>Database). Nommez la base et choisissez le
SGBD cible (Name et Target). Crez ensuite un schma dans le rpertoire Logical View (clic
droit Data Modeler>New>Schema) et associez ce schma la base de donnes. Pour crer un
paquetage: clic droit sur le compartiment Logical View, New>Package.

262

Livre SOUTOU.indb 262

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-27. Cration

Les classes du diagramme UML doivent prsenter les caractristiques suivantes:


marques Persistent (clic droit sur la classe, Open Specification, onglet Detail);
groupes dans un paquetage du compartiment Logical View. Loutil transforme un diagramme au niveau du paquetage.
Lutilisation des domaines de valeurs est ncessaire pour affecter chaque attribut le type de
colonne. Pour crer un domaine: clic droit sur Global Data Types, Data Modeler>New>Domain
Package.

Identifiants
Pour identifier une classe, vous devez marquer lattribut en tant que Part of Object Identity. Pour un identifiant compos, il faut rpter ce choix sur chaque attribut. Si aucun attribut
ne vous convient, vous pouvez laisser loutil ajouter un attribut de type ID-based column. Pour
le SGBD Oracle, le type de cette colonne est NUMBER(10).

Figure 5-28. Identification dune classe

ditions Eyrolles

Livre SOUTOU.indb 263

263

15/02/12 07:05

UML 2 pour les bases de donnes

Gnration du modle relationnel


laide de la palette, en choisissant licne de lassociation, il suffit de relier les classes entre
elles, de nommer lassociation et de prciser les multiplicits. Slectionnez le paquetage (clic
droit, Data Modeler>Transform to Data Model) puis indiquez les noms du schma et de la
base. Si aucune base nest slectionne, la transformation sera de type SQL2. Il est possible de
crer des index pour les cls trangres.

Figure 5-29. Gnration du modle relationnel

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

Figure 5-30. Modle de donnes obtenu

264

Livre SOUTOU.indb 264

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Gnration des tables


Pour gnrer le script SQL, slectionnez le schma (clic droit Data Modeler>Forward Engineer), un assistant est alors lanc dans lequel vous devrez choisir parmi diffrentes options
(chemin et nom du script SQL gnrer, cration de commentaires, de tablespaces, de directives DROP, etc.). Il est aussi possible dexcuter directement le script par une connexion au
SGBD.

Rtroconception
Vous devrez au pralable crer un paquetage vide. Le processus de rtroconception dmarre
du schma (compartiment Logical View/Schemas) slectionner par un clic droit (Data
Modeler>Transform to Object Model). Lassistant permet de slectionner le nom du paquetage en sortie ainsi que dautres options. Le fait de transformer un modle de donnes dans
un paquetage modifie les nouveaux lments du paquetage, mais ne dtruit ni ne modifie les
lments mis jour au niveau du modle de donnes.
Cet outil na pas volu depuis la premire version de cet ouvrage, ce qui prouve sa trs grande
robustesse. On peut toutefois regretter quil ninclue pas de pilotes pour les SGBD open source.

Visual Paradigm
Ldition Enterprise de Visual Paradigm dclare des fonctionnalits relatives SQL.
Jai donc tlcharg la version dvaluation qui permet lenregistrement de diagrammes
pendant dix jours. Une fois le diagramme de classes UML saisi, vous constaterez quil nest
pas possible de gnrer du code SQL directement. La version value en 2007 ne comportait
pas ni didentifiant de classes, ni dassociations n-aires. Cette version supporte maintenant
les associations n-aires sans inclure les identifiants de classes. Pile ce quil ne fallait pas
faire.
Ce quil est possible de faire pour lheure, cest gnrer un diagramme de classe partir dun
modle de type entit-relation. Trs pratique Au suivant!

ditions Eyrolles

Livre SOUTOU.indb 265

265

15/02/12 07:05

UML 2 pour les bases de donnes

Figure 5-31. Environnement de travail de Visual Paradigm

WinDesign
WinDesign est le produit de la socit Cecima base Aix-en-Provence. Il est prsent sur le
march franais depuis 1995. Dvelopp initialement pour Merise/2, la notation UML arrive
en 2002 avec la version5. Depuis, loutil est en volution constante. En 2011, la version11 est
disponible.
La gamme comprend trois modules autonomes et complmentaires, qui sarticulent autour dun
rfrentiel (Database pour la conception et le reverse des bases de donnes, Business Process
pour la modlisation des processus mtier et Object pour la modlisation UML). Vous devrez
disposer du premier et du troisime module pour traduire des diagrammes de classes en script
SQL. WinDesign est un outil facile prendre en main et son interface est trs intuitive. Le seul
problme de ce produit est quil prsente encore des lacunes de traduction dun diagramme UML
vers le modle logique. Lacunes qui sont absentes si vous utilisez la notation Merise.
Pour dbuter avec un nouveau diagramme de classes: Fichier>Nouveau>Module Objet. Cliquez sur le diagramme de classes et choisissez le langage cible Analyse. Un modle vierge
dattributs, mais contenant tous les types dassociations apparat, ainsi quune palette graphique.

266

Livre SOUTOU.indb 266

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-32. Environnement de travail de Win'Design

Identifiants
Pour chaque classe, le bouton Details permet de saisir les attributs et leurs types. Lidentifiant est cocher dans la case associe.

Figure 5-33. Cration dun identifiant

Lattribut identifiant apparat dune autre couleur que les autres.

ditions Eyrolles

Livre SOUTOU.indb 267

267

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure 5-34. Rfrentiel et palette doutils

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.

Gnration du modle relationnel


Le choix Modle>Gnrer modle logique permet de transformer le diagramme de classes en
modle relationnel. Des botes de dialogue permettent un certain nombre doptions, notamment
le choix du SGBD.

268

Livre SOUTOU.indb 268

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Figure 5-35. Gnration du modle relationnel

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.

Figure 5-36. Modle logique des donnes

ditions Eyrolles

Livre SOUTOU.indb 269

269

15/02/12 07:05

UML 2 pour les bases de donnes

Gnration des tables


Le choix Base de donnes>Gnrer script permet de transformer un schma relationnel en
script SQL. Des botes de dialogue donnent accs un certain nombre doptions, notamment
la composition du script SQL.

Figure 5-37. Gnration de la base

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.

Figure 5-38. Options de rtroconception

Un modle logique des donnes est ensuite automatiquement gnr.

270

Livre SOUTOU.indb 270

ditions Eyrolles

15/02/12 07:05

Chapitre 5

Les outils du march: delathorie la pratique

Conclusion
Lvolution dUML, dun point de vue normatif, vers les bases de donnes, ne se concrtise
toujours pas, car la RFP (Request For Proposal) nomme Information Management Metamodel propose par lOMG en 2006 est toujours au point mort. Cette spcification visait
dfinir un mtamodle incluant diffrentes sous-parties : Common Warehouse Metamodel,
UML2 Profile for Relational Data Modeling, UML2 Profile for Logical (Entity Relationship)
Data Modeling, UML2 Profile for XML Data Modeling et UML2 Profile for Record Modeling
COBOL. Cette absence de normalisation nempche personne dutiliser UML pour concevoir
une base de donnes relationnelle, la preuve, bon nombre doutils ont implment les principaux mcanismes.
En fonction des tests raliss, des manipulations relatives linstallation, la recherche de
documentations, etc. voici le classement qui nengage que moi bien sr. Sachez aussi quil
existe des forums sur http://www.developpez.net, relatifs Rational Rose et PowerAMC.
Tableau 5-1 : Et le gagnant est
Produit

diteur

Prix indicatif
()

ditions Eyrolles

Livre SOUTOU.indb 271

Version
value

PowerAMC

Sybase

6800

15.3

MEGA Designer

MEGA

3300

2009 SP5

Rational Rose Data Modeler

IBM

2100

7.0

Objecteering

Softeam

1800

6.1

WinDesign

Cecima

2980

11.0

Modelio SQL Solution

Softeam

2400

2.0

Visual Paradigm

Visual Paradigm

1400

8.3

MagicDraw

No Magic

1700

12.0

Note

271

15/02/12 07:05

Livre SOUTOU.indb 272

15/02/12 07:05

AnnexeA

Corrigs des exercices


Exercice1.1 La droute des bleus
Associations binaires
Les associations binaires les plus conformes aux 6classes du schma sont les suivantes.

Figure A-1. Classes et associations

ditions Eyrolles

Livre SOUTOU.indb 273

273

15/02/12 07:05

UML 2 pour les bases de donnes

Il est prfrable dutiliser deux associations pour modliser une rencontre entre 2quipes
quune seule association plusieurs--plusieurs.
Il est prfrable de relier Stade Ville plutt que Match Ville. Cette information est
dduite sans ambiguit par le parcours des associations derouler et lieu.

Classe-association
La classe-association Equipe_Langue permet laffichage dune mme quipe dans diffrentes langues. Le libell de lquipe dpend simultanment du code quipe et du code langue.

Figure A-2. Classe-association

Historique
La classe Historique permet didentifier (dune manire relative) une quipe et un groupe
par rapport lanne. Ainsi, lquipe numro34 couple lanne2006 se diffrencie de la
mme quipe (34) en 2010. Il en va de mme pour les groupes (A-2006 est diffrent de A-2010).
Les autres classes relies Equipe et Groupe (ici, seulement Match) nont pas subir le
mme traitement si elles ne ncessitent pas dtre identifies dune manire relative par rapport lanne de la comptition. Cest le cas pour une rencontre dont le numro na pas de

274

Livre SOUTOU.indb 274

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

smantique temporelle et qui est relie de manire non ambigu aux deux quipes qui seront
estampilles de lanne de lvnement.

Figure A-3. Historisation du premier tour

Bien que les associations sites et utiliser ne soient pas minimales (on peut les dduire
partir de tous les matchs dune anne donne), elles permettent, dune part, dviter de parcourir les matchs pour connatre les villes et les stades prvus pour chaque vnement. Dautre
part, dans des conditions initiales (aucun match nest encore jou ou prvu), elles deviennent
indispensables pour dfinir dans quelles villes et dans quels stades les rencontres auront lieu.
Une fois dfinies, elles permettent galement de vrifier la cohrence du lieu dun match ralis.

ditions Eyrolles

Livre SOUTOU.indb 275

275

15/02/12 07:05

UML 2 pour les bases de donnes

Exercice1.2 Lorganisme de formation


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.

Figure A-4. Inscriptions des stagiaires

Plannings

276

Livre SOUTOU.indb 276

Le crneau de disponibilit (jsem et hrens) dpend dsormais de la formation et plus


seulement du consultant responsable.

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Figure A-5. Un planning par formation

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.

Figure A-6. Plusieurs plannings par formations

ditions Eyrolles

Livre SOUTOU.indb 277

277

15/02/12 07:05

UML 2 pour les bases de donnes

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

Exercice1.3 Les lignes de facture


La classe-association Prod_Fact modlise que, dans toute facture, plusieurs produits peuvent
tre commands et quun produit peut se retrouver dans plusieurs factures. Chaque attribut qui
dpend dune ligne de facturation est prsent dans cette classe-association.
Au moment de la facture, chaque produit est associ un code TVA et est vendu au prix courant. Les conditions initiales (aucune facture nest mise le matin du premier jour de lexercice
comptable) imposent la prsence du prix dans la classe Produit et la ncessit de relier cette
mme classe la classe TVA.

Figure A-7. Les lignes dune facture

278

Livre SOUTOU.indb 278

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Exercice1.4 La dcomposition des n-aires


Dcomposez toute association n-aire que vous seriez tent de dfinir.

Visite des reprsentants

Un dpt qui se trouve dans une rgion est visit par plusieurs reprsentants.

Figure A-8. Visite des reprsentants

Lhistorique des visites peut se modliser laide de la classe Visite identifie par le
couple (reprsentant, jour) associ plusieurs dpts (en supposant quun reprsentant
puisse raliser diffrents dplacements le mme jour).

Figure A-9. Historique des visites des reprsentants

ditions Eyrolles

Livre SOUTOU.indb 279

279

15/02/12 07:05

UML 2 pour les bases de donnes

En reliant la classe-association la classe Vehicule, on renseigne le moyen de transport


utilis par un reprsentant le jour de sa visite un dpt.

Figure A-10. Transport des visites des reprsentants

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.

Figure A-11. Solution avec lidentification artificielle

280

Livre SOUTOU.indb 280

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

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.

Figure A-12. Les stages

Cote automobile
En ajoutant lanne au modle, on identifie une cote brute. Les autres caractristiques dun
vhicule sont associes au modle.

Figure A-13. Cote automobile

ditions Eyrolles

Livre SOUTOU.indb 281

281

15/02/12 07:05

UML 2 pour les bases de donnes

Horaires dune ligne de bus


Le couple prpondrant est (Ligne, Jour) ; il conditionne lactivit dune ligne de bus un
jour donn. tout couple, il faut associer une liste de stations (ordonnes laide de lattribut
ordre). Lidentifiant de la classe Horaire est compos des numros de la ligne, du jour, de la
station et de la position de la colonne dans le tableau.

Figure A-14. Horaires des lignes de bus

Exercice1.5 Les comptes bancaires


Associations binaires
Le propritaire de chaque compte est modlis par une association, et la date douverture du
compte est un attribut de classe. Les mandataires sont des clients particuliers (le fait quils ne
soient pas propritaires napparat pas ici; une contrainte devra tre ajoute) qui sont associs
aux comptes quils peuvent grer travers divers droits.

Figure A-15. Les comptes bancaires

282

Livre SOUTOU.indb 282

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Identification relative
La classe Calendrier modlise les dates de rendez-vous de chaque conseiller. En associant cette classe aux clients, on obtient lhistorique de chaque client. La date du dernier
rendez-vous dun client est modlise par un attribut de classe (pouvant toutefois tre
dduit). Lesproduits financiers souscrits sont modliss par une association plusieurs-plusieurs.

Figure A-16. Historique des rendez-vous

Identification artificielle
Sans utiliser une classe Virement (dote dun identifiant artificiel), il est difficile didentifier
un virement. Distinguez les actions de crdit et de dbit dun compte. Le client initiateur du
virement est modlis par une association.

ditions Eyrolles

Livre SOUTOU.indb 283

283

15/02/12 07:05

UML 2 pour les bases de donnes

Figure A-17. Virements bancaires

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.

Figure A-18. Identification dun compte bancaire

Exercice1.7 Lorganisme de formation (suite)


Compltez le diagramme de lexercice1.2 qui modlise lorganisme de formation.

284

Livre SOUTOU.indb 284

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

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.

Figure A-19. Sessions de cours

Salles
Le mmo du technicien dpend aussi de la session. Le temps de prsence de chaque technicien
dpend du jour et de la session.

Figure A-20. Configuration des salles

ditions Eyrolles

Livre SOUTOU.indb 285

285

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure A-21. Hritage des employs

Comptes bancaires
Lhritage suivant permet de spcialiser un client en un ventuel mandataire. Le fait quun
mandataire dun compte ne soit pas le propritaire dudit compte napparat pas ici ; une
contrainte doit tre ajoute.

286

Livre SOUTOU.indb 286

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Figure A-22. Hritage des clients

Exercice1.9 Les cartes grises


Le but de cet exercice est de modliser le cycle de vie dun vhicule au travers de ses diffrents
propritaires et de la rglementation.

Ancien rgime
En dissociant le certificat du vhicule, il est ais de modliser lhistorique des immatriculations successives. Certains attributs de la classe Vehicule semblent tre des identifiants
potentiels dautres classes (genre, type du vhicule, carrosserie et nergie). Il serait intressant
de dfinir ces classes et dy associer des libells.

Figure A-23. Cartes grises

ditions Eyrolles

Livre SOUTOU.indb 287

287

15/02/12 07:05

UML 2 pour les bases de donnes

Cot du cheval
La taxe fiscale dpend de la rgion et du nombre de chevaux. La composition permet didentifier (dune manire relative) une taxe par rapport une rgion.

Figure A-24. Cartes grises, cot du cheval fiscal

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.

Figure A-25. Nouvelle numrotation

288

Livre SOUTOU.indb 288

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

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.

Figure A-26. Contrles techniques

Exercice1.10 Les contraintes


Droute des bleus
Un match ne doit pas opposer une quipe avec elle-mme.
En considrant les rles domicile (sur lassociation recevoir du ct de la classe Equipe)
et exterieur (sur lassociation deplacer du ct de la classe Equipe):

ditions Eyrolles

Livre SOUTOU.indb 289

289

15/02/12 07:05

UML 2 pour les bases de donnes

context Match inv match_entre_2 :

Match.allInstances()>forAll(m |
not (m.domicile.id_equipe = m.exterieur.id_equipe))

Un match doit opposer deux quipes du mme groupe.


En considrant le rle poule (sur lassociation rattacher du ct de la classe Groupe):

context Match inv meme_groupe :

Match.allInstances()>forAll(m |
m.domicile.poule.id_groupe = m.exterieur.poule.id_groupe)

Organisme de formation
Un consultant doit proposer entre 2 et 4crneaux par semaine pour enseigner un cours.
En considrant le rle quand (sur lassociation planning du ct de la classe Creneau):

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

290

Livre SOUTOU.indb 290

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Un virement se ralise entre 2comptes distincts.


En considrant les rles reoit (sur lassociation crediter du ct de la classe Compte) et
donne (sur lassociation debiter du ct de la classe Compte):

context Virement inv virements :

Virement.allInstances()>forAll(v |
not (v.donne.id_cpte = m.reoit.id_cpte))

Un virement ncessite un crdit suffisant.


context Virement inv solde_virement :

Virement.allInstances()>forAll(v |
(v.donne.credit-v.donne.debit) >= v.montant)

Exercice1.11 La carte dembarquement


On distingue un vol catalogue dun vol rel par lexistence de 2classes distinctes. La classe
plus abstraite est identifie par un numro de vol et regroupe les caractristiques quon peut
trouver dans un catalogue. Le vol rel est identifi par le numro de vol et sa date. Un client
peut se trouver dans un vol rel et nest associ qu un seul sige.

Figure A-27. Carte dembarquement: vols catalogue

ditions Eyrolles

Livre SOUTOU.indb 291

291

15/02/12 07:05

UML 2 pour les bases de donnes

On associe plusieurs siges dun vol rel un client en transformant la classe-association


Place en classe. Lidentifiant de cette classe est compos du numro de vol, du jour et du
numro de sige.

Figure A-28. Carte dembarquement: planning annuel

Exercice1.12 Deux cafs et laddition!


Il est ncessaire de distinguer une enseigne dun restaurant. Lassociation de composition
permet de numroter les tables de 1 n pour chaque restaurant. Le jour de travail permet,
avec le code serveur, didentifier un planning et de pouvoir ensuite lassocier plusieurs
tables.

292

Livre SOUTOU.indb 292

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Figure A-29. Note de restaurant

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.

Figure A-30. Sjour en thalasso

ditions Eyrolles

Livre SOUTOU.indb 293

293

15/02/12 07:05

UML 2 pour les bases de donnes

Exercice1.14 Le centre de plonge


La classe Sortie est centrale; elle regroupe les palanques et caractrise un voyage. Lassociation de composition permet de modliser lhistorique mensuel des prix. La taxe journalire
dpend du mois et du site visit.

Figure A-31. Centre de plonge

294

Livre SOUTOU.indb 294

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Exercice1.15 Llection prsidentielle


Membres des partis
Lhistorique des parcours dun politicien est modlis par la composition qui permet dassocier
un politicien plusieurs priodes, chacune concernant un parti.

Figure A-32. Composition des partis

Rsultats des lections passes


Lidentifiant de la classe Investiture est compos du couple (anne, parti) associ un
unique candidat (des primaires ne sont pas ici prises en compte).

Figure A-33. Investiture des partis

ditions Eyrolles

Livre SOUTOU.indb 295

295

15/02/12 07:05

UML 2 pour les bases de donnes

Titre suprme
Cette solution distingue le premier du second tour par lexistence de deux associations distinctes. Les DOM-TOM peuvent tre considrs en tant que dpartement.

Figure A-34. Rsultats des lections

Exercice2.1 Les associations binaires


La particularit de ce schma est la traduction de lassociation un--un entre une compagnie
et un pilote (chef pilote). La relation parent considrer est celle qui dtient la multiplicit
minimale 1 (ici, Pilote). Ainsi, la cl trangre issue de cette association migre dans la
relation enfant (ici, Compagnie).

Figure A-35. Associations binaires

296

Livre SOUTOU.indb 296

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Exercice2.2 Lhritage et la composition


Les particularits de ce schma sont, dune part, la traduction de lhritage (de partition) et,
dautre part, la composition permettant de dfinir des couples (avion, jour). Cet hritage peut
se traduire par distinction. La composition gnre la cl trangre immat dans Jour_Vol qui
fait aussi partie de la cl primaire.

Figure A-36. Hritage et composition

Exercice2.3 Les classes-associations


La particularit de ce schma est la double association qui existe entre une classe (Employe)
et une classe-association (Ouverture). La premire de ces associations est de type un--plusieurs et gnre la migration de la colonne id_emp dans la relation enfant (ici, Ouverture)
qui devient cl trangre. La seconde association est de type plusieurs--plusieurs et induit
la cration de la relation Presence dont la cl primaire est compose des cls des relations
associes.

ditions Eyrolles

Livre SOUTOU.indb 297

297

15/02/12 07:05

UML 2 pour les bases de donnes

Figure A-37. Classes-associations (comptoirs daroport)

Exercice2.4 Traduire ou ne pas traduire?


Voici les relations dont la transformation en tables est indiscutable.

Ligne qui contient lensemble des numros et le nom des lignes; Station qui comporte
lensemble des noms des stations; Jour qui contient les 3libells Lundi Vendredi,

Samedi et Dimanche et jours fris.

Ligne_jour qui permet de connatre les jours de sortie de chaque bus sur sa ligne.

Les relations drives de ces rfrences sont les suivantes.

Ligne_Jour_Sta qui dcrit la composition en termes dordre de stations dune ligne en

fonction du jour.

Horaires qui permet de connatre les heures de passage de chaque bus, un jour donn,

sur sa ligne.
La dernire relation (Position) qui liste une srie de numros nest pas conserver en termes
de table.

298

Livre SOUTOU.indb 298

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Figure A-38. Classes-associations (ligne de bus)

Exercice2.5 La normalisation
Une cl possible de la relation initiale est le couple (tournoi, annee). Dans ce cas, la relation
est en premire forme normale, mais ne respecte pas la troisime forme normale car la date de
naissance dpend directement du joueur.
Le fait de dterminer cette dpendance directe permet de dduire la relation Joueurs. Par
ailleurs, le nom du tournoi doit tre considr comme un libell et donc tre identifi dune
manire particulire. Il est donc ncessaire de crer la relation Tournois qui doit tre associe la relation Joueurs par une association plusieurs--plusieurs. La relation Gagnants
joue ce rle.

Figure A-39. Schma normalis

ditions Eyrolles

Livre SOUTOU.indb 299

299

15/02/12 07:05

UML 2 pour les bases de donnes

Exercice3.1 La cration de tables (carte dembarquement)


Le schma relationnel simplifi est le suivant (la table Calendrier nest pas traduite ici). Les
heures et minutes ont t spares pour un meilleur contrle des donnes, et certaines cls
trangres ont t renommes (code de laroport de dpart et darrive).

Figure A-40. Schma relationnel simplifi

Le tableau suivant prsente le script de cration des tables et index.


TableauA-1 : Cration des tables et index
Script SQL

CREATE TABLE aeroport (


code_oaci
VARCHAR2(4) NOT NULL,
nom_aeroport VARCHAR2(50),
CONSTRAINT pk_aeroport
PRIMARY KEY (code_oaci));

300

Livre SOUTOU.indb 300

CREATE INDEX detient_fk ON


passager (code_fidelite ASC);
CREATE INDEX composer_fk ON place
(num_vol asc, jour_mois ASC);

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Script SQL (suite)

CREATE TABLE carte

code_fidelite NUMBER(1) NOT NULL,


lib_fidelite

VARCHAR2(20),

CREATE INDEX reserver_fk ON place


(num_carte ASC);

CONSTRAINT pk_carte
PRIMARY KEY (code_fidelite));
CREATE TABLE passager
num_carte

NUMBER(12) NOT NULL,

code_fidelite NUMBER(1),
nom_client

VARCHAR2(40),

prenom_client VARCHAR2(40),
CONSTRAINT pk_passager
PRIMARY KEY (num_carte));
CREATE TABLE place
num_vol

CREATE INDEX depart_fk ON vol


(code_oaci_dep ASC);
CREATE INDEX arrivee_fk ON vol
(code_oaci_arr ASC);
CREATE INDEX constituer_fk ON
volreel (num_vol ASC);
CREATE INDEX planning_fk ON
planning (num_vol ASC);

VARCHAR2(8) NOT NULL,

jour_mois VARCHAR2(6) NOT NULL,


num_siege VARCHAR2(3) NOT NULL,
num_carte NUMBER(12) NOT NULL,
CONSTRAINT pk_place
PRIMARY KEY (num_vol,
jour_mois,num_siege));
CREATE TABLE vol
num_vol

(
VARCHAR2(8) NOT NULL,

code_oaci_dep VARCHAR2(4) NOT NULL,


code_oaci_arr VARCHAR2(4) NOT NULL,
heure_dep

NUMBER(2) NOT NULL,

heure_emb

NUMBER(2) NOT NULL,

heure_arriv

NUMBER(2) NOT NULL,

min_emb

NUMBER(2) NOT NULL,

min_dep

NUMBER(2) NOT NULL,

min_arr

NUMBER(2) NOT NULL,

CONSTRAINT pk_vol
PRIMARY KEY (num_vol));

ditions Eyrolles

Livre SOUTOU.indb 301

301

15/02/12 07:05

UML 2 pour les bases de donnes

Script SQL (suite)

CREATE TABLE volreel (


num_vol
VARCHAR2(8) NOT NULL,
jour_mois
VARCHAR2(6) NOT NULL,
num_porte
VARCHAR2(3),
heure_dep_reel
NUMBER(2),
heure_arr_reelle NUMBER(2),
min_dep_reel
NUMBER(2),
min_arr_reelle
NUMBER(2),
CONSTRAINT pk_volreel
PRIMARY KEY (num_vol,jour_mois));
CREATE TABLE planning (
num_vol
VARCHAR2(8) NOT NULL,
jour_mois_planning NUMBER(3) NOT NULL,
CONSTRAINT pk_planning
PRIMARY KEY (num_vol,jour_mois_planning));

Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables,
index et contraintes.
TableauA-2 : Cration des cls trangres et suppression des tables
Cls trangres

Suppression des objets

ALTER TABLE passager


ADD CONSTRAINT fk_passager_carte
FOREIGN KEY (code_fidelite)
REFERENCES carte(code_fidelite);
ALTER TABLE place
ADD CONSTRAINT fk_place_volreel
FOREIGN KEY (num_vol, jour_mois)
REFERENCES volreel(num_vol,
jour_mois);
ALTER TABLE place
ADD CONSTRAINT fk_place_pax
FOREIGN KEY(num_carte)
REFERENCES passager(num_carte);

ALTER TABLE passager


DROP CONSTRAINT fk_passager_carte;
ALTER TABLE place
DROP CONSTRAINT fk_place_volreel;
ALTER TABLE place
DROP CONSTRAINT fk_place_pax;
ALTER TABLE vol
DROP CONSTRAINT fk_vol_arrivee;
ALTER TABLE vol
DROP CONSTRAINT fk_vol_depart;
ALTER TABLE volreel
DROP CONSTRAINT fk_volreel_vol;
ALTER TABLE planning
DROP CONSTRAINT fk_planning_vol;

302

Livre SOUTOU.indb 302

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Cls trangres (suite)

Suppression des objets (suite)

ALTER TABLE vol

DROP TABLE aeroport CASCADE CONSTRAINTS;


DROP TABLE carte CASCADE CONSTRAINTS;

ADD CONSTRAINT fk_vol_arrivee


FOREIGN KEY(code_oaci_arr)

DROP INDEX detient_fk;

REFERENCES aeroport(code_oaci);

DROP TABLE passager CASCADE CONSTRAINTS;


DROP INDEX reserver_fk;

ALTER TABLE vol

DROP INDEX composer_fk;

ADD CONSTRAINT fk_vol_depart


FOREIGN KEY(code_oaci_dep)

DROP TABLE place CASCADE CONSTRAINTS;

REFERENCES aeroport(code_oaci);

DROP INDEX arrivee_fk;


DROP INDEX depart_fk;

ALTER TABLE volreel

DROP TABLE vol CASCADE CONSTRAINTS;

ADD CONSTRAINT fk_volreel_vol


FOREIGN KEY(num_vol)

DROP INDEX constituer_fk;

REFERENCES vol (num_vol);

DROP TABLE volreel CASCADE CONSTRAINTS;


DROP INDEX planning_fk;

ALTER TABLE planning


ADD CONSTRAINT fk_planning_vol
FOREIGN KEY(num_vol)

DROP TABLE planning CASCADE


CONSTRAINTS;

REFERENCES vol(num_vol);

Exercice3.2 La cration de tables (horaires de bus)


Le tableau suivant prsente le script de cration des tables et index.
TableauA-3 : Cration des tables et index
Script SQL

CREATE TABLE
id_ligne
id_jour
id_sta
position
heure
minute

ditions Eyrolles

Livre SOUTOU.indb 303

horaire (
NUMBER(2) NOT
NUMBER(1) NOT
NUMBER(3) NOT
NUMBER(2) NOT
NUMBER(2),
NUMBER(2),

NULL,
NULL,
NULL,
NULL,

CREATE INDEX horaires_fk


ON horaire (
id_ligne ASC,
id_jour ASC,
id_sta ASC);

303

15/02/12 07:05

UML 2 pour les bases de donnes

Script SQL (suite)

CONSTRAINT pk_horaire PRIMARY KEY


(id_ligne, id_jour, id_sta, position));
CREATE TABLE jour
id_jour

NUMBER(1) NOT NULL,

ON ligne_jour (id_jour ASC);


CREATE INDEX stations_fk

CONSTRAINT pk_jour PRIMARY KEY (id_jour));


id_ligne

ON ligne_jour (id_ligne ASC);


CREATE INDEX planning_annuel_fk2

lib_jour VARCHAR2(30),
CREATE TABLE ligne

CREATE INDEX planning_annuel_fk

ON ligne_jour_sta
(id_ligne ASC,id_jour ASC);

NUMBER(2) NOT NULL,

nom_ligne VARCHAR2(60),

CREATE INDEX stations_fk2

CONSTRAINT pk_ligne PRIMARY KEY (id_ligne));


CREATE TABLE ligne_jour

ON ligne_jour_sta (id_sta ASC);

id_ligne NUMBER(2) NOT NULL,


id_jour

NUMBER(1) NOT NULL,

CONSTRAINT pk_ligne_jour PRIMARY KEY


(id_ligne, id_jour));
CREATE TABLE ligne_jour_sta

id_ligne NUMBER(2) NOT NULL,


id_jour

NUMBER(1) NOT NULL,

id_sta

NUMBER(3) NOT NULL,

ordre

NUMBER(2),

CONSTRAINT pk_ligne_jour_sta PRIMARY KEY


(id_ligne, id_jour, id_sta));
CREATE TABLE station

id_sta

NUMBER(3) NOT NULL,

nom_station

VARCHAR2(25),

CONSTRAINT pk_station PRIMARY KEY(id_sta));

Le tableau suivant prsente le script de cration des cls trangres et de destruction des tables, index et
contraintes.

304

Livre SOUTOU.indb 304

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

TableauA-4 : Cration des cls trangres et suppression des tables


Cls trangres

Suppression des objets

ALTER TABLE horaire


ADD CONSTRAINT fk_horaires_ligne_jo
FOREIGN KEY (id_ligne, id_jour, id_sta)
REFERENCES ligne_jour_sta (id_ligne,
id_jour,id_sta);
ALTER TABLE ligne_jour
ADD CONSTRAINT
fk_ligne_jo_planning_jour
FOREIGN KEY (id_jour)
REFERENCES jour (id_jour);
ALTER TABLE ligne_jour
ADD CONSTRAINT
fk_ligne_jo_planning_ligne
FOREIGN KEY (id_ligne)
REFERENCES ligne (id_ligne);
ALTER TABLE ligne_jour_sta
ADD CONSTRAINT
fk_ligne_jo_stations_ligne_jo

ALTER TABLE horaire


DROP CONSTRAINT
fk_horaires_ligne_jo;
ALTER TABLE ligne_jour
DROP CONSTRAINT
fk_ligne_jo_planning_jour;
ALTER TABLE ligne_jour
DROP CONSTRAINT
fk_ligne_jo_planning_ligne;
ALTER TABLE ligne_jour_sta
DROP CONSTRAINT
fk_ligne_jo_stations_ligne_jo;
ALTER TABLE ligne_jour_sta
DROP CONSTRAINT
fk_ligne_jo_stations;
DROP INDEX horaires_fk;
DROP TABLE horaire CASCADE
CONSTRAINTS;
DROP TABLE jour CASCADE CONSTRAINTS;

FOREIGN KEY (id_ligne,id_jour)

DROP TABLE ligne CASCADE


CONSTRAINTS;

REFERENCES ligne_jour (id_ligne,


id_jour);

DROP INDEX planning_annuel_fk2;

ALTER TABLE ligne_jour_sta

DROP INDEX planning_annuel_fk;


DROP TABLE ligne_jour CASCADE
CONSTRAINTS;

ADD CONSTRAINT fk_ligne_jo_stations

DROP INDEX stations_fk2;

FOREIGN KEY (id_sta)

DROP INDEX stations_fk;

REFERENCES station (id_sta);

DROP TABLE ligne_jour_sta CASCADE


CONSTRAINTS;
DROP TABLE station CASCADE
CONSTRAINTS;

ditions Eyrolles

Livre SOUTOU.indb 305

305

15/02/12 07:05

UML 2 pour les bases de donnes

Exercice3.3 La programmation de contraintes


Carte dembarquement
Le tableau suivant prsente les contraintes programmer pour implmenter les diffrentes
rgles mtier.
TableauA-5 : Programmation des rgles mtier (carte dembarquement)
Rgles mtier

Contraintes SQL

Pour tout vol prsent au catalogue, laroport


de dpart est diffrent de celui darrive.

ALTER TABLE vol


ADD CONSTRAINT ck_vol_dep_arr
CHECK (NOT(code_oaci_arr = code_oaci_dep));

Le nom des types de cartes est unique.

ALTER TABLE carte


ADD CONSTRAINT un_lib_carte
UNIQUE (lib_fidelite);

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

ALTER TABLE vol


ADD CONSTRAINT ck_heures_min_dep_emb_arr
CHECK ((heure_dep BETWEEN 0 AND 23)
AND (heure_emb BETWEEN 0 AND 23)
AND (heure_arriv BETWEEN 0 AND 23)
AND (min_emb IN (0,15,30,45))
AND (min_dep IN (0,15,30,45))
AND (min_arr IN (0,15,30,45)));

Les heures de dpart sont infrieures dau


moins une heure celles darrive.

ALTER TABLE vol


ADD CONSTRAINT ck_dep_1h_avant_arr
CHECK ((heure_dep+min_dep/100)+1
<= (heure_arriv+min_arr/100));

Horaires des bus


Le tableau suivant prsente les contraintes programmer pour implmenter les diffrentes
rgles mtier.
TableauA-6 : Programmation des rgles mtier (lignes de bus)
Rgles mtier

Contraintes SQL

Pas plus de 3libells journaliers sont admis


(qui valent par ailleurs Lundi vendredi,
Samedi et Dimanche et jours fris).

ALTER TABLE jour


ADD CONSTRAINT nb_libelle_jour
CHECK (id_jour IN (1,2,3));

306

Livre SOUTOU.indb 306

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Rgles mtier (suite)

Contraintes SQL (suite)

Chaque ligne nest pas forcment planifie tous


les types de jours.

Lexistence de la table de rfrence ligne_jour permettra


de stocker les couples valides. Les donnes relatives aux
stations et aux horaires rfrencent en cascade cette table par
lintermdiaire de cls trangres.

Il ny a pas plus de 15stations sur un mme trajet.

ALTER TABLE ligne_jour_sta


ADD CONSTRAINT nb_stations_trajet
CHECK (ordre BETWEEN 1 AND 15);

Les horaires sont afficher sous la forme hh.min


(avec hh de 6 22 et min de 0 59).

ALTER TABLE horaire


ADD CONSTRAINT ck_format_horaires
CHECK ((heure BETWEEN 6 AND 22)
AND
(minute BETWEEN 0 AND 59));

Il ny a pas plus de 8colonnes dhoraires


afficher.

ALTER TABLE horaire


ADD CONSTRAINT nb_colonnes_horaires
CHECK (position BETWEEN 1 AND 8);

E-mails des clients et prospects


Le tableau suivant prsente les contraintes programmer pour implmenter les diffrentes
rgles mtier. La dernire rgle ne peut pas simplmenter par une contrainte de vrification,
car elle concerne des donnes de plusieurs tables. Un dclencheur Oracle est propos dans
cette solution, mais ces tests peuvent galement se programmer dans une procdure catalogue ddie.
TableauA-7 : Programmation des rgles mtier (les e-mails)
Rgles mtier

Contraintes SQL

Une adresse e-mail est unique dans


la base de donnes.

La cl primaire de la table mails (ladresse e-mail) suffit implmenter cette


rgle.

Un client nest pas un prospect, et


rciproquement.

ALTER TABLE mails


ADD CONSTRAINT ck_prospect_client
CHECK ((id_cli IS NOT NULL AND id_pros IS NULL)
OR (id_cli IS NULL AND id_pros IS NOT NULL));

Un prospect ne peut ne pas dtenir


plusieurs adresses e-mails (une
maximum).

ALTER TABLE mails


ADD CONSTRAINT un_mail_prospect
UNIQUE (id_pros);

ditions Eyrolles

Livre SOUTOU.indb 307

307

15/02/12 07:05

UML 2 pour les bases de donnes

Rgles mtier (suite)

Contraintes SQL (suite)

Un client peut dtenir au maximum


3adresses e-mails.

ALTER TABLE mails


ADD num_mail NUMBER(1,0);
ALTER TABLE mails
ADD CONSTRAINT ck_3_mails_client
CHECK (num_mail IN (1,2,3));
ALTER TABLE mails
ADD CONSTRAINT un_3_mails_client
UNIQUE (id_cli,num_mail);

Seuls les clients arrivs depuis plus


de 4ans peuvent dtenir jusqu
5adresses e-mails.

ALTER TABLE mails


DROP CONSTRAINT ck_3_mails_client;
CREATE TRIGGER tri_3_ou_5_mails_client
BEFORE INSERT OR UPDATE OF id_cli
ON mails FOR EACH ROW
DECLARE
numero INTEGER;
v_date_arrivee DATE;
BEGIN
SELECT date_arrivee INTO v_date_arrivee
FROM clients WHERE id_cli = :NEW.id_cli;
-- client depuis moins de 4 ans
IF (ADD_MONTHS(v_date_arrivee,48)>SYSDATE) THEN
IF (:NEW.num_mail > 3) THEN
RAISE_APPLICATION_ERROR
(-20001,'Le client est limit 3 mails...');
END IF;
ELSE
-- client depuis plus de 4 ans
IF (:NEW.num_mail > 5) THEN
RAISE_APPLICATION_ERROR
(-20002,'Le client est limit 5 mails...');
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- la cl trangre va faire son boulot
NULL;
END;

308

Livre SOUTOU.indb 308

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

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.

Figure A-41. Schma relationnel dnormalis

Horaires des bus


Le schma relationnel dnormalis et minimal est le suivant. Lavantage est quil fait intervenir
peu de tables. De plus, il sera de volumtrie rduite par rapport son homologue normalis du
fait de la fusion des tables concernant lordre des stations et la position des horaires.

ditions Eyrolles

Livre SOUTOU.indb 309

309

15/02/12 07:05

UML 2 pour les bases de donnes

Figure A-42. Schma relationnel dnormalis

Les inconvnients sont les suivants.


Aucun contrle possible de la cohrence des bus et des jours de sortie.
Aucun contrle possible de la cohrence de la composition des stations sur une ligne de bus
pour un jour de sortie.
Redondances au niveau de la colonne ordre (dont les valeurs vont se rpter pour tous les
horaires dun jour sur une station donne et pour toutes les lignes).

Exercice3.5 Ma psy oublie tout


Rendez-vous

310

Livre SOUTOU.indb 310

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.

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

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.

Figure A-43. Les rendez-vous des patients

Confrres et livres

ditions Eyrolles

Livre SOUTOU.indb 311

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.

311

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure A-44. Les rendez-vous de ma psy et ses prts littraires

Exercice3.6 Le planning dune cole de pilotage


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. Limmatriculation 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 lappareil 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.

312

Livre SOUTOU.indb 312

ditions Eyrolles

15/02/12 07:05

ANNEXE A

Corrigs des exercices

Figure A-45. La flotte de lcole de pilotage

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.

Figure A-46. Les acteurs de lcole de pilotage

ditions Eyrolles

Livre SOUTOU.indb 313

313

15/02/12 07:05

UML 2 pour les bases de donnes

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.

Figure A-47. Le planning de lcole de pilotage

314

Livre SOUTOU.indb 314

ditions Eyrolles

15/02/12 07:05

AnnexeB

Ressources
Webographie
Outils de gnration SQL tudis
Enterprise Architect: http://www.sparxsystems.com.au/products/ea.html
MagicDraw UML: http://www.magicdraw.com
MEGA Designer: http://www.mega.com/en/product/mega_designer/index.asp?l=en
Objecteering: http://www.objecteering.com
PowerAMC: http://www.sybase.fr/products/modelingdevelopment/poweramc
Rational Rose: http://www.ibm.com
Visual Paradigm: http://www.visual-paradigm.com/product/vpuml/
WinDesign: http://www.win-design.com/fr/

Icnes utilises dans cet ouvrage


http://www.iconarchive.com

Thorie de la normalisation de Franois de Sainte-Marie


http://fsmrel.developpez.com/basesrelationnelles/normalisation/

ditions Eyrolles

Livre SOUTOU.indb 315

315

15/02/12 07:05

UML 2 pour les bases de donnes

Cours OCL de Marianne Huchard


http://www.lirmm.fr/~huchard/Enseignement/IDM/coursOCL20.pdf

SQL de A Z par Frdric Brouard


http://sqlpro.developpez.com

Bibliographie
[AUD 09] L. Audibert, UML2: de lapprentissage la pratique, Ellipses Marketing, 2009.
[ADI 93] M. Adiba, C. Collet, Objets et Bases de donnes, le SGBD O2, Herms, 1993.
[ATK 89] M. Atkinson, F. Bancilhon, D. de Witt, K. Dittrich, D. Maier, S. Zdonik,
The Object-Oriented database manifesto, Proceedings of the Conference Deductive and
Object-Oriented DataBases, 1989.
[BOU 99] N. Boudjilda, Bases de donnes et systmes dinformations, le modle relationnel:
langages, systmes et mthodes, Dunod, 1999.
[BRO 10] F. Brouard, R. Bruchez, C. Soutou, SQL, 3e dition, Pearson Education, 2010.
[CHE 76] P. P. Chen, The Entity-Relationship Model: Towards a Unified View of Data,
ACM Transactions on Database Systems, Vol. 1, N1, 1976.
[COD 70] E. F. Codd, A Relational Model for Large Shared Data Banks, Communications
of the ACM, Vol 13, N6, 1970.
[COD 72] E. F. Codd, Further Normalization of the Data Base Relational Model, Data
Base Systems, Courant Computer Science Symposia Series 6, Prentice Hall, 1972.
[DEL 91] C. Delobel, C. Lcluse, P. Richard, Bases de donnes: des systmes relationnels
aux systmes objets, InterEditions, 1991.
[DEL 00] P. Delmal, SQL2-SQL3, Applications Oracle, De Boeck Universit, 2000.
[FAG 81] R. Fagin, A Normal Form for Relational Databases That Is Based on Domains and
Keys, ACM Transactions on Database Systems, Vol 6, N3, 1981.
[MAK 08] G. Maksay, Y. Pigneur, Modliser par lexemple, Presses polytechniques et universitaires romandes, 2008.
[MAR 94] C. Maree, G. Ledant, SQL 2 Initiation Programmation, Armand Colin, 1994.
[MOU 76] P. Moulin, J. Randon, S. Savoysky, S. Spaccapietra , H. Tardieu , M. Teboul,
Conceptual model as database design tool, Proceedings of the IFIP Working conference
on Modelling in Database Management Systems , G.M. Nijssen Ed., North-Holland, 1976.

316

Livre SOUTOU.indb 316

ditions Eyrolles

15/02/12 07:05

ANNEXE B

Ressources

[MUL 99] R. J. Muller, Database Design for Smarties, Using UML for Data Modeling,
Morgan-Kaufman, 1999.
[MUL 00] P. A. Muller, N. Gaertner, Modlisation objet avec UML, Eyrolles, 2edition,
2000.
[NAN 01] D. Nanci, B. Espinasse, B. Cohen, Ingnierie des systmes dinformation: Merise
deuxime gnration, Vuibert, 4edition, 2001.
[SOU 08] C. Soutou, Programmer Objet avec Oracle, 2edition, Vuibert, 2008.
[TAR 79] H. Tardieu, D. Nanci, D. Pascot, A Method, A Formalism and Tools for Database
Design (three years of Experimental Practice), Proceedings of the International Conference
on Entity-Relationship Approach to Systems Analysis and Design, 1979.
[VAL 87] P. Valduriez, Objets complexes dans les systmes de bases de donnes relationnels, Techniques et science informatique, Vol. 6, N5, 1987.
[WAR 03] J.Warmer, A. Kleppe, The Object Constraint Language: Getting Your Models
Ready for MDA, Addison-Wesley, 2003.

ditions Eyrolles

Livre SOUTOU.indb 317

317

15/02/12 07:05

Livre SOUTOU.indb 318

15/02/12 07:05

Index

A
abme 69
agrgat 52
agrgation 51
composition 52
modle relationnel 120
partage 52
allInstances 80
ALTER TABLE 155
AMC*Designor 257
association 20
agrgation 51
binaire 28
drive 72
hritage 58
n-aire 41
navigable 72
plusieurs--plusieurs 29
modle relationnel 117
SQL 161
qualifie 72
rflexive 34
SQL 159
un--plusieurs 29
modle relationnel 117
SQL 157

ditions Eyrolles

Livre SOUTOU.indb 319

un--un 28
modle relationnel 118, 119
SQL 158
attribut 20
atomique 66
calcul 68
modle relationnel 112
monovalu 84
multivalu 83
temporel 60

B
bag 76
base de donnes
hirarchique 2
relationnelle 4
rseau 4
BCNF 88
BUILD IMMEDIATE 223

C
cardinalit 30
cast 229
CHECK 155

319

15/02/12 07:05

UML 2 pour les bases de donnes

Chen 18
chronologie 61
classe 20, 22
classe-association 37
modle relationnel 121
rflexive 40
cl trangre 112
cl primaire 112
COBOL 2
Codd 18, 112
collection 227
composition 52
SQL 161
contraintes
OCL 76
SQL 154
CREATE TABLE 155

D
database 152
dclencheur 166
dnormalisation 180, 218
dpendance
directe 87, 133
lmentaire 85, 132
fonctionnelle 81
modle relationnel 131
multivalue 142

Index

E
ENABLE QUERY REWRITE 223
entit 20
exclusivit 79

F
FOREIGN KEY 155
forme normale
Boyce-Codd 88, 139
cinquime 89, 142
deuxime 84, 136
domaine-cl 89, 141
premire 83, 133
quatrime 89, 142
troisime 86, 138

H
hritage 58
distinction 121
modle relationnel 121
push-down 121
push-up 121
SQL 165
historisation 62

dterminant 131

identifiant 23
alternatif 28
artificiel 26
naturel 25
identification artificielle 56

disjoint 79

incomplete 79

DKNF 89

intgrit rfrentielle 214

dpendant 131

320

Livre SOUTOU.indb 320

ditions Eyrolles

15/02/12 07:05

Index

isEmpty 76
isUnique 80

K
key preserved 205

UML 2 pour les bases de donnes

O
Objecteering 253
OCL 76
oclIsKindOf 80
OID 227
OLAP 5

OLTP 5

libell 23

ordered 76

ON NESTED TABLE 240


overlapping 79

M
MagicDraw 244

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
multiplicit 30
multiset 229

R
rafrachissement 222
RAISE_APPLICATION_ERROR 167
Rational Rose 114, 262
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

ditions Eyrolles

Livre SOUTOU.indb 321

321

15/02/12 07:05

UML 2 pour les bases de donnes

Index

UNIQUE 155

schma 152
schma conceptuel 11
SELF 231
sequence 76
seq 76
snapshot 221
SQL 151
SQL2 151
SQL3 151
subsets 75
SQL 174
substantification 54

UPPER 206
user 152

V
varray 228
ventilateur 68
Visual Paradigm 265
volumtrie 144
vue
complexe 198
matrialise 221
modifiable 203
monotable 200
multitable 202
objet 226
simple 198

T
table
dassociation 117
de jointure 117
key preserved 205
Tardieu 18

totalit 79

WinDesign 53, 266

transitivit 70

WITH CHECK OPTION 198, 204, 233

type 228

WITH OBJECT IDENTIFIER 227


WITH READ ONLY 198

U
UML 5
profil 262
union 76

322

Livre SOUTOU.indb 322

X
xor 75
SQL 176

ditions Eyrolles

15/02/12 07:05

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