Documente Academic
Documente Profesional
Documente Cultură
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
L
Dans la table des matires de ce deuxime tome, les titres qui comprennent
aprs le
numro de chapitre ou de (sous-)section constituent des complments par rapport au premier
tome.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Introduction
L
1
Organisation et utilisation . . . . . . . . . . . . . .
L
2
Parcours de lecture et de travail . . . . . . . . . . .
L
3
La langue universelle des SGBD : SQL . . . . . . .
L
4
Langage textuel de requte vs. interface graphique
L
5
Conventions complmentaires . . . . . . . . . . . .
Chapitre I
15
. . . . . . . . . . . . . . . .
15
. . . . . . . . . . . . . . . .
16
. . . . . . . . . . . . . . . .
18
. . . . . . . . . . . . . . . .
19
. . . . . . . . . . . . . . . .
20
23
23
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Les bbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Les infirmires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
Les fiches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
27
Individus et caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
29
29
11
12
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
10
28
31
Chapitre II
46
46
46
46
57
Chapitre III
1
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
46
58
. . . . . . . . . .
58
. . . . . . . . . .
58
. . . . . . . . . .
63
. . . . . . . . . .
64
. . . . . . . . . .
67
68
. . . . . . . . . . . . . . . . .
71
. . . . . . . . . . . . . . . . .
71
. . . . . . . . . . . . . . . . .
71
. . . . . . . . . . . . . . . . .
74
. . . . . . . . . . . . . . . . .
77
79
82
85
88
. . . . . . . . . . . . . .
94
. . . . . . . . . . . . . .
94
. . . . . . . . . . . . . .
96
8
68
70
91
. . . . . . . . . . . . . . 102
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Chapitre IV
118
Regroupements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L
2.1
Calcul de pourcentages en connaissant leffectif de rfrence
L
2.2
Calcul de pourcentages sans connatre leffectif de rfrence
L
2.3
Regroupements temporaires . . . . . . . . . . . . . . . . . . .
. . . . . . 128
. . . . . . 132
. . . . . . 135
. . . . . . 138
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Chapitre V
202
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Chapitre VI
215
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
228
Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
L
4.1
Auto-jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
L
4.2
Semi-jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
282
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Chapitre IX
Modlisation
292
5
6
Normalisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
L
Modlisation et points de vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
L
6.1
Grain danalyse variable des donnes textuelles : du mot l nonc 296
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Chapitre X
299
3
table . . . . . . . . . . . . . . . . . . 303
. . . . . . . . . . . . . . . . . . . . . . 304
. . . . . . . . . . . . . . . . . . . . . . 307
. . . . . . . . . . . . . . . . . . . . . . 311
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Chapitre XI
. . . . . . . . . . . . . . . . . . . . . . . . 312
. . . . . . . . . . . . . . . . . . . . . . . . 312
. . . . . . . . . . . . . . . . . . . . . . . . 314
. . . . . . . . . . . . . . . . . . . . . . . . 318
. . . . . . . . . . . . . . . . . . . . . . . . 321
. . . . . . . . . . . . . . . . . . . . . . . . 322
334
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Chapitre XII
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
2
359
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
. . . . . . . . . . . . . . . . . . . . . . . . . . 374
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
2.2
2.3
Corrections manuelles
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
3.1
3.2
3.3
Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Chapitre XIII
437
2.1
Format dlimit
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
2.2
Importation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
2.3
2.4
2.5
. . . . . . . . . . . . . . . . . . . . . . . . 443
3.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . 451
6
3.3
4
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
4.2
Importation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
4.3
4.4
2
. . . . . . . . . . . . . . . . . . . . . . . . 461
4.5
4.6
5.2
5.3
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Chapitre XIV
1
492
MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
1.1
1.2
1.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
2.1
Logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
2.2
Chapitre XV
507
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
. . . . . . . . . . . . . . . . . . . . . . . . . 509
. . . . . . . . . 510
3.2
3.3
3.4
3.5
3.6
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Conclusion
L
1
Angles morts conscients . . . . . . . . . . . . . . . .
L
2
Donnes pas donnes . . . . . . . . . . . . . . . . .
L
3
Bases de donnes et schmas classificatoires . . .
L
3.1
Penser, classer, vivre . . . . . . . . . . . . . .
L
4
Les bases de donnes : un instrument pour classer
L
5
Savoir ce qui peut se dire . . . . . . . . . . . . . . .
514
. . . . . . . . . . . . . . . . 514
. . . . . . . . . . . . . . . . 514
. . . . . . . . . . . . . . . . 515
. . . . . . . . . . . . . . . . 515
. . . . . . . . . . . . . . . . 516
. . . . . . . . . . . . . . . . 516
Remerciements complts
518
Liens
520
Bibliographie
521
Glossaire : complments
527
Index
529
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
17
19
21
Table
La table
Table
en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
10
Table
11
Table
et enchssements . . . . . . . . . . . . . . . . . . . . . . . 449
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
(MySQL) . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
25
(MySQL) . . . . . . . . . . . . . . . .
27
(MySQL) . . . . . . . . . . . . . . . . . . .
27
30
34
P RMA : table
, ^ et * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
. . . . . . . . . . . . . . . . . . . . . . .
37
38
10
41
11
43
12
45
13
47
14
48
15
50
16
. . . . . . . . . . . . . . . . . . . . . . .
82
17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
18
89
19
99
20
21
22
23
(MySQL)
24
10
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
. . . . . . . . . . . . . . . . . . . . . . . . . 163
(MySQL) . . . . . . . . . . . . . . . . . . . . . . 205
58
59
60
61
. . . . . . . . . . . . . . . . . . . 206
(MySQL) . . . . . . . . . . . . . . . . . . 207
. . . . . . . . . . . . . . 209
11
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
62
63
64
65
P RMA : table
66
P RMA : table
67
68
69
70
71
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
. . . . . . . . . . . . . . . . . . . 236
72
P RMA : jointure
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
-
. . . . . . . . . . . . . . . 237
. . . . . . . . . . . . . . . . . . 244
(MySQL) . . . . . . . . . . . . . . . . . . . . . . 283
. . . . . . . . . . . . . . . . . . . . . . . . 332
12
98
99
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
. . . . . . . . . . . . . . . . . . . . . . 362
. . . . . . . . . . . . . . . . . . . . 364
. . . . . . . . . . . . . . . . . . . . . 367
. . . . . . . . . . . . . . . . 367
. . . . . . . . . . . . . . . . . . . . . . . . . . 375
. . . . . . . . . . . . 376
. . . . . . . . . . . . . . . . . . . . . . . 385
. . . . . . . . . . . . . . . . . . 388
. . . . . . . . . . . . . . . . . . . . 389
. . . . . . . . . . . . . . . . . . . . . . . . . . 395
. . . . . . . . . . . . . . . 399
. . . . . . . . . . . . . . . . . . . . . . . 400
. . . . . . . . . . . . . . 446
. . . . . . . . . . . . . . . . 447
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
. . . . . . . . . . . . . . . . . 466
. . . . . . . . . . . . . . . . . . . 467
146 E SQUE : mots en -esque partags par Frantext (Lexique) et DELA . . . . . . . . . 468
147 E SQUE : discordances Frantext (Lexique) et DELA . . . . . . . . . . . . . . . . . . 469
148 P RMA : signaltique et fiches pour bbs 2 et 3 . . . . . . . . . . . . . . . . . . . 480
149 P RMA : signaltique et fiches pour linfirmire 43 . . . . . . . . . . . . . . . . . . 485
150 Terminologies compares : informelle, relationnelle, Access. . . . . . . . . . . . . . 508
14
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
I NTRODUCTION
De manire complmentaire la table des matires, celle des figures, la liste des
tableaux qui viennent dtre fournies ainsi quau complment de glossaire et lindex qui
figurent en fin douvrage, ces premires pages indiquent dabord comment est organis le volume ( 1). partir de la figure du tome 1 assurant le lien entre les grands volets du recours
un SGBD et les chapitres, sont dtaills des parcours de lecture et de travail possibles ( 2).
Lintroduction aborde ensuite SQL, langue universelle des SGBD ( 3). Elle montre les environnements qui permettent de sen servir, graphiques ou par lignes de commande ( 4). On
trouvera au ch. XV les quivalences et diffrences entre :
les dnominations informelles, strictes, propres un logiciel donn pour les principales
notions des SGBD ;
les types dattributs disponibles en MySQL et sous Access.
Enfin, sont explicites les conventions qui se rajoutent celles du tome 1 ( 5).
1.
Organisation et utilisation
Introduction
tous les exercices du chapitre. Certains des exercices sont faisables avec uniquement lensemble des connaissances fournies depuis le dbut du tome 1 et de son parallle au tome 2.
Dautres supposent la matrise de notions dveloppes dans la suite. Sauf mention contraire,
les exercices ont deux versants, MySQL et Access, avec lindication dans lnonc comme dans
la correction des particularits propres chaque environnement.
Les complments fournis dans le tome 2 sont particulirement importants pour ce qui
concerne les quatre premiers chapitres. Ils insistent sur lextraction et le calcul dinformations.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
2.
La figure 1 p. 17, dj prsente dans le tome 1, fournit une carte dutilisation de louvrage, en indiquant les chapitres et les sections correspondant aux diffrents moments du
travail avec un SGBD.
On consultera dans tous les cas le ch XIV, consacr linstallation du SGBD choisi et
sa mise en route, ainsi qu la mise en place des trois bases de donnes fournies comme
exemples et terrain dentranement .
On se limitera, ventuellement, dans les trois tudes de cas fournies, celle dont on se
sent le plus proche ou qui parat la plus immdiatement comprhensible.
Mme si cest Access qui est choisi comme SGBD, et linterface graphique comme moyen
privilgi dinteragir avec ce SGBD, on aura soin dexaminer en parallle les requtes en SQL
(SQL Server et/ou MySQL cf. 3) : linterface graphique limite les oprations envisageables
( 4).
La pratique des bases de donnes est un apprentissage dun langage comme un autre.
ce titre, elle suppose un bain linguistique , cest--dire une lecture prcise et continue des
notations abstraites et concrtes pour les requtes. Les exercices, raliser sur machine, sont
le moyen, pour le lecteur, de tester sa comprhension des notions et de leur mise en uvre,
les solutions celui de vrifer cette comprhension voire de se confronter dautres manires
darriver au rsultat demand.
Les ch. III et IV consacrs lextraction, au tri des informations, ainsi quaux regroupements et aux oprations sur les colonnes sont fondamentaux. La comprhension des ralisations concrtes, sous Access, SQL Server et MySQL, des requtes abstraites du tome 1
doit tre complte. Les regroupements donnent accs des informations de deuxime niveau
souvent importantes, mais y recourir sans effort demande un peu de pratique.
Ltape suivante est celle de la matrise effective des jointures, partir du ch. VII, et en
sappuyant sur les rappels du ch. VI. On sappliquera en particulier bien comprendre la
notion souvent trs prcieuse de jointure externe : elle permet de saisir les dcalages entre
des tables.
La dernire tape, la plus ambitieuse, est celle de la modlisation. Le ch. IX fournit une
prsentation du problme. Les ch. XI et XII, de manire complmentaire, permettent dune
part de voir lcart entre une premire mise en base de donnes et un modle du domaine
abord et dautre part dapprendre utiliser un SGBD pour jauger et accrotre la cohrence
des informations disponibles.
Au moment jug opportun, on crera une base de donnes soi-mme, en utilisant les indications du ch. X. Lajout de nouvelles tables lune ou lautre des bases de donnes fournies,
leur enrichissement et leur modification, comme y invitent dailleurs de nombreux exercices,
16
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1 ANALYSE
2 MODLISATION
Modle Entit/Association
IX1 IX2
3 IMPLMENTATION
Une table par type dentit, une colonne par proprit dentit
Liens entre tables par identits de valeur pour certaines proprits
VI
IX3
X1
4 ENTRES
Table 1
Table 2
Table 3
Table ...
Table n
III1
III2
5 OPRATIONS
III2
a
Slectionner un
sousensemble de
lignes
Slectionner un
sousensemble de
colonnes
III4
Calculer de
nouvelles
valeurs sur
les colonnes
III6
Calculer de
nouvelles
valeurs sur
les lignes
(avec ou sans
regroupements)
Combiner
des tables
VII
IV1 IV2
f
III7
6 SORTIE
Tablersultat
(ventuellement vide)
III2
Conception
Oprations SGBD
Donnes/rsultats SGBD
17
Introduction
Cl
Introduction
constituent une tape en ce sens. On sinspirera aussi des tables et de la modlisation de chacune des trois tudes de cas. Les chapitres correspondants (I pour P RMA, V pour P HDRE,
VIII pour E SQUE) dtaillent les tables, leur structure et leur contenu.
Les chapitres non mentionns dans ces parcours possibles relvent de plusieurs catgories :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
rfrence pour ce qui concerne par exemple les diffrences et convergences entre SQL,
MySQL, SQL Server et Accss (ch. XIII) ;
oprations complmentaires, comme limport ou lexport dinformations vers ou dun
SGBD (ch. XV).
L
3.
Nous avons choisi de centrer la prsentation des SGBD autour de la norme SQL (lacronyme signifiait initialement Structured Query Language). Issu au dbut des annes soixantedix des travaux dune quipe de chercheurs dIBM, en particulier de ceux dE. F. Codd (1970),
ce langage pour SGBD a rapidement ralli les suffrages. Ltape suivante a t celle de la normalisation par lISO (International Organization for Standardization), linstitution qui fixe des
normes internationales pour faciliter les changes intellectuels, scientifiques, techniques et
conomiques entre pays. Une premire version de la norme a t publie en 1986, la suivante
en 1992. La troisime date de 1999.
Les diteurs de SGBD interprtent cependant chaque fois la norme : ils nintgrent pas
toutes ses caractristiques et ils rajoutent par ailleurs des traits non prvus. . . . [L]e concept
de norme est interprt avec beaucoup de sens potique par les diteurs de SGBD , indique
joliment Hainaut (2002, p. 28). Date (2000, p. 81) prcise juste titre : ils proposent gnralement ce que lon peut appeler un sur-ensemble dun sous-ensemble , ce que symbolise la
figure 2, p. 19 : ils ajoutent des fonctionnalits qui leur sont propres sans fournir toutes celles
que dfinit SQL. Il nen reste pas moins que SQL reprsente la lingua franca, la langue universelle, des SGBD relationnels, le standard de facto. Apprendre cette langue permet de faire
face sans difficult aux variations dialectales, un peu comme parler le franais de France, de
Belgique, de Suisse ou du Qubec permet de se faire comprendre dans toute la francophonie.
Nous utilisons deux dialectes dans cet ouvrage, MySQL dune part, SQL Server dautre
part. Access repose sur ce dernier dialecte : lutilisation de linterface correspond en effet
lengendrement dinstructions en SQL Server.
Par ailleurs, au sein dun mme dialecte, il peut y avoir de lgres variantes (lquivalent des
accents au sein dune langue), en fonction des versions du logiciel. Cest le cas pour MySQL
o certaines oprations avances sont disponibles pour les dernires versions seulement.
Pour MySQL comme pour Access et pour SQL Server, dans les mots-cls, la casse (lopposition majuscules vs. minuscules) nest pas pertinente. On peut aussi bien crire le ET logique
() dans une condition de restriction :
en MySQL et en SQL Server : AND, and, And, etc. ;
sous linterface dAccess : ET, Et, et, eT, etc.
Par souci de clart, dans les instructions MySQL, les mots-cls et oprateurs sont gnralement en majuscules.
Sous Access, linitiale dun mot-cl ou dun oprateur est gnralement majusculise automatiquement par le logiciel dans la requte SQL Server engendre partir de linterface, le
reste demeurant en minuscules.
18
Introduction
MySQL
Types de donnes (blob/text...)
Expressions rgulires
...
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SQL
4.
Relation
Restriction
Projection
Jointure
Regroupements
Tris
...
SQL Server
(Access)
Types de donnes
(boolens,
Mmo, OLE)
...
Les logiciels bureautiques (traitements de texte, tableurs, etc.) habituent interagir avec
eux via une interface graphique : des menus droulants, des botes de dialogue, etc. Un tel
environnement est disponible sous Access, par exemple, mme sil est galement possible
dcrire directement des requtes en SQL Server. Dautres logiciels utilisent prfrentiellement un langage textuel de commandes, qui emploie un vocabulaire restreint et une syntaxe
contrainte. Cest le cas de MySQL, mme si plusieurs environnements graphiques (PhpMyAdmin, MySQL-Front) sont galement disponibles. La figure 3 p. 21 montre la relation entre SQL
et le SGBD concrtement employ. Un SGBD donn emploie un dialecte dtermin de SQL,
SQL Server pour Access, et MySQL la fois pour PhpMyAdmin et MySQL-Front. Un SGBD
peut offrir une interface graphique spcifique pour formuler des requtes et il les traduit dans
le dialecte de SQL retenu. On peut en mme temps directement crire une requte dans le
dialecte de SQL prsent. Cest dailleurs gnralement ncessaire pour les requtes un peu
compliques, qui dpassent ce quil est possible dexprimer via linterface. Il est enfin possible
de disposer de MySQL sans aucune interface graphique, uniquement sous forme textuelle.
Un des inconvnients des interactions par menus est quelles remplacent lnonc de
contraintes par une suite dtapes destines obtenir le rsultat vis. Lutilisation de SQL
rebours facilite une meilleure comprhension du modle relationnel et de la logique des
oprations sous-jacentes. Par ailleurs, lengendrement dune requte en SQL partir de sa
formulation via une interface graphique est un processus de traduction o le rsultat peut
tre plus ou moins proche de loriginal, ne serait-ce quen raison du passage langlais : les
mots-cls de SQL sont en anglais. Ainsi dEst Nulle dans linterface dAccess donnera naissance
dIS NULLe dans la requte SQL Server cre, tandis que dExtracChaine([categorie ; 1 ; 1])e, qui
19
Introduction
dbouchera en
Les notations employes dans le tome 1 pour les oprations prsentes sont aussi proches
que possible de celles utilises en gnral pour les bases de donnes. Il sagit de faciliter la
fois la comprhension des mcanismes abstraits en jeu, la mise en relation de ces mcanismes
avec les oprations de lalgbre relationnelle ainsi que larticulation avec les instructions SQL
apparentes et la ralisation sous Access.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
Il est souvent possible darriver un mme rsultat par plusieurs chemins. Par exemple,
les restrictions simples peuvent tre obtenues soit par des requtes proprement parler, soit
plus simplement par des filtres ou des formulaires (chapitre III 3 p. 71). De la mme manire,
trier une table rsultat peut seffectuer lors de la formulation de la requte ou bien sur la table
rsultat par slection de colonne(s) et validation dun bouton idoine (chapitre III 7 p. 88).
Autant que possible, les alternatives sont prsentes en mme temps.
Certaines oprations sont possibles avec un SGBD, pas avec un autre. Cest particulirement le cas pour :
N OMBRE
mais qui na pas dquivalent immdiat avec Access ou SQL Server. Il faut alors ruser pour
obtenir un rsultat comparable.
La R28 p. 49 en MySQL fait largement appel N OMBRE DE VALEURS DISTINCTES. Elle est
suivie de lobtention sous Access de la mme fonctionnalit. On se reportera cette double
ralisation pour comprendre la manire dobtenir sous Access lquivalent de N OMBRE DE
VALEURS DISTINCTES .
Lquivalent Access/SQL Server de la requte R235 p. 121 fournit une autre manire de
combiner le calcul du nombre de valeurs distinctes dun attribut avec dautres rsultats.
Dans les exercices, si le problme pos demande le recours N OMBRE DE VALEURS DIS en rgle gnrale, seule la solution sous MySQL est fournie. Au lecteur de sinspirer
des R28 p. 49 et R235 p. 121 sous MySQL et de leurs quivalents Access/SQL Server pour parvenir ses fins.
L
TINCTES ,
5.
Conventions complmentaires
typographie Dans les requtes, les mots-cls de SQL, comme NULL, sont gnralement en
majuscules grasses et les identifiants propres lutilisateur (noms de tables, de colonnes,
etc.) en minuscules non accentues, le caractre soulign liant ventuellement les diffrents composants (comme dans ). Certaines commandes engendres par
Access ont simplement une initiale leurs mots-cls.
approfondissement, difficult, problme Un triangle en note marginale sert de signal, com- 4
me ci-contre.
20
Introduction
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
Interface pour requtes
Formulaires
Etats
...
SQL Server
PhpMyAdmin
Interface pour requtes
Reprsentation PDF
de la base
Exports
...
MySQL
MySQLFront
Interface pour requtes
...
MySQL
Cl
interface
noyau SQL
21
Introduction
glose informelle dune requte Elle est introduite par le signe dapproximation '. Elle est le
plus souvent suivie de la notation abstraite de la requte et du renvoi la page correspondante du tome 1.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
enchanements de choix Les enchanements de choix dans des menus, sous Access, sont
spars par la barre verticale. Ainsi dFichier | Ouvrire indique le choix du menu droulant associ dFichiere dans la barre de menu du haut et, au sein de ce menu, de litem
dOuvrire.
bases de donnes Les noms de certaines tables sont suffixes par , au sens doriginal. Les tables ainsi suffixes sont les tables de dpart, avant toute transformation.
Ainsi la table comporte une fiche rdige le 2e jour qui nentre
pas dans le cadre choisi pour ltude et qui est donc limine dans la version corrige de
la table : . Quand la distinction entre la base de donnes originale et sa
version modifie nest pas pertinente, le nom suffix par et le nom sans suffixe
sont employs indiffremment.
captures dcran Elles sont assorties dun numro encadr en note marginale (pour faciliter
le reprage de ce numro) comme dans lexemple ci-dessous. Cet numro encadr sert
de rfrence. Par exemple, 1 renvoie la capture dcran ci-dessous.
Sous Acrobat Reader, en mode visualisation lcran, pour que les captures dcran
4
soient plus lisibles, on peut changer la rsolution (passer par exemple 125% voire
150% la taille relle).
renvois aux requtes abstraites Les ralisations concrtes en MySQL ou sous Access des
notations abstraites du tome 1 sont assorties dun renvoi prcis au numro et la page
des requtes concernes dans la partie papier. Les notations abstraites sont dailleurs
souvent redonnes avant leur ralisation concrte pour faciliter le va-et-vient entre ralisation et abstraction. Il en va de mme dans les solutions des exercices.
1
22
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE I
La structure des tables de la base P RMA est donne pour MySQL. Les instructions de
cration sont dtailles pour la tacble ( 5). Les catgories employes pour les mots
sont expliques ( 7) et exemplifies ( 12). Un certain nombre de tables supplmentaires
servant mmoriser diffrentes versions du texte des fiches sont prsentes ( 10). Est fourni
enfin le glossaire rdig par lquipe mdicale ( 11).
On se reportera au ch. XV 3 pour le dtail des types de donnes offerts par MySQL et
Access pour les attributs des tables.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Type 2
int(11)
varchar(50)
varchar(50)
varchar(50)
int(11)
decimal(4,2)
int(11)
int(11)
date
int(11)
int(11)
int(11)
int(11)
int(11)
varchar(50)
varchar(50)
varchar(50)
varchar(50)
Null 3
Key4
PRI
(MySQL)
Default 5
0
Extra 6
0
0.00
0
0
2000-01-01
0
0
0
0
0
YES
YES
YES
YES
type (col.2 ) ;
possibilit ou non de recevoir la marque NULL (col.3 ) ;
(partie de) cl primaire ou non (col.4 ) ;
valeur par dfaut (col.5 ) ;
autres proprits (col.6 ).
Dans les descriptions de la structure des tables, la cl primaire est en gras pour faciliter son
4
identification. Cest le cas ici de lattribut .
Access
5. Les infirmires
Indexer un attribut (chapitre X, 5 p. 322) signifie disposer de laccs le plus rapide
possible ses valeurs. On distingue indexation avec et sans doublons. Lindexation sans
doublons nest possible que pour un attribut ou une combinaison dattributs dont les valeurs
sont toutes distinctes. Cest le cas par dfinition de la cl primaire dune table.
On indexera systmatiquement lattribut ou la combinaison dattributs constituant la cl
primaire ainsi que les attributs qui entrent dans les cls trangres. Cls primaires et cls
trangres sont mobilises dans les jointures : un accs efficace leurs valeurs est crucial.
MySQL
On comparera les instructions de cration de la table concernant les infirmires avec les
renseignements que fournit lappel DESCRIBE (tableau 2 p. 25).
24
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Field
id
age
etudes
diplome
anciennete
service
Type
int(11)
int(11)
int(11)
varchar(50)
decimal(4,2)
varchar(50)
Null
Key
PRI
Default
0
0
0
(MySQL)
Extra
0.00
YES
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
En 1 figure la structure de la table
.
La colonne dDescriptione quand on cre ou que lon modifie une table permet dindiquer
de manire informelle pour chaque attribut (champ dans la terminologie Access) son rle, les
valeurs quil peut prendre, etc. On saisira cette opportunit de documenter la table.
La fentre dProprits du champe permet dajouter des contraintes dattribut : valeur par
dfaut, NULL interdit ou non, restrictions sur les valeurs admissibles via dValide sie (dans le
cas prsent, la valeur de lidentifiant doit tre comprise entre 1 et 99 inclus). La ligne dIndexe
indique dans le cas prsent que lattribut
est index, ce qui acclrera les recherches et
les jointures. Cest une indexation sans doublons : une cl primaire permet de distinguer les
lignes dune table, elle ne peut exister en double.
6. Les fiches
MySQL
La structure de la table
Dans la description de la structure des tables, les cls trangres sont en italiques pour
faciliter leur reprage. Cest ici le cas d
et d qui permettent des jointures
et .
avec respectivement les tables
Le type MEDIUMBLOB permet de stocker une longue chane de caractres, allant de 0
16 777 215 caractres.
Si lattribut texte relevait du type MEDIUMTEXT, la requte :
26
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Type
int(11)
int(11)
int(11)
decimal(4,2)
int(11)
varchar(50)
varchar(50)
varchar(50)
int(11)
varchar(50)
varchar(50)
varchar(50)
varchar(50)
varchar(50)
varchar(50)
mediumblob
Null
Key
PRI
YES
Type
int(11)
int(11)
varchar(50) binary
varchar(100) binary
varchar(100) binary
varchar(100)
(MySQL)
Default
0
0
0
0.00
0
Extra
Null
Key
PRI
(MySQL)
Default
0
0
Extra
texte REGEXP bb
rapatrierait aussi bien les fiches dont le texte contient la chane bb que celles qui contiennent
Bb ou BB. Ce type est indiffrent la casse pour les oprations de tri ou de comparaison
de chanes, la diffrence de MEDIUMBLOB.
MySQL pour les diffrents types de chanes de caractres dispose chaque fois de deux variantes, lune sensible la casse dans les oprations de tri et de comparaison de chanes,
lautre pas. Pour les types CHAR et VARCHAR, le choix dune sensibilit la casse sobtient
en ajoutant le mot-cl BINARY dans les proprits de lattribut. Pour les autres types, ceux
suffixs par BLOB sont sensibles la casse, ceux qui se terminent par TEXT ne le sont pas.
Access
27
7.1.
Jeu de catgories
Le jeu de catgories employ diffre de celui employ pour P HDRE. Il est inspir de celui
utilis par ltiqueteur Cordial (http://www.synapse-fr.com) et repose comme lui sur des
dnominations anglaises. On trouvera dans (Habert, 2005, ch. I) une prsentation dtaille
de Cordial et de ses rsultats sur Le Dormeur du Val dArthur Rimbaud.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C(onjunction) [+ + Cc], [car car Cc], [ni ni Cc], [bien que bien que Cs], [comme comme Cs] ;
Y (punctuation) [. . Yps], [ : : Yps], [ ? ? Yps], [ ! ! Ypw], [, , Ypw], [- - Ypw], [ ? ? Ypw].
On notera que les ponctuations sont considrs comme des mots , puisquelles possdent
lemme et catgorie.
Exercice n 1 Donner la frquence des parties du discours dans P RMA. On considrera que
la partie du discours est la premire lettre de la catgorie. On extraiera donc la premire lettre
de lattribut correspondant la catgorie.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
extrait dune chane le nombre de caractres souhait partir dun caractre donn. Le premier caractre de la chane a comme numro 1. Ainsi, SUBSTRING("Hannah", 4, 3) retourne la
chane "nah". Dans H1 a2 n3 n41 a52 h63 , les exposants correspondent la numrotation des caractres dans la chane de dpart, les indices aux caractres retenus (par ailleurs en gras).
Access
Exercice n 2 Pour chacune des diffrentes parties du discours des mots de P RMA (cf. exercice prcdent), produire la liste des 10 lemmes les plus frquents, avec leur frquence, classs
par frquence dcroissante.
Noter que les arguments des fonctions et oprateurs sont trs gnralement spars par
des virgules sous MySQL et SQL Server et par des points virgules sous linterface dAccess.
8. Individus et caractres
9. Des informations relier
10.
La table fournit des vues distinctes du texte crit par les infirmires : brut,
normalis, lemmatis. Il est galement possible dutiliser la catgorie fournie pour distinguer
par exemple calme adjectif de calme nom. Le texte est cependant clat en autant de lignes
que de segments par fiche. Dans la mesure o les tables dune base de donnes ne sont pas
faites pour tenir compte de la squentialit des informations contenues dans les lignes, on ne
peut pas aisment utiliser la table pour rechercher des cooccurrences entre mots
(voir cependant a contrario lexercice n 4 et sa solution). Dans le mme temps, la version du
texte que contient la table est la version brute, riche en scories, variations
inattendues, etc. On a donc reconstitu plusieurs tables (exemple dans le tableau 5 p. 30) qui
contiennent chacune deux colonnes, lidentifiant de la fiche en cause et une version spcifique
du texte :
29
texte
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
brut : ;
normalis : ;
lemmatis : ;
rduit aux catgories : ;
rduit des catgories simplifies :
rduit aux parties du discours ou POS (Part of Speech) :
.
(MySQL)
30
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Exercice n 6 Fournir une table des lemmes pour lesquels il y a plus dune partie du discours
(qui sont ambigus, donc) et le nombre de parties du discours correspondant. La partie du
discours est le premier caractre de lattribut dans la table . On voit par
exemple dans le tableau 9 p. 38 que le apparat la fois dans les dterminants et dans les
pronoms.
Exercice n 7 partir du rsultat de lexercice prcdent, fournir pour chacun des lemmes
ayant plusieurs parties du discours, le nombre doccurrences de chaque partie du discours.
On utilisera dabord une table cre la vole pour mmoriser les lemmes en question. On
procdera dans un deuxime temps via une requte enchsse faisant appel cette table.
11.
algique Douloureux
antalgique Mdicament ou attitude pour traiter la douleur. Equivalent antidouleur, analgsique, parfois sdatif qui introduit en plus la notion de calmer.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
rythrosique Tout rouge, cela peut tre bien parce que cest mieux que ple ou gris ou vert
ou bleu mais a peut tre trop rouge sil a trop de globules rouges.
ETF abrviation de Echographie transfontanellaire . Cest lexamen qui nous permet de
regarder le cerveau en chographie pour dpister les hmorragies ou les leucomalacies.
eutrophique A le bon poids attendu pour son terme.
extub Pour aider le bb respirer, on a branch un respirateur sur un tube plac dans la
trache. Quand on enlve ce tube, on extube le bb, il est alors extub .
Fentanyl Analgsique, mdicament anti-douleur de la famille des opiacs, morphine.
grimpe dans son incubateur Arrive se dplacer en rampant dans sa couveuse.
Hypnovel Sdatif comme du valium. Cela calme sans tre vraiment anti-douloureux.
hypotrophe Trop petit pour ce quon attend pour cette dure de grossesse.
KTC Abrviation de cathter central. Cest un tube trs fin (0,4 mm de diamtre) et long de
15 20 cm quon insre dans une veine du bras et quon pousse jusque prs du coeur.
Cela nous permet dapporter des calories intraveineuses tout le temps durant lequel on
ne peut pas donner manger au bb. Parfois durant plusieurs semaines.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
saturation Chiffre en pourcentage doxygne li lhmoglobine. Cest le chiffre qui nous dit
si le bb a besoin ou non de plus doxygne.
saturo Saturation de la teneur du sang en oxygne.
sdation Voir antalgique et Hypnovel.
SG Abrviation de sonde gastrique.
soins agressifs Certains soins sont agressifs mme sils sont ncessaires. Comme par exemple
daspirer dans la sonde dintubation ou de poser une perfusion intra veineuse ou de faire
un dextro.
sonde gastrique Petit tube introduit par la bouche ou par le nez et pouss jusque dans lestomac. Il va nous permettre de pousser du lait directement dans lestomac.
sous photo Trait pour son ictre par la lumire bleue.
syndactylies Malformations au niveau des doigts de la main ou du pied. Soudures de 2 doigts
entre eux.
TA Tension artrielle.
tirage intercostal Difficult respirer tout seul. Cela se voit car le prmatur fait des efforts
importants pour respirer. On dit quil tire et a se regarde sur le thorax, donc il tire au
niveau des ctes ( tirage intercostal ).
trmulations Tremblements des membres. Parfois quand il y a un problme neurologique
une souffrance du cerveau.
utrin De lutrus dans lequel il tait avant de natre.
ventil Bb aid par un respirateur.
33
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Catgorie
*
A
C
D
H
N
P
R
S
V
Y
o.
27126
641
4014
1476
3372
2
5131
2199
3253
2582
4412
5617
6781
12. Solutions
Solution de lexercice n 1 p. 29 Supposons que lon dispose de la fonction
SOUS C HANE(<chane>, <caractre de dpart>, <nombre de caractres souhaits>)
qui extrait dune chane le nombre de caractres souhait partir dun caractre donn. Le
premier caractre de la chane a comme numro 1.
R21
R EGROUPER SUR(
S OUS C HANE(categorie, 1, 1)
)[occ_prema]
,
P AR GROUPE(
S OUS C HANE(categorie, 1, 1) T ITRE Catgorie,
N OMBRE DE LIGNES() T ITRE o.
)[<rsultat1 >]
34
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
, ^ et *
fiche
forme_depart
forme_normalisee
lemme
categorie
1012
1012
1012
1012
1012
1012
1012
1012
1012
1012
1012
Il
il
il
Pp3ms-
ne
ne pas
ne pas
Rpn
se
laisse
se laisse
se laisser
V.ip3s
pas
faire
faire
faire
V.n
Access
La requte SQL Server peut prendre diffrentes formes, suivant la fonction utilise pour
extraire la premire lettre de la catgorie (sa partie du discours ).
La fonction
LEFT(<chane>, k)
extrait les k caractres les plus gauche de la chane fournie comme premier argument.
On peut aussi faire appel MID, lquivalent SQL Server de SUBSTRING pour MySQL :
SELECT Mid ( [ c a t e g o r i e ] , 1 , 1 ) AS Catgorie ,
Count ( Occ_prema . numero_ordre ) AS o
FROM Occ_prema
GROUP BY Mid ( [ c a t e g o r i e ] , 1 , 1 ) ;
R22
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R EGROUPER
P AR GROUPE(
lemme T ITRE Lemme,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
T RI
SUR
MySQL
La requte pour les A(djectifs) est prototypique des autres :
Access
La requte SQL Server engendre par 3 est de la forme :
SELECT TOP 10
Occ_prema . lemme AS Lemme,
Count ( Occ_prema . numero_ordre ) AS o
FROM Occ_prema
WHERE ( ( ( Occ_prema . c a t e g o r i e ) Like A ) )
GROUP BY Occ_prema .lemme
ORDER BY Count ( Occ_prema . numero_ordre ) DESC;
36
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Adjectifs
Lemme
calme
petit
tonique
ractif
mignon
dtendu
bon
veill
attentif
agrable
o.
416
375
334
243
149
124
99
85
73
71
Noms communs
Lemme
o.
bb
988
soin
919
oeil
295
contact
166
fille
118
bras
85
enfant
64
jambe
55
voix
55
tte
51
Verbes
Lemme
tre
ouvrir
pleurer
cest
sembler
avoir
dormir
se calmer
faire
ragir
Adverbes
Lemme
trs
bien
ne pas
beaucoup
un peu
peu
assez
tout
plutt
toujours
o.
828
443
283
168
90
89
87
72
41
35
Noms propres
Lemme
PrnomF
PrnomM
Hypnovel
Canadou
Narcan
F32
nettoyage
Raniplex
Fentanyl
o.
60
52
5
2
1
1
1
1
1
o.
505
260
186
179
170
138
116
114
111
108
37
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Conjonctions
Lemme
o.
et
586
mais
234
quand
179
que
123
lorsque
104
car
58
ou
43
ds que
37
donc
21
comme
14
Prpositions
Lemme
de
pendant
avec
lors de
dans
en dehors de
entre
pour
par
Dterminants
Lemme
le
son
un
ce
K
peu de
de
mon
beaucoup de
tout
o.
513
513
358
175
131
124
110
94
74
73
Pronoms
Lemme
il
le
elle
on
qui
je
ce qui
que
cela
ce que
o.
1999
537
535
62
43
30
29
22
20
17
o.
486
463
329
295
261
203
34
18
17
17
Ponctuations
Lemme
o.
.
2742
,
1459
901
""
138
(
105
)
102
;
61
:
40
...
30
!
21
38
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT lemme
FROM occ_prema
WHERE c a t e g o r i e REGEXP ^[AS ] .
AND lemme REGEXP ;
mots simples
20477
39
via la requte :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
J OINTURE(
o1.numero_ordre + 2 = o2.numero_ordre
)[occ_prema A LIAS o1, occ_prema A LIAS o2]
,
P ROJECTION AVEC
o1.fiche,
o1.lemme,
o2.lemme
)[<rsultat1 >]
DOUBLONS (
Access
La solution figure en 4 .
40
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
lemme
petit
petit
petit
petit
petit
petit
petit
petit
petit
petit
petit
petit
petit
lemme
puce
puce
puce
puce
puce
puce
puce
puce
puce
puce
puce
puce
puce
puce
Solution de lexercice n 5 p. 31
o.
13
1
Le principe est simple : il sagit disoler les fiches dont le texte comprend le mot puce, et
pour les bbs correspondants (via une jointure), de les regrouper par sexe et de compter le
nombre dlments des agrgats obtenus.
R24
J OINTURE(
f.id_bebe = b.id
) [bebes A LIAS b, fiches_originelles A LIAS f)
,
,
,
R ESTRICTION(texte R ESSEMBLANT
R EGROUPER
puce)[<rsultat1 >]
P AR GROUPE(
sexe T ITRE Sexe,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat3 >]
On constate que dans 13 cas sur 14, un bb qualifi de puce est une fille.
41
MySQL
SELECT sexe AS Sexe ,
COUNT( ) AS o .
FROM bebes AS b ,
f i c h e s _ o r i g i n e l l e s AS f
WHERE id_bebe = b . id
AND t e x t e REGEXP puce
GROUP BY sexe ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
R EGROUPER SUR(lemme)[occ_prema]
AVEC(
N OMBRE DE VALEURS DISTINCTES (S OUS C HANE(categorie,
1, 1))
)
,
P AR GROUPE(
lemme T ITRE Lemme,
N OMBRE DE VALEURS DISTINCTES (S OUS C HANE(categorie,
1, 1)) T ITRE catgories
)[<rsultat1 >]
adjectif/adverbe (bien) ;
adverbe/prposition (aprs, avant) ;
nom/adjectif (calme, clin) ;
verbe/nom (tre, toucher).
MySQL
42
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
catgories
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
2
2
3
2
2
2
2
2
3
2
43
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Solution de lexercice n 7 p. 31
leur partie du discours :
Pour chacun de ces lemmes, on regroupe sur lemme et partie du discours pour obtenir le
nombre doccurrences associ :
SELECT lemme,
SUBSTRING ( categorie , 1 , 1) AS POS ,
COUNT( ) AS o .
FROM occ_prema
WHERE lemme IN
(SELECT
FROM lemme_prema_a_k_POS )
GROUP BY lemme,
SUBSTRING ( categorie , 1 , 1) ;
44
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
lemme
TiretChevronFermant
TiretChevronFermant
TiretChevronFermant
antalgique
antalgique
aprs
aprs
avant
avant
bien
bien
bleu
bleu
bref
bref
calme
calme
comme
comme
clin
clin
de
de
entre
entre
gauche
gauche
grand
grand
le
le
POS
C
R
Y
A
N
R
S
R
S
A
R
A
N
A
R
A
N
C
R
A
N
D
S
S
V
A
N
A
R
D
P
o.
9
3
6
2
1
3
18
1
6
1
443
1
2
1
1
416
11
14
2
2
31
29
513
94
1
1
1
41
19
1999
463
limite
limite
mal
mal
mme
mme
pendant
pendant
pendant
physique
physique
prmatur
prmatur
que
que
que
rflexe
rflexe
si
si
son
son
sourire
sourire
toucher
toucher
tout
tout
tout
tre
tre
N
R
A
R
A
R
A
R
S
A
N
A
N
C
P
R
A
N
C
R
D
N
N
V
N
V
D
P
R
N
V
1
1
2
6
2
26
1
1
358
2
18
4
3
123
18
8
1
2
13
2
537
8
6
2
29
43
17
2
72
6
505
45
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE II
ge minimum, maximum, moyen, etc. par service pour les infirmires Le regroupement
des infirmires selon le service (jour vs. nuit) permet de calculer des indications globales sur
le nombre dentits de chaque agrgat, lge minimal, maximal et moyen de lagrgat, lcarttype de lge, et pareillement pour lanciennet. On limine le groupe, rduit un lment
(linfirmire 41), des infirmires dont on ignore le service en testant labsence de la marque
NULL. Cette requte en notation abstraite sexprime ainsi :
46
R26
nombre
ge
min.
ge
max.
ge
moy.
Jour
Nuit
29
12
21
23
44
40
29.00
33.08
R ESTRICTION(service
,
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Service
R EGROUPER
EST PAS
carttype
ge
4.79
5.22
anc.
min
anc.
max.
anc.
moy.
0.00
0.00
19.00
20.00
3.50
9.29
carttype
anc.
4.56
6.53
NULL)[infirmieres]
P AR GROUPE(
service T ITRE Service,
N OMBRE DE LIGNES () T ITRE nombre,
M INIMUM(age) T ITRE ge min.,
M AXIMUM(age) T ITRE ge max.,
M OYENNE(age) T ITRE ge moyen,
CAR T - TYPE(age) T ITRE cart-type ge,
M INIMUM(anciennete) T ITRE anc. min.,
M AXIMUM(anciennete) T ITRE anc. max.,
M OYENNE(anciennete) T ITRE anc. moy.,
CAR T - TYPE(anciennete) T ITRE cart-type anc.
)[<rsultat2 >]
MySQL
FORMAT(<nombre>, k) permet de garder k dcimales dun nombre dcimal.
SELECT s e r v i c e AS Service ,
COUNT( ) AS nombre ,
MIN( age ) AS ge min . ,
MAX( age ) AS ge max. ,
FORMAT(AVG( age ) , 2 ) AS ge moyen ,
FORMAT(STD( age ) , 2 ) AS carttype ge ,
MIN( anciennete ) AS anc . min ,
MAX( anciennete ) AS anc . max. ,
FORMAT(AVG( anciennete ) , 2 ) AS anc . moy. ,
FORMAT(STD( anciennete ) , 2 ) AS carttype anc .
FROM i n f i r m i e r e s
WHERE s e r v i c e IS NOT NULL
GROUP BY s e r v i c e ;
Bbs traits et fiches remplies par infirmire On souhaite obtenir pour chaque infirmire son identifiant, son service, le nombre de fiches quelle a remplies, le nombre de bbs
pour lesquels elle a rempli une fiche et la rpartition de ces bbs en filles et garons. Ces informations proviennent de 3 tables, lidentifiant et le service de la table , lidentifiant
des bbs traits de la table , et enfin le sexe des bbs de la table
. Il faut donc
effectuer une jointure entre ces trois tables en les reliant deux deux, ce qui entrane deux
conditions de rapprochement. La requte abstraite est de la forme :
47
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R27
service
Jour
Jour
Jour
Nuit
Jour
..
.
Jour
Jour
Jour
Nuit
Jour
fiches
62
52
46
44
42
..
.
10
9
7
3
2
bbs
45
40
37
30
31
..
.
8
8
6
3
2
garons
22
24
21
16
19
..
.
4
1
3
2
1
filles
23
16
16
14
12
..
.
4
7
3
1
1
J OINTURE(
id_infirmiere = i.id
ET id_bebe = b.id)
[infirmieres A LIAS i,
signaletique_fiches A LIAS s,
bebes A LIAS b]
,
,
R EGROUPE
P AR GROUPE(
i.id T ITRE Infirmire,
service,
N OMBRE DE VALEURS DISTINCTES(s.id) T ITRE fiches,
N OMBRE DE VALEURS DISTINCTES(b.id) T ITRE bbs,
N OMBRE DE VALEURS DISTINCTES(S I(sexe = Garon,
id_bebe, NULL) T ITRE garons,
N OMBRE DE VALEURS DISTINCTES(S I(sexe = Fille, id_bebe,
NULL) T ITRE filles,
)[<rsultat2 >]
T RI
SUR (fiches
D CROISSANT,
bbs
D CROIS -
SANT)[<rsultat3 >]
Lappel
S I(<condition>, <rsultat si condition remplie>, <rsultat sinon>)
permet, pour chaque ligne concernant une infirmire donne, si par ailleurs le bb correspondant est un garon, de retourner son identifiant, sinon de retourner la marque NULL (et
rciproquement pour les filles).
Le tableau 14 p. 48 donne le rsultat.
On est oblig demployer des noms qualifis pour , nom de colonne prsent dans les
trois tables mais qui renvoie des ralits distinctes. chaque table, en SQL, est alors associ dans la clause FROM un alias de table, pour obtenir, dans les autres clauses, des noms
qualifis, cest--dire non ambigus. Ainsi, dans la requte qui suit,
renvoie la colonne
de la table , dont est lalias, tandis que renvoie lidentifiant dune fiche, abr
geant . On pourrait tout aussi bien employer ,
et
. Les autres colonnes ne ncessiteraient pas de nom qualifi : leurs noms ne sont
48
pas ambigus ( par exemple existe uniquement dans la table ). Les noms qualifis
sont en particulier ncessaires pour les auto-jointures, puisquun mme nom dattribut est
employ par deux tables ou plus, les tables mises en relation par lauto-jointure.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Les requtes SQL Server engendres par linterface Access emploient comme noms qualifis
les noms de colonnes prcds du nom entier des tables correspondantes. En cas dautojointure, un numro est ajout la fin du nom de la deuxime table (et des autres tables, si
lauto-jointure relie plus de 2 tables). En MySQL, on peut, comme dans lexemple, recourir
des abrviations, qui rendent les noms qualifis plus aiss crire. La convention suivie dans
ces pages est en gnral de prendre linitiale de la table, quand cette initiale ne prte pas
confusion, initiale ventuellement suivie dun numro en cas dauto-jointure.
MySQL
La fonction IF (l. 5 et l. 7) est la ralisation MySQL de la notation S I exemplifie supra.
La fonction COUNT ne prend en considration que les valeurs proprement parler et ignore
les marques NULL. Lajout du modifieur DISTINCT aboutit ne prendre en compte que les
valeurs distinctes didentifiant des bbs.
R28
SELECT i . id AS I n f i r m i r e ,
service ,
COUNT( DISTINCT s . id ) AS f i c h e s ,
COUNT( DISTINCT id_bebe ) AS bbs ,
COUNT( DISTINCT ( IF ( sexe = Garon , id_bebe , NULL ) ) )
AS garons ,
COUNT( DISTINCT ( IF ( sexe = F i l l e , id_bebe , NULL ) ) )
AS f i l l e s
FROM i n f i r m i e r e s AS i ,
bebes AS b ,
s i g n a l e t i q u e _ f i c h e s AS s
WHERE i d _ i n f i r m i e r e = i . id
AND id_bebe = b . id
GROUP BY i . id
ORDER BY f i c h e s DESC,
bbs DESC ;
5
10
15
49
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Infirmire
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
service
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Nuit
Jour
Jour
Jour
Jour
Jour
Jour
Jour
fiches
636
809
853
708
849
688
736
999
731
719
872
752
758
833
880
588
641
686
68
116
91
87
132
212
214
bbs
77
98
102
85
101
83
90
120
90
88
105
92
93
100
106
69
77
83
8
12
10
9
14
22
22
sexe
Garon
Fille
Fille
Fille
Fille
Garon
Garon
Garon
Garon
Garon
Fille
Garon
Garon
Garon
Garon
Fille
Garon
Garon
Garon
Fille
Garon
Garon
Fille
Fille
Fille
garons
77
NULL
NULL
NULL
NULL
83
90
120
90
88
NULL
92
93
100
106
NULL
77
83
8
NULL
10
9
NULL
NULL
NULL
filles
NULL
98
102
85
101
NULL
NULL
NULL
NULL
NULL
105
NULL
NULL
NULL
NULL
69
NULL
NULL
NULL
12
NULL
NULL
14
22
22
Infirmire
1
2
service
Nuit
Jour
fiches
18
7
bbs
15
6
garons
9
3
filles
6
3
On constate que linfirmire 1 sest occupe deux fois des bbs 77, 83 et 90 (trois garons)
et linfirmire 2 deux fois du bb 22 (une fille). Le tableau 15(bas) p. 50 donne pour les mmes
infirmires 1 et 2 la synthse opre par la premire requte.
Access
Nous allons fournir plusieurs solutions. Lune se rapproche de celle qui a t choisie pour
MySQL. Lautre (le recours une requte Analyse croise) est spcifique Access.
Lobjectif est dassocier chaque infirmire, reprsente par son identifiant, son service,
le nombre de fiches remplies, le nombre de bbs diffrents dont elle sest occupe, et la
rpartition en garons et filles (tableau 14 p. 48).
Le point de dpart est une jointure qui permet de rassembler les informations concernant les infirmires (identifiant et service), les fiches, et via les fiches, les bbs concerns et
leur sexe. Cest le <rsultat1 > de la R27 p. 48. Les informations retenues sont lidentifiant de
linfirmire, son service, lidentifiant de la fiche, lidentifiant du bb, son sexe.
Une premire requte, reposant sur cette jointure, opre le tri par infirmire et bb.
50
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On constate ainsi en 2 que linfirmire 1 sest occupe une fois du bb 69 (une fille) et 2
fois des bbs 77, 83 et 90 (des garons). Cela correspond au choix (qui est le choix par dfaut)
de pour la proprit de la requte en 1 . Cela constitue une projection avec
doublons.
2
La requte 3 diffre de la requte 1 en ce quelle opre non plus un tri mais un regroupement, sur lidentifiant de linfirmire, son service et lidentifiant du bb. On constitue
donc autant de groupes que de bbs traits par une infirmire donne pendant un service
donn. Ce regroupement permet de faire le compte des fiches correspondant chacun de ces
groupes.
3
On voit ainsi en 4 que le bb 69, lorsquil a t trait par linfirmire 1, de nuit, a eu une
fiche seulement remplie par elle, tandis que le bb 77 en a eu deux.
51
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La capture 6 , qui reflte le reste des colonnes lors de la mise au point de la requte,
montre comment effectuer, au sein de chaque groupe de bbs traits par une infirmire, le
dcompte du nombre de garons et du nombre de filles. Pour les garons, par exemple, si la
valeur de lattribut sexe est Garon, la fonction VraiFaux retourne 1, sinon, elle retourne 0.
Le total, par lappel Somme, est bien celui des garons prsents dans les fiches rdigs par
linfirmire. La dmarche est similaire pour les filles.
6
Le rsultat figure en 7 .
52
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La deuxime solution fait appel un mcanisme propre Access, une requte Analyse croise. Le principe gnral dune requte Analyse croise est le suivant. partir dune table ou
dune requte pralable, on constitue des regroupements, sur au plus trois attributs. Chaque
groupe reprsente une ligne de la table rsultat. On sintresse un autre attribut, qui peut
avoir plusieurs modalits ou plusieurs valeurs. On veut effectuer pour chaque groupe et
chaque valeur ou chaque modalit de cet attribut, en croisant donc le groupe et les modalits/valeurs de lattribut, un calcul : par exemple connatre le nombre de fois o ce groupe a
cette modalit/cette valeur pour cet attribut.
Dans le cas prsent, chaque groupe est une infirmire associe un service donn. On
veut connatre pour la valeur Garon comme pour la valeur Fille de lattribut le nombre
de fois o elle se rencontre pour chaque infirmire.
La dmarche de cration dune requte Analyse croise est mene pas pas, jusqu des
modifications qui permettent dobtenir des rsultats identiques ceux du tableau 14 p. 48.
Dans longlet dRequtese, on choisit dNouveaue dans la barre de menu du haut.
8
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
On dtermine ensuite le ou les attribut(s) partir duquel ou desquels seront constitus les
groupes, ici et . Cette ou ces colonnes constituera ou constitueront les en-ttes
de lignes de chaque groupe.
11
On choisit ensuite la colonne dont on veut croiser les modalits/valeurs avec les groupes
constitus. Si lon choisissait comme en 12 lattribut
, on pourrait obtenir pour chaque
infirmire le nombre de fois o elle sest occupe du bb 1, du bb 2. . . et ainsi de suite
jusquau bb 121.
54
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
12
On choisit lattribut
.
13
On dtermine le calcul effectuer lintersection dun groupe et dune modalit de lattribut. Il sagit ici dun dcompte.
14
55
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
15
Le rsultat figure en 16 .
16
Une premire modification, minime, consiste disposer dun titre de colonne plus parlant
que
. On donne comme titre la colonne correspondante .
56
18
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
19
La table/requte dentre dune requte Analyse croise doit comporter au moins trois
attributs. Lun sert au regroupement et fournit len-tte de ligne (le regroupement peut se faire
sur au plus 3 attributs). Les valeurs/modalits du second attribut constituent les colonnes
de la table-rsultat. Ce sont les valeurs, pour un troisime attribut, du croisement dun des
regroupements avec une des valeurs/modalits de lattribut en colonnes qui sert dentre au
calcul dont le rsultat figurera la croise.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE III
MySQL
Sous Unix/Linux, en mode ligne de commande, louverture dune base de donnes se fait
par la commande :
mysql -u <utilisateur> -p <base de donnes>
comme dans :
mysql -u habert -p prema
qui indique que lutilisateur (-u) habert veut utiliser la base prema et quil va pour ce faire
fournir un mot de passe (-p).
Une invite (prompt) apparat :
mysql>
Il est possible galement de lancer dabord MySQL :
mysql -u habert -p
puis dindiquer la base que lon souhaite ouvrir :
mysql>USE prema ;
Dans tous les cas, lutilisateur doit avoir des droits sur la base vise, soit de simple consultation, soit de consultation et modification.
Taper quit permet de quitter MySQL.
Le passage la ligne touche dEntree aprs le point virgule qui marque la fin dune
requte dclenche lexcution de cette requte.
4
Sous Linux/Unix, une base de donnes correspond un rpertoire (par exemple /var/
lib/mysql/prema), et chaque table un ou plusieurs fichiers dans ce rpertoire.
58
Access
Une base de donnes correspond un seul fichier volumineux, se terminant par .
Microsoft Data Base).
(pour
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Louverture dune base de donnes seffectue en lanant Access et ensuite en ouvrant une
base existante : dFichier | Ouvrire.
Elle seffectue aussi en double-cliquant sur licne de cette base 1 , icne qui comprend
une cl, ou sur son nom 2 (par exemple ) dans le dossier o la base est prsente.
Dans ce dernier cas, lextension du fichier, cest--dire le point et les caractres qui le suivent
(ici . ), est ou non visible suivant le paramtrage de laffichage des noms de fichiers, comme
on le constate en comparant 2 et 3 (le rglage sous jacent est expliqu la fin de cette
section).
1
2
La base une fois ouverte, une icne supplmentaire dans le dossier, avec un cadenas 4 ,
indique que la base est verrouille : est autoris un seul accs la fois une base donne.
59
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On ferme la base de donnes via dFichier | Fermere. On peut galement quitter Access (et
fermer du mme coup la base de donnes) par dFichier | Quittere ou en cliquant la croix rouge
droite de la barre de menu du haut.
Aprs ouverture dune base, apparat une fentre de navigation 5 6 entre les oprations
pour la base en question :
cration, modification et affichage des tables : onglet dTablese 5 ;
cration, excution, mmorisation et modification de requtes : onglet dRequtese 6 ;
mise en place de formulaires dentre dinformations dans une base : onglet dFormulairese ;
mise en place dimpressions dinformations : onglet dtatse ;
etc.
Ce sont les deux premiers volets qui sont privilgis dans ces pages.
60
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On peut galement cliquer sur licne idoine de la barre de menu du haut : 8 .
8
Activer le bouton dRequtese donne diffrents moyens de formuler des requtes. Ce choix
saccompagne dune transformation de la barre de menu du haut 9 .
9
61
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
On recherche lextension que lon veut rendre visible avec lascenseur.
12
Via le choix dAvance, on peut indiquer quon veut que les fichiers ayant cette extension
aient cette extension directement visible :
62
13
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1.2.
La forme gnrale des requtes SQL pour extraire des donnes est la suivante :
SELECT < a t t r i b u t ( s ) conserv ( s ) ou calcul ( s ) >
FROM <table(s) source(s)>
[WHERE <condition ( s ) de r e s t r i c t i o n ou de rapprochement >]
[GROUP BY <condition ( s ) de regroupement>
[HAVING <condition ( s ) sur l e s agrgats > ] ]
[ORDER BY < a t t r i b u t ( s ) servant au t r i > [DESC|ASC ] ] ;
Sous Linux/Unix, une requte SQL peut dailleurs tre entre sur plusieurs lignes. Linvite
change alors pour la 2me ligne et les suivantes, comme dans :
mysql> SELECT
> FROM i n f i r m i e r e s
> WHERE s e r v i c e = Nuit ;
MySQL
' caractristiques des infirmires de nuit
R11 t. 1 p. 60
R ESTRICTION(service = "Nuit")[infirmieres]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
o ltoile est une abrviation pour toutes les colonnes de la ou des tables considres.
Labsence de restriction, cest--dire la table entire, sobtient en omettant la clause WHERE,
ce qui donne dans lexemple prsent :
SELECT id , age , etudes , diplome , anciennete , s e r v i c e
FROM i n f i r m i e r e s ;
ou
SELECT
FROM i n f i r m i e r e s ;
1.3.
Laccs une table entire sobtient en double-cliquant sur le nom de cette table dans le volet dTablese de la fentre de navigation. Cette prsentation est dnomme feuille de donnes.
Cliquer sur la croix en haut droite de la table ferme la fentre y donnant accs. Lutilisateur peut modifier lapparence de la table : largissement, rtrcissement ou masquage de
colonnes, tris, etc. En ce cas, au moment de la fermeture de la fentre donnant accs la
table, il lui est demand sil souhaite ou non conserver cette mise en forme. Lutilisateur peut
galement modifier le contenu de la table : changement de la valeur de cellules, suppression
de lignes ou de colonnes, etc., voire sa structure (en supprimant des colonnes).
Pour crer une requte comme :
' caractristiques des infirmires de nuit
R11 t. 1 p. 60
R ESTRICTION(service = "Nuit")[infirmieres]
cliquer sur longlet dRequtese de la fentre de navigation dans la base de donnes, puis sur
dCrer une requte en mode Cratione 14 .
64
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
14
16
17
65
On ajoute les attributs que lon souhaite voir figurer dans la table rsultat et/ou qui vont
apparatre dans des conditions de restriction. Trois mthodes soffrent :
1. On double-clique sur les attributs souhaits. Ils apparaissent dans la sous-fentre
du bas 18 .
2. Ajouter un attribut dans la requte peut seffectuer galement en cliquant sur la
premire ligne dChampe dune colonne : un menu droulant apparat permettant de
slectionner lattribut souhait.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
19
Cocher la bote dAffichere pour une colonne donne 18 indique que la colonne en question figurera dans la table-rsultat. Dans le cas contraire, la colonne sera uniquement
utilise pour une condition de restriction mais ne figurera pas dans la table-rsultat.
La ligne dCritrese permet ddicter des conditions de restriction. Dans le cas prsent,
indiquer dans la colonne service 18 revient effectuer une restriction sur les infirmires travaillant de nuit. On peut entourer cette valeur textuelle de guillemets ou
dapostrophes (mais pas dun mlange des deux). Si lon ne le fait pas, Access rajoutera
des guillemets, comme en 19 .
Cliquer sur le point dexclamation rouge du menu du haut 20 ou passer par dRequte |
Excutere excute la requte. La table rsultat apparat en mode feuille de donnes 21 .
La ligne du bas indique le nombre de lignes de la table. Les triangles simples permettent
de se dplacer dune ligne, ceux assortis dune barre de se dplacer en tout dbut ou en
toute fin de table.
66
Lorsquon clique sur la croix en haut droite de la fentre contenant la table, la feuille
de donnes, on se voit demander si lon veut mmoriser la requte correspondante. Si
lon rpond positivement et quon donne un nom la nouvelle requte, ce nouveau nom
apparat dans les requtes de la fentre de navigation dans la base. Double-cliquer sur
ce nom rejoue la requte correspondante : la table rsultat rapparat.
20
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
21
1.4.
Lorquon formule une requte via linterface 22 , on peut basculer en mode SQL Server,
via dRequte | Spcifique SQL | SQL directe : 23 .
22
23
67
24
Les noms de colonnes sont gnralement qualifis, cest--dire quils ont pour prfixe le
nom de la table dont ces colonnes proviennent. Lengendrement conduit galement des
parenthsages qui gnent un peu la lecture dans la clause WHERE.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
2.1.
MySQL
On cre tout dabord la structure de la table destine accueillir le rsultat (chapitre X
2) :
CREATE TABLE i n f i r m i e r e s _ n u i t (
id int ( 1 1 ) NOT NULL default 0 ,
age int ( 1 1 ) NOT NULL default 0 ,
etudes int ( 1 1 ) NOT NULL default 0 ,
diplome varchar ( 5 0 ) NOT NULL default ,
anciennete decimal ( 4 , 2 ) NOT NULL default 0.00 ,
service varchar ( 5 0 ) default NULL,
PRIMARY KEY ( id ) ) ;
La requte enchsse (SELECT. . .) doit produire une table compatible avec la table qui vient
dtre cre : mme nombre de colonnes, types de donnes compatibles colonne colonne.
Il est galement de procder en une seule opration, de crer la table la vole en aval :
68
CREATE TABLE i n f i r m i e r e s _ n u i t
(SELECT
FROM infirmieres_princep s
WHERE s e r v i c e = Nuit ) ;
Cest un exemple de requte enchsse, puisque la cration de table utilise une sousrequte (une restriction en loccurrence).
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le type des attributs de la table cre la vole est celui des attributs retenus dans la sousrequte ou se dduit des calculs effectus sur les attributs utiliss (la somme des valeurs
de deux attributs valeurs numriques entires donnera naissance un attribut de type
numrique entier, par exemple).
Access
Lorsquon est en train de composer une requte, le choix de dRequte | Requte cration
de tablee 26 conduit fournir un nom de table 27 pour accueillir le rsultat de la requte.
26
27
Lexcution de la requte crase toute table existante de mme nom si lon confirme le
choix 28 .
28
La nouvelle table, dont le nombre de lignes est indiqu 29 , apparat dans les tables du
volet dTablese de la fentre de navigation 30 .
69
29
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
30
2.2.
MySQL
On cre une vue, ce qui revient donner un nom une requte et donc pouvoir sen
reservir (la rejouer), y compris en position de table dentre dune autre requte :
Cette possibilit nest pas disponible dans toutes les versions de MySQL. Elle ne lest en
particulier pas dans la version 4.1.11 qui a t utilise pour cet ouvrage.
Access
Lorsquon cre une requte et quon lexcute, au moment de fermer la feuille de donnes
rsultat, on doit choisir de conserver ou non la requte, en lui donnant un nom. Une fois
sauvegarde, une requte peut tre rejoue volont, en double-cliquant sur son nom.
Par ailleurs, une requte mmorise se comporte comme une table ordinaire , qui peut
tre lobjet de nouvelles requtes ou tre combine avec dautres. Lorsquon cre une requte
via linterface graphique, on peut prendre en entre des tables, des requtes ou toutes combinaisons des deux. Voir 16 supra.
On peut donc disposer dun arsenal de requtes sur une base de donnes pour rpondre
des interrogations rcurrentes.
mmoriser ainsi des requtes, on se retrouve rapidement disposer dun bon nombre
de requtes : des noms explicites sont ncessaires pour pouvoir effectivement rejouer ces
requtes en sachant quoi elles renvoient 31 .
70
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
31
P RMA
P HDRE
E SQUE
3.1.
La restriction est une opration qui prend comme argument une relation et qui produit
une relation de mme schma comprenant uniquement les n-uplets de la relation qui vrifient
la condition fournie galement comme argument.
3.2.
Restriction : ralisations
MySQL
Lexemple de la restriction a servi de support supra p. 63 la prsentation de la formulation
dune requte.
Access
Lexemple de la restriction a servi de support supra p. 64 la prsentation de la formulation
dune requte.
Filtre Une deuxime manire darriver une restriction aux lignes souhaites est lutilisation
dun filtre. On slectionne la valeur souhaite dun attribut. Par exemple la valeur 0 pour
lanciennet des infirmires 32 .
71
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
32
Cliquer sur licne de filtrage, la conjonction dun entonnoir et dun clair dans la barre de
menu du haut 33 (message-bulle dFiltrer par slectione), aboutit restreindre la table aux
seules lignes prsentant cette valeur cible 34 .
33
34
Si lon slectionne alors une valeur dun autre attribut et que lon clique sur licne de filtrage, on applique une deuxime restriction, en aval de la premire 35 . Cest lquivalent dun
ET logique entre deux conditions de restriction. On peut continuer ainsi les restrictions sur
des attributs distincts jusqu avoir isol les informations juges pertinentes. . . ou dboucher
sur la table vide.
72
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
35
Pour revenir la table de dpart, sans restriction, on clique sur licne idoine, lentonnoir
isol de la barre de menu du haut 36 (message-bulle dSupprimer le filtree).
36
Formulaire Lorsquon examine une table en mode feuille de donnes, une autre solution, en
utilisant lentonnoir associ un classeur de la barre de menu du haut 37 (message-bulle
dFiltrer par formulairee), est lutilisation dun formulaire.
37
73
Le rsultat, aprs un clic sur lentonnoir isol de la barre de menu 41 , est similaire ceux
de la requte correspondante 40 .
40
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cliquer nouveau sur lentonnoir isol de la barre de menu 41 fait revenir la table
entire en mode feuille de donnes.
41
On notera que la condition de restriction dun formulaire nest pas sauvegardable : elle ne
peut pas tre rejoue.
Formulaire a donc deux sens pour Access. Il sagit dune part dune manire de filtrer
rapidement des lignes. Cest le sens qui vient dtre exemplifi. Il sagit dautre part de faciliter
lentre par lutilisateur de nouvelles informations dans la base de donnes.
3.3.
MySQL
La requte :
SELECT
FROM i n f i r m i e r e s
WHERE anciennete = 0 AND s e r v i c e = Nuit ;
retient les infirmires sans anciennet et travaillant de nuit (il ny en a quune, avec 1 comme
). Elle quivaut :
R29
R ESTRICTION(
anciennete = 0
)[infirmieres]
ET
service = "Nuit"
4
4
Access
La restriction sur une colonne se place dans la ligne dCritrese de la colonne correspondante dans la fentre du bas dexpression des requtes : 43 . Le point-virgule spare les
valeurs souhaites dans 42 comme dans 45 . Les guillemets ou lapostrophe encadrent les
valeurs textuelles en 45 . La ngation sobtient en prfixant de dPase la ou les valeur(s)
exclure : 44 , 46 .
' caractristiques des infirmires ayant soit 0 soit 1 an danciennet
R16 t. 1 p. 63
R ESTRICTION(anciennete
PARMI
(0, 1))[infirmieres]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
42
' caractristiques des infirmires dont lanciennet est comprise entre 0 et un an (bornes
incluses)
R17 t. 1 p. 63
R ESTRICTION(anciennete
ENTRE
ET
1)[infirmieres]
43
' caractristiques des infirmires dont lanciennet nest pas comprise entre 0 et un an
(bornes incluses)
R210
R ESTRICTION(anciennete
PAS ENTRE
ET
1)[infirmieres]
44
' caractristiques des infirmires qui travaillent soit de jour soit de nuit.
On exclut implicitement linfirmire dont le service nest pas connu, lacune qui est signale
par la marque NULL.
R211
R ESTRICTION(service
PARMI
(jour, nuit))[infirmieres]
45
Cette dernire requte ne rapatrie cependant pas linfirmire dont le service nest pas connu.
Le rsultat est une table vide. La marque NULL nest pas prise en compte par cette condition de
restriction. Il faut employer des tests spcifiques : EST NULL ou EST PAS NULL sous Access,
IS NULL ou IS NOT NULL sous SQL Server.
R212
R ESTRICTION(service PAS PARMI (jour, nuit))[infirmieres]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
46
Les conditions de restrictions qui figurent sur la ligne dCritrese sont unies implicitement
par un ET logique : la condition est lajout des critres dicts. La requte 47 vise une infirmire qui travaille de nuit ET dont lanciennet est suprieure 5 ans. On peut toutefois
utiliser un OU logique au sein dun critre portant sur un attribut donn : 48 . Cest comme si
cette sous-condition tait parenthse. Si lon veut par contre obtenir un OU logique entre des
critres portant sur des attributs distincts, on utilise la ligne dOue, sous la ligne dCritrese :
49 . La requte 49 diffre donc fortement de la requte 48 , puisquelle isole soit les infirmires travaillant de nuit et dont lanciennet est infrieure 1 an soit les infirmires (quel
que soit leur service) dont lanciennet est suprieure 5 ans. La requte 48 , elle, rapatrie
des infirmires qui travaillent toutes de nuit mais dont lanciennet est soit infrieure 1 an
soit suprieure 5 ans.
' caractristiques des infirmires travaillant de nuit et dont lanciennet est suprieure 5
ans
R13 t. 1 p. 60
R ESTRICTION(
service = "Nuit"
)[infirmieres]
ET
anciennete > 5
47
' caractristiques des infirmires qui travaillent de nuit et dont soit lanciennet est infrieure
1 an soit lanciennet est suprieure 5 ans
R14 t. 1 p. 62
R ESTRICTION(
service = "Nuit"
ET (anciennete < 1
)[infirmieres]
OU
anciennete > 5)
48
' caractristiques des infirmires qui travaillent de nuit et dont lanciennet est infrieure
1 an ou caractristiques des infirmires dont lanciennet est suprieure 5 ans
76
R213
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3.4.
R ESTRICTION(
(service = "Nuit"
ET (anciennete < 1)
OU anciennete > 5
)[infirmieres]
49
Traitement de NULL
R ESTRICTION(service
MySQL
SELECT
FROM i n f i r m i e r e s
WHERE s e r v i c e IS NULL ;
La condition inverse, slectionner toutes les infirmires pour lesquelles le service est connu,
cest--dire dont lattribut service ne comprend pas la marque NULL, donne naissance la
clause :
WHERE service IS NOT NULL
Access
En 50 , la ralisation sous Access. Sa ngation figure en 51 .
50
' caractristiques des infirmires dont le service est connu (cest--dire ne comprend pas la
marque NULL)
77
51
Dans une table, cette marque NULL se matrialise par. . . le vide de la case correspondante comme le montre 52 pour linfirmire 41, ce qui ne facilite pas exactement la
diffrenciation avec la prsence dune chane vide ( ou "").
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
52
MySQL
On sera attentif lambigut du signe = en SQL. Le plus souvent, il sert tester lgalit.
Cest le cas dans la clause WHERE de la requte :
UPDATE f i c h e s _ o r i g i n e l l e s
SET poids = NULL
WHERE poids = 0 ;
associ SET, le signe = sert aussi changer effectivement la valeur dun attribut pour les
lignes slectionnes. Les deux emplois se juxtaposent. La paraphrase est alors : dans la table
, attribuer lattribut
la marque NULL dans le(s) cas o lattribut a
pour valeur 0 .
P RMA
Exercice n 1 Lquipe mdicale distingue 3 grandes classes de poids la naissance : infrieur 750 g, entre 750 et 1000 g et suprieur 1000 g.
Extraire de la table
et pour chaque sexe, les lignes correspondant chaque classe (2
solutions pour la classe intermdiaire). Quelles conclusions en tirer ?
P HDRE
E SQUE
Exercice n 2 Extraire les lignes de la table qui ne correspondent pas des adjectifs,
cest--dire qui nont pas pour valeur dans la colonne .
78
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La projection avec doublons sobtient en listant uniquement les attributs souhaits dans
la clause SELECT. Lquivalent de la requte :
' combinaisons, pour les infirmires, des attributs
et
cest--dire :
R112 t. 1 p. 64
est :
SELECT service , anciennete
FROM i n f i r m i e r e s ;
Le modifieur DISTINCT dans la clause SELECT stipule dafficher uniquement les combinaisons dattributs qui diffrent les unes des autres. Il permet dobtenir la projection au sens
relationnel. Lquivalent de la requte :
R214
P ROJECTION(service, anciennete)[infirmieres]
soit :
' combinaisons distinctes, pour les infirmires, des attributs
et
est alors :
SELECT DISTINCT service , anciennete
FROM i n f i r m i e r e s ;
79
Access
La projection avec doublons revient slectionner uniquement la ou le(s) colonnes vise(s) :
53 .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
53
Le rsultat 54 met en vidence les doublons : on trouve par exemple 2 fois la combinaison
service de jour et anciennet de 7 ans.
54
La projection sans doublons suppose dutiliser le menu contextuel dProprits de la requtee. On accde ce menu avec un clic droit sur la sous-fentre du haut o se trouve affiche
la table sur laquelle doit porter la requte 55 .
55
On choisit alors la ligne dValeurs distinctese, par dfaut Non 57 , et que lon met Oui
grce au menu droulant 58 .
80
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
57
58
Une fois ce changement fait et le menu contextuel supprim, le dclenchement de la requte aboutit effectivement lensemble des valeurs distinctes 59 et au vide pour la marque
NULL. La combinaison service de jour et anciennet de 7 ans est dsormais unique.
59
81
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat
Dt/Pron
Espace
Nc
V
Adj
SepPhraseOuGroupe
SepGroupe
Np
Conj
Prp
SepPhrase
Rel
Adv
SepTiradeDansVers
SepGuillemet
SepParentheseOuvrante
SepParentheseFermante
Infirmieres_princeps . anciennete
FROM Infirmieres_princeps ;
P RMA
P HDRE
La requte :
SELECT DISTINCT cat
FROM occurrences ;
E SQUE
82
R215
R ESTRICTION(service = Jour)[infirmieres]
,
P ROJECTION(anciennete)[<rsultat1 >]
R ESTRICTION(service = Jour)[infirmieres]
,
P ROJECTION
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P RMA
MySQL
La requte suivante ralise la R215 :
SELECT DISTINCT anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Jour ;
SELECT anciennete
FROM infirmieres_princep s
WHERE s e r v i c e = Jour ;
qui produit une table avec autant de lignes que dinfirmires de jour, soit 29. Elle ralise la
R216 .
Access
P HDRE
La requte du tableau 17 p. 84 combine restriction et projection. Portant sur la table de
P HDRE, elle garde uniquement les lignes o le nombre dinterventions est gal 3 et conserve
seulement les colonnes , et
83
262
562
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
763
1188
R217
personnage_s
vers
OENONE
PHEDRE
OENONE
PHEDRE
OENONE
PHEDRE
THERAMENE
HIPPOLYTE
THERAMENE
PHEDRE
OENONE
PHEDRE
THESEE
PHEDRE
THESEE
R ESTRICTION(partage_en = 3)[vers]
,
P ROJECTION(
numero_vers,
personnage_s,
vers)
[<rsultat1 >]
MySQL
Dans une combinaison de restriction et de projection, la restriction apparat dans la clause
WHERE tandis que le(s) nom(s) dattribut(s) list(s) dans la clause SELECT opre(nt) la projec-
tion :
SELECT DISTINCT numero_vers ,
personnage_s ,
vers
FROM vers
WHERE partage_en = 3 ;
Access
84
61
Exercice n 4
E SQUE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R ESTRICTION(service = Nuit)[infirmieres]
,
P ROJECTION(
age, anciennete, age - anciennete
)[<rsultat1 >]
' mme chose, mais avec des titres de colonne plus explicites : ge, anciennet et arrive
R115 t. 1 p. 71
R ESTRICTION(service = Nuit)[infirmieres]
,
P ROJECTION(
age TITRE ge,
anciennete TITRE anciennet,
age - anciennete TITRE arrive
)[<rsultat1 >]
MySQL
Lge des infirmires leur arrive en nonatalit (ge anciennet dans le service) R114
t. 1 p. 71 est calcul via la requte :
SELECT DISTINCT age ,
anciennete ,
age anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit ;
85
Mais, par souci de clart, nous avons choisi de fournir le mot-cl dans ces pages.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
Un attribut calcul repose sur lutilisation dautres attributs, dont les noms sont mettre
entre crochets. Access ajoute un nom cet attribut, de la forme Exprn : 62 .
62
On peut galement donner un titre plus significatif : 64 , qui se retrouve dans le rsultat :
65 .
86
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
87
64
65
P HDRE
E SQUE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R116 t. 1 p. 74
R ESTRICTION(service = Nuit)[infirmieres]
,
' identifiant et anciennet des infirmires de nuit, tris par anciennet croissante
R117 t. 1 p. 74
R ESTRICTION(service = Nuit)[infirmieres]
,
,
' identifiant et anciennet des infirmires de nuit, tris par anciennet dcroissante
R118 t. 1 p. 74
R ESTRICTION(service = Nuit)[infirmieres]
,
,
R ESTRICTION(service = Nuit)[infirmieres]
,
,
MySQL
Le tri est effectu en fonction dune clause ORDER BY ajoute en fin de requte. Elle est
suivie du nom de la colonne ou des colonnes en fonction de laquelle ou desquelles on souhaite
que soient ordonns les rsultats. Les entits sont classes par ordre croissant des valeurs
pour chacune des colonnes en question. On peut modifier cet ordre en ajoutant DESC(ending)
aprs le nom de la colonne.
Les requtes suivantes produisent une table des identifiants et anciennets des infirmires
de nuit, classes :
pour la premire dans lordre de la table initiale (R116 t. 1 p. 74) ;
pour les 2 suivantes (R117 t. 1 p. 74), qui sont des variantes, par anciennet croissante
(ASC, optionnel, est mis pour ascending) ;
pour la quatrime (DESC est mis pour descending) par anciennet dcroissante (R118 t. 1
p. 74) ;
88
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
anciennete
11.00
6.00
19.00
2.00
3.00
6.50
5.00
0.00
14.00
20.00
17.00
8.00
id
3
47
20
12
16
58
14
10
1
28
44
7
anciennete
5.00
3.00
6.00
20.00
6.50
8.00
14.00
11.00
0.00
17.00
2.00
19.00
id
7
58
3
12
14
10
44
47
28
16
20
1
anciennete
19.00
8.00
5.00
20.00
14.00
11.00
2.00
3.00
17.00
6.50
6.00
0.00
pour la dernire de manire alatoire RAND() est mis pour random, le hasard (le tableau 18 p. 89 juxtapose 3 excutions successives de cette requte, qui montrent la
variation des ordres obtenus).
R116 t. 1 p. 74
SELECT id , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = " Nuit " ;
R117 t. 1 p. 74
SELECT id , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit
ORDER BY anciennete ;
R117 t. 1 p. 74
SELECT id , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit
ORDER BY anciennete ASC ;
R118 t. 1 p. 74
SELECT id , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit
ORDER BY anciennete DESC ;
R218 p. 88
SELECT id , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit
ORDER BY RAND( ) ;
La requte :
SELECT id , age , anciennete
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit
ORDER BY age DESC, anciennete ASC ;
89
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La sous-fentre du bas de formulation de requte contient une ligne dTrie. Laisser cette
ligne son tat de dpart 66 revient produire une table-rsultat dont lordre suit celui de la
table dentre. Cliquer dans la case dTrie dune colonne fait apparatre un menu droulant qui
permet de choisir entre lordre croissant selon cette colonne : 67 , ou bien lordre dcroissant :
68 .
R116 t. 1 p. 74
66
R117 t. 1 p. 74
67
R118 t. 1 p. 74
68
Trier sur plusieurs colonnes sobtient en indiquant un ordre de tri pour plusieurs colonnes.
Le tri sopre dabord sur la colonne de tri la plus gauche, puis sur la suivante, etc. En 69 ,
il seffectue dabord sur (par valeur dcroissante) puis sur
(par valeur croissante),
comme on le constate dans le rsultat 70 .
90
69
70
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Il faut que les colonnes entrant dans le tri aient t places en cohrence avec lordre vis
lors de la formulation de la requte.
De la mme manire quune colonne peut servir une restriction sans figurer dans le
rsultat, une ou plusieurs colonne(s) peu(ven)t permettre des tris sans pour autant apparatre
dans le rsultat.
Le tri alatoire R218 p. 88 sobtient en mode SQL Server par appel RND(), qui abrge
random, le hasard :
SELECT Infirmieres_princeps . id ,
Infirmieres_princeps . anciennete
FROM Infirmieres_princeps
WHERE ( ( ( Infirmieres_princeps . s e r v i c e )= " Nuit " ) )
ORDER BY RND( ) ;
7.1.
On peut galement trier directement une table ouverte en mode feuille de donnes, sans
passer par une requte. On slectionne la colonne de tri : 71 .
71
91
Puis on clique sur les icnes de tri de la barre de menu, en mode croissant 72 ou dcroissant 73 selon ce quon souhaite.
72
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
73
On peut slectionner plusieurs colonnes. Mais le tri sera alors croissant ou dcroissant
sur lensemble de ces colonnes.
retourne la table des 2 premires lignes de la table obtenue sans le modifieur dLIMIT ke, soit
les informations sur les infirmires 14 et 12.
Access
On peut rgler le nombre 75 ou le pourcentage 76 de lignes souhaites en utilisant la
ligne dPremires valeurse du menu contextuel dPropritse, accessible par clic droit sur la
92
fentre daffichage de la table slectionne pour la requte. La valeur par dfaut est Tout
(cf. 57 ).
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
75
76
On peut dans ce cas taper directement le nombre de lignes souhait.
93
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
77
78
En mode SQL Server, on obtient le mme rsultat en rajoutant juste aprs SELECT soit TOP
k pour se limiter aux k premires lignes, soit TOP k PERCENT pour se limiter aux k premiers
pour-cents.
P RMA
Exercice n 5
P HDRE
Exercice n 6
E SQUE
Filtrage grossier
MySQL
Loprateur LIKE (et son contraire NOT LIKE) offre une premire gamme, restreinte, de motifs. On fait figurer dans son contexte droit une expression comprenant des caractres spciaux. Le caractre pour-cent remplace une suite (ventuellement vide) de caractres, tandis
que le caractre soulign _ remplace un caractre quelconque. La requte suivante :
94
SELECT
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e LIKE % bb % ;
extrait les 258 fiches qui comprennent la chane "bb" nimporte quel endroit.
La modification de la clause WHERE en :
dWHERE texte LIKE bb%e
extrait les 67 fiches qui commencent par la chane "bb".
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La modification en dWHERE texte LIKE Bb%e isole les 176 fiches commenant par le mme
mot, mais avec une majuscule linitiale.
On a not, dans les fiches remplies pour le bb 38 (tableau 5 p. 37), des variantes graphiques pour le mot bb : Beb, BB, bb et BB. Cette variation graphique conduit dautres
essais, comme :
WHERE texte LIKE %b_b_%
pour rechercher les fiches dont le texte comprend 2 b spars par un caractre quelconque
et suivis par un caractre quelconque, nimporte quel endroit dans le texte. Ce motif filtre
effectivement, outre les fiches comprenant dbbe celles qui incluent dbebe ou dbbee. Mais
il ramne galement celles qui utilisent dprobablemente ou dimbibee. . . On rencontre donc
trs rapidement les limites de loprateur LIKE. Il ne permet pas toujours dexprimer des
patrons assez contraignants : le soulign remplace un caractre quelconque, ce qui est trop
laxiste . linverse, il oblige des combinaisons logiques complexes. Pour obtenir les cas de
figure dj rencontrs (706 fiches concernes), il faudrait en effet une clause du type :
WHERE t e x t e LIKE % bb %
OR t e x t e LIKE % BB %
OR t e x t e LIKE %BB%
OR t e x t e LIKE % bb %
OR t e x t e LIKE % Beb % ;
On peut souhaiter exprimer un motif dans lequel figure un caractre spcial qui, normalement, avec loprateur LIKE, est associ un comportement particulier. Il faut alors indiquer
que lon sintresse ce caractre en tant que tel, comme caractre littral. On le fait prcder dune contre-oblique (slash). Cest d-spcialiser ou chapper un caractre spcial
ou le prendre littralement . Cest le cas dans la requte :
SELECT contexte
FROM esque
WHERE contexte LIKE %\%%
ORDER BY RAND( )
LIMIT 3 ;
qui isole les contextes contenant le caractre pour-cent. Le premier caractre pour-cent,
comme le dernier, veut dire : 0 ou n caractres, celui du milieu, prcd dune contre-oblique,
est pris littralement. On cherche donc un contexte tel quil y ait le caractre pour-cent prcd et suivi de 0 ou n caractres. Le rsultat est de la forme :
95
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
contexte
27 Janvier 2000 - SPORTS #FOOTBALL. Le mercato (18 dcembre-31 janvier) ne dcolle
pas. Faut-il revoir la priode hivernale des transferts ? [...] #Le second march annuel
des transferts, clos le 31 janvier prochain, na pas connu le bouleversement annonc.
Sil continue dtre trs critiqu, il est mme rejet par 75 % des entraneurs. Mais, mis
part son nom, rien ne changera la saison prochaine. #a avait pourtant un joli nom,
avec ce quil faut dexotisme pour noyer le profane - mercato-ksaco ? - sans couler le
spcialiste - y a-bon-mercato-pour-les-ventes. Dans lespace-temps football - un monde
- nous vivions des priodes <mercatesques>. Nous tions au XXe sicle, lconomie tait
globalise mort, le football, son laboratoire ; le joueur, en short et panneau publicitaire
en nylon, se vendait, plutt bien dailleurs.
[...] je mattarderai un peut [sic] plus sur les acteurs : servis par un trio principal haut en
couleurs, Messengers nous offre par leur biais 118 mns de dlire 100% <"BABAesque">,
Yabe hiroyuki dans le rle de Yokota nous sert un jeux trs propre comme son habitude
[...]
"$Plus prs de tes sous, mon Dieu !$", tel est le long lamento de lEglise de France, qui
ne craint quune seule chose : que les 56 % des fidles qui, le dimanche la messe,
laissaient choir dune main pieuse une pice de 10 F dans la sbile ne prennent la trs
mauvaise habitude [...] de ny laisser quune pice de 1 euros. [...] Si lon y ajoute les 15
% dhypocrites qui ne laissent que 5 F [...], lEglise se retrouverait dans une situation
<argentinesque> : la faillite !
8.2.
Les SGBD offrent souvent dsormais des mcanismes de formulation de motifs plus prcis
et plus souples que ceux permis par LIKE. Ces mcanismes sont bass sur les expressions
rgulires.
MySQL
Le mot-cl introduisant une expression rgulire en MySQL est REGEXP (son contraire
tant NOT REGEXP). Les oprateurs post-poss dj prsents et utiliss doptionalit ( ?),
dintervention 0 ou n fois (*), dintervention 1 ou n fois (+) ressortissent au rpertoire des
expressions rgulires.
Les requtes suivantes permettent dextraire lidentifiant et le texte des fiches dont le texte
rpond un motif donn.
' texte ne comprenant pas une des ralisations de bb
R131 t. 1 p. 80
R ESTRICTION(
texte NE RESSEMBLANT PAS
[Bb][Ee.] ?[Bb][Ee.] ?
)[fiches_originelles]
SELECT id , t e x t e
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e NOT REGEXP [ Bb ] [ Ee . ] ? [ Bb ] [ Ee . ] ;
R ESTRICTION(
texte RESSEMBLANT
[Ff]ille
)[fiches_originelles]
96
SELECT id , t e x t e
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e REGEXP [ Ff ] i l l e ;
R ESTRICTION(texte RESSEMBLANT
[Gg]aron)[fiches_originelles]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT id , t e x t e
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e REGEXP [ Gg] aron ;
' texte contenant soit une ralisation de bb, soit une de fille, garon, enfant, prma, en
minuscules ou avec une majuscule initiale (et ventuellement, pour prma, labsence daccent
sur le )
R219
R ESTRICTION(
texte RESSEMBLANT
[Bb][Ee.] ?[Bb][Ee.] ?|[Gg]aron|[Ff]ille|[Ee]nfant|[Pp]r[e]ma
)[fiches_originelles]
SELECT id , t e x t e
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e
REGEXP
[ Bb ] [ Ee . ] ? [ Bb ] [ Ee . ] ? | [ Gg] aron |[ Ff ] i l l e |[Ee ] nfant |[Pp ] r [ e ]ma ;
' texte ne contenant ni une ralisation de bb, ni une de fille, garon, enfant, prma, en
minuscules ou avec une majuscule initiale (et ventuellement, pour prma, labsence daccent
sur le )
R133 t. 1 p. 81
R ESTRICTION(
texte NE RESSEMBLANT PAS
[Bb][Ee.] ?[Bb][Ee.] ?|[Gg]aron|[Ff]ille|[Ee]nfant|[Pp]r[e]ma
)[fiches_originelles]
SELECT id , t e x t e
FROM f i c h e s _ o r i g i n e l l e s
WHERE t e x t e
NOT REGEXP
[ Bb ] [ Ee . ] ? [ Bb ] [ Ee . ] ? | [ Gg] aron |[ Ff ] i l l e |[Ee ] nfant |[Pp ] r [ e ]ma ;
Un ensemble de caractres peut galement tre dsign par ses extrmits dans le jeu de
caractres utilis. La clause :
WHERE t e x t e REGEXP [09]+ ;
abrge la clause :
WHERE t e x t e REGEXP [0123456789]+ ;
97
et rapatrie comme elle les fiches qui emploient un ou plusieurs chiffres (allant de 0 inclus
9 inclus), quil sagisse de mentions de semaines de grossesse (f. 991 : malgrs ses 25
semaines), de poids (f. 138 : Petit bb de 800gr), dheures (f. 178 : intubation 20h30) ou de
dure (f. 1001 : Peau trs fragile pdt 24 72h de Vie), etc. On constate cette occasion que le
tiret est un caractre spcial au sein des crochets, puisquil contribue la dsignation dun
ensemble par ses bornes. Par consquent, lorsquon souhaite utiliser le tiret comme caractre
littral au sein dun ensemble, il doit tre le seul caractre entre crochets ou le dernier, aprs
la dsignation dun ou de plusieurs ensembles. La clause suivante :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
WHERE t e x t e REGEXP [ az ] [ ] [ az ] ;
rapporte les 23 fiches comprenant des mots en plusieurs mots souds par des traits dunion
(aprs-midi) ou des pronoms post-poss (sera-t-il ). Les caractres accentus sont ajouts
parce quils ne sont pas compris dans lensemble born par a et z.
La dsignation densembles de caractres peut se faire de manire ngative, en indiquant le
complmentaire dun ensemble. Laccent circonflexe au dbut dune paire de crochets indique
quon attend cet endroit le complmentaire de lensemble caractris par ce qui suit laccent
circonflexe. La clause :
WHERE t e x t e REGEXP [^ az ] [ ] [ ^ az ] ;
rapatrie les 347 fiches tmoignant demplois du tiret ailleurs que comme trait dunion au sein
dun mot, puisquon exclut les caractres minuscules avant comme aprs, comme dans : Il
tte bien lors des soins de bouche - Se rendort tout de suite aprs les soins. . . (f. 826).
En MySQL, on peut galement dsigner des ensembles de caractres par des noms spcifiques, par exemple [ :alpha :] pour les caractres alphabtiques, [ :digit :] pour les chiffres,
etc. Les quivalents de deux des motifs prcdents seraient :
WHERE t e x t e REGEXP [ [ : d i g i t : ] ] ;
WHERE t e x t e REGEXP [ [ : alpha : ] ] [ [ : alpha : ] ]
Les motifs avec LIKE sont ancrs par rapport au dbut et la fin de la chane examine
alors que ceux introduits par REGEXP ne le sont pas. Le motif dLIKE bbe recherche un texte
qui commence et finit par bb (il ny en a dailleurs pas dans la table ) tandis
que REGEXP bb recherche un texte o figure bb, nimporte quel endroit. Les ancrages,
sils sont ncessaires, doivent tre explicitement fournis avec REGEXP, par laccent circonflexe
tout au dbut dREGEXP ^bbe pour figurer le dbut de la chane examine ou le signe dollar
la fin dREGEXP bb$e pour en figurer la fin. Dans ce contexte, dollar et accent circonflexe
constituent des caractres spciaux.
Trois requtes et leurs rsultats soulignent la diffrence entre LIKE et REGEXP. Les requtes portent toutes les trois sur la table . La premire :
SELECT numero_ordre , forme_depart , c a t e g o r i e
FROM occ_prema
WHERE forme_depart LIKE prma ;
retient (tableau 19 (a) p. 99) les lignes telles que la chane prma dbute et finit la colonne
(elle loccupe tout entire). La seconde (tableau 19 (b) p. 99) ne diffre de la
premire que par le remplacement de LIKE par REGEXP. On retrouve le premier rsultat si la
condition de restriction snonce :
WHERE forme_depart REGEXP ^prma$
forme_depart
prma
prma
prma
prma
categorie
Afpfs
Afpfs
Ncms
Afpfs
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
(b) R221
numero_ordre
3401
34306
39462
39937
48267
49799
65770
65790
R220
forme_depart
prmatur
prmatur
prma
prma
prma
prma
prmatur
prmaturit
categorie
Ncms
Afpms
Afpfs
Afpfs
Ncms
Afpfs
Ncms
Ncfs
R221
P ROJECTION AVEC
numero_ordre,
forme_depart,
categorie
)[<rsultat1 >]
DOUBLONS (
R ESTRICTION(
forme_depart R ESSEMBLANT
)[occ_prema]
,
R222
P ROJECTION AVEC
numero_ordre,
forme_depart,
categorie
)[<rsultat1 >]
P ROJECTION AVEC
numero_ordre,
forme_depart,
categorie
)[<rsultat1 >]
prma
DOUBLONS (
R ESTRICTION(
forme_depart R ESSEMBLANT
)[occ_prema]
,
^prma$
DOUBLONS (
On ne confondra pas lemploi de laccent circonflexe pour indiquer que le motif est chercher au dbut du texte examin avec lutilisation de laccent circonflexe au dbut des cro99
chets pour indiquer le complmentaire dun ensemble. Dans les deux cas, laccent circonflexe
constitue un caractre spcial, mais son sens change avec le contexte.
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Les recherches approximatives seffectuent avec ce qui sappelle dans la terminologie Access des caractres gnriques. Le motif est introduit par Comme et figure entre guillemets
ou entre apostrophes.
la diffrence de la plupart des expressions rgulires MySQL supra, loprateur Access *
est ncessaire pour indiquer quil peut y avoir 0 ou n caractres quelconques avant ou aprs
un sous-motif. Inversement, par consquent, il nest pas ncessaire, contrairement MySQL
de disposer doprateurs dancrage.
Loprateur Access * quivaut au motif MySQL .* (point suivi dtoile), o le point correspond nimporte quel caractre et ltoile post-pos indique que ce qui prcde peut intervenir
0 ou n fois.
80
et accepte un
82
100
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
101
83
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
84
8.3.
86
Le tableau 151 p. 510 rsume les oprateurs de filtrage disponibles sous MySQL et sous
Access. Ils ne concident pas toujours. Une mme opration peut sexprimer diffremment,
comme le complmentaire dun ensemble de caractres. Un SGBD peut offrir un oprateur
absent dun autre. Sur la table , on peut sous Access isoler, grce au motif de 87 ,
les formes de dpart qui combinent un b initial suivi soit de e soit de puis dun b puis, en
finale, soit de e soit de soit du point : 88 , mais par contre, il ne semble pas possible de
pouvoir dire que dans les deux cas, les voyelles sont optionnelles.
102
87
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
88
Dans le mme esprit, on peut isoler en 89 celles qui commencent par un b suivi dune lettre
qui nest pas (le point dexclamation joue le rle du ^ pour MySQL), suivi de b et termin par
une lettre qui nest pas : 90 .
89
90
Au total, l arsenal dexpressions de motifs offert par Access parat dans limmdiat plus
pauvre que celui de MySQL. Comme le montre la requte sous-jacente : 91 , il sagit
dailleurs dune lgre amlioration de LIKE. Une version prochaine viendra peut-tre enrichir
les possibles.
91
Il importe de matriser la bote outils de filtrage de donnes textuelles offerte par le SGBD
4
quon a choisi dutiliser et pour cela dexplorer systmatiquement la documentation.
Exercice n 7 Comparez les rsultats dune requte apparemment identique en MySQL et
Access et expliquez les diffrences de rsultats.
MySQL
La requte :
103
SELECT lemme,
categorie
FROM occ_prema
WHERE c a t e g o r i e REGEXP V
ORDER BY RAND( )
LIMIT 10 ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
a pour rsultat (entre autres rsultats possibles, vu quil sagit dun tri alatoire et de la
conservation des seules 10 premires lignes) :
lemme
categorie
trs
et
faire
Rgp
Cc
V.ip3s
soin
Ncmp
attraper
V.ip3s
Access
La requte :
92
a pour rsultat :
93
P RMA
P HDRE
Dcompte des associations de personnages dans les vers partags La requte dont suivent
les versions MySQL et Access isole lattribut de la table lorsquil comprend
une espace un endroit quelconque, cest--dire au moins deux noms spars par une espace. Cest un moyen de regrouper les vers partags entre plusieurs personnages sans faire
appel lattribut . Le rsultat est le mme que celui du tableau 32, p. 144,
qui, lui, fait appel lattribut .
104
R223
R EGROUPER
P AR GROUPE(
personnage_s,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
SELECT personnage_s , COUNT( personnage_s ) AS o .
FROM vers
WHERE personnage_s LIKE % %
GROUP BY personnage_s ;
Access
La requte 94 a pour rsultat 95 .
94
95
Phdre en dbut, milieu ou fin de vers partag La requte pour isoler les vers o Phdre intervient au dbut dun vers partag avec un autre personnage (rsultat en haut du tableau 20,
p. 107) est de la forme :
R224
P ROJECTION(
numero_vers T ITRE v.,
R EMPLACER(personnage_s, PHEDRE, *),
vers T ITRE vers commencs par Phdre
)[<rsultat1 >]
105
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
Lappel LIKE permet mme de distinguer les cas o un personnage est le premier intervenant
dun vers partag, le dernier, ou celui du milieu dans le cas dun vers en 3 segments, comme
le montrent les requtes suivantes qui sattachent au personnage Phdre (tableau 20, p. 107) :
SELECT numero_vers AS v . ,
REPLACE( personnage_s , PHEDRE , ) AS personnages ,
vers AS vers commencs par Phdre
FROM vers
WHERE personnage_s LIKE PHEDRE % ;
SELECT numero_vers AS v . ,
REPLACE( personnage_s , PHEDRE , ) AS personnages ,
vers AS vers o Phdre est " encadre "
FROM vers
WHERE personnage_s LIKE % PHEDRE % ;
SELECT numero_vers AS v . ,
REPLACE( personnage_s , PHEDRE , ) AS personnages ,
vers AS vers termins par Phdre
FROM vers
WHERE personnage_s LIKE % PHEDRE ;
REPLACE est lquivalent de la fonction R EMPLACER dans la notation abstraite.
Access
La requte 96 repose sur une restriction aux vers dont la colonne ressemble
PHEDRE *, cest--dire PHEDRE suivi dun espace et dautres caractres, ce qui signale
un vers partag entre 2 personnages et o Phdre est en premire position. Le contenu de
la colonne , renomme en dans le rsultat, est modifi : la chane
PHEDRE est remplace par la chane *, comme le montre le rsultat 97 .
106
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
v.
157
246
262
325
711
763
1619
v.
205
1188
v.
179
259
260
262
264
670
763
835
839
909
914
1219
1225
1252
personnages
* OENONE
* OENONE
* OENONE
*
* PANOPE
* OENONE
* OENONE
*
* THESEE
personnages
OENONE *
OENONE
THESEE *
THESEE
personnages
OENONE *
OENONE *
OENONE *
* OENONE
*
OENONE *
HIPPOLYTE
*
* OENONE
*
OENONE *
OENONE *
OENONE *
THESEE *
OENONE *
OENONE *
OENONE *
107
96
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
97
98
99
On suppose la fonction :
R ENVERSER(<chane>)
qui retourne la chane de dpart inverse.
108
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R225
phon. invers
ue
ue d
ue f
ue n| o s| p uo s
ue r d| uo p
ue r f| a
ue r| @@ j| na d
ue r| e n| e j
ue r| eo
ue r| eo l| a m
ue r| uo g| i r
ue r| uo m| a
ue t| no
ue v
ue v| @ hs
ue y
ue y d
ue y d| a
R ESTRICTION(
fin_syll = 12
E T occ_phon R ESSEMBLANT
)[occurrences]
,
,
R EGROUPER
o.
1
1
1
1
1
1
1
2
1
3
2
3
2
4
2
17
8
2
occ_car
lieux
lieu
mieux
cieux
ddaigneux
aeux
odieux
prodigieux
glorieux
furieux
audacieux
ambitieux
imptueux
respectueux
vertueux
tortueux
incestueux
phon. invers
ue y l
ue y l
ue y m
ue y s
ue yn| ia d| e d
ue y| a
ue| i d| o
ue| i j| i d| o r p
ue| i r| o l g
ue| i r| u f
ue| i s| a d| oo
ue| i s| i b| na
ue| u t| e p| ni
ue| u t| k ia p| s ia r
ue| u t| r ia v
ue| u t| r o t
ue| u t| s ia s| ni
o.
6
2
1
1
2
2
8
1
2
4
1
1
1
1
1
1
2
eu$
P AR GROUPE(
occ_car,
R ENVERSER(occ_phon) T ITRE phon. invers,
N OMBRE DE LIGNES () T ITRE o.
[<rsultat2 >]
T RI
Cette requte recherche les mots se terminant par le phonme eu et qui sont en dernire
position dans le vers (tableau 21, p. 109). La syllabe sur laquelle ils finissent est la dernire :
dfin_syl = 12e. Le dernier phonme des mots slectionns est eu : docc_phon REGEXP eu$ e. La
requte trie en outre les rsultats sur la transcription phontique inverse : dT RI SUR (R ENVERSER(occ_phon
e. Cest rapprocher les mots qui pourraient rimer ensemble. On pourrait dans un deuxime
temps mettre en rapport ces rimes potentielles et les rimes effectives.
MySQL
REVERSE est la ralisation MySQL de R ENVERSER.
SELECT occ_car ,
REVERSE( occ_phon ) AS phon . invers ,
COUNT( ) AS o .
FROM occurrences
WHERE f i n _ s y l = 12
AND occ_phon REGEXP eu$
GROUP BY occ_car
109
Access
La requte 100 est lquivalent de la requte MySQL. S TR R EVERSE y joue le rle de R EN VERSER .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
100
E SQUE
MySQL
La requte :
SELECT DISTINCT derive
FROM esque
WHERE derive REGEXP [ABCDEFGHIJKLMNOPQRSTUVWXYZ] ;
rapporte les drivs tels quy figure, nimporte quel endroit une quelconque des majuscules. Parmi les rponses obtenues : James-Bond-iesque, Kim Dealesque, MODEsque, Fight
Clubesque, Arrabalesque, DODOTESQUE, mais aussi de Funesque ou 3D-esque, ou encore le
Corbusieresque. Le(s) caractre(s) correspondant au motif se trouve(nt) mis en vidence.
Elle a pour reprsentation abstraite :
R226
R ESTRICTION(
derive R ESSEMBLANT
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
)[esque]
,
P ROJECTION(
Nombre de valeurs distinctes(derive)
)[<rsultat1 >]
On dsigne donc lensemble des majuscules par ses extrmits spars par le tiret, qui
a ici, au sein des crochets, le statut dun caractre spcial.
Le remplacement de dREGEXP [AZ]e par dREGEXP ^[AD]e aboutit isoler les drivs qui
commencent par une majuscule. Pour reprendre les exemples prcdents, ne seront rapatris
ni de Funesque ni 3D-esque ni le Corbusieresque tandis quArrabalesque le sera.
Il est dans le mme esprit ais de savoir sil existe ou non des drivs en -esque comprenant
des chiffres :
SELECT DISTINCT derive
FROM esque
WHERE derive REGEXP [0 9] ;
110
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
derive
starmaniesque
casanoviesque
victor-hugoesque
zappaesque
hurluberluesque
carcoesque
avenuesque
zidiesque
Uoesque
tooliesque
dadaesque
ferriesque
carrapichiesque
Le corbusiesque
nerjiesque
Le remplacement de lexpression rgulire par d[0-9-]e rapporte cette fois les drivs qui
soit comprennent un chiffre, comme supra, soit comprennent le tiret, comme : idi-amindadaesque, private-jokesque ou les deux, comme : M6-esque. Lexpression rgulire d-e rapatrie tous les drivs comprenant un tiret au moins, comme :
gant-de-toilettesque, extrme-droitesques ou loft-storyesque.
Lutilisation des ensembles de caractres permet par exemple disoler les drivs qui potentiellement prsentent un hiatus avant le suffixe (le tableau 22, p. 111 en fournit un chantillon) :
Ce sont les drivs tels que le suffixe -esque se trouve prcd par une voyelle. On veille dans
cette requte carter les drivs se terminant par -quesque (chiraquesque, diplodoquesque,
guerniquesque. . .) ou -guesque (blaguesque, kingkonguesque, doudinguesque. . .).
Dans la colonne de la table , les concepteurs de la base ont choisi dencadrer dans la plupart des cas le driv par les chevrons ouvrant et fermant, comme dans :
Toute cette fin de vie est dun caractre si nettement <castelbriandesque> quil faut se faire
violence pour ne point pasticher la manire dcrire du pote ds que lon veut sen occuper.
Autrement dit, le driv est compris dans une chane commenant par un chevron ouvrant,
se continuant par des caractres autres que le chevron fermant et sachevant par un chevron
fermant. On peut donc par lexpression rgulire : d <[^>]+>e isoler le driv signal dans
le contexte (le + indique ici quil peut y avoir 1 ou n occurrence(s) de caractres autres que le
chevron fermant). On peut alors examiner le contexte gauche du driv. La requte :
SELECT contexte
FROM esque
WHERE contexte REGEXP ( t r s | f o r t |un peu|nettement ) <[^ >]+ > ;
111
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
contexte
La musique de cette chanson est un peu <bossanovesque> entre guillemets . . .
. . .Lagent de Keanu Reeves sest empress de dmentir ces informations trs <paparazziesques>" . . .
. . .Cette manire trs <jospinesque> de mnager la chvre et le chou . . .
Toute cette fin de vie est dun caractre si nettement <castelbriandesque> . . .
Reu un mot de Gide fort <gidesquement> tourn . . .
isole les contextes o le driv est prcd soit par trs soit par fort soit par un peu soit
par nettement. La prsence dun adverbe de degr avant le driv certifie que celui-ci nest
pas dans ce contexte un adjectif relationnel mais quil a un emploi qualificatif. Un adjectif
relationnel est un adjectif qui remplace un nom prcd dune prposition, il nentre pas dans
des expressions de degr : un nerf crnien est un nerf du crne, mais on ne parle pas de nerf
trs crnien. On utilise un autre oprateur des expressions rgulires, la barre verticale (|
parfois dnomme daprs son nom anglais pipe) : il combine des chanes qui peuvent alterner
lendroit indiqu. Le tableau 23, p. 112 donne des chantillons du rsultat de cette requte.
Bruit et silence Les requtes bases sur les expressions rgulires sont confrontes au
bruit, au rapatriement de lignes non pertinentes, et au silence, lomission de lignes pertinentes.
Exemple de bruit : la requte ci-dessus visant obtenir les emplois qualificatifs de drivs
en -esque extrait galement : Le super-luxe du confort <campingesque> , o fort dans
confort rpond effectivement lexpression rgulire, quil faut donc modifier pour que le
caractre avant lun des adverbes de degr soit une espace ou une ponctuation :
on obtient une rponse supplmentaire : Elle retint son vagabondage mental pour revenir
au livre. U n peu <charabiesque>. Fatal : lart ne senseigne que par lexemple.
9. Solutions
Solution de lexercice n 1 p. 78
R227
R ESTRICTION(
sexe = Fille
ET
poids_naissance E NTRE 750 E T 1000
)[bebes]
112
MySQL
SELECT
FROM bebes
WHERE poids_naissance < 750 AND sexe = " F i l l e " ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT
FROM bebes
WHERE poids_naissance >= 750
AND poids_naissance <= 1000
AND sexe = " Garon " ;
SELECT
FROM bebes
WHERE poids_naissance BETWEEN 750 AND 1000
AND sexe = " F i l l e " ;
SELECT
FROM bebes
WHERE poids_naissance > 1000 AND sexe = " Garon " ;
Il y a 15 filles et 15 garons de moins de 750 g., 20 filles et 24 garons entre 750 et 1000 g,
22 filles et 25 garons de plus dun kilo. Sachant quil y a 7 garons de plus que de filles, la
rpartition parat relativement quilibre.
Access
Les requtes sont fournies de 101 104 .
101
102
113
103
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
104
Solution de lexercice n 2 p. 78 107 lignes ne correspondent pas des adjectifs, des adverbes comme badinesquement, des noms comme grotesque, plus rarement des verbes comme
spongesquer et enfin des drivs dont la catgorie, incertaine, est marque par un point dinterrogation : -la-fin-esque. Par ailleurs, 134 autres lignes ont la marque NULL pour la colonne
: plnatesque, moyenagesque, oulipesque, etc.
R228
R ESTRICTION(
cat_derive <> a
OU
cat_derive E ST N ULL
)[esque]
MySQL
La restriction aux lignes nayant pas a comme valeur de
sobtient via :
SELECT
FROM esque
WHERE cat_derive <> a ;
Elle ne restitue pas les lignes pour lesquelles figure la marque NULL. La condition de restriction doit tre alors :
WHERE cat_derive <> a
OR cat_derive IS NULL ;
Access
Les 2 solutions diffrent quant la manire dexprimer le OU logique, soit sur deux lignes,
soit sur une seule ligne.
114
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
105
106
Solution de lexercice n 3 p. 82
requte :
R229
P ROJECTION(
N OMBRE DE VALEURS
)[fiches_originelles]
DISTINCTES (relation_infirmiere_parents)
MySQL
SELECT DISTINCT r e l a t i o n _ i n f i r m i e r e _ p a r e n t s
FROM f i c h e s _ o r i g i n e l l e s ;
Access
107
115
Pour Access, introduit par COMME, le motif correspondant au premier cas de figure serait
"//" et au second .
Solution de lexercice n 5 p. 94
seffectuer par la requte :
R230
P ROJECTION(texte)[fiches_originelles]
,
,
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
T RI
MySQL
La requte MysQL correspondante :
SELECT t e x t e
FROM f i c h e s _ o r i g i n e l l e s
ORDER BY RAND( )
LIMIT 1 ;
peut retourner le texte : Dort BB ss PHOTO Tonique pendant les soins . Un autre appel
produirait un autre texte de fiche tire au hasard.
Access
Solution de lexercice n 6 p. 94 Tirer au hasard un vers prononc par Phdre peut seffectuer
par la requte :
R231
R ESTRICTION(personnage_s = PHEDRE)[vers]
,
,
,
P ROJECTION(vers)[<rsultat1 >]
T RI
MySQL
La ralisation est la suivante :
SELECT vers
FROM vers
WHERE personnage_s = PHEDRE
ORDER BY RAND( )
LIMIT 1 ;
peut retourner la table contenant la ligne : O laiss-je garer mes voeux et mon esprit?
(v. 180). Un autre appel produirait un autre vers nonc par Phdre et tir au hasard parmi
les 464 que prononce le personnage.
Access
Solution de lexercice n 7 p. 103 Le motif de la requte MySQL peut se paraphraser ainsi :
tel que lattribut comprenne 0 ou n V majuscule(s), nimporte quel endroit. Do
lapparition de lignes lattribut ne comprenant pas du tout le caractre V majuscule.
116
Le motif de la requte Access a par contre pour glose : tel que lattribut commence
par un V suivi de 0 ou n caractres, cest--dire tel quil sagisse dun verbe.
On retrouve lopposition entre les expressions rgulires de MySQL qui ne sont pas ancres et les motifs Access, qui le sont. Et lopposition entre ltoile qui pour Access signifie
0 ou n caractres, tandis que pour MySQL, cest un modifieur post-pos qui signifie : 0 ou n
occurrences du motif qui prcde (dans cet exemple, la seule lettre V).
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
lemme
pleurer
cest
ressentir
aimer
sagripper
tre
tre
tre drang
fixer
se crisper
categorie
V.ip3s
V.ip3s
V.ip3s
V.ip3s
V.n
V.ip3s
V.ip3s
V.n+V.pafs
V.ip3s
V.ip3s
117
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE IV
1. Indicateurs globaux
' nombre dinfirmires
R138 t. 1 p. 84
P AR GROUPE (
N OMBRE DE LIGNES ()
)[infirmieres]
TITRE
Nbre inf.
R ESTRICTION(service = Jour)[infirmieres]
,
P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]
TITRE
P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]
TITRE
P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]
TITRE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
Les requtes suivantes fournissent chacune une table dune seule ligne, avec un ou des
indicateur(s) sur un (sous-)ensemble de lignes de la table . Linstruction COUNT()
compte le nombre de lignes de la table.
La premire requte donne le nombre total de lignes de la table, les deux suivantes, celui
des infirmires de jour puis de nuit, la quatrime celui des infirmires de jour ou de nuit, la
cinquime celle des infirmires qui ne sont pas de jour (ce qui correspond en loccurrence aux
infirmires de nuit, nest pas prise en compte linfirmire dont le service nest pas connu et
est marqu par NULL). Les trois dernires requtes (tableau 25(a) (b) et (c), p. 121) fournissent
davantage de renseignements globaux : ge minimal (MIN(age)) ou maximal (MAX(age)), ge
moyen (AVG abrge average : moyenne) et la dispersion de cette moyenne via lcart-type (STD
pour standard deviation). Les deux dernires font appel des alias de colonnes ainsi qu des
instructions de formatage pour la moyenne et pour lcart-type. Les chiffres aprs le point
dcimal sont rduits deux par lappel FORMAT qui prend comme arguments un nombre et
le nombre de chiffres conserver en partie dcimale.
R138 t. 1 p. 84
SELECT
COUNT( ) AS Nbre i n f .
FROM infirmieres_princep s ;
R139 t. 1 p. 84
SELECT
COUNT( ) AS Nbre i n f . jour
FROM infirmieres_princep s
WHERE s e r v i c e = Jour ;
R140 t. 1 p. 84
SELECT
COUNT( ) AS Nbre i n f . nuit
FROM infirmieres_princep s
WHERE s e r v i c e = Nuit ;
R141 t. 1 p. 84
SELECT
COUNT( ) AS Nbre i n f . jour + nuit
FROM infirmieres_princep s
WHERE s e r v i c e IN ( Jour , Nuit ) ;
R142 t. 1 p. 84
119
SELECT
COUNT( ) AS Nbre i n f . <> jour
FROM infirmieres_princep s
WHERE s e r v i c e <> Jour ;
R232
R ESTRICTION(service = Jour)[infirmieres]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P AR GROUPE(
N OMBRE DE LIGNES (),
M INIMUM(age),
M AXIMUM(age),
M OYENNE(age),
CAR T - TYPE(age),
)[<rsultat1 >]
SELECT
COUNT( ) ,
MIN( age ) ,
MAX( age ) ,
AVG( age ) ,
STD( age )
FROM infirmieres_princep s
WHERE s e r v i c e = Jour ;
R233
R ESTRICTION(service = Jour)[infirmieres]
,
P AR GROUPE(
N OMBRE DE LIGNES () TITRE Nbre inf. jour,
M INIMUM(age) TITRE ge min.,
M AXIMUM(age) TITRE ge max.,
M OYENNE(age) TITRE ge moy.,
CAR T - TYPE(age) TITRE cart-type ge,
)[<rsultat1 >]
SELECT
COUNT( ) AS Nbre i n f . jour ,
MIN( age ) AS ge min . ,
MAX( age ) AS ge max. ,
FORMAT(AVG( age ) , 2) AS ge moy. ,
FORMAT(STD( age ) , 2) AS carttype ge
FROM infirmieres_princep s
WHERE s e r v i c e = Jour ;
R234
SELECT
COUNT( ) AS Nbre i n f . nuit ,
...
FROM infirmieres_princep s
WHERE s e r v i c e = Nuit ;
On distinguera soigneusement :
COUNT() qui compte le nombre de lignes et :
COUNT(DISTINCT <attribut>) qui compte le nombre de valeurs distinctes de lattribut mentionn.
Le montre la requte suivante :
120
MIN(age)
21
MAX(age)
44
AVG(age)
29.0000
STD(age)
4.7850
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R233 p. 120
Nbre inf. jour
29
ge min.
21
ge max.
44
ge moy.
29.00
cart-type ge
4.79
ge min.
23
ge max.
40
ge moy.
33.08
cart-type ge
5.22
nombre total dinfirmires travaillant de jour et nombre dges distincts pour ces infirmires
R235
R ESTRICTION(service = Jour)[infirmieres_princeps]
,
P AR GROUPE(
N OMBRE DE LIGNES(),
N OMBRE DE VALEURS DISTINCTES(age)
)[<rsultat1 >]
SELECT
COUNT( ) ,
COUNT( DISTINCT age )
FROM infirmieres_princep s
WHERE s e r v i c e = Jour ;
COUNT(DISTINCT age)
13
On obtient le nombre total dinfirmires travaillant de jour (29) et le nombre dges distincts
de ces infirmires : 13 seulement.
On rend les titres de colonnes plus explicites :
Infirmires de jour
29
ges diffrents
13
via :
SELECT COUNT( ) AS I n f i r m i r e s de jour ,
COUNT( DISTINCT age ) AS ges d i f f r e n t s
FROM i n f i r m i e r e s
WHERE s e r v i c e = Jour ;
121
Access
La ralisation Access de lassociation du dcompte du nombre total dinfirmires de jour et
du nombre dges diffrents de ces infirmires seffectue via une requte union. Une requte
union prend deux tables de mme structure (ayant les mmes attributs) et enchane les lignes
de lune et les lignes de lautre. Dans le cas prsent, on cherche obtenir 2 tables, dune ligne
chacune et ayant pour attributs et , qui prendront comme valeur respectivement
le sens de la ligne et le nombre dindividus correspondants.
La premire tape consiste obtenir le nombre dges diffrents pour les infirmires de
jour. Cela suppose dabord de conserver uniquement les valeurs distinctes de lattribut
pour les seules infirmires de jour.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une nouvelle requte prend en entre la requte prcdente. Utilisant les regroupements,
elle calcule en deuxime colonne, sous le nom , le dcompte des lignes et en premire
colonne, dnomme , elle place une chane : .
3
La requte suivante calcule de la mme manire, mais sans avoir besoin de passer par une
requte intermdiaire, le nombre total dinfirmires de jour.
122
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On cre alors une nouvelle requte et on indique quon veut une requte union soit via
dRequte | Spcifique SQL | Union e 7 , soit, en cliquant dans la sous-fentre de haut de
formulation interactive de la requte, via dMode SQL | Union e 8 .
7
On formule textuellement la requte union dans la fentre qui apparat. Le tri par valeurs
dcroissantes de lattribut a pour fonction de faire apparatre les lignes dans lordre le
plus naturel possible :
SELECT
FROM NombreInfirmieresJour
UNION
SELECT
FROM NbreAgesDifferentsInfirmieresJour ;
ORDER BY [ Lgende ] DESC;
Le rsultat est bien conforme ce quon souhaite, ceci prs que la solution MySQL
seffectue en largeur (le nombre total dinfirmires de jour est gauche du nombre dges
diffrents pour ces mmes infirmires) tandis que la solution Access/SQL Server est en
hauteur . Par ailleurs, la solution MySQL reste plus aise et plus naturelle.
123
ge
26
21
25
25
23
..
.
annes dtude
3
3
3
3
4
..
.
anciennet en nonatalit
0.00
0.00
0.00
0.00
0.00
..
.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On peut associer des alias aux tables sources pour dsambiguser les noms dattributs
identiques dans ces tables et faciliter (raccourcir) le renvoi ces tables. On peut oprer de
la mme manire pour les attributs dune relation. Lobjectif est alors dobtenir des noms de
colonnes plus parlants dans les tables rsultats. Cest ce quexemplifie le tableau 26 p. 124.
Les alias de colonne sont des chanes de caractres, dlimites soit par les guillemets soit
par lapostrophe. La prsence dune apostrophe interne ne pose pas de difficults quand la
chane est dlimite par des guillemets. Dans le cas contraire, une contre-oblique (slash)
indique quil faut prendre lapostrophe interne comme une simple apostrophe et non pas
comme la fin de la chane choisie comme alias de colonne.
Pour la requte abstraite suivante :
identifiant, ge et anciennet des infirmires nayant pas danciennet
R236
R ESTRICTION(anciennete = 0)[infirmieres]
,
les deux formes suivantes de requte sont donc admissibles et engendrent le tableau 26
p. 124 :
SELECT id AS I d e n t i f i a n t ,
age AS ge ,
etudes AS " annes d tude " ,
124
FROM i n f i r m i e r e s
WHERE anciennete = 0 ;
SELECT . . .
etudes AS annes d\ tude ,
FROM . . . ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
produit une erreur, puisque linterprte de commande rencontre dabord la chane annes d,
considre comme lalias de la colonne puis des caractres ( etude) en lair , sans rle,
puis une nouvelle chane qui commence aprs etude et dont il attend la fin, si bien quune
fois tap le point-virgule de fin de requte et le passage la ligne effectu, il ne se passe rien.
Lajout dune apostrophe qui termine la chane en cours dbouche sur un message derreur :
ERROR 1064 : You have an error in your SQL syntax. Check the manual that
corresponds to your MySQL server version for the right syntax to use near
tude, anciennete AS anciennet en nonatalit FROM infirmie...
Access
La solution la plus simple sous linterface est de faire appel aux menus lis aux regrouP
pements. Cliquer sur le signe mathmatique de somme le sigma majuscule
11 dans
la barre du haut, fait apparatre une nouvelle ligne, dOpratione dans la fentre de dfinition dune requte. Un menu droulant dans chaque case de cette ligne permet de choisir
dRegroupemente (valeur par dfaut cf. infra) ou une opration sur un ensemble de lignes
analogue celles manipules sous MySQL.
11
13
125
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
15
On notera que le titre ne peut comporter certains caractres : 16 , comme le prcise plus
17
Pour oprer un dcompte sur une partie seulement des lignes, on opre une restriction
en choisissant O comme opration dans la ou les colonne(s) servant la restriction. Cest
lquivalent du WHERE sous SQL, qui intervient en aval du regroupement (on opre dabord
la restriction et le regroupement opre sur les lignes restantes). On trouve ainsi en 18 la
requte pour le nombre dinfirmires travaillant de jour ou de nuit et en 19 celle pour le
nombre, lge moyen et lcart type pour lge des infirmires de jour : 20 .
18
19
20
126
P RMA
Exercice n 1 Fournir le nombre de fiches total, puis le nombre de fiches rdiges le jour 1.
Et continuer pour les jours 3, 5 et 7.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P HDRE
Exercice n 4 Donner le nombre de vers profrs par Phdre et o Phdre est le seul personnage intervenir.
Exercice n 5 Donner le nombre de vers prononcs par Oenone seule, le numro du premier
vers quelle profre, ainsi que le numro du dernier. Faire de mme pour Thse.
Exercice n 6 Que faudrait-il changer aux requtes de lexercice 5 pour prendre en compte
galement chaque fois les vers partags avec un autre personnage (par exemple ceux quOenone partage avec Phdre) ?
E SQUE
MySQL
La requte :
SELECT COUNT( ) AS A t t e s t a t i o n s ,
COUNT( DISTINCT derive ) AS drivs
FROM esque ;
opre le dcompte de toutes les lignes de la table via dCOUNT()e et celui de toutes les
valeurs distinctes de lattribut . Il y a 4 384 entits diffrentes dans la table , 4 384
attestations donc, mais seulement 3 406 drivs en -esque distincts. La requte fournit le
rsultat du tableau 27, p. 128. Son quivalent abstrait se prsente de la manire suivante :
R237
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE Attestations,
N OMBRE DE VALEURS DISTINCTES(derive) T ITRE drivs
)[esque]
Exercice n 7 Sachant que dans la table , la valeur 0 est utilise pour indiquer la nonrponse pour les attributs , et , fournir le nombre de lignes de cette table qui sont
situes dans le temps.
127
drivs
3406
2. Regroupements
' tri des infirmires par service
R144 t. 1 p. 87
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
T RI
SUR (service)[infirmieres]
R EGROUPER
SUR (service)[infirmieres]
' par service, nombre dinfirmires, ge minimum, maximum, moyen, anciennet minimum,
maximum, moyenne
R146 t. 1 p. 89
R EGROUPER
SUR (service)[infirmieres]
P AR GROUPE(
service TITRE Service,
N OMBRE DE LIGNES () TITRE nbre,
M INIMUM(age) TITRE ge min.,
M AXIMUM(age) TITRE ge max.,
M OYENNE(age) TITRE ge moy.,
M INIMUM(anciennete) TITRE anc. min.,
M AXIMUM(anciennete) TITRE anc. max.,
M OYENNE(anciennete) TITRE anc. moy.
)[<rsultat1 >]
' pour le lemme bb, nombre doccurrences de chaque
R147 t. 1 p. 90
associe
R ESTRICTION(lemme = bb)[occ_prema]
,
R EGROUPER
SUR (forme_depart)[<rsultat1>]
P AR GROUPE(
forme_depart,
N OMBRE DE LIGNES () TITRE o.
)[<rsultat2 >]
' pour le lemme bb, nombre doccurrences > 1 de chaque
R148 t. 1 p. 91
associe
R ESTRICTION(lemme = bb)[occ_prema]
,
,
R EGROUPER
SUR (forme_depart)[<rsultat1>]
P AR GROUPE(
forme_depart,
N OMBRE DE LIGNES () TITRE o.
)
AVEC (N OMBRE DE LIGNES () > 1)
[<rsultat2 >]
128
MySQL
Le tri des infirmires par service sobtient par la requte :
R144 t. 1 p. 87
SELECT
FROM infirmieres_princep s
ORDER BY s e r v i c e ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R145 t. 1 p. 87
SELECT
FROM infirmieres_princep s
GROUP BY s e r v i c e ;
Lobtention dindicateurs globaux pour chacun des regroupements oprs (NULL, Jour,
Nuit) par :
R146 t. 1 p. 89
SELECT
s e r v i c e AS Service ,
COUNT( ) AS nbre ,
MIN( age ) AS ge min . ,
MAX( age ) AS ge max. ,
FORMAT(AVG( age ) , 2) AS ge moy. ,
MIN( anciennete ) AS anc . min . ,
MAX( anciennete ) AS anc . max. ,
FORMAT(AVG( anciennete ) , 2) AS anc . moy.
FROM infirmieres_princep s
GROUP BY s e r v i c e ;
La restriction aux seules infirmires dont le service est effectivement connu sobtient en
ajoutant une clause WHERE (avant la clause GROUP BY), ce qui donne :
SELECT
...
FROM infirmieres_princep s
WHERE s e r v i c e IS NOT NULL
GROUP BY s e r v i c e ;
Lajout dune instruction dORDER BY o.DESCe aprs la clause dGROUP BYe trie le rsultat
par nombre doccurrences dcroissant. Lajout de HAVING permet de ne garder que les ralisations qui interviennent plus dune fois (R148 t. 1 p. 91).
129
SELECT
forme_depart ,
COUNT( ) AS o .
FROM occ_prema
WHERE lemme = bb
GROUP BY forme_depart
HAVING COUNT( ) > 1
ORDER BY o DESC ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
Le choix de lopration dRegroupemente effectue le regroupement selon les valeurs ou les
modalits de la ou des colonne(s) choisie(s). La requte 21 permet donc le calcul de lge
moyen et du nombre pour chaque groupe dinfirmires selon le service effectu (Jour, Nuit,
NULL).
21
Le rsultat brut 22 rend manifeste lintrt de donner des titres sinon plus parlants du
moins plus euphoniques que ceux que fournit par dfaut Access.
22
La requte 23 , dans le cadre dun regroupement par service effectu, effectue le dcompte
dinfirmires par groupe (appel dComptee pour la colonne et la moyenne pour les colonnes
et : 24 . On se reportera la requte 36 infra pour la manire darrondir un
nombre dcimal.
23
130
24
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
25
26
La requte 27 ajoute une contrainte sur les groupes rsultants du regroupement par
service : la colonne ne doit pas contenir la marque NULL. Cest lquivalent dune clause
HAVING en SQL.
27
Le rsultat ne comprend plus que les 2 lignes qui obissent cette contrainte : 28 .
28
30
31
La requte 32 est une simple modification de la prcdente, elle naffiche pas la premire
colonne, qui ne sert qu la restriction au lemme vis.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
32
La requte 33 ajoute une condition sur les regroupements retenus : pour figurer dans le
rsultat, le compte doit tre suprieur 1. Cest lquivalent de dHAVING COUNT() > 1e. On
limine ainsi les hapax. Par ailleurs, on trie les lignes par nombre de lignes dcroissant.
2.1.
33
' pour chaque regroupement des bbs par sexe, sexe, nombre dindividus et pourcentage
par rapport au total
R149 t. 1 p. 91
R EGROUPER
,
SUR (sexe)[bebes]
P AR GROUPE(
sexe TITRE Sexe,
N OMBRE DE LIGNES() TITRE nbre,
N OMBRE DE LIGNES() / 121 * 100 TITRE %
)[<rsultat1 >]
' pour chaque regroupement des bbs selon la situation J3, sexe, nombre dindividus et
pourcentage par rapport au total
R150 t. 1 p. 92
R EGROUPER
,
SUR (etat_j3)[bebes]
P AR GROUPE(
etat_J3,
N OMBRE DE LIGNES () TITRE nbre,
N OMBRE DE LIGNES () / 121 * 100 TITRE %
)[<rsultat1 >]
' pour chaque regroupements des bbs par sexe puis par situation J3, sexe, situation
J3, nombre dindividus et pourcentage par rapport au total
132
R151 t. 1 p. 93
R EGROUPER
,
SUR (sexe,
etat_j3)[bebes]
P AR GROUPE(
sexe TITRE Sexe, etat_J3,
N OMBRE DE LIGNES () TITRE nbre,
N OMBRE DE LIGNES () / 121 * 100 TITRE %
)[<rsultat1 >]
' pour chaque regroupements des bbs par situation J3 puis par sexe, sexe, situation
J3, nombre dindividus et pourcentage par rapport au total
R152 t. 1 p. 93
R EGROUPER
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SUR (etat_j3,
sexe)[bebes]
P AR GROUPE(
sexe TITRE Sexe, etat_J3,
N OMBRE DE LIGNES () TITRE nbre,
N OMBRE DE LIGNES() / 121 * 100 TITRE %
)[<rsultat1 >]
MySQL
133
R152 t. 1 p. 93
SELECT
sexe AS Sexe ,
etat_J3 ,
COUNT( ) AS nbre ,
FORMAT(COUNT( ) / 121 100, 2) AS %
FROM bebes_princeps
GROUP BY e t a t _ j 3 , sexe ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
34 correspond la R149 t. 1 p. 91. Son rsultat figure en 35 .
34
35
Le rsultat 37 de la requte 36 (R150 t. 1 p. 92) fait appel, pour laguer les dcimales,
la fonction FORMATNUMBER(<nombre dcimal> ; <nombre de dcimales conserver aprs le
sparateur dcimal>).
36
37
La requte 38 opre un regroupement sur le sexe puis sur ltat J3 des bbs. Cela
permet le dcompte des lignes correspondant au croisement des modalits de ces deux variables : 2 pour le sexe et 3 pour ltat : en ranimation, dcd(e) ou sorti(e) du service de
ranimation.
134
38
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La requte 39 est une variante : elle ajoute le calcul du pourcentage pour chacun des
cas de figure, comme le montre le rsultat 40 (il reste conserver un nombre raisonnable
de chiffres dcimaux). Elle correspond la R151 t. 1 p. 93. Pour obtenir ce pourcentage, on fait
appel, en le mettant entre crochets, au nom donn un attribut calcul, le dcompte
du nombre de valeurs de lattribut pour un regroupement des attributs et .
39
40
2.2.
Pourcentage de fiches J1 Le calcul de pourcentage dans cet exemple comme dans les
prcdents suppose de dterminer leffectif total de rfrence. Cette dtermination peut dcouler dune requte pralable. On peut heureusement saffranchir de ce pr-requis, comme
le montre la requte suivante (tableau 28(haut) p. 136) :
R238
P AR GROUPE(
J1,
S OMME (S I(jour = 1, 1, 0)) T ITRE fiches,
S OMME (S I(jour = 1, 1, 0)) / N OMBRE DE
T ITRE %
)[fiches_originelles]
LIGNES ()
* 100
e
MySQL
135
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Fiches
1017
J1
327
% J1
32.15
J3
287
fiches
327
% J3
28.22
%
32.15
J7
225
% J7
22.12
J15
178
% J15
17.50
SELECT
J1 ,
SUM( IF ( jour = 1 , 1 , 0 ) ) AS f i c h e s ,
SUM( IF ( jour = 1 , 1 , 0 ) ) / COUNT( ) 100 AS %
FROM f i c h e s _ o r i g i n e l l e s ;
Access
Dans la requte 41 , la fonction VraiFaux, dont les arguments sont spars par des pointsvirgules, donne naissance l aiguillage IIF en SQL Server, tandis que Somme y correspond
SUM. La premire colonne du rsultat 42 , renomme Moment, contient la valeur littrale
"J1", ce que signale lencadrement par les guillemets.
41
42
volution des dnominations des bbs Le tableau 29 p. 137 utilise la mme dmarche
pour esquisser lvolution des dnominations des bbs du jour 1 au jour 15. La requte
sous-jacente, abrge, montre la complexit des conditions qui peuvent tre employes :
136
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R239
327
287
225
178
bb
248
212
172
127
R EGROUPER
,
f.
%
75.84
73.87
76.44
71.35
garon
5
4
4
6
fille
1.53
1.39
1.78
3.37
31
34
28
21
9.48
11.85
12.44
11.80
prma
3
3
0
0
%
0.92
1.05
0.00
0.00
enfant
14
15
11
13
%
4.28
5.23
4.89
7.30
SUR (jour)[fiches_originelles]
P AR GROUPE(
N OMBRE DE LIGNES() T ITRE f.,
S OMME (S I(Texte RESSEMBLANT [Bb][Ee.]?[Bb][Ee.]?, 1,
0)) T ITRE bb,
S OMME (S I(Texte RESSEMBLANT [Bb][Ee.]?[Bb][Ee.]?, 1,
0)) / N OMBRE DE LIGNES() * 100 Titre %,
...
)[<rsultat1 >]
On vrifie en effet la prsence dexpressions rgulires dans chaque fiche. Une fiche peut
dailleurs contribuer aux effectifs de plusieurs colonnes. Le tableau le montre, prma(tur)
nest employ quaux jours 1 et 3, bb se tasse au fil du temps, tandis quune perception
sexue progresse, plus pour garon que fille, sans que le dcalage entre les deux mots soit
combl. Le lemme Enfant prend galement plus de place.
MySQL
R239 p. 137
, 1, 0))
, 1, 0))
1, 0))
1, 0))
137
2.3.
Regroupements temporaires
MySQL
Un regroupement repose sur les diffrentes valeurs ou modalits dune variable. On peut
souhaiter oprer des regroupements temporaires, qui naffectent pas les valeurs effectives
de la table utilise. Loprateur CASE fonctionne comme une sorte daiguillage qui associe
chaque voie une condition et une valeur de sortie, et qui peut utiliser ventuellement une
voie dchappement, introduite par ELSE, pour couvrir tous les autres cas :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
CASE
WHEN <condition 1 > THEN <valeur 1 >
...
WHEN <condition k > THEN <valeur k >
[ELSE <valeur dans l e s autres cas >]
END
La requte :
SELECT DISTINCT poids_naissance
FROM bebes_princeps
LIMIT 10 ;
La requte
SELECT
CASE
WHEN poids_naissance < 750 THEN < 750
WHEN poids_naissance > 1000 THEN > 1000
ELSE 7501000
END
AS Classe poids naissance
FROM bebes_princeps
LIMIT 10 ;
138
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Rien nempche ds lors doprer des regroupements sur de telles valeurs calcules. Cest ce
queffectue la requte :
SELECT
CASE
WHEN poids_naissance < 750 THEN < 750
WHEN poids_naissance > 1000 THEN > 1000
ELSE 7501000
END
AS Classe poids naissance ,
COUNT( ) AS o .
FROM bebes_princeps
GROUP BY
CASE
WHEN poids_naissance < 750 THEN < 750
WHEN poids_naissance > 1000 THEN > 1000
ELSE 7501000
END ;
o.
44
30
47
P RMA
Exercice n 8 Sachant quil y a 121 bbs concerns par ltude, calculer la rpartition en
nombre de bbs et en pourcentage entre accouchement par csarienne et par voie basse
ainsi que celle entre naissance dite locale, lhpital o seffectue ltude, et arrive lhpital
aprs la naissance.
Exercice n 9 En utilisant les regroupements, donner le nombre et le pourcentage de fiches
rdiges par jour de vie des bbs tudis (les rsultats seront proches de ceux du tableau 28(bas)
p. 136), partir du moment o lon sait le nombre total de fiches, 1017.
Exercice n 10 Calculer en un seul tableau le nombre et le pourcentage de bbs qui sont
encore dans le service de ranimation chaque tape (J3 J15).
139
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Ventilation
intub
non reponse
sonde nasale
non
Sdation
non
hypnovel ou fentanyl
canadou
non reponse
Il sagit dans un premier temps, en utilisant les regroupements, de calculer, pour chaque
variable, le nombre de fiches et le pourcentage de chaque modalit. Dans un deuxime temps,
en utilisant les techniques de calcul de pourcentage prsentes supra, fournir la rpartition
des modalits, en nombre et en pourcentage de fiches, au fil des jours.
Exercice n 12
(Access seulement)
Il sagit dutiliser lanalyse croise fournie par Access pour examiner les interactions entre :
sexe et sdation ;
jour-sexe et sdation ;
jour-sexe et ventilation.
Par jour-sexe, on entend le regroupement des informations sur la sdation ou sur la ventilation dabord par jour et au sein dun jour, par sexe. Cela permet dopposer par exemple les
filles et les garons au jour 1.
On prparera, en entre de toutes ces analyses croises, une table (ou une requte) ayant
pour attribut bb, sexe, fiche, jour, sdation et ventilation.
Exercice n 13 (MySQL seulement) En utilisant CASE, regrouper les infirmires selon les
classes danciennet distingues par lquipe mdicale : moins de 1 an, entre 1 et 5 ans, plus
de 5 ans. Dans un deuxime temps, croiser ce regroupement avec le service des infirmires.
Quelles conclusions peut-on en tirer ?
Exercice n 14
(Access seulement)
Lanalyse croise fournie par Access permet dexaminer les interactions entre service dune
part et classe danciennet dautre part, selon les classes choisies par lquipe mdicale
(cf. exercice prcdent).
Une premire tape est dassocier chaque anciennet prsente dans la table la
classe dont elle relve. Plutt que de modifier la table , une manire de faire consiste
constituer une table de toutes les valeurs de lattribut
de la table , dajouter
cette table un nouvel attribut, , et dutiliser les requtes Mise jour dAccess
pour donner cet attribut la valeur idoine en fonction de la valeur correspondante de lattribut
.
140
Une deuxime tape consiste prparer la table (ou la requte) qui servira de matire
premire lanalyse croise. Elle doit fournir lidentifiant dune infirmire, son service, sa
classe danciennet.
La troisime tape est lanalyse croise proprement parler.
Exercice n 15 Donner les 10 lemmes les plus frquents de la table
frquence, par ordre de frquence dcroissante.
avec leur
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On se limitera dans un deuxime temps aux lemmes qui ont une catgorie raisonnable ,
cest--dire commenant par A(djectif), R (pour AdveRbe), S (pour PrpoSition), D(terminant),
V(erbe), C(onjonction) et P(ronom).
P HDRE
Regroupements par associations de personnages
R240
La requte :
P ROJECTION(
...
numero_vers,
personnage_s,
partage_en
)[<rsultat1 >]
T RI
permet de dgager les vers de Phdre partags entre personnages et de trier en fonction des
personnages concerns chaque fois. Dans le tableau 30, p. 142, lalternance horizontale
gris/blanc dgage les groupes potentiels, la colonne grise met en vidence lattribut servant
aux regroupements.
Le remplacement dans R240 de :
T RI SUR
par :
R EGROUPER SUR
cre les groupes en fonction de lattribut ou des attribut(s) suivant cette expression. La requte
modifie :
R241
R EGROUPER
P AR GROUPE(
...
numero_vers,
personnage_s,
partage_en,
...
)[<rsultat2 >]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
numero_vers
487
518
524
1339
399
462
1425
670
725
463
151
321
179
259
260
264
835
839
909
1219
1225
1252
205
1645
157
246
711
262
763
325
1619
65
140
727
562
922
927
1469
914
1188
1491
1493
personnage_s
ARICIE HIPPOLYTE
ARICIE HIPPOLYTE
ARICIE HIPPOLYTE
ARICIE HIPPOLYTE
ARICIE ISMENE
ARICIE ISMENE
ARICIE THESEE
HIPPOLYTE PHEDRE
HIPPOLYTE THERAMENE
ISMENE HIPPOLYTE
OENONE HIPPOLYTE
OENONE PANOPE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE
OENONE PHEDRE OENONE
PANOPE THESEE
PHEDRE OENONE
PHEDRE OENONE
PHEDRE OENONE
PHEDRE OENONE PHEDRE
PHEDRE OENONE PHEDRE
PHEDRE PANOPE
PHEDRE THESEE
THERAMENE HIPPOLYTE
THERAMENE HIPPOLYTE
THERAMENE HIPPOLYTE
THERAMENE HIPPOLYTE THERAMENE
THESEE HIPPOLYTE
THESEE HIPPOLYTE
THESEE PANOPE
THESEE PHEDRE
THESEE PHEDRE THESEE
THESEE THERAMENE
THESEE THERAMENE
partage_en
...
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
2
2
2
2
3
3
2
2
2
2
2
3
2
2
2
2
3
2
2
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
142
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
R242
numero_vers
487
399
1425
670
725
463
151
321
179
205
1645
157
262
325
1619
65
562
922
1469
914
1188
1491
personnage_s
ARICIE HIPPOLYTE
ARICIE ISMENE
ARICIE THESEE
HIPPOLYTE PHEDRE
HIPPOLYTE THERAMENE
ISMENE HIPPOLYTE
OENONE HIPPOLYTE
OENONE PANOPE
OENONE PHEDRE
OENONE PHEDRE OENONE
PANOPE THESEE
PHEDRE OENONE
PHEDRE OENONE PHEDRE
PHEDRE PANOPE
PHEDRE THESEE
THERAMENE HIPPOLYTE
THERAMENE HIPPOLYTE THERAMENE
THESEE HIPPOLYTE
THESEE PANOPE
THESEE PHEDRE
THESEE PHEDRE THESEE
THESEE THERAMENE
partage_en
2
2
2
2
2
2
2
2
2
3
2
2
3
2
2
2
3
2
2
2
3
2
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
R EGROUPER
P AR GROUPE(
personnage_s,
C OMPTE(personnage_s) T ITRE nbre v.
)[<rsultat2 >]
SUR (nbre
v.)[<rsultat3 >]
on garde uniquement les associations de personnages dans un vers de Phdre qui se produisent plus dune fois, comme le montre le rsultat du tableau 33, p. 144. Ces associations
143
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R242 p. 143
personnage_s
ARICIE HIPPOLYTE
ARICIE ISMENE
ARICIE THESEE
HIPPOLYTE PHEDRE
HIPPOLYTE THERAMENE
ISMENE HIPPOLYTE
OENONE HIPPOLYTE
OENONE PANOPE
OENONE PHEDRE
OENONE PHEDRE OENONE
PANOPE THESEE
PHEDRE OENONE
PHEDRE OENONE PHEDRE
PHEDRE PANOPE
PHEDRE THESEE
THERAMENE HIPPOLYTE
THERAMENE HIPPOLYTE THERAMENE
THESEE HIPPOLYTE
THESEE PANOPE
THESEE PHEDRE
THESEE PHEDRE THESEE
THESEE THERAMENE
nbre v.
4
2
1
1
1
1
1
1
10
1
1
3
2
1
1
3
1
2
1
1
1
2
sont en outre tries par nombre de vers dcroissant. La paire PhdreOenone occupe une
place centrale (15 vers sur 28).
MySQL
La requte R240 p. 141 se concrtise en :
nbre v.
10
4
3
3
2
2
2
2
144
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
La requte 43 (R242 p. 143) opre un regroupement sur les valeurs distinctes de la colonne
. Entrent dans les groupes constitus uniquement les lignes pour lesquelles
est plus grand que 1 : le choix de la valeur dOe dans la colonne correspondante est
ce qui permet ddicter cette condition de restriction en amont du regroupement. Pour chaque
groupe, on demande, dans la colonne du milieu, le dcompte des lignes via le dcompte des
valeurs dune colonne, en loccurrence .
43
La requte 44 (R243 p. 143) ajoute une condition de deuxime niveau, sur les groupes
constitus. Ne sont prservs dans la table rsultat que les groupes pour lesquels la valeur de
la colonne
est suprieure 1. Cest liminer les hapax des associations constates de
personnages.
44
145
Vers partags par acte et par scne Si lon souhaite replacer ces partages de vers dans
lensemble de la pice, par acte donc, ou par scne, on fera appel aux requtes suivantes, qui
dcomptent dune part le nombre de vers par acte ou par scne et dautre part le nombre de
vers partag au sein de chaque acte ou de chaque scne :
R244
R EGROUPER
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R245
P AR GROUPE(
acte T ITRE Acte,
N OMBRE DE LIGNES() T ITRE nbre v.,
S OMME (S I(partage_en = 1, 1, 0)) T ITRE v. partags
)[<rsultat1 >]
R EGROUPER SUR(acte, scene)[vers]
AVEC S OMME (S I(partage_en = 1, 1, 0)) > 0
SUR (acte)[vers]
P AR GROUPE(
acte T ITRE Acte,
scene T ITRE scne,
N OMBRE DE LIGNES() T ITRE nbre v.,
S OMME (S I(partage_en = 1, 1, 0)) T ITRE v. partags
)[<rsultat1 >]
Le rsultat de ces requtes (tableau 34, p. 147) distingue les deux premiers actes des trois
autres, et bien sr, met en vidence la place singulire de la scne 3 de lacte I : laveu de
Phdre Oenone.
MySQL
R244 p. 146
R245 p. 146
SELECT acte AS Acte ,
scene AS scne ,
COUNT( ) AS nbre v . ,
SUM( IF ( partage_en = 1 , 0 , 1 ) ) AS v . partags
FROM vers GROUP BY acte , scene
HAVING SUM( IF ( partage_en = 1 , 0 , 1 ) ) > 0 ;
Access
La requte 45 (R244 p. 146) correspond la requte SQL Server :
SELECT Vers . acte AS Acte ,
Count ( Vers . numero_vers ) AS [ nbre v ] ,
Sum( I I f ( [ partage_en ] = 1 , 0 , 1 ) ) AS [ vers partags ]
FROM Vers
GROUP BY Vers . acte ;
146
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
nbre v.
366
370
264
328
326
v. partags
13
11
7
4
7
R245 p. 146
Acte
I
I
I
I
II
II
II
II
II
III
III
III
III
IV
IV
V
V
V
V
V
scne
I
II
III
IV
I
II
III
V
VI
I
III
IV
V
IV
VI
I
III
V
VI
VII
nbre v.
142
10
164
20
97
97
16
133
23
76
88
8
67
26
115
82
37
27
106
61
v. partags
2
1
8
2
3
3
1
2
2
1
3
1
2
1
3
1
1
1
2
2
147
45
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Exercice n 16 Sachant que Phdre compte 1654 vers, en utilisant la table et les
regroupements, fournir pour chaque syllabe le nombre de fois o elle est accentue et le
pourcentage correspondant.
Exercice n 17 Pour chacun des personnages, en utilisant les techniques de calcul de pourcentage prsentes supra, dterminer le nombre total de vers dans lesquels il intervient, le
nombre dentre eux qui sont partags avec un autre personnage, et le pourcentage que les
vers partags reprsentent dans ce rle.
Exercice n 18 Pour Phdre, Hippolyte, Thse et Aricie, successivement, fournir un tableau
avec les adjectifs, les verbes, les noms employs uniquement par ce personnage et ayant au
moins deux occurrences dans Phdre. On prendra soin de minusculiser systmatiquement
les mots, dans la mesure o les mots de la table gardent les ventuelles majuscules
dinitiale de vers ou de dbut de phrase.
En MySQL, la minusculation sobtient par appel la fonction LOWER(<chane>). Lquivalent SQL Server est LCASE(<chane>) et pour Access : MINUSCULE(<chane>).
Exercice n 19 Mme chose, sauf que les mots retenus doivent tre en plus la rime, en
dernire position dans le vers.
E SQUE
Exercice n 20 Donner le nombre de drivs en -esque pour lesquels soit on ne connat pas
la catgorie (marque NULL ou chane vide) soit il y a hsitation (marque par un ?) sur la
catgorie.
Exercice n 21 Fournir les auteurs dont plus de 5 attestations figurent dans la table ,
avec le nombre correspondant dattestations, en triant par occurrences croissantes dattestations.
Oprateurs numriques
MySQL
Oprateurs numriques :
somme (+),
148
fin exprience
2000-09-11
nombre de jours
544
Dbut exprience
17 03 99
fin exprience
11 09 2000
nombre de jours
544
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R247 p. 150
diffrence (-),
division (/),
reste de la division entire (%),
valeur absolue dun nombre (ABS),
arrondi vers le bas (FLOOR) ou vers le haut (CEILING),
formatage du nombre de dcimales souhait (FORMAT).
comptage (COUNT),
somme (SUM),
moyenne (AVG),
cart-type (STD),
minimum (MIN),
maximum (MAX). . .
P AR GROUPE(
M INIMUM(jour_naissance) T ITRE Dbut exprience,
M AXIMUM(jour_naissance) T ITRE fin exprience,
J OURS P OUR D ATE(M AXIMUM(jour_naissance)) - J OUR P OUR D ATE(M INIMUM(jour_naissance)) T ITRE nombre de jours
)[bebes]
On remarque que les fonctions M INIMUM(<attribut>) et M AXIMUM(<attribut>) ont un comportement qui sadapte au type dattribut. Si lattribut correspond des valeurs numriques,
M INIMUM retourne la plus petite, sil sagit de date, M INIMUM restitue la plus ancienne, sil
sagit de chanes de caractres, celle qui prcde les autres dans lordre lexicographique (o
a prcde b et a prcde ab, etc.).
149
MySQL
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R247
SELECT
DATE_FORMAT(MIN( jour_naissance ) , "% d %m % y " )
AS Dbut exprience ,
DATE_FORMAT(MAX( jour_naissance ) , "% d %m % Y" )
AS f i n exprience ,
...
Access
MySQL
La fonction
L ONGUEUR(<chane>)
retourne la longueur de la chane fournie en argument (0 pour la chane vide).
Pour obtenir le nombre de fiches remplies par chaque infirmire et leur longueur moyenne
(tableau 20 p. 97), la requte R248 opre un regroupement sur lidentifiant de linfirmire :
R248
R EGROUPER
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SUR (id_infirmiere)[fiches_originelles]
P AR GROUPE(
id_infirmiere T ITRE Infirmire,
N OMBRE DE VALEURS DISTINCTES(id_bebe) T ITRE nbre bbs,
S OMME (L ONGUEUR (texte)) / N OMBRE DE LIGNES() T ITRE
nbre moy. car.
)[<rsultat1 >]
T RI
SUR (nbre
SELECT i d _ i n f i r m i e r e AS I n f i r m i r e ,
COUNT( ) AS nbre f i c h e s ,
COUNT( DISTINCT id_bebe ) AS nbre bbs ,
SUM(LENGTH( t e x t e ) ) / COUNT( ) AS nbre moy. car .
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY i d _ i n f i r m i e r e
ORDER BY nbre moy. car . DESC ;
Access
La requte 47 regroupe les infirmires par identifiant, dcompte le nombre de fiches correspondantes, et calcule la moyenne des longueurs des fiches. La longueur, en nombre de
caractres, dune chane dcoule de la fonction NbCar(<chane>). La feuille de donnes rsultat
affiche cette moyenne, malheureusement sans se limiter un nombre de dcimales pertinentes. Il faudrait pour cela faire appel la fonction F ORMAT N UMBER.
47
premire tape 48 consiste choisir la ou les table(s) et ou requte(s) qui vont contribuer
cette tape.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
48
Une fois ce choix fait, dans le cas prsent, la requte formule supra, les attributs (champs
dans la terminologie dAccess) correspondants apparaissent 49 .
49
Lutilisateur dtermine alors le ou les attribut(s) quil veut voir figurer dans ltat. Dans cet
exemple, tous les attributs sont conservs 50 .
50
152
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
51
153
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
54
55
Laperu nest dailleurs pas entirement satisfaisant 56 : sur-titre driv du nom de sauvegarde de ltat, titres des colonnes non accentus ou cryptiques, et surtout, dluge maintenu
de chiffres dcimaux.
56
154
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
57
155
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
61
Sous MySQL, la clause ORDER BY est suivie dun nom de colonne ou dun alias de colonne.
Lorsquon veut trier sur une colonne calcule, on ne peut faire suivre ORDER BY de la formule
de calcul de cette colonne : une erreur en rsulterait. Si lon utilise dans lexemple supra une
clause dORDER BY SUM(LENGTH(texte)) / COUNT() DESC e le message, peu aidant, est :
ERROR 1111 : Invalid use of group function
Access et SQL Server nimposent pas cette contrainte sur ce qui suit ORDER BY.
MySQL
On peut se servir des oprateurs sur les chanes pour extraire le contexte dune souschane. Le tableau 36 p. 157 montre le contexte droit de bb dans certaines fiches. Il provient
de la requte R249 :
SELECT texte ,
LOCATE( bb , t e x t e ) AS pos . ,
SUBSTRING ( texte , LOCATE( bb , t e x t e ) , 25)
AS contexte d r o i t
FROM f i c h e s _ o r i g i n e l l e s
WHERE LOCATE( bb , t e x t e ) >= 1
ORDER BY RAND( )
LIMIT 5 ;
dLOCATE(<souschane>, <chane>)e retourne le numro du caractre o commence la souschane dans la chane ou 0 sinon. Le premier caractre de la chane est 1. Dans le premier
exemple du tableau, bb commence au 15e caractre de texte. Pour les lignes qui contiennent
effectivement bb (clause WHERE), lappel SUBSTRING permet dextraire un fragment de 25
car. de la colonne texte en commenant au caractre o dbute bb.
P RMA
P HDRE
MySQL
Les mots de Phdre ne sont ni lemmatiss ni mme normaliss. On peut trouver un mme
mot avec et sans une majuscule dinitiale de vers. Les deux ralisations seront comptes
comme deux formes diffrentes. Si lon ne prend pas en compte ce problme, un premier
dcompte des mots diffrents de Phdre, par la requte :
156
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R249 p. 156
texte
Ces un petit bb toujours trs exitable, agit ds quon
le touche, mme pour des soins non douloureux. Il gigote
dans tous les sens lve les bras les jambes se crispe. Il
arrive se calmer lorsque je lui mets une main sur la tete
et une main sur le thorax, il se calme ne bouge plus.
Cest un bb qui montre bien ce quil aime (les massages...) et ce quil naime pas (la toilette...) Quand la maman est l on snt le bb vraiment trs dtendu
Jessy est un bb calme en dehors des soins. Quand je
moccupe de lui, il est ractif, mais ses mouvements ne
sont pas dfensifs. Ne cherche pas arracher ses sondes
ou lectrodes. Il saggripe aux doigts, mais assez mollement. Par contre, bb veill, qui a trs souvent les yeux
ouverts, regarde, ragit bien la voix. Nest pas trs "accro" la ttine, sauf quand elle est imbibe de canadou (
ce moment l, tte avec vigueur).
Cest un bb pas trs tonique. Ouvre les yeux pendant
les soins. Sa peau est abme avec des plaies diffrents
endroits du corps, ventre trs ballonn, couleur gristre
Bb epuis par son infection. Sedate, elle ne reagit pas
aux soins bien que ce matin, elle ouvrait ses yeux pendant
la toilette. Malgr tout, ce bb semble absent et assez mal.
R250
pos.
15
contexte droit
bb toujours
trs exitab
10
bb
qui
montre
bien
ce q
bb calme en
dehors des
14
10
bb pas trs
tonique. Ou
148
bb semble
absent et ass
P AR GROUPE(
N OMBRE DE VALEURS
)[<rsultat1 >]
DISTINCTES (occ_car)
T ITRE Formes
soit :
SELECT COUNT( DISTINCT occ_car ) AS formes .
FROM occurrences
WHERE cat IN ( Dt/Pron , Nc , V , Adj , Np , Conj , Prp ,
Rel , Adv ) ;
indique un total de 3 067. Une deuxime requte, qui minusculise (LOWER) les mots qui ne
sont pas des noms propres, qui nont donc pas Np comme valeur de la colonne cat, fait
baisser ce total 2 810 :
SELECT COUNT( DISTINCT ( IF ( cat = Np , occ_car , LOWER( occ_car ) ) ) )
AS Formes
FROM occurrences
WHERE cat IN ( Dt/Pron , Nc , V , Adj , Np , Conj , Prp ,
Rel , Adv ) ;
Exercice n 22 En regroupant par personnage dabord, fournir les lemmes nominaux ayant
5 occurrences ou plus, en les triant par frquence dcroissante pour chaque personnage.
157
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R251 p. 158
derive
sardanapalesque
burtonnesque
hippopotamesque
livesque
gigolesque
farcesque
clonesque
bignolesque
arizonesque
poblanesque
base
Sardanapale
Burton
hippopotame
live
gigolo
farce
clone
bignole
Arizona
poblano
derive
dahutesque
viandesque
roploplesque
smaltesque
guerilla-esque
abracadabresque
outre-tombesque
clochardesque
epsilonnesque
canulardesque
base
dahu
viande
roploplo
Smalto
guerilla
abracadabra
outre-tombe
clachard
epsilon
canular
E SQUE
MySQL
Quand on examine les drivs en -esque, certains sont directement la concatnation de
la base et du suffixe (scoopesque sur scoop ; morpionesque sur morpion) tandis que dautres
donnent lieu un amnagement de la base (zorresque sur Zorro ; colonesque sur colonie).
On souhaite faciliter le reprage automatique de ce deuxime cas de figure. Cela revient
chercher les drivs qui, prcisment, ne sont pas la simple concatnation de la base et du
suffixe. On doit prendre trois prcautions, au moins, dans lnonc de la requte : liminer
les mots en plusieurs mots , comprenant un ou des espaces dune part, mettre en minuscules la base et le driv (pour permettre de rapprocher mariendbadesque et Mariendbad,
par exemple) dautre part, liminer enfin les bases inconnues (elles sont notes par un point
dinterrogation). Il en rsulte la requte R251 :
Une partie des dcalages constats figure dans le tableau 37, p. 158. On met jour ainsi :
NULL
La requte suivante permet de comparer lvolution du poids des bbs au fil des jours
selon que lon prend en compte ou non les valeurs 0 utilises par lquipe mdicale pour
signaler linformation manquante sur ce point. Le rsultat constitue le tableau 38 p. 159.
On suppose la fonction
158
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1
3
7
15
f.
327
287
225
178
nbre
fiches
poids
=0
0
3
4
2
moy.
moy.
poids
<> 0
carttype
carttype
poids
<> 0
diff.
moy.
diff.
carttype
961.21
841.44
825.13
911.80
961.21
850.33
840.07
922.16
276.70
231.47
217.99
201.24
276.70
215.84
189.30
177.21
-0.00
8.89
14.94
10.36
0.00
15.63
28.69
24.03
R EGROUPER SUR(jour)[signaletique_fiches]
P AR GROUPE(
jour T ITRE Jour,
N OMBRE DE LIGNES () T ITRE fiches,
S OMME (S I(poids = 0, 1, 0)) T ITRE nbre fiches poids = 0,
M OYENNE(poids) T ITRE moy.,
S OMME(poids) / S OMME (S I(poids = 0, 0, 1)) T ITRE moy.
poids <> 0,
E CAR T T YPE(poids) T ITRE cart-type,
E CAR T T YPE (N ULL S I(poids, 0)) T ITRE cart-type,
(S OMME(poids) / S OMME (S I(poids = 0, 0, 1))) M OYENNE(poids) T ITRE diff. moy.,
E CAR T T YPE(poids) - E CAR T T YPE (N ULL S I(poids, 0)) T ITRE
diff. cart-type
)[<rsultat1 >]
MySQL
SELECT
jour AS Jour ,
COUNT( ) AS f i c h e s ,
SUM( IF ( poids = 0 , 1 , 0 ) ) AS nbre f i c h e s poids = 0 ,
FORMAT(AVG( poids ) , 2 ) AS moy. ,
SUM( poids ) / SUM( IF ( poids = 0 , 0 , 1 ) ) AS moy. poids <> 0 ,
FORMAT(STD( poids ) , 2) AS carttype ,
FORMAT(STD( NULLIF ( poids , 0 ) ) , 2 ) AS carttype poids <> 0 ,
SUM( poids ) / SUM( IF ( poids = 0 , 0 , 1 ) )
FORMAT(AVG( poids ) , 2 ) AS d i f f . moy. ,
FORMAT(STD( poids ) , 2)
FORMAT(STD( NULLIF ( poids , 0 ) ) , 2 )
AS d i f f . carttype
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY jour ;
Pour chaque regroupement (un agrgat = les fiches pour un jour donn), lexpression :
159
renvoie la valeur 1 si le poids de la fiche est gal 0 et 0 sinon. La somme de tous les 1 dun
regroupement donne le nombre de fiches pour lesquelles le poids vaut 0. Le calcul inverse,
plus bas :
SUM( poids )
/ SUM( IF ( poids = 0 , 0 , 1 ) ) AS moy. poids <> 0
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
permet dobtenir le nombre de fiches dont le poids est diffrent de 0, nombre qui est alors
utilis pour calculer la moyenne des poids de lagrgat sans les fiches dont le poids vaut 0.
Lappel NULLIF, par exemple dans :
FORMAT(STD( NULLIF ( poids , 0 ) ) , 2 )
AS carttype poids <> 0
renvoie NULL, quand son premier argument, poids, a la mme valeur que son deuxime argument, ici 0. Il y a donc remplacement des 0 par la marque NULL. On se souvient que les
marques NULL sont ignores par des oprateurs comme COUNT, STD, etc.
P RMA
P HDRE
E SQUE
5. Solutions
Solution de lexercice n 1 p. 127 On obtient 1017 fiches au total, 327 fiches pour le jour
1, 286 pour le jour 3, 225 pour le jour 7, 178 pour le jour 15.
Une premire solution correspond une restriction aux lignes pour lesquelles vaut 1
et demande le calcul explicite du nombre de lignes qui restent.
R253
R ESTRICTION(jour = 1)[fiches_originelles]
,
P AR GROUPE(
N OMBRE DE LIGNES()
)[<rsultat1 >]
Une deuxime solution opre un regroupement sur lattribut , ne garde que ce qui
concerne le jour 1, et demande le dcompte des lignes prsentes
R254
REGROUPER SUR(jour)[fiches_originelles]
AVEC(jour =1)
,
P AR GROUPE(
N OMBRE DE LIGNES()
)[<rsultat1 >]
160
MySQL
Pour J1, la requte R253 p. 160 est de la forme :
SELECT COUNT( )
FROM f i c h e s _ o r i g i n e l l e s
WHERE jour = 1 ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT COUNT( )
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY jour
HAVING jour = 1 ;
SELECT COUNT( jour )
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY jour
HAVING jour = 1 ;
quivalentes, semble-t-il de la R254 p. 160, qui reposent sur un regroupement et dictent une
contrainte de deuxime niveau, en restreignant un des groupes issus de ce regroupement,
sont rejetes avec le message derreur :
Tout se passe comme si HAVING ne pouvait faire rfrence qu une colonne effectivement
employe dans la clause SELECT.
Par contre, ne pose pas de problme la requte proche :
SELECT jour ,
COUNT( )
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY jour
HAVING jour = 1 ;
Access
On trouve la ralisation de la R253 p. 160 en 62 .
62
En 64 le rsultat.
161
o.
32058
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
64
66
On notera quAccess nimpose pas les mmes restrictions que MySQL sur HAVING. On peut
en effet ne pas faire figurer dans les rsultats lattribut utilis comme condition de deuxime
niveau : 67 , comme le montre galement lquivalent SQL Server : 68 . Le rsultat figure en
69 .
67
68
69
162
poids min.
530
poids max.
1680
poids moy.
957.81
cart-type
270.30
poids moy.
954.53
cart-type
285.51
Garons
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
nbre
64
poids min.
480
poids max.
1660
MySQL
SELECT
COUNT( DISTINCT lemme ) AS Types ,
COUNT( ) AS o .
FROM occ_prema
WHERE c a t e g o r i e REGEXP [ANRSDVCP] ;
qui incarne :
R255
R ESTRICTION(
categorie R ESSEMBLANT
)[occ_prema]
,
[ANRSDVCP]
P AR GROUPE(
N OMBRE DE VALEURS DISTINCTES(lemme) T ITRE Types,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >
R ESTRICTION(sexe = Fille)[bebes]
,
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE nbre,
M INIMUM(poids_naissance) T ITRE poids min.,
M AXIMUM(poids_naissance) T ITRE poids max.,
M OYENNE(poids_naissance) T ITRE poids moy.,
E CAR T T YPE(poids_naissance) T ITRE cart-type
)[<rsultat1 >]
163
MySQL
,
,
poids moy. ,
carttype
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
La requte 70 est lquivalent de la requte MySQL supra. Aprs avoir rajout une colonne
dOpratione en cliquant sur le de la barre de menu du haut, et en aval dune restriction, qui
figure dans la dernire colonne, sont oprs le dcompte (1e col.), la recherche du minimum
(2e col.), le calcul de la moyenne (3e col.) et celui de lcart-type (4e col.).
70
73
74
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
76
Cette erreur dcoule du mauvais usage de la ligne dCritrese en aval dun regroupement.
Dans la 1e col., on a opr un compte, donc on obtient une valeur numrique, qui nest pas
comparable avec la chane de caractres Fille, comme le montre la fin de la requte engendre
en SQL Server :
HAVING ( ( ( Count ( Bebes_princeps . sexe ) ) = " F i l l e " ) ) ;
La requte 77 dclenche une erreur : 78 . Pourtant, part des colonnes omises, elle ne
diffre de la requte 72 que par la dernire colonne, coche dans le premier cas, non coch
dans le deuxime cas.
77
78
La requte SQL Server engendre figure en 79 . Tout se passe comme si lorsquun attribut
destin figurer dans la table rsultat dcoule dune opration sur les agrgats, tous les autres
attributs de la table rsultat doivent galement relever dune opration sur les agrgats.
79
De la mme manire, la requte 80 , parallle 70 , ceci prs que doit figurer dans le
rsultat la colonne o figure lopration O, provoque une erreur : 81 .
80
165
81
R ESTRICTION(personnage_s = PHEDRE)[vers]
,
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P AR GROUPE(
N OMBRE DE LIGNES ()
)[<rsultat1 >]
MySQL
SELECT COUNT( )
FROM vers
WHERE personnage_s = PHEDRE ;
Access
Une gnralisation de cette solution, pour ne pas crire autant de requtes que de personnages de Phdre, est le recours aux requtes paramtres. Une requte paramtre est
une requte qui, lorsquelle est dclenche, demande lutilisateur de complter la requte
en fournissant la valeur dun paramtre. Dans le cas prsent, le paramtre est le nom du
personnage dont on veut connatre le nombre de vers.
On voit en 83 comme formuler une requte paramtre. Ce qui est mis entre crochets (ces
crochets sont ncessaires) dans la colonne est le message qui, lors de lexcution
de la requte, est affich pour lutilisateur dans la fentre de dialogue lui demandant de fournir
une valeur : 84 .
83
166
84
Aprs quune valeur a t fournie en 85 , le reste de la requte est excut et son rsultat
fourni : 86 . Rexcuter la requte permet de demander le nombre de vers pour un autre
personnage.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
85
86
On peut utiliser un air de famille dans une requte paramtre. La requte 87 emploie
loprateur dapproximation dCommee pour comparer la valeur demande ou fournie par
lutilisateur et le contenu de la colonne .
87
Il est alors possible de recourir aux oprateurs dapproximation, comme en 88 : est vise une restriction aux lignes pour lesquelles la chane PHEDRE figure en nimporte quelle
position. La requte prcdente noprait que sur les lignes dans lesquelles cette chane occupait lentiret de la colonne . On constate dailleurs en 89 que le nombre de
vers dcompts est plus important quen 86 puisquil englobe galement les vers partags o
intervient Phdre.
88
89
167
R258
MIN(numero_vers)
143
MAX(numero_vers)
1328
COUNT(numero_vers)
224
MIN(numero_vers)
913
MAX(numero_vers)
1654
R ESTRICTION(personnage_s = OENONE)[vers]
,
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
COUNT(numero_vers)
202
P AR GROUPE(
N OMBRE DE LIGNES (),
M INIMUM(numero_vers),
M AXIMUM(numero_ligne)
)[<rsultat1 >]
Le tableau 41 p. 168 en haut donne le nombre de vers prononcs par Oenone seule, le
numro du premier vers quelle profre, ainsi que le numro du dernier. Le tableau en bas en
fait autant pour Thse.
MySQL
La requte concernant Oenone snonce ainsi :
Access
La requte :
90
diffre de la requte :
91
uniquement par le type dopration employ : dOe dans le premier cas, dExpressione dans le
second. Le premier donne naissance un WHERE :
168
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R ESTRICTION(
personnage_s R ESSEMBLANT
)[vers]
,
OENONE
P AR GROUPE(
N OMBRE DE LIGNES (),
M INIMUM(numero_vers),
M AXIMUM(numero_ligne)
)[<rsultat1 >]
Le tableau 41 p. 168 en haut donne le nombre de vers prononcs par Oenone seule, le
numro du premier vers quelle profre, ainsi que le numro du dernier. Le tableau en bas en
fait autant pour Thse.
MySQL
Par rappport la solution de lexercice prcdent, il suffit de remplacer
. . . WHERE personnage_s = OENONE ;
par :
. . . WHERE personnage_s REGEXP OENONE ;
%OENONE% ;
169
Access
92
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Solution de lexercice n 7 p. 127 Une date complte (jour, mois, anne) est telle que chacune des colonnes correspondantes a une valeur suprieure 0, qui sert noter labsence
de rponse. On notera quavec cette convention, la prsence dun zro pour le jour et le mois,
mais pas lanne, indique une attestation dont seule lanne est spcifie. Il en va de mme
pour la prsence dun zro seulement pour le jour : mois et anne sont seuls indiqus.
R260
R ESTRICTION(
annee > 0
E T jour > 0
E T mois > 0
)[esque]
,
P AR GROUPE(
N OMBRE DE LIGNES ()
)[<rsultat1 >]
MySQL
La requte :
SELECT COUNT( )
FROM esque
WHERE annee > 0 AND jour > 0 and mois > 0 ;
indique que 2 901 attestations de -esque sont assorties dune date apparemment complte.
Access
La premire solution en 93 cre une premire colonne qui est un attribut calcul par
appel la fonction Compte. Les autres colonnes reprsentent la condition de restriction.
93
Dans la deuxime solution 94 , lappel la fonction Compte est effectu sur la ligne
dOpratione. Dans les deux cas, le passage au mode SQL Server en 95 montre clairement
lalliance de lappel une fonction de dcompte et de la restriction. Les conditions de restriction sur les colonnes jour, mois et annee sont implicitement relies par un ET logique dans
linterface, ce que la version SQL explicite.
170
nbre
54
67
nbre
99
22
%
44.63
55.37
%
81.82
18.18
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
94
95
R EGROUPER
,
R262
P AR GROUPE(
accouchement T ITRE Accouchement,
Nombre de lignes() T ITRE nbre,
Nombre de lignes() / 121 * 100 T ITRE %
)[<rsultat1 >]
R EGROUPER
SUR (accouchement)[bebes]
SUR (lieu_naissance)[bebes]
P AR GROUPE(
lieu_naissance T ITRE Naissance,
Nombre de lignes() T ITRE nbre,
Nombre de lignes() / 121 * 100 T ITRE %
)[<rsultat1 >]
MySQL
Les requtes sont les suivantes :
SELECT
accouchement AS Accouchement ,
COUNT( ) AS nbre ,
COUNT( ) / 121 100 AS %
FROM bebes
GROUP BY accouchement ;
171
SELECT
lieu_naissance AS Naissance ,
COUNT( ) AS nbre ,
COUNT( ) / 121 100 AS %
FROM bebes
GROUP BY lieu_naissance ;
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
97
nbre
54
67
%
0
0
172
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R EGROUPER
,
fiches
327
287
225
178
%
32.15
28.22
22.12
17.50
SUR (jour)[fiches_originelles]
P AR GROUPE(
jour T ITRE Jour,
N OMBRE DE LIGNES () T ITRE fiches,
N OMBRE DE LIGNES() / 1017 * 100 T ITRE %
)[<rsultat1 >]
MySQL
Access
98
173
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R264
J3
105
%
86.78
J7
85
%
70.25
J15
73
%
60.33
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE bbs J1,
S OMME (S I(etat_J3 = ra, 1, 0)) T ITRE J3,
S OMME(S I(etat_J3 = ra, 1, 0)) N OMBRE DE LIGNES() * 100
T ITRE %,
S OMME (S I(etat_J7 = ra, 1, 0)) T ITRE J7,
S OMME(S I(etat_J7 = ra, 1, 0)) N OMBRE DE LIGNES() * 100
T ITRE %,
S OMME (S I(etat_J15 = ra, 1, 0)) T ITRE J15,
S OMME(S I(etat_J15 = ra, 1, 0)) N OMBRE DE LIGNES() *
100 T ITRE %
)[bebes]
MySQL
La requte correspondante est :
SELECT
COUNT( ) AS bbs J1 ,
SUM( IF ( etat_J3 = ra , 1 , 0 ) ) AS J3 ,
SUM( IF ( etat_J3 = ra , 1 , 0 ) ) / COUNT( ) 100 AS % ,
SUM( IF ( etat_J7 = ra , 1 , 0 ) ) AS J7 ,
SUM( IF ( etatJ7 = ra , 1 , 0 ) ) / COUNT( ) 100 AS % ,
SUM( IF ( etat_J15 = ra , 1 , 0 ) ) AS J15 ,
SUM( IF ( etat_J15 = ra , 1 , 0 ) ) / COUNT( ) 100 AS %
FROM bebes ;
Access
99 fournit lesprit de la solution.
99
174
101
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R EGROUPER
,
R266
P AR GROUPE(
sedation T ITRE Sdation,
N OMBRE DE LIGNES () T ITRE fiches,
N OMBRE DE LIGNES () / 1017 * 100 T ITRE %
)[<rsultat1 >]
T RI
R EGROUPER
,
SUR (sedation)[fiches_originelles]
SUR (jour)[fiches_originelles]
P AR JOUR(
N OMBRE DE LIGNES () T ITRE fiches,
S OMME (S I(sedation = non, 1, 0)) T ITRE Non,
S OMME (S I(sedation = non, 1, 0)) / N OMBRE DE LIGNES () *
100 T ITRE %,
S OMME (S I(sedation = hypnovel ou fentanyl, 1, 0)) T ITRE
Hypno. Fent.,
S OMME (S I(sedation = hypnovel ou fentanyl, 1, 0)) / N OM BRE DE LIGNES () * 100 T ITRE %,
S OMME (S I(sedation = canadou, 1, 0)) T ITRE canadou,
S OMME (S I(sedation = canadou, 1, 0)) / N OMBRE DE
LIGNES () * 100 T ITRE %
)[<rsultat1 >]
MySQL
SELECT sedation AS Sdation ,
COUNT( ) AS f i c h e s ,
COUNT( ) / 1017 100 AS %
FROM f i c h e s _ o r i g i n e l l e s
GROUP by sedation
ORDER BY % ;
SELECT jour AS Jour ,
COUNT( ) AS f i c h e s ,
SUM( IF ( sedation = non , 1 , 0 ) ) AS Non ,
175
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Jour
1
3
7
15
fiches
327
287
225
178
Non
298
258
209
161
%
91.13
89.90
92.89
90.45
fiches
3
11
77
926
Hypno. Fent.
27
23
13
14
%
0.29
1.08
7.57
91.05
%
8.26
8.01
5.78
7.87
canadou
1
5
3
2
%
0.31
1.74
1.33
1.12
Jour
1
3
7
15
fiches
327
287
225
178
non
75
94
71
65
%
22.94
32.75
31.56
36.52
fiches
1
272
305
439
sonde nasale
62
92
73
45
%
0.10
26.75
29.99
43.17
%
18.96
32.06
32.44
25.28
intub
190
101
81
67
%
58.10
35.19
36.00
37.64
=
=
=
=
=
=
=
= 1 , 1 , 0 ) ) AS J1 ,
= 1, 1, 0))
= 3 , 1 , 0 ) ) AS J3 ,
= 3, 1, 0))
= 7 , 1 , 0 ) ) AS J7 ,
176
SUM( IF ( v e n t i l a t i o n
/ SUM( IF ( jour
SUM( IF ( v e n t i l a t i o n
SUM( IF ( v e n t i l a t i o n
/ SUM( IF ( jour
FROM f i c h e s _ o r i g i n e l l e s
=
=
=
=
=
;
Access
Lquivalent de la R265 p. 175 est :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
102
le nom qui faisait rfrence au nombre de fiches du groupe courant est considr comme
un paramtre :
104
montre que cest la prsence de fiches entre crochets dans la partie ORDER BY qui est interprte comme un paramtre pour la requte.
Le principe de lquivalent de la requte R266 p. 175 est :
105
177
106
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La requte 107 ne diffre de la requte 105 que par le fait que la colonne , qui
totalise le nombre de lignes du groupe courant, nest pas cense figurer dans le rsultat (la
case Afficher nest pas coche).
107
Le comportement de la requte nest plus le mme. Elle devient une requte paramtre et
lutilisateur se voit demander la valeur donner au paramtre :
108
Solution de lexercice n 12 p. 140 Une premire tape utilise la jointure entre les tables
et
(sur lidentifiant du bb) pour conserver les attributs correspondant
lidentifiant du bb, son sexe, lidentifiant de la fiche, la sdation et la ventilation.
109
178
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
110
.
111
Les tapes des quatre analyses croises (dont seuls les rsultats sont fournis pour les trois
dernires) sont les suivantes :
) ;
2. choix de lattribut ou des attributs (au maximum 3) servant den-ttes de lignes, cest-dire des regroupements par rapport auxquels le croisement avec les valeurs/modalits
dun autre attribut sera opr ;
3. choix de lattribut dont les valeurs/modalits vont servir den-tte de colonne, cest--dire
de lattribut crois avec les regroupements oprs ltape prcdente ;
4. type de calcul opr lintersection (dcompte, minimum, maximum, etc) et attribut
(diffrent des attributs slectionns aux tapes prcdentes) utilis pour ce calcul ;
5. sauvegarde de la requte Analyse croise en lui fournissant un nom ;
6. excution et rsultat.
Ces tapes vont permettre dans un premier temps de faire le croisement entre sexe et ventilation.
On choisit la requte dentre constitue supra :
.
112
179
Lattribut est choisi comme en-tte de ligne. Cest par jour que se fera le regroupement
des lignes de la requte de dpart
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
113
Lattribut est retenu comme en-tte de colonne. Ses modalits vont donner lieu
autant de colonnes dans lanalyse croise.
114
Le rsultat du calcul qui va figurer lintersection entre un jour donn et une modalit de
lattribut est le dcompte du nombre de fiches correspondant, cest--dire lapplication de loprateur C OMPTE lattribut , qui a pour valeur lidentifiant de la fiche.
115
180
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
116
Son rsultat en 117 est identique celui du tableau 45 p. 176, pourcentages en moins.
117
181
MySQL
La premire requte pour regrouper les infirmires selon les classes danciennet distingues par lquipe mdicale est la suivante :
SELECT
CASE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Classe anciennet
1-5
<1
>5
o.
14
13
15
SELECT
s e r v i c e AS Service ,
CASE
WHEN anciennete < 1
WHEN anciennete > 5
ELSE 15
END
AS Classe anciennet ,
COUNT( ) AS o .
FROM infirmieres_princep s
GROUP BY
service ,
CASE
WHEN anciennete < 1
WHEN anciennete > 5
ELSE 15
END ;
THEN < 1
THEN > 5
THEN < 1
THEN > 5
On obtient :
Service
NULL
Jour
Jour
Jour
Nuit
Nuit
Nuit
Classe anciennet
<1
1-5
<1
>5
1-5
<1
>5
o.
1
11
11
7
3
1
8
182
Si les 3 classes sont peu prs quilibres lorquon considre toutes les infirmires, on
constate que cet quilibre rsulte de la conjonction de deux dsquilibres : les classes moins
de 1 an et entre 1 et 5 ans sont favorises par les infirmires de jour, tandis que les infirmires
de plus de 5 ans dominent nettement parmi les infirmires de nuit.
Solution de lexercice n 14 p. 140 Une premire tape consiste crer une table associant
une valeur donne de lattribut
la classe danciennet correspondante.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
121
On fait appel longlet dRequtee de la barre de menu du haut pour choisir une requte
Cration de table.
122
On se voit demander le nom de la table crer.
123
Un avertissement est mis, sur le nombre de lignes qui vont tre ajoutes cette nouvelle
table.
124
183
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
125
On ajoute un attribut
, de type Texte.
128
129
et
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
130
Le choix de dRequte Mise joure dans longlet dRequtee 122 de la barre de menu du
haut aboutit lajout dune ligne dMise joure dans la requte. On peut indiquer que lorsque
lattribut
est infrieur 1,
prend pour valeur moins de 1 an.
131
et on obtient
133
185
La deuxime tape consiste crer la table ou la requte qui servira de matire premire
lanalyse croise. La requte rsultante te est issue dune
jointure entre la table et la table
sur lidentit de valeur des
attributs . Elle fournit pour chaque identifiant dinfirmire le service et la classe
danciennet correspondants.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
134
La troisime tape est lanalyse croise proprement parle, via ce choix dans longlet
dNouveaue du volet dRequtese de la fentre de navigation dans la base de donnes.
On commence par choisir la table/requte dentre, ici la requte
te.
135
On choisit lattribut partir duquel oprer les regroupements et qui sera len-tte des
lignes : .
136
On choisit ensuite lattribut dont les valeurs/modalits constitueront les en-ttes des
autres colonnes du rsultat : .
186
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
137
On sauvegarde la requte Analyse croise.
139
Le rsultat permet de saisir aisment les dpendances entre les modalits des deux variables en question.
140
187
o.
27126
6781
2742
2462
1459
988
919
901
828
641
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
CIRC
.
le
,
bb
soin
trs
*
lemme
le
bb
soin
trs
et
son
de
un
tre
o.
2462
988
919
828
586
545
542
535
513
511
R EGROUPER
,
,
,
R268
SUR (lemme)[occ_prema]
P AR GROUPE(
lemme,
N OMBRE DE LIGNES () Titre o.
)[<rsultat1 >]
T RI
SUR (o.
D CROISSANT)[<rsultat2 >]
,
,
,
,
R EGROUPER
^[ANRSDVCP]
P AR GROUPE(
lemme,
N OMBRE DE LIGNES () Titre o.
)[<rsultat2 >]
T RI
SUR (o.
D CROISSANT)[<rsultat3 >]
MySQL
La premire requte est de la forme :
SELECT
lemme,
COUNT( ) AS o .
FROM occ_prema
GROUP BY lemme
ORDER BY o . DESC
LIMIT 10 ;
La seconde en diffre uniquement par lexpression rgulire utilise pour la restriction qui
a t ajoute :
188
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
nbre accents
221
620
698
484
107
1625
161
453
873
345
40
1650
%
13.36
37.48
42.20
29.26
6.47
98.25
9.73
27.39
52.78
20.86
2.42
99.76
Access
141
142
R EGROUPER
,
SUR (position)[positions]
P AR GROUPE(
position T ITRE Syllabe,
S OMME(accent) T ITRE nbre accents,
S OMME(accent) / 1654 * 100 T ITRE %
)[<rsultat1 >]
189
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Hippolyte : vers
362
vers partags
7
vers partags
14
%
5.00
%
3.87
Ismne : vers
34
vers partags
3
%
8.82
Oenone : vers
220
vers partags
18
%
8.18
Panope : vers
38
vers partags
4
%
10.53
Phdre : vers
485
vers partags
21
%
4.33
Thramne : vers
183
Thse : vers
234
vers partags
7
vers partags
10
%
3.83
%
4.27
MySQL
SELECT
position AS Syllabe ,
SUM( accent ) AS nbre accents ,
FORMAT(SUM( accent ) / 1654 100, 2) AS %
FROM positions
GROUP BY position ;
Access
143
Solution de lexercice n 17 p. 148 On commence par oprer une restriction sur les vers o
intervient le personnage. On compte un vers partag quand lattribut est suprieur
1. Le rsultat figure au tableau 48 p. 190.
190
R270
R ESTRICTION(
personnage C OMME %ARICIE%
)[vers]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE Aricie : vers,
S OMME (S I(partage_en >1, 1, 0)) T ITRE vers partags,
S OMME (S I(partage_en >1, 1, 0)) / N OMBRE DE LIGNES () *
100 T ITRE %
)[<rsultat1 >]
MySQL
SELECT
COUNT( ) AS A r i c i e : vers ,
SUM( IF ( partage_en > 1 , 1 , 0 ) ) AS vers partags ,
SUM( IF ( partage_en > 1 , 1 , 0 ) ) / COUNT( ) 100 AS %
FROM vers
WHERE personnage_s LIKE % ARICIE % ;
SELECT
...
FROM vers
WHERE personnage_s REGEXP ARICIE ;
Access
144 fournit une premire solution, dont le rsultat figure en 145 .
144
145
191
prexistante dont la valeur peut tre utilise, mais un paramtre. On obtient donc, sans le
dsirer, une requte paramtre, ce que montre le haut de lcran.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
146
La solution 147 (partie gauche de la requte) est trs proche de la prcdente, ceci prs
quelle nopre pas de restriction mais effectue le filtrage dans le calcul des colonnes fournir
en rsultat. On calcule le nombre de vers o Aricie est , cest--dire o la chane ARICIE
occupe elle seule la colonne .
147
On peut alors en 148 (partie droite de la requte) calculer le nombre de vers prononcs
un autre personnage : la valeur de la colonne Aricie moins la valeur de la colonne .
148
Noter en 150 que si lon dcoche la colonne , Access considre quon a dfini une
requte paramtre dont le paramtre, demand lutilisateur, est la valeur de .
192
150
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
o la valeur de la colonne nest pas dfinie et donc doit tre demande lutilisateur,
tandis quest engendre pour 147 et 148 la requte :
SELECT
Sum( I I f ( [ personnage_s ] Like ARICIE , 1 , 0 ) ) AS A r i c i e ,
Sum( I I f ( [ personnage_s ]= ARICIE , 1 , 0 ) ) AS seule ,
[ A r i c i e ] [ seule ] AS avec ,
[ avec ] / [ A r i c i e ]100 AS [%]
FROM Vers ;
R ESTRICTION(
cat P ARMI (Adj, Nc, Np, V)
)[occurrences]
,
SUR (cat,
o. D CROISSANT)[<rsultat3 >]
On commence par se restreindre aux mots dits pleins (adjectifs, noms communs, noms
propres et verbes) et par regrouper les occurrences dun mme mot (R EGROUPER SUR). On
193
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
occ_car
descendue
sensible
vains
odieuse
pouvante
suivi
prompt
perdue
vus
trouv
flatteurs
ferm
os
divers
Malheureuse
Insense
conseils
aveu
dtours
urne
tourments
penchant
oreille
cat
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Nc
Nc
Nc
Nc
Nc
Nc
Nc
o.
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
4
3
2
2
2
2
personnage
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
occ_car
tourment
desse
traits
fil
comble
Labyrinthe
Soleil
tremble
meurs
rougis
souffrir
pouvais
osai
implorer
aimer
ranimer
ft
laissais
soutiens
sduire
vitais
vis
nuire
Dlivre
mesure
fuyais
mourrai
voyaient
prier
brle
cat
Nc
Nc
Nc
Nc
Nc
Nc
Nc
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
o.
2
2
2
2
2
2
2
4
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
conserve uniquement les groupes, cest--dire les mots pleins, qui ne proviennent que dun
seul personnage : dN OMBRE DE VALEURS DISTINCTES(personnage) = 1e.
Dans ces groupes, on retient ceux prononcs par le personnage choisi et dont le nombre
doccurrences dpasse 1 : personnage = PHEDRE E T N OMBRE DE LIGNES () > 1.
Le tri est opr dabord par catgorie morpho-syntaxique, puis par frquence dcroissante.
MySQL
SELECT
personnage ,
occ_car ,
cat ,
COUNT( occ_car ) as o .
FROM occurrences
WHERE cat IN ( Adj , Nc , Np , V )
GROUP BY occ_car
HAVING COUNT( DISTINCT personnage ) = 1
AND personnage = PHEDRE
AND COUNT( occ_car ) > 1
ORDER BY cat , o . DESC ;
194
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
occ_car
adoucie
communs
sacrs
d
longue
sincre
auguste
droits
rcit
tutelle
obstacle
outrages
jeunesse
mensonge
histoire
entretien
querelle
successeur
sentiments
adresse
serment
exemple
intrt
dpouille
noms
oubli
sceptre
Pitthe
Sparte
pars
peuvent
Confier
vouloir
troubler
sortez
balancer
rprouve
pourrait
mouvoir
aviez
coutant
oubliez
trouve
cat
Adj
Adj
Adj
Adj
Adj
Adj
Adj
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Np
Np
V
V
V
V
V
V
V
V
V
V
V
V
V
V
o.
2
2
2
2
2
2
2
4
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
4
3
3
3
3
2
2
2
2
2
2
2
2
2
occ_car
Prsents
adieu
songe
Partez
honorer
cat
Nc
Nc
Nc
V
V
o.
3
2
2
3
2
195
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
occ_car
certains
immortelle
purg
outrag
tratre
bont
prison
accueil
embrassements
sclrats
vienne
jurait
condamner
fuir
soient
cat
Adj
Adj
Adj
Adj
Nc
Nc
Nc
Nc
Nc
Nc
V
V
V
V
V
o.
2
2
2
2
5
2
2
2
2
2
4
2
2
2
2
R272
R ESTRICTION(
cat P ARMI (Adj, Nc, Np, V)
E T fin_syl = 12
)[occurrences]
,
SUR (cat,
o. D CROISSANT)[<rsultat3 >]
MySQL
SELECT
personnage ,
occ_car ,
cat ,
COUNT( occ_car ) as o .
FROM occurrences
WHERE cat IN ( Adj , Nc , Np , V ) AND f i n _ s y l = 12
GROUP BY LOWER( occ_car )
196
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
occ_car
descendue
perdue
pouvante
divers
vainqueur
cheveux
dtours
enfers
outrage
souffrir
implorer
nuire
cat
Adj
Adj
Adj
Adj
Nc
Nc
Nc
Nc
V
V
V
V
o.
3
2
2
2
2
2
2
2
3
2
2
2
HAVING
COUNT( DISTINCT personnage ) = 1
AND personnage = PHEDRE
AND COUNT( occ_car ) > 1
ORDER BY cat , o . DESC ;
R ESTRICTION(
cat_derive EST NULL
O U cat_derive C OMME % ?%
)[esque]
,
P AR GROUPE(
N OMBRE DE LIGNES ()
)[<rsultat1 >]
MySQL
Il y a 139 drivs en -esque dont la catgorie est inconnue ou flottante, indiquent les 3
requtes suivantes, qui diffrent uniquement par la manire dexprimer le motif :
SELECT COUNT( )
FROM esque
WHERE cat_derive IS NULL
OR cat_derive LIKE % ? % ;
On notera que le point dinterrogation est un caractre spcial pour les expressions rgulires. On ne peut donc lemployer tel quel. Des formulations comme :
. . . WHERE cat_derive IS NULL OR cat_derive REGEXP ? ;
. . . WHERE cat_derive IS NULL OR cat_derive REGEXP \? ;
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le point dinterrogation ayant aussi un rle spcifique pour Access pendant les recherches
approximatives (il remplace un caractre quelconque), il ne peut tre employ comme tel et
doit figurer dans un contexte permettant de voir quil est pris littralement et non comme un
mta-caractre. Cest le cas entre crochets 151 ou prcd dune contre-oblique 152 . Dans
ce dernier cas, cependant, le nombre doccurrences nest mystrieusement pas tout fait le
mme en 153 : 134 au lieu de 139.
151
152
153
R EGROUPER SUR(auteur)[esque]
AVEC (N OMBRE DE LIGNES () > 5)
,
P AR GROUPE(
auteur
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
met en vidence la place singulire de San Antonio dans les attestations que rassemble la
table . On note galement quune petite diffrence dans le rendu de la coordination (et ou
&) aboutit sparer en 2 lignes les contextes dus aux deux Goncourt.
MySQL
198
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
auteur
Riou (A.)
Frappat (B.)
Qulin (J.-P.)
Baudou (J.)
Thibaudet (A.)
Legrand (D.)
Goncourt (E. & J. de)
Faurisson (R.)
Mortaigne (V.)
Heymann (D.)
Godard (C.)
Coljon (T.)
Rabelais (F.)
Fallet (R.)
Benaim (L.)
Gurin (P.)
Lonchampt (J.)
Daudet (L.)
Simon (C.)
Salmi (M., trad. par J. Chuzeville)
Zand (N.)
Van Vaerenbergh (O.)
Goncourt (E. de)
Bradfer (F.)
Montaigne (M. de)
Giraud (J.)
Goncourt (E. et J. de)
Balzac (H. de)
Marcelle (P.)
Georges (P.)
Dagen (P.)
Honorez (L.)
Verlaine (P.)
Boudard (A.)
San-Antonio
o.
6
6
6
6
6
6
6
6
6
7
7
7
7
7
7
7
7
8
8
8
8
9
9
11
11
14
14
15
16
17
17
17
20
25
449
199
SELECT
auteur ,
COUNT( auteur ) AS o .
FROM esque
GROUP BY auteur
HAVING COUNT( auteur ) > 5
ORDER BY o . ;
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
154
R ESTRICTION(cat = Nc)[occurrences]
R EGROUPER SUR(
personnage,
M INUSCULE(occ_car)
)[<rsultat1 >]
AVEC (N OMBRE DE LIGNES () >= 5)
P AR GROUPE (
personnage T ITRE Personnage,
M INUSCULE(occ_car) T ITRE mot,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
T RI SUR(
personnage,
o. D CROISSANT
)[<rsultat3 >]
Le rsultat figure au tableau 55 p. 201. Les mots sont minusculiss pour liminer les
majuscules artificielles de dbut de vers.
MySQL
SELECT
personnage AS Personnage ,
LOWER( occ_car ) AS mot ,
COUNT( ) AS o .
FROM occurrences
WHERE cat = Nc
GROUP BY
personnage ,
LOWER( occ_car )
HAVING COUNT( ) >= 5
ORDER BY personnage , o . DESC ;
200
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
mot
seigneur
yeux
pre
pre
dieux
coeur
madame
amour
fils
seigneur
sang
jour
voeux
me
lieux
vertu
madame
dieux
yeux
sang
fils
jour
amour
o.
13
7
5
14
11
10
10
10
7
7
6
5
5
5
5
5
12
10
8
7
7
5
5
Personnage
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
mot
yeux
coeur
fils
amour
ciel
sang
dieux
pre
poux
soin
jour
main
seigneur
crime
front
mre
hlas
horreur
remords
voeux
haine
nom
mort
fois
o.
20
20
13
12
11
11
10
9
9
8
8
8
8
7
7
6
6
6
6
6
6
6
5
5
Personnage
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
THERAMENE
THERAMENE
THERAMENE
THERAMENE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
mot
monstre
oenone
conseils
larmes
fureur
moment
raison
seigneur
hros
yeux
voix
fils
dieux
yeux
pre
lieux
coeur
sang
fois
voeux
o.
5
5
5
5
5
5
5
16
5
5
5
14
10
7
7
6
5
5
5
5
Access
La requte :
155
diffre trs lgrement de la version MySQL (sont retenus les mots dont le nombre doccurrences est strictement suprieur 5). Lquivalent SQL Server est :
SELECT Occurrences . personnage ,
LCase ( [ occ_car ] ) AS mot ,
Count ( Occurrences . occ_car ) AS o
FROM Occurrences
WHERE ( ( ( Occurrences . cat )= "Nc" ) )
GROUP BY Occurrences . personnage ,
LCase ( [ occ_car ] )
HAVING ( ( ( Count ( Occurrences . occ_car ) ) > 5 ) )
ORDER BY Occurrences . personnage ,
Count ( Occurrences . occ_car ) DESC;
201
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE V
Le calcul de la rpartition des fins de phrases selon les personnages et les principales
positions mtriques seffectue par des requtes proches sous MySQL et sous Access. Les
fonctions MySQL FORMAT et IF sont remplaces respectivement sous SQL Server par les
fonctions FORMATNUMBER et IIF. Elles correspondent la requte abstraite :
R276
R ESTRICTION(cat = SepPhrase)[occurrences]
,
,
R EGROUPER
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE fin de phrases,
S OMME (S I(debut_syl = 6, 1, 0)) T ITRE 6,
S OMME (S I(debut_syl = 6, 1, 0)) / N OMBRE
100 T ITRE %,
...
)[<rsultat2 >]
T RI
SUR (fin
DE LIGNES ()
de phrases)[<rsultat3 >]
MySQL
202
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
SELECT Occurrences . personnage ,
COUNT( Occurrences . numero_vers ) AS [ f i n de phrases ] ,
SUM( IIF ( [ debut_syl ]=6 , 1 , 0 ) ) AS [ s y l l 6 ] ,
FORMATNUMBER(SUM( IIF ( [ debut_syl ]=6 , 1 , 0 ) ) /
COUNT( ) 100, 2) AS [ % 6 ] ,
SUM( IIF ( [ debut_syl ]=12 , 1 , 0 ) ) AS [ s y l l 12] ,
FORMATNUMBER(SUM( IIF ( [ debut_syl ]=12 , 1 , 0 ) ) /
COUNT( ) 100, 2) AS [ % 12] ,
SUM( IIF ( [ debut_syl ] NOT IN ( 6 , 1 2 ) , 1 , 0 ) ) AS [ s y l l autre ] ,
FORMATNUMBER(SUM( IIF ( [ debut_syl ] NOT IN ( 6 , 12) , 1 , 0 ) ) /
COUNT( ) 100, 2) AS [ % autre ]
FROM Occurrences
WHERE ( ( ( Occurrences . cat )= " SepPhrase " ) )
GROUP BY Occurrences . personnage
ORDER BY [ f i n de phrases ] ;
La clause dORDER BY [fin de phrases]e peut scrire galement dORDER BY fin de phrasese.
Le rsultat figure en 1 .
1
Faute de place, une partie seulement de la requte formule via linterface graphique est
fournie en 2 .
2
On remarque que SUM et IIF sous SQL Server correspondent sous Access respectivement
dSommee et dVraiFauxe. Les arguments de cette dernire fonction sont spars par des
203
points-virgules et non par des virgules. Par contre, la fonction FORMATNUMBER reste inchange. Le calcul du pourcentage de syllabes en position 6 qui correspondent une fin de phrase
seffectue par lexpression :
% 6 : FormatNumber (Somme( VraiFaux ( [ debut_syll ] = 6 ; 1 ; 0) ) / Compte ( ) 100, 2)
On note en 3 quAccess, contrairement MySQL, ne semble pas accepter que des alias
de colonne portent le mme nom.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3. Les vers
3.1.
figure en 4 .
Access
La structure de la table
204
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Voyelles
Mtromtre
@
@@
ai
an
e
eu
i
in
o
oe
on
oo
ou
u
un
ywi
wa
win
exemple
le, que
flamme
pre, mme
puissance, amant
hymne, parler
yeux, lieu
vie, empire
rien, main
mort, personne
coeur, pleurs
raison, honte
autre, chose
vous, amour
vue, plus
communs, importuns
lui, ruine
moi, gloire
point, moins
exemple
yeux, lieu
lui, fuir
oui, ouest
Mtromtre
ln
lr
lt
lz
exemple
pas, point
tourment, fortune
pourquoi, conduire
troubler, bien
douleur, dieu
guerre, garantir
fatal, fille
superbe, audace
chtiment, charmer
rvler, victime
visage, jalousie
jour, g, manger
autel, calme
rive, sjour
madame, chemin
nuage, fortune
seigneur, poignard
Consonnes de liaison
Semi-voyelles
Mtromtre
y
yw
w
Consonnes
Mtromtre
p
t
k
b
d
g
f
s
sh
v
z
j
l
r
m
n
ny
Type
varchar(5) binary
varchar(5) binary
int(11)
varchar(255) binary
int(11)
varchar(200) binary
varchar(250) binary
Null
exemples
un empereur
respecter un amour
tout coup
les ennemis
(MySQL)
Key
Default
PRI
Extra
205
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Field
numero_vers
position
syll
voy
cat
accent
fin_mot
numero_ligne
Type
int(11)
int(11)
varchar(15) binary
varchar(5) binary
varchar(30) binary
int(11)
int(11)
int(11)
Null
Key
Default
1
1
Extra
0
0
PRI
auto_increment
4. Les positions mtriques
MySQL
figure en 5 .
206
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Type
int(11)
varchar(100) binary
int(11)
int(11)
varchar(100) binary
varchar(100) binary
varchar(100) binary
char(2)
varchar(5) binary
int(11)
int(11)
int(11)
int(11)
decimal(4,1)
decimal(4,1)
int(11)
int(11)
Null
Key
Default
1
(MySQL)
Extra
0
0
YES
ss
YES
0
0
0
0
0.0
0.0
0
PRI
auto_increment
5. Les mots
MySQL
La structure de la table
207
R277
,
R EGROUPER SUR(cat)[occurrences]
P AR GROUPE(
cat T ITRE Catgorie,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
fournit le nombre doccurrences de chaque catgorie (tableau 60 p. 209). On note que les espaces sont catgorises comme telles, ainsi que les diffrents types de sparateurs. La virgule
constitue un sparateur de groupe. Certaines ponctuations, comme le point dexclamation
ou le point dinterrogation, peuvent reprsenter tantt des sparateurs de groupe, tantt des
sparateurs de phrase.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La seconde requte :
SELECT LOWER( occ_car ) AS Mot ,
COUNT( ) AS o .
FROM occurrences
WHERE cat = Nc
GROUP BY LOWER( occ_car )
ORDER BY o . DESC
LIMIT 10 ;
,
,
R ESTRICTION(cat = Nc)[occurrences]
R EGROUPER SUR(
M INUSCULE(occ_car)
)[<rsultat1 >]
P AR GROUPE(
M INUSCULE(occ_car) T ITRE Mot,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
T RI
SUR (o.
D CROISSANT)[<rsultat3 >]
rapatrie les 10 premiers noms par nombre doccurrences dcroissant. Il suffit de changer la
condition de restriction pour obtenir le rsultat pour une autre catgorie. On a pris la prcaution de minusculiser ces mots pour que les majuscules dinitiale de vers ou de phrase ne
viennent pas brouiller les rapprochements. Les tableaux 61 et 62 p. 210 et p. 211 donnent les
rsultats pour les catgories des mots dits pleins et pour les mots dits outils respectivement.
Les requtes pour les autres catgories que diffrent par la catgorie cible. Pour les noms
propres ( ), on ne minusculise pas la valeur de lattribut . Examiner ces tableaux permet de comprendre les choix dtiquetage, de catgorisation qui ont t faits et donc den tenir
compte, de composer avec, lors des requtes. On constate ainsi que la catgorie Adj rassemble
galement les participes passs. On remarque des erreurs dtiquetage (il nom propre). On voit
la place des variations morphologiques (je et j ; de, d, du, des).
Exercice n 2 En utilisant Access et son interface (et non le mode SQL direct), formulez la requte permettant de connatre la frquence de chaque catgorie (hors espaces et sparateurs)
de la table .
208
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
o.
1403
855
412
4206
11574
2582
279
1427
586
1117
2
1
1
1009
283
47
2464
Exercice n 3 En utilisant Access et son interface (et non le mode SQL direct), donnez les
10 adjectifs les plus frquents de la table occurrences. Le rsultat sera identique celui
du tableau 61 p. 210. Veillez minusculiser les mots, en utilisant la fonction SQL Server
LCASE(<chane transformer>) ou bien son quivalent Access : MINUSCULE(<chane transformer>).
Exercice n 4 En utilisant Access et son interface (et non le mode SQL direct), formulez la
requte paramtre permettant de connatre les 10 occurrences les plus frquentes dune
catgorie donne de la table . La requte paramtre demande lutilisateur la
catgorie dont on veut les 10 occurrences les plus frquentes.
6. Solutions
Solution de lexercice n 1 p. 204 Le tableau 63 p. 212 montre le rsultat. Il faut prendre
garde liminer les occurrences correspondant aux espaces et obliques (slash) entre tirades
au sein dun vers et qui sont attribues ENTRE_PERSONNAGES, pour ne garder que les
personnages effectifs. On ne compte par ailleurs que les occurrences qui ne commencent pas
par E ou par S, cest--dire quon limine les espaces ou les sparateurs (cf. tableau 60 p. 209).
209
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Adj
Mot
pu
vu
fait
funeste
juste
triste
coupable
vain
seule
odieux
o.
19
18
16
14
13
13
11
10
10
10
Adv
Mot
n
plus
point
trop
si
-mme
pas
dj
jamais
peut-tre
o.
104
88
63
44
43
41
39
23
21
19
Nc
Mot
yeux
fils
seigneur
dieux
pre
coeur
sang
amour
madame
ciel
o.
53
52
51
45
42
41
36
35
32
25
Np
Mot
Hippolyte
Phdre
Thse
Aricie
Oenone
Athnes
Trzne
Neptune
il
Ismne
o.
39
36
32
17
14
12
10
9
8
7
V
Mot
est
a
ai
ont
suis
peut
sont
faut
aime
tre
o.
140
112
89
36
27
22
19
19
19
18
210
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Conj
Mot
et
mais
ou
jusqu
donc
ni
lorsqu
puisqu
quoiqu
car
Rel
Mot
que
qu
qui
si
o
dont
quand
pourquoi
quoi
comme
R279
o.
301
63
16
11
8
6
3
2
1
1
o.
205
120
95
35
29
26
19
14
13
12
Dt/Pron
Mot
o.
je
278
vous
236
le
235
un
225
l
223
la
207
les
150
ne
136
j
129
mon
120
Prp
Mot
de
d
dans
pour
en
des
au
par
du
o.
353
209
189
90
84
63
61
53
48
39
R ESTRICTION(
personnage <> ENTRE_PERSONNAGES
)[occurrences]
,
,
R EGROUPER
P AR GROUPE(
N OMBRE DE VALEURS DISTINCTES(numero_phrase) T ITRE
phrases,
S OMME (S I(cat N E RESSEMBLANT PAS ^[ES], 1, 0))
/ N OMBRE DE VALEURS DISTINCTES(numero_phrase) T ITRE
nombre moy. mots / phrase,
...
)[<rsultat2 >]
T RI
SUR
On constate des ingalits en longueur moyenne de phrase entre des personnages dont
lintervention dans la pice est importante : Oenone, Phdre et Thse font des phrases plus
courtes quHippolyte et Thramne. Phdre, au sein des personnages aux phrases les plus
courtes, est responsable par contre de tirades en moyenne nettement plus longues.
MySQL
SELECT personnage ,
COUNT( DISTINCT numero_phrase ) AS phrases ,
SUM( IF ( cat NOT REGEXP ^[ES] , 1 , 0 ) ) /
211
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage
OENONE
PHEDRE
THESEE
ARICIE
HIPPOLYTE
THERAMENE
PANOPE
ISMENE
phrases
147
318
150
80
187
94
18
15
tirades
47
57
35
22
42
17
6
7
Access
La solution diffre dessein de celle pour MySQL sur deux points en 6 . En premier
lieu, llimination des occurrences attribues ENTRE_PERSONNAGES ne seffectue pas en
amont du regroupement, dans une clause WHERE mais en aval, dans une clause HAVING. En
second lieu, sont dcomptes explicitement les occurrences qui ont pour catgorie SepPhrase,
cest--dire sparateur de phrase, tandis que la requte MySQL utilise le nombre de valeurs
distinctes pour le personnage de lattribut .
6
Solution de lexercice n 2 p. 208 Plusieurs solutions sont fournies, pour pousser limagination lors de lcriture de requtes : il y a souvent plus dune manire possible dobtenir
une table rsultat donne. Ce sont des variantes (sur la condition de restriction de deuxime
niveau, en aval du regroupement) de la requte :
R280
,
R EGROUPER SUR(cat)[occurrences]
AVEC(<condition de restriction de 2e niveau>)
P AR GROUPE(
cat T ITRE Catgorie,
N OMBRE DE LIGNES () T ITRE o
)[<rsultat1 >]
Les conditions successives de restriction de deuxime niveau, qui sappuient sur les motifs
possibles pour les catgories juges pertinentes (tableau 60 p. 209), sont :
1. cat P AS C OMME ^[ES].*
2. cat P ARMI (Adj, Adv, Conj, Dt/Pron, Nc, Np, Prp, Rel, V)
212
Un premier motif en 7 limine les occurrences dont la catgorie commence par E(space)
ou S, cest--dire toute la liste des sparateurs, comme le montre le rsultat 8 .
7
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une seconde requte 9 , plus lourde crire, numre explicitement tous les cas licites.
9
Une troisime requte 10 est la conjonction logique du refus dune valeur donne (Espace)
et dun motif ngatif : la catgorie ne doit pas commencer par , ce qui carte tous les
sparateurs.
10
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT TOP 10
LCase ( [ occ_car ] ) AS Mot ,
Count ( Occurrences . numero_ligne ) AS o
FROM Occurrences
WHERE ( ( ( Occurrences . cat )= " Adj " ) )
GROUP BY LCase ( [ occ_car ] ) , Occurrences . cat
ORDER BY Count ( Occurrences . numero_ligne ) DESC;
En 14 , le rsultat quand lutilisateur a fourni
13
214
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE VI
P RMA
Pour les infirmires 97 et 81, une criture des caractristiques des infirmires sous forme
de conjonction de prdicats donnerait le rsultat suivant :
x APourIdentifiant(x, 97)
V
V ge(x, 25)
V AnnesEtudes(x, 3)
V Diplme(x, BEPC)
V AnciennetEnNonatalit(x, 0.00)
ServiceDe(x, Jour)
y APourIdentifiant(y, 81)
V
V ge(y, 25)
V AnnesEtudes(y, 3)
V Diplme(y, BEPC)
V AnciennetEnNonatalit(y, 0.00)
ServiceDe(y, Jour)
Les infirmires 97 et 81 se diffrencient uniquement par leur identifiant. Elles prsentent
les mmes valeurs pour toutes les autres proprits.
215
1.2.
P RMA
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Table
cl primaire
cl secondaire
cl trangre
. . .
La colonne , un identifiant arbitraire, fait fonction de cl primaire dans toutes les tables,
sauf dans o la colonne joue ce rle. Dans les tables et
(qui reprend toutes les colonnes de , sauf
), les colonnes
et respectivement.
et servent de cl trangre avec les tables
Dans les tables . . ., la colonne est tout la fois cl primaire et cl trangre avec la
table .
P HDRE
Table
cl primaire
cl(s) secondaire(s)
ou
+
+
cl trangre
216
Exercice n 2 Donner par personnage le nombre doccurrences des mots contenant la chane
monstr en minuscules ou commenant par une capitale.
Fournir galement les vers contenant monstr avec, pour chaque vers, le personnage qui
prononce le mot et en triant par personnage.
E SQUE
Table
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cl primaire
cl secondaire
cl trangre
Les SGBD reposent sur lhypothse du monde ferm. Y figurent toutes les assertions qui
dfinissent le domaine dapplication. Dans cette optique, si lon ne trouve pas dans la table
le driv xmlesque, on en dduira que, sous rserve dinventaire, ce driv nexiste pas.
On pourrait imaginer que les contextes sont tous distincts et que donc lattribut contexte
fournit une cl secondaire. La requte :
R281
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE Lignes,
N OMBRE DE VALEURS DISTINCTS(contexte) T ITRE contextes
distincts
)[esque]
contextes distincts
4012
On peut isoler les contextes qui interviennent plus dune fois par la requte :
R282
,
R EGROUPER SUR(contexte)[esque]
AVEC (N OMBRE DE LIGNES() > 1)
P AR GROUPE(
contexte,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
217
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Contexte
NULL
Avez-vous remarqu la prolifration des restaurants rapides dans les rues
de notre belle cit ? [...] Le mal est insidieux. Il ne sagit pas l dalerter
vos mornes estomacs contre une indigestion graisseuse, une asphyxie
<graillonnesque>. Bien pire : Paris commence souffrir du syndrome
fast-food.
Cest en Belgique que le mouvement surraliste officiel a t le plus
chouette. Parce qualors quen France et dans dautres pays il tait trs
stalinis, il tait infod au parti, en Belgique, ctait le cas aussi, mais
ctait avec une marge de manoeuvre trs grande et trs farfelue par rapport lorthodoxie <Andr Bretonesque>.
Dner <gionesque> [...]
Il faudra souvent, cependant, leur signaler ce fait par courrier <escargoesque> (snail mail), cest dire par le courrier postal classique, considr comme ultra-lent par rapport au courrier lectronique o lon peut
pratiquement discuter en direct.
Le parler que jayme, cest un parler simple et naf [...], non pdantesque,
non fratesque, non <pleideresque>, mais plutt soldatesque, comme Suetone appelle celuy de Julius Caesar [...]
Les gardiens de prison poursuivent leur mouvement de grve pour rclamer des embauches, des augmentations de salaires et une amlioration
globale de leur condition de travail. La F.A. tient videmment assurer
de son total soutien... les prisonniers encore une fois pris en otage par la
gente <matonesque>.
Les lieux : Agrgat pouilleux juch aux arbres tels des cages poules
haut-perches, le village <elfesque> donne limpression dune mnagerie
malsaine o des Elfes long bras, voyageant de branche en branche
tels des chimpanzs difformes, surplombent une nue desclaves avilis
oeuvrant avec peine sur des fermes puantes.
On aurait galement pu arrter notre choix sur la couleur orange, une
couleur joyeuse, chaleureuse et invitante qui irait quand mme assez
bien avec le comportement et la personnalit de notre animateur, journaliste et fier reprsentant vedette Garry Bjrnsn, mais qui irait plutt
mal avec le fait que lon ne produit pas notre mission <bingoesque> le
matin ou le midi, o le soleil brille de tous feux [...]
Puis son webmaster, dont nous tairons le nom de peur de nous attirer les
foudres de Belial (he he he...) sest rvl tre ltre le plus <tachesque>
de la terre.
o.
362
2
2
2
Le tableau 64 p. 218 montre quau del des 362 lignes qui ont NULL pour contexte et qui
correspondent probablement des drivs issus du dpouillement de dictionnaires, il existe
9 contextes en 2 exemplaires chacun. Il resterait vrifier si les doublons en question le sont
galement pour les autres attributs.
218
id
age
41
26
BEPC
0.00
NULL
61
21
BEPC
0.50
Jour
29
BEPC
2.50
Jour
31
BEPC
7.00
Jour
23
BEPC
0.00
Nuit
diplome
anciennete
service
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Relation
nuplets
Cardinalit
etudes
Domaines
ou types
Attributs
Degr
suivent.
La figure 4, adapte de Date (2000, p. 110), dcore la table concernant les infirmires
de la terminologie relationnelle pertinente.
P HDRE
la diffrence de la base E SQUE, pour P HDRE, les ralits modliser les vers, les positions mtriques, les mots sont squentielles. Il est donc ncessaire de disposer dattributs
permettant de situer la place, dans le droulement de la pice, de chaque instance de vers,
de position mtrique, de mot, par rapport aux autres instances du mme type. Cest le rle de
dans la table
, de
ou de combinaisons dattributs dans les tables
( + ) et ( +
).
E SQUE
Pour
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3.1.
Certains types sont prsents dans certains SGBD et pas dans dautres. Cest le cas par
exemple du type boolen, qui attend les valeurs vrai ou faux (ou bien oui ou non). Ce type
existe sous Access sous le nom Oui/Non mais il doit tre mim sous MySQL par exemple par
un attribut numrique valeur entire prenant comme valeur 1 (pour vrai) et 0 (pour faux).
Cest ainsi que sont utiliss les attributs et dans la table . Access met
disposition un type permettant de renvoyer des objets informatiques comme des fichierssons ou des fichiers-images. linverse, MySQL fournit une palette plus riche quAccess pour
les donnes temporelles. Access distingue les chanes courtes (de 255 caractres au plus) et
les documents longs (champs Mmo, jusqu 64 000 caractres). MySQL offre un ventail
beaucoup plus large et qui permet de mmoriser des volumes beaucoup plus importants.
On se reportera au ch. XV 3 pour le dtail des types de donnes offerts par MySQL et
Access pour les attributs des tables.
On retiendra de ces divergences dialectales un principe de prcaution : dans la mesure
du possible, choisir, pour une base de donnes ralises avec un SGBD dtermin, les types
facilitant les transferts vers dautres SGBD, en particulier ceux qui relvent de la norme SQL.
3.2.
Les SGBD ont pour objectif explicite global de cacher , dpargner lutilisateur le dtail
de la ralisation du stockage et de linterrogation des informations prsentes dans une base de
donnes. Le choix des types des attributs dune relation est un des endroits o cet objectif se
trouve partiellement battu en brche. Justement parce que les SGBD sont conus pour pouvoir stocker des tables sans limite de taille a priori, ils proposent lutilisateur, pour un mme
domaine gnral (valeurs textuelles, numriques, temporelles), plusieurs types spcifiques, de
taille croissante, en fonction de la prcision des informations souhaite. lutilisateur dutiliser bon escient cet ventail pour tre aussi conome que possible. Par exemple, dans
la table , la colonne est une chane de 2 caractres, parce quon sait que
les diffrentes modalits de cette variable ne dpasseront pas ce cadre (tableau 56 p. 205).
Avant de diminuer la taille choisie pour un attribut, il importe donc de calculer la taille
maximale des valeurs contenues (cf. exercice suivant) et destimer la taille maximale escomptable.
Exercice n 3 Calculer la longueur maximale des valeurs des attributs et de
la table de P HDRE. Utiliser pour la version MySQL la fonction LENGTH(<chane>),
pour la version SQL Server, la fonction LEN(<chane>) et pour la version Access la fonction
NbCar(<chane>).
P RMA
Le domaine dun attribut contraint les oprations qui peuvent tre effectues sur lui, oprations dtailles aux chapitre III et IV. Par exemple, partir de lattribut , il est possible de
calculer lge moyen des infirmires, ou encore lge minimal et lge maximal des infirmires
reprsentes dans la table. Par contre, il ny aurait pas de sens vouloir appliquer lge
des infirmires la fonction L ONGUEUR, qui, applique une chane, en retourne le nombre de
caractres.
220
MySQL
MySQL dispose de deux fonctions qui permettent de transformer, quand cest possible, le
type dune valeur en un autre type :
CAST(<valeur> AS <type souhait>)
CONVERT(<valeur>, <type souhait>)
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le tableau 65 p. 222 est le tri de la table par ordre croissant des identifiants,
dont on a choisi, dans la base fournie, de les reprsenter comme des nombres entiers, pour
acclerer les comparaisons et jointures. Il rsulte de la requte :
SELECT
FROM infirmieres_princep s
ORDER BY id ;
Le tableau 66 p. 223 est le tri de la mme table, mais cette fois-ci par ordre croissant des
chanes de caractres correspondant aux identifiants. Linstruction de tri est transforme en :
ORDER BY CAST( id AS CHAR) ;
ou en :
ORDER BY CONVERT( id , CHAR) ;
Dans la base de donnes P RMA, on a choisi de reprsenter par un nombre entier les
identifiants des infirmires, par souci defficacit. Pour autant, ces nombres ne reprsentent
pas des quantits. Il ny aurait pas de sens vouloir calculer l identifiant moyen des
infirmires.
P HDRE
E SQUE
4. Solutions
Solution de lexercice n 1 p. 216 On vrifie que la catgorie de la syllabe est Dt/Pron
pour ne pas inclure des fragments de mots (des syllabes) ayant pour prononciation i l.
R283
,
,
R ESTRICTION(
syll = i l
E T cat = Dt/Pron
)[phedre]
R EGROUPER SUR(position)[<rsultat1 >]
P AR GROUPE(
position T ITRE Position,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
id
1
2
3
4
6
7
8
9
10
12
13
14
16
17
18
19
20
21
22
24
28
32
33
34
36
39
41
43
44
46
47
58
61
62
65
67
68
70
73
81
97
99
age
23
29
34
31
30
39
44
27
35
40
34
40
30
38
27
28
28
31
31
26
38
26
34
31
26
33
26
26
29
21
30
31
26
33
21
25
24
29
29
25
25
31
etudes
4
3
3
3
4
4
3
3
3
3
3
3
4
4
4
3
3
4
3
4
3
3
4
4
4
4
3
4
3
3
3
3
4
3
3
4
4
3
3
3
3
4
diplome
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
service
Nuit
Jour
Nuit
Jour
Jour
Nuit
Jour
Jour
Nuit
Nuit
Jour
Nuit
Nuit
Jour
Jour
Jour
Nuit
Jour
Jour
Jour
Nuit
Jour
Jour
Jour
Jour
Jour
NULL
Jour
Nuit
Jour
Nuit
Nuit
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
222
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
id
1
10
12
13
14
16
17
18
19
2
20
21
22
24
28
3
32
33
34
36
39
4
41
43
44
46
47
58
6
61
62
65
67
68
7
70
73
8
81
9
97
99
age
23
35
40
34
40
30
38
27
28
29
28
31
31
26
38
34
26
34
31
26
33
31
26
26
29
21
30
31
30
26
33
21
25
24
39
29
29
44
25
27
25
31
etudes
4
3
3
3
3
4
4
4
3
3
3
4
3
4
3
3
3
4
4
4
4
3
3
4
3
3
3
3
4
4
3
3
4
4
4
3
3
3
3
3
3
4
diplome
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BAC
BEPC
BEPC
BEPC
BEPC
BEPC
service
Nuit
Nuit
Nuit
Jour
Nuit
Nuit
Jour
Jour
Jour
Jour
Nuit
Jour
Jour
Jour
Nuit
Nuit
Jour
Jour
Jour
Jour
Jour
Jour
NULL
Jour
Nuit
Jour
Nuit
Nuit
Jour
Jour
Jour
Jour
Jour
Jour
Nuit
Jour
Jour
Jour
Jour
Jour
Jour
Jour
o.
45
2
9
6
1
18
1
223
MySQL
La requte est de la forme :
SELECT position AS Position ,
COUNT( ) AS o .
FROM positions
WHERE s y l l = i l
AND cat = Dt/Pron
GROUP BY position ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
La requte figure en 2 .
2
Solution de lexercice n 2 p. 216 Le tableau 68 p. 225 fournit les dcomptes par personnages. Il est issu de la requte :
R284
,
,
R ESTRICTION(
occ_car R ESSEMBLANT [Mm]onstr
)[occurrences]
R EGROUPER SUR(personnage)[<rsultat1 >]
P AR GROUPE(
personnage T ITRE Personnage,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
On trouve dans le tableau 69 p. 225 les vers contenant le lemme monstre par personnage.
On peroit immdiatement les diffrences demploi (littral vs. figur), en particulier de Phdre
par rapport aux autres personnages. La requte correspondante snonce ainsi :
R285
J OINTURE(
o.numero_car = v.numero_vers
)[occurrences
o, vers A LIAS v]
R ESTRICTION(
occ_car R ESSEMBLANT [Mm]onstr
)[<rsultat1 >]
P ROJECTION
o.numero_vers,
personnage,
vers
)[<rsultat2 >]
T RI
224
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
o.
1
5
5
4
3
TABLEAU 69 P HDRE : monstr par personnage
numero_vers
1444
79
99
520
938
948
649
701
703
884
1317
1516
1522
1529
1531
963
970
1045
personnage
ARICIE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
THERAMENE
THERAMENE
THERAMENE
THERAMENE
THESEE
THESEE
THESEE
vers
Ont de monstres sans nombre affranchi les humains ;
Les monstres touffs et les brigands punis,
Quaucuns monstres par moi dompts jusquaujourdhui
Croit-on que dans ses flancs un monstre mait port ?
Dj plus dun tyran, plus dun monstre farouche
Souffrez, si quelque monstre a pu vous chapper,
Par vous aurait pri le monstre de la Crte,
Dlivre lunivers dun monstre qui tirrite.
Crois-moi, ce monstre affreux ne doit point tchapper.
Je le vois comme un monstre effroyable mes yeux.
Je ne tcoute plus. va-ten, monstre excrable :
Parmi des flots dcume, un monstre furieux.
Le ciel avec horreur voit ce monstre sauvage ;
Pousse au monstre, et dun dard lanc dune main sre,
De rage et de douleur le monstre bondissant
Livr par ce barbare des monstres cruels
ses monstres lui-mme a servi de pture ;
Monstre, qua trop longtemps pargn le tonnerre,
225
MySQL
La requte correspondant au tableau 68 p. 225 est la suivante :
SELECT personnage AS Personnage ,
COUNT( ) AS o .
FROM occurrences
WHERE occ_car REGEXP [Mm] onstr
GROUP BY personnage ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
,
sans
SELECT numero_vers ,
personnage_s ,
vers
FROM vers
WHERE vers REGEXP [Mm] onstr
ORDER BY personnage_s ;
Access
On trouve en 3 , la requte source du tableau 68 p. 225, en 4 , celle du tableau 69
p. 225.
3
226
R286
P AR GROUPE(
M AXIMUM (L ONGUEUR(occ_phon)) T ITRE Max. occ. phon.,
M AXIMUM (L ONGUEUR(occ_car)) T ITRE Max. occ. car.
)[occurrences]
MySQL
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
Le rsultat de 5 figure en 6 .
5
227
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE VII
Le produit relationnel est une opration n-aire, cest--dire que cette opration peut prendre
n arguments. Il est de la forme :
P RODUIT[<table1 >, <table2 >. . . <tablen >]
Dans les prsentations des SGBD, on trouve souvent la dnomination produit cartsien.
Le produit cartsien de deux ensembles est un ensemble de couples dlments du premier et
du deuxime ensemble, un couple tant ordonn, la diffrence dune paire. La dnomination
produit cartsien nest pas entirement approprie : le rsultat du produit relationnel
nest pas vraiment un ensemble de couples de lignes. En effet lordre des colonnes nest pas
significatif dans les SGBD, mme si la ralisation concrte du produit relationnel place les
colonnes dans un certain ordre : les colonnes de la premire table entrant dans le produit
sont suivies par celles de la deuxime table, et ainsi de suite.
MySQL
On cre les tables
la table .
et
228
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La clause dWHERE partage_en = 1e est ncessaire pour conserver uniquement les mentions
dun personnage seul et non les associations de personnages. Lajout de DISTINCT dans les
clauses SELECT aboutit conserver un seul exemplaire des valeurs de la colonne vise. Cest
donc une projection et non une projection avec doublons qui est mise contribution.
La dernire requte pourrait se baser sur la table
condition dliminer la valeur ENTRE_PERSONNAGES :
,
Access
Requte cration de table La requte 1 porte sur la table . Elle combine restriction
et projection. Elle retient en effet les lignes pour lesquelles lattribut a pour valeur
1, cest--dire les vers o nintervient quun seul personnage : cest le rle du critre. Elle ne
garde alors que les valeurs distinctes de lattribut . Les valeurs distinctes sont
obtenues en faisant apparatre le formulaire dProprits de la requtee, via un clic droit dans
la fentre du haut de la requte, et en positionnant douie la ligne dValeurs distinctese.
1
229
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Sensuit la demande du nom de la nouvelle table qui va tre cre et dans laquelle les lignes
issues de la requte iront se placer 3 ainsi quun message davertissement 4 .
3
230
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une autre manire pour crer la table consiste donner directement la colonne rsultant le titre souhait 9 . Pour diversifier les angles dattaque, cette variante repose
par ailleurs sur une restriction diffrente : on retient les lignes dont lattribut ne
contient pas de blanc (despace). Cest le rle du motif dans 9 .
La feuille de donnes 10 qui en est issue montre quon obtient bien le rsultat souhait.
10
12 .
231
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
11
12
1.2.
et
P RODUIT[actes, personnages]
MySQL
SELECT
FROM actes ,
personnages ;
Le produit relationnel sobtient en listant simplement dans la clause FROM les tables
croiser. Ltoile dans la clause SELECT entrane le listage dans lordre des colonnes des tables
croises.
Access
232
13
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une requte = une table Le produit relationnel peut tre obtenu en combinant les lignes de
deux tables cres la vole , comme on vient de le faire. Il est galement possible dutiliser
des requtes en lieu et place de tables. Cette fois, on mmorise les requtes 15 et non plus
les tables issues des requtes.
15
Lorsquon veut obtenir le produit, au lieu dajouter des tables la requte correspondante,
on ajoute les requtes et qui ont t mmorises 16 , en utilisant longlet dRequtese.
16
Longlet dles deuxe 17 montre bien que pour Access requtes et tables sont sur le mme
plan, que les requtes sont des tables la demande .
233
17
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une fois ces deux requtes mises en entre, le produit se formule de la mme manire que
prcdemment 18 .
18
Pour rester dans cette logique de mmorisation de traitements plus que de rsultats, la
requte calculant le produit relationnel est elle aussi mmorise en tant que telle 20 .
20
R ESTRICTION(partage_en = 1)[vers]
,
234
MySQL
SELECT DISTINCT acte ,
personnage_s
FROM vers
WHERE partage_en = 1 ;
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La requte mmorise 21 , quand on la rejoue en doublecliquant sur son nom dans le volet dRequtese de la fentre de navigation dans la base, fournit
les 25 combinaisons de numro dacte et de nom de personnage 22 . Cette requte calcule
toutes les combinaisons distinctes de ces deux colonnes, avec une restriction qui constitue
une variante par rapport la requte MySQL qui prcde : la valeur de lattribut
ne doit pas comprendre de blanc (despace).
21
22
P RMA
Dans le tableau 70, p. 236, les deux tables dentre, (a) et (b) contiennent
respectivement toutes les valeurs observes dans la table pour lattribut
et celles de lattribut . La table (c) est le rsultat du produit relationnel des tables
et . Elle rsulte de la requte :
R287
P RODUIT[ventilations, sedations]
les 4 lignes de
).
235
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
(a) ventilations
ventilation
intub
non reponse
sonde nasale
non
(b) sedations
sedation
non
hypnovel ou fentanyl
canadou
non reponse
R289
,
R290
R EGROUPER SUR(ventilation)[signaletique_fiches]
P AR GROUPE(
ventilation,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
R EGROUPER SUR(sedation)[signaletique_fiches]
P AR GROUPE(
sedation,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
R EGROUPER SUR(
ventilation, sedation
)[signaletique_fiches]
P AR GROUPE(
ventilation,
sedation
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat1 >]
236
o.
439
305
1
272
sedation
canadou
hypnovel ou fentanyl
non
non reponse
o.
11
77
926
3
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
sedation
hypnovel ou fentanyl
non
canadou
hypnovel ou fentanyl
non
non reponse
non
canadou
hypnovel ou fentanyl
non
non reponse
o.
73
366
8
2
293
2
1
3
2
266
1
On peut alors comparer les combinaisons possibles (tableau 70 (c), p. 236) aux combinaisons ralises (tableau 71 (c), p. 237). Dans le tableau 70 (c), p. 236, sont grises les
combinaisons non ralises.
MySQL
La ralisation MySQL de la R287 p. 235 est :
SELECT
FROM v e n t i l a t i o n s ,
sedations ;
R288 p. 236
SELECT v e n t i l a t i o n ,
COUNT( ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY v e n t i l a t i o n ;
R289 p. 236
SELECT sedation ,
COUNT( ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY sedation ;
R290 p. 236
SELECT v e n t i l a t i o n ,
sedation ,
COUNT( ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY v e n t i l a t i o n , sedation ;
237
Access
R288 p. 236
23
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R289 p. 236
24
R290 p. 236
25
P HDRE
E SQUE
R159 t. 1 p. 123
R160 t. 1 p. 123
R161 t. 1 p. 123
J OINTURE(
vers.numero_vers = occurrences.numero_vers
)[vers, occurrences)
J OINTURE(
v.numero_vers = o.numero_vers
)[vers A LIAS v, occurrences A LIAS o)
J OINTURE
NATURELLE [vers,
occurrences)
En MySQL, la jointure entre deux ou n tables nest pas attache aux tables ainsi mises
en relation. Rien ne dit lorsquon examine la structure dune table quelle entre rgulirement
dans des jointures avec telle ou telle autre table. On peut nanmoins dclarer quun attribut
joue le rle de cl trangre dans une table et le nom de la table mre .
238
Sous Access, par contraste, on pose une fois pour toutes les jointures qui dfinissent la
base de donnes. Elles sont toujours prsentes (on peut nanmoins les supprimer - cf. infra).
On peut cependant rajouter dans une requte une condition de rapprochement entre tables
qui est valide uniquement pendant la dure de cette requte. Cest le cas par exemple dans
les auto-jointures.
MySQL
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Noter le recours un nom qualifi : le nom dattribut seul est ambigu, puisquil
peut renvoyer une colonne de la table comme une colonne de la table . Prfix
du nom de la table concerne, il est univoque. Dans lquivalent de la R160 t. 1 p. 123, par souci
de concision, le nom complet de chaque table est remplac par une abrviation :
SELECT
FROM vers AS v ,
occurrences AS o
WHERE v . numero_vers = o . numero_vers ;
Dans tous les cas, lalias de table est introduit par AS, comme les titres de colonnes dans
les tables-rsultats. Cet AS est optionnel, mais nous lutilisons systmatiquement, par souci
de lisibilit.
Ce type de jointure sappelle une jointure interne (par opposition aux jointures externes,
destines mettre en vidence les dcalages entre tables). On peut alors crire la requte
aussi sous la forme :
SELECT
FROM vers AS v
INNER JOIN occurrences AS o
ON v . numero_vers = o . numero_vers ;
Un seul exemplaire du ou des attribut(s) de mme nom est conserv dans le rsultat dune
jointure naturelle alors que ce nest pas le cas pour une jointure interne autre.
Access
tablir les jointures stables Le menu dOutilse donne accs au choix dRelationse 26 .
239
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
26
En 28 figurent les 3 tables initiales de la base P HDRE. tablir une jointure se ralise en
faisant glisser le nom de lattribut qui sert de cl trangre dans la table fille sur lattribut
servant de cl primaire dans la table mre .
28
240
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
29
Paramtrer les jointures stables Lorsquon clique sur un des liens symbolisant les
jointures stables entre tables, on obtient la bote de dialogue 30 qui permet de rgler les
rgles dutilisation de la jointure. Sont ici cochs lapplication de lintgrit rfrentielle et le
choix deffacer en cascade les lignes de la table fille qui perdent leur correspondant dans la
table mre par suite de suppression dune ligne dans cette dernire table.
30
Cliquer sur le bouton dType jointuree fait apparatre le choix 31 entre, en haut, la jointure
la plus courante, celle qui retient uniquement les lignes des deux tables qui partagent la mme
valeur pour les colonnes rapproches et, au milieu et en bas, les jointures externes.
31
Modifier ou supprimer une jointure stable tout moment, cliquer sur le lien entre deux
tables qui rappelle la jointure stable qui les rapproche permet de modifier la jointure voire
de la supprimer 32 .
32
241
Une confirmation est alors demande dans ce second cas de figure 33 . La suppression
dune jointure stable peut en effet modifier le comportement de certaines requtes mmorises qui y faisaient appel.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
33
On constate effectivement en 35 qu la ligne qui dcrit le vers 1252 correspondent plu
sieurs lignes de la table (12, puisquil sagit dalexandrins).
35
Utilisation des jointures stables dans des requtes Les jointures stables apparaissent
et ont t ajoutes
lors de la cration dune requte. En 36 , les deux tables
dans la fentre du haut. Le lien qui les rapproche est rappel en mme temps. La fentre du
bas stipule de fournir les colonnes des deux tables.
242
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
36
La feuille de donnes rsultante 37 montre quAccess laisse tels quels les noms de co
lonnes qui ne donnent pas naissance des quivoques (cest le cas pour ou dans la
table
et pour dans la table ). Par contre, les colonnes
sont
automatiquement prfixs par le nom de la table origine pour lever toute ambigut.
37
Pour rendre visible dans la mme feuille de donnes les deux colonnes servant la jointure,
. Pour masquer
on a t amen masquer une partie de colonnes provenant de la table
une colonne, il faut la slectionner : on place le pointeur de la souris sur le titre de la colonne
jusqu ce quil se transforme en une flche grasse vers le bas ; on clique alors le bouton droit,
la colonne passe en inverse vido (blanc sur noir). Le clic droit donne alors accs un menu
droulant 38 o lon choisit lentre dMasquer les colonnese.
38
P RMA
Le produit relationnel des tables
lignes (1 0172 ). Il dcoule de la requte :
R291
et
Produit[
signaletique_fiches,
fiches_normalisees]
243
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
id
931
id_bebe
111
352
36
jour
7
15
heure_saisie
21.50
poids
...
id
650
...
931
6.00
1060
...
352
-
texte
bb trs tonique
,
n__pas
aime
tre_drang
-_Y
rle .
bb bien_R nergique . gigote beaucoup mme_R pendant_S les priodes
. entre_S les soins .
grosse colre quand
on l__P embte .
R292
J OINTURE(
s.id = f.id
)[signaletique_fiches A LIAS s,
fiches_normalisees A LIAS f]
Ce sous-ensemble peut provenir aussi dune jointure naturelle qui repose sur lidentit de
valeurs entre les attributs de mme nom dans les tables concernes (dans le cas prsent, ) :
R293
J OINTURE NATURELLE[
signaletique_fiches,
fiches_normalisees]
La table produite par de telles jointures a bien videmment seulement 1 017 lignes.
Le tableau 72 p. 244 prsente un sous-ensemble des rsultats. On note la rptition,
souligne par le gris, de lattribut , qui figure dans les deux tables.
MySQL
Sont fournies trois instanciations de R292 p. 244. Pour , on peut recourir un nom qualifi
(deuxime instanciation). On lui prfixe alors le nom de sa table (ou bien lalias du nom de
cette table, si on lui en a associ un via AS), suivi dun point, comme le montrent les requtes.
Dans la mesure o lattribut permettant la jointure porte le mme nom dans les deux
tables, on peut galement recourir la jointure naturelle o la condition de rapprochement est lidentit de valeur pour le(s) attribut(s) de mme nom. Cest la quatrime requte
(NATURAL JOIN).
On assortit gnralement la jointure dune projection, en particulier pour ne garder quun
exemplaire de lattribut ou des attribut(s) servant au rapprochement. La jointure naturelle ne
garde quun exemplaire du ou des attribut(s) permettant le rapprochement.
R292 p. 244
244
SELECT
FROM s i g n a l e t i q u e _ f i c h e s ,
fiches_normalisees
WHERE s i g n a l e t i q u e _ f i c h e s . id = fiches_normalisees . id ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
SELECT
FROM s i g n a l e t i q u e _ f i c h e s AS s ,
fiches_normalisees AS f
WHERE s . id = f . id ;
SELECT
FROM s i g n a l e t i q u e _ f i c h e s
INNER JOIN fiches_normalisees
ON s i g n a l e t i q u e _ f i c h e s . id = fiches_normalisees . id ;
R293 p. 244
SELECT
FROM s i g n a l e t i q u e _ f i c h e s
NATURAL JOIN fiches_normalisees ;
Access
245
P HDRE
E SQUE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R162 t. 1 p. 126
R ESTRICTION(
personnage <> ENTRE_PERSONNAGES
)
[occurrences]
,
,
R EGROUPER
P AR GROUPE(
personnage,
N OMBRE DE VALEURS
bre vers
)
[<rsultat2 >]
DISTINCTES (numero_vers)
T ITRE n-
J OINTURE
,
,
NATURELLE [occurrences,
R EGROUPER
SUR (personnage,
vers]
acte)[<rsultat1 >]
P AR GROUPE(
personnage,
acte,
N OMBRE DE VALEURS DISTINCTES(numero_vers) T ITRE nbre vers
)
AVEC (personnage <> ENTRE_PERSONNAGES)
[<rsultat2 >]
On ne pourrait pas utiliser comme point de dpart la table . En effet, dans cette table,
lattribut combine en une seule chane les noms des personnages dans le cas de
vers partags ( a une valeur suprieur 1). Un regroupement sur les valeurs de lattribut aboutirait des groupes correspondant aux vers ports par un personnage
seul et dautres correspondant aux vers relevant de toutes les associations de personnages.
Les vers o intervient un personnage donn ne seraient pas tous rassembls.
MySQL
R162 t. 1 p. 126
partir de la table , on souhaite connatre le nombre de vers dont un personnage
de Phdre est entirement ou partiellement le locuteur. Les fragments espaces, sparateur
de tirades interne au vers symbolis par loblique : / ne relevant pas dun personnage sont
246
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R164 t. 1 p. 128
Pour obtenir le nombre de vers par acte et par personnage, on combine les informations
des tables et .
SELECT personnage ,
acte ,
COUNT( DISTINCT o . numero_vers ) AS nbre vers
FROM occurrences AS o
NATURAL JOIN vers
GROUP BY personnage , acte
HAVING personnage <> ENTRE_PERSONNAGES ;
SELECT personnage ,
acte ,
COUNT( DISTINCT o . numero_vers ) AS nbre vers
FROM occurrences AS o , vers AS v
WHERE o . numero_vers = v . numero_vers
GROUP BY personnage , acte
HAVING personnage <> ENTRE_PERSONNAGES ;
La diffrence entre cette dernire requte et la prcdente est quici llimination des lignes
o vaut ENTRE_PERSONNAGES sopre en amont du regroupement alors que dans
la pnultime requte, elle sopre en aval : cest une restriction de deuxime niveau qui prend
en compte les caractristiques des groupes constitus.
On aimerait savoir la proportion de ces vers qui correspond des vers partags. Linformation sur le partage figure dans la table . Par contre, cette table ne permet pas directement
dattribuer un vers partag aux deux personnages qui le profrent : la colonne
contient la suite des noms des personnages et ne donne pas accs chacun deux. La jointure
entre les 2 tables :
SELECT personnage_s ,
partage_en ,
personnage ,
247
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage_s
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
..
.
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
.
..
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
partage_en
..
.
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
.
..
personnage
..
.
PHEDRE
PHEDRE
PHEDRE
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
OENONE
OENONE
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
.
..
numero_vers
..
.
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
262
.
..
occ_car
..
.
J
aime
...
/
Qui
?
/
Tu
connais
ce
fils
de
l
amazone
,
.
..
o . numero_vers ,
occ_car
FROM occurrences AS o , vers AS v
WHERE o . numero_vers = v . numero_vers ;
aboutit une table combinant les informations ncessaires (tableau 73 p. 248). Une jointure
naturelle aboutit de manire plus concise au mme rsultat :
SELECT personnage_s ,
partage_en ,
personnage ,
vers . numero_vers ,
occ_car
FROM occurrences
NATURAL JOIN vers ;
sous peine de
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
ignore la marque NULL (chapitre IV 4). La requte combine les informations des deux tables,
en associant jointure et regroupement. Elle calcule galement le pourcentage de vers partags
par personnage et le nombre de vers en 3 parties (tableau 74, p. 250). On note le dcalage
entre les personnages nobles, o les vers partags reprsentent 5% au plus, et les suivantes,
o la proportion dpasse 8%. Le rle de faire-valoir des suivantes est clair. Phdre est par
ailleurs le personnage de premier plan qui profre le plus de vers en 3 parties, en particulier
dans sa relation avec Oenone.
SELECT personnage ,
COUNT( DISTINCT o . numero_vers ) AS nbre v . ,
COUNT( DISTINCT
( IF ( partage_en > 1 , o . numero_vers , NULL ) ) )
AS v . partags ,
COUNT( DISTINCT
( IF ( partage_en > 1 , o . numero_vers , NULL ) ) )
/ COUNT( DISTINCT o . numero_vers ) 100 AS % ,
COUNT( DISTINCT
( IF ( partage_en = 3 , o . numero_vers , NULL ) ) )
AS dont v . 3 p a r t i e s
FROM occurrences AS o ,
vers AS v
WHERE o . numero_vers = v . numero_vers
AND personnage <> ENTRE_PERSONNAGES
GROUP BY personnage
ORDER BY % ;
R294
,
,
J OINTURE(
o.numero_vers = v.numero_vers)
[occurrences A LIAS o,
vers A LIAS v]
R ESTRICTION(
personnage <> ENTRE_PERSONNAGES
)[<rsultat1 >]
R EGROUPER
P AR GROUPE(
personnage,
N OMBRE DE VALEURS DISTINCTES(o.numero_vers) T ITRE
nbre v.,
N OMBRE DE VALEURS DISTINCTES (S I(partage_en > 1,
o.numero_vers, NULL)) T ITRE v. partags,
N OMBRE DE VALEURS DISTINCTES (S I(partage_en > 1,
o.numero_vers, NULL)) / N OMBRE DE VALEURS DIS TINCTES (o.numero_vers) * 100 T ITRE %,
N OMBRE DE VALEURS DISTINCTES (S I(partage_en = 3,
o.numero_vers, NULL)) T ITRE dont v. en 3 parties
)[<rsultat3 >]
Tri sur(%)[<rsultat4 >]
249
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage
THERAMENE
HIPPOLYTE
THESEE
PHEDRE
ARICIE
OENONE
ISMENE
PANOPE
nbre v.
183
362
234
485
140
220
34
38
v. partags
7
14
10
21
7
18
3
4
%
3.83
3.87
4.27
4.33
5.00
8.18
8.82
10.53
dont v. 3 parties
1
1
1
4
0
3
0
0
4. Jointures
4.1.
Auto-jointure
J OINTURE(
v2.numero_vers % 2 = 0
ET v2.numero_vers = v1.numero_vers + 1
)
[vers A LIAS v1, vers A LIAS v2]
,
R ESTRICTION(
v1.numero_vers T ITRE n 1,
v2.numero_vers T ITRE n 2,
v1.vers T ITRE vers1,
v2.vers T ITRE vers2
)
[<rsultat1 >]
MySQL
R165 t. 1 p. 130
SELECT v1 . numero_vers AS n 1 ,
v2 . numero_vers AS n 2 ,
v1 . vers AS vers 1 ,
v2 . vers AS vers 2
FROM vers AS v1 , vers AS v2
WHERE v2 . numero_vers % 2 = 0
AND v2 . numero_vers = v1 . numero_vers + 1 ;
Access
La requte 40 , qui instancie la R165 t. 1 p. 130, ndicte quune condition : que le numro du
premier vers soit gal au numro du deuxime vers moins 1. On note en 40 lengendrement
automatique par Access dun nom qualifi
pour la deuxime instance de la table
qui entre dans cette auto-jointure.
250
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
40
Le rsultat en 41 le montre, chaque vers successif de Phdre est mis en relation avec son
successeur, si bien que les vers ne sont pas forcment en relation de rime : le vers 2 ne rime
pas avec le vers 3, puisque la pice constitue une suite de paires de rimes plates.
41
La requte 42 ajoute une contrainte : le numro du deuxime vers doit tre pair (le reste
de la division par 2 de ce numro, qui sobtient par appel la fonction M OD, abrviation de
modulo, est gal 0), ce qui produit 43 .
42
43
44
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R166 t. 1 p. 131
J OINTURE(
o1.numero_vers = o2.numero_vers - 1
)
[occurrences A LIAS o1, occurrences A LIAS o2]
,
R ESTRICTION(
o2.numero_vers % 2 = 0
ET o1.fin_syl = 12
ET o1.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
ET o2.fin_syl = 12
ET o2.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
)[<rsultat1 >]
P ROJECTION(
o1.numero_vers T ITRE n 1,
o2.numero_vers T ITRE n 2,
o1.occ_car T ITRE mot1
o2.occ_car T ITRE mot2
)[<rsultat2 >]
MySQL
R166 t. 1 p. 131
SELECT o1 . numero_vers AS n 1 ,
o2 . numero_vers AS n 2 ,
o1 . occ_car AS mot1 ,
o2 . occ_car AS mot2
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . numero_vers = o2 . numero_vers 1
AND o2 . numero_vers % 2 = 0
AND o1 . f i n _ s y l = 12
AND o2 . f i n _ s y l = 12
AND o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V
)
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V
) ;
On peut modifier cette requte pour concentrer son attention sur le fragment du vers
contenant la rime (tableau 75). Le fragment de la clause SELECT :
v1.vers AS vers 1
devient :
252
n
2
4
6
8
vers 1
... Thramne,
... suis agit,
... e mon pre,
... ent cacher.
vers 2
... le Trzne.
... n oisivet.
... e si chre ;
... c chercher ?
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cette requte SQL Server se diffrencie de son homologue MySQL supra par la manire
de conserver uniquement des mots effectifs, par opposition aux espaces et sparateurs de
tous ordres. Le motif NOT LIKE "Sep" limine les occurrences dont la catgorie commence par
.
Un autre motif, positif, part du constat que les initiales des catgories conserver et
de celles liminer ne sont pas en intersection. Il slectionne les catgories dont linitiale
convient, comme on le constate en comparant avec la requte MySQL :
. . . AND ( ( Occurrences . cat )
Un dernier motif table inversement sur le fait que les occurrences liminer ont un nom
de catgorie qui commence soit par S (cest lensemble des sparateurs) soit par E (Espace) et
quaucune occurrence conserver ne prsente une catgorie ayant une telle initiale :
. . . AND ( ( Occurrences . cat )
253
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R EGROUPER
SUR (mot1,
mot2)[<rsultat1 >]
P AR GROUPE(
mot1,
mot2,
N OMBRE DE LIGNES () T ITRE o.
)
[<rsultat2 >]
AVEC (N OMBRE DE LIGNES () > 2)
MySQL
R167 t. 1 p. 131
SELECT o1 . occ_car AS mot1 ,
o2 . occ_car AS mot2 ,
COUNT( ) AS o .
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . numero_vers = o2 . numero_vers 1
AND o2 . numero_vers % 2 = 0
AND o1 . f i n _ s y l = 12
AND o2 . f i n _ s y l = 12
AND o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V
)
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V
)
GROUP BY mot1 , mot2
HAVING COUNT( ) > 1 ;
254
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
45
4.2.
Semi-jointure
J OINTURE(
p1.numero_vers = p2.numero_vers
ET p1.numero_vers = v.numero_vers
)
[positions A LIAS p1, positions A LIAS p2, vers A LIAS v]
,
R ESTRICTION(
p1.position = 6
ET p2.position = 12
ET p1.voy = p2.voy
)
[<rsultat1 >]
P ROJECTION(
v.numero_vers T ITRE n ,
vers
)
[<rsultat2 >]
MySQL
R168 t. 1 p. 133
SELECT vers . numero_vers AS N ,
vers
FROM vers ,
positions AS p1 ,
positions AS p2
WHERE vers . numero_vers = p1 . numero_vers
AND p1 . numero_vers = p2 . numero_vers
AND p1 . position = 6
AND p2 . position = 12
AND p1 . voy = p2 . voy ;
255
Access
En 46 , instanciation de la R168 t. 1 p. 133, on constate lexistence dune jointure stable
entre chacune des 2 tables et dune part et la table
de lautre, manifeste chaque fois par larte qui les runit. La ligne dCritrese spcifie que les deux lignes
de la table mises en relation et qui concernent le mme vers doivent respectivement
porter sur la 6me syllabe et sur la 12me syllabe. Elle indique galement que la voyelle en
6me syllabe doit tre identique la voyelle en 12me position, via le recours au nom qualifi
dPositions_1].[voy]e.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
46
On trouve le rsultat en 47 .
47
La recherche des vers rime interne nimplique quune modification minime de la requte
prcdente, comme le montre 48 . On vrifie simplement que la syllabe, et non plus la voyelle,
en 6me position est identique son homologue en 12me position.
48
P RMA
Une jointure peut mettre en relation plus dune table, comme dans la requte :
256
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R295
poids
810
...
...
inf.
61
ge
26
service . . .
Jour
...
fiche
361
texte
bb
calme
J OINTURE(
signaletique_fiches.id = fiches_depart.id
Et bebes.id = id_bebe
Et infirmieres.id = id_infirmiere
)[fiches_depart,
signaletique_fiches,
bebes,
infirmieres]
,
sexe
Garon
P ROJECTION(
bebes.id T ITRE BB,
sexe,
poids,
...
infirmieres.id T ITRE inf.,
age Titre ge,
service,
...
signaletiques_fiches.id T ITRE f.,
...
fiches_depart.texte
)[<rsultat1 >]
La figure 5, p. 258 montre comment les conditions de rapprochement entre tables crent
une table donc chaque ligne combine les informations des 4 tables de dpart. Une partie dune
telle ligne est fournie dans le tableau 76, p. 257. Les 4 tables combines ici supposent 3 conditions de rapprochement. Lattribut constitue la cl primaire de chacune des tables. Il consti
tue aussi une cl trangre pour la table par rapport la table .
Les attributs
et servent de cls trangres dans la table
respectivement par rapport aux tables
et .
La jointure peut constituer une opration coteuse, puisquelle revient conceptuellement
llagage dun produit relationnel potentiellement volumineux. Dans le cas prsent, la jointure
aboutit retenir 1 017 lignes combinant pour la signaltique dune fiche donne, le texte cor
respondant de ainsi que les mtadonnes disponibles sur le bb en cause et sur
linfirmire qui a rdig la fiche. Le produit relationnel des 4 tables comprend. . . 5 256 256 698
lignes (1 017 1 017 121 42).
On nutilise pas toujours lensemble des attributs rsultants de la jointure. La semijointure reprsente le cas particulier o lon conserve uniquement les attributs dune des
deux relations dentre. On peut par contre utiliser pour des restrictions les attributs de la relation non conservs dans le rsultat. Cest ainsi quon peut conserver seulement lidentifiant
et le texte des fiches concernant un bb dtermin (tableau 77, p. 259) :
257
signaletique_fiches
fiches_depart
fiches_depart.id
texte
signaletique_fiches.id
361
bb calme
bebes
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
signaletique_fiches.id_bebe
sexe
accouchement
lieu_naissance
poids_naissance
bebes.id
Garon
38
voie basse
locale
850
jour
7
heure_saisie
11.00
poids
810
position
plat dos
sedation
non
ventilation
infirmieres
sonde nasale
signaletiques_fiches.id_infirmiere
infirmieres.id
age
26
etudes
4
diplome
anciennete
BEPC
3.00
service
Jour
61
frequence_occupation
occasionnellement
moral_infirmiere
plutt bien
....
Cl de lecture
gras
identifiant ou cl primaire
italiques
cl trangre
258
...
361
362
363
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
358
359
R296
,
,
texte
petit bb bien tonique Reactions adaptes. Pleure pd les
soins, agripe ce qui passe sa port de main. Bb calme
qui dort entre les soins. Pas agit outre mesure.
bb calme
BB plus que Tonique lors des Soins. Gigote ds tous les
Sens. BB fragile- fatigu. Trs Ftif. Contact moyen avec
regard qui plafonne parfois.
BB trs calme et dtendu, install sur le ventre se tortille
les fesses. Trs peu veill, ouvre peu les yeux - Peu participatif aux soins mais reactif aux soins douloureux
Beb tres energique pt les soins. gigote bras et jambes
sait se detendre en dehors des periodes de soin. Ouvre les
yeux.
- cest un BB agrable, tonique, trs mignon est trs
calme. ouvre ses yeux quand on lui parle - cest trs
agrable de soccuper de lui, lexpression de son visage est
rigolotte. Il va trs Bien et respire seule.
J OINTURE NATURELLE[
signaletique_fiches,
fiches_depart]
R ESTRICTION(id_bebe = 38)[<rsultat1 >]
P ROJECTION(id, texte)[<rsultat2 >]
MySQL
R295 p. 257
SELECT bebes . id AS BB, sexe , poids , . . . ,
i n f i r m i e r e s . id AS i n f . , age as ge , service , . . . ,
fiches_depart . id AS fiche , t e x t e
FROM fiches_depart ,
signaletique_fiches ,
bebes ,
infirmieres
WHERE s i g n a l e t i q u e _ f i c h e s . id = fiches_depart . id
AND bebes . id = id_bebe
AND i n f i r m i e r e s . id = i d _ i n f i r m i e r e ;
R296 p. 259
SELECT f . id ,
f . texte
FROM s i g n a l e t i q u e _ f i c h e s AS s ,
fiches_depart AS f
WHERE s . id = f . id
AND id_bebe = 38 ;
Cette requte pourrait sexprimer de manire plus concise via une jointure naturelle :
259
SELECT f . id ,
texte
FROM s i g n a l e t i q u e _ f i c h e s
NATURAL JOIN fiches_depart AS f
WHERE id_bebe = 38 ;
Exercice n 3 Pour chaque infirmire, fournir son identifiant, le nombre de fiches quelle
a remplies, le nombre total doccurrences de mots pleins et le nombre moyen doccurrences
de mots pleins, ainsi que le nombre total de lemmes de mots pleins et le nombre moyen de
ralisations par lemme.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
P HDRE
Mots rimant ensemble
Exercice n 4 Fournir la table des mots qui riment ensemble dans Phdre, avec pour chaque
couple, le numro du premier vers, le numro du second, les ralisations graphiques des deux
mots, ainsi que leurs catgories.
Exercice n 5 Modifier la requte de lexercice prcdent pour obtenir lensemble des mots
qui riment avec yeux et le nombre doccurrences de chaque couple.
cho hmistiche-rime
Exercice n 7
260
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
N
342
873
629
1061
285
46
905
681
1033
229
vers
Le roi nest plus, Madame ; il faut prendre sa place.
Cen est fait : on dira que Phdre, trop coupable,
Je le vois, je lui parle ; et mon coeur... Je mgare,
Prends garde que jamais lastre qui nous claire
Quand ma bouche implorait le nom de la desse,
Lasse enfin delle-mme et du jour qui lclaire,
Cest un trsor trop cher pour oser le commettre.
Ces dieux qui se sont fait une gloire cruelle
Cest trop laisser la reine sa douleur mortelle;
Quoiquil vous reste peine une faible lumire,
voy. cho
a
a
a
ai
ai
ai
ai
ai
ai
ai
49
qui fournissent lune et lautre les voyelles en cho entre hmistiche et rime (tableau 78
p. 261), dterminer la frquence des voyelles donnant lieu un tel cho et classer les voyelles
et les frquences correspondantes par frquence dcroissante.
NB : dans la requte Access, pour assurer lauto-jointure entre les deux instances de la
table sur lattribut , on fait glisser le nom de lattribut dans
la table sur le nom de la table (ou dans lautre sens). On voit
alors en 49 une flche apparatre entre les 2 tables reliant les deux attributs.
Vers rime imparfaite
Exercice n 8 Chercher les mots de Phdre qui ne riment pas pour loreille, cest--dire o la
fin phontique des deux mots diffre.
E SQUE
MySQL
CREATE TABLE actes_personnages_possibles (
acte VARCHAR( 5 ) BINARY NOT NULL DEFAULT " " ,
personnage VARCHAR(100) BINARY NOT NULL DEFAULT " " ,
PRIMARY KEY ( acte , personnage ) ) ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lquivalent SQL Server est :
SELECT actes . acte ,
personnages . personnage
FROM actes ,
personnages ;
262
52
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
53
Lengendrement de la table actes_personnages_effectifs obit la mme dmarche :
55
J OINTURE NATURELLE[
actes_personnages_possibles,
actes_personnages_effectifs]
263
R170 t. 1 p. 135
R171 t. 1 p. 136
R ESTRICTION(e.acte E ST N ULL)
[<rsultat de la R170 t. 1 p. 135>]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
T RI
SUR (gauche.personnage,
gauche.acte)[<rsultat1 >]
La premire requte ne retient que les lignes identiques des deux tables. La deuxime
requte, qui fait appel une jointure externe, met en vidence les lignes dans lesquelles
une combinaison possible actepersonnage na pas de correspondant parmi les combinaisons
effectives. La troisime requte raffine la prcdente. Elle retient uniquement les lignes de dis
cordance, que manifeste la marque NULL pour la colonne de la table
.
MySQL
R169 t. 1 p. 134
SELECT
FROM actes_personnages_possibles
NATURAL JOIN a c t e s _ p e r s o n n a g e s _ ef fec t i fs ;
R170 t. 1 p. 135
SELECT
FROM actes_personnages_possibles AS p
LEFT OUTER JOIN a c t e s _ p e r s o n n a g e s_ e ffe ct i f s AS e
ON p . acte = e . acte
AND p . personnage = e . personnage ;
R171 t. 1 p. 136
SELECT
FROM actes_personnages_possibles AS p
LEFT OUTER JOIN a c t e s _ p e r s o n n a g e s_ e ffe ct i f s AS e
ON p . acte = e . acte AND p . personnage = e . personnage
WHERE e . personnage IS NULL
ORDER BY p . personnage , p . acte ;
Access
264
56
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cette requte Access, proche de la R169 t. 1 p. 134, a pour quivalent SQL Server :
SELECT actes_scenes_possibles . ,
a c t e s _ p e r s o n n a g e s_ ef fe ct i fs .
FROM actes_scenes_possibles
INNER JOIN a c t e s _ p e r s o n n a g e s_ ef fe ct i fs
ON ( actes_scenes_possibles . personnage = a c t e s _ p e r s o n n a g e s_ e ffe ct i fs . personnage )
AND ( actes_scenes_possibles . acte = a c t e s _ p e r s o n n a g e s_ e ffe ct i fs . acte ) ;
Son rsultat comprend 25 lignes, soit lintersection entre les deux tables.
57
On constate dailleurs, lorsquon clique avec le bouton droit sur une des deux lignes symbolisant la jointure entre les deux tables que cest effectivement le comportement attendu de
cette jointure :
58
Pour obtenir une jointure externe, on modifie comme suit la jointure pour chacun des
attributs mis en relation :
265
59
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
60
Le rsultat est dsormais de 40 lignes. Il contient des lignes mettant en vidence le dcalage
entre les combinaisons possibles et les combinaisons effectives, NULL y tant figur par le
vide :
62
Lquivalent SQL Server montre bien quon a formul, via linterface, une jointure externe
proche de la R170 t. 1 p. 135 :
SELECT actes_scenes_possibles . ,
a c t e s _ p e r s o n n a g e s_ ef fe ct i fs .
FROM actes_scenes_possibles
LEFT JOIN a c t e s _ p e r s o n n a g e s_ e ffe ct i f s
ON ( actes_scenes_possibles . personnage = a c t e s _ p e r s o n n a g e s_ e ffe ct i fs . personnage )
AND ( actes_scenes_possibles . acte = a c t e s _ p e r s o n n a g e s_ e ffe ct i fs . acte ) ;
266
fiches
1
3
7
15
327
286
225
178
tot.
types
7518
6964
5363
4219
min.
types
3
6
3
4
max.
types
100
66
65
58
moy.
types
22.99
24.35
23.84
23.70
tot. o.
Min. o.
max. o.
moy. o.
tok/typ
9947
9322
7171
5603
3
6
3
4
177
114
109
93
30.42
32.59
31.87
31.48
1.32
1.34
1.34
1.33
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
E SQUE
7. Solutions
Solution de lexercice n 1 p. 245 Par type, on entend ici un lemme donn, par occurrences,
le nombre de fois o il se rencontre au sein dune fiche ou dun ensemble de fiches.
Le tableau 79 p. 267 fournit les rsultats. Une jointure est ncessaire avec la table
pour connatre le jour de rdaction de la fiche :
R297
,
,
J OINTURE(
id_fiche = id
)[fiches_types_occurrences_lemmes,
signaletique_fiches]
Regrouper sur(jour)[<rsultat1 >]
P AR GROUPE(
jour T ITRE Jour,
N OMBRE DE LIGNES () T ITRE fiches,
S OMME(types) T ITRE tot. types,
M INIMUM(types) T ITRE min. types,
M AXIMUM(types) T ITRE max. types,
M OYENNE(types) T ITRE moy. types,
S OMME(occurrences) T ITRE tot. o.,
M INIMUM(occurrences) T ITRE min. o.,
M AXIMUM(occurrences) T ITRE max. o.,
M OYENNE(occurrences) T ITRE moy. o.,
S OMME(occurrences)/S OMME(types) T ITRE tok/typ
)[<rsultat2 >]
267
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Jour
1
1
3
3
7
7
15
15
Jour
1
3
7
15
filles
151
141
104
83
sexe
Fille
Garon
Fille
Garon
Fille
Garon
Fille
Garon
o.
151
176
141
145
104
121
83
95
%
46.18
49.30
46.22
46.63
garons
176
145
121
95
MySQL
,
,
J OINTURE(
id_bebe = bebes.id
)[signaletique_fiches, bebes]
R EGROUPER SUR(jour, sexe)[<rsultat1 >]
P AR GROUPE(
jour Titre Jour,
sexe,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
268
R299
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
,
,
J OINTURE(
id_bebe = bebes.id
)[signaletique_fiches, bebes]
R EGROUPER SUR(jour)[<rsultat1 >]
P AR GROUPE(
jour T ITRE Jour,
S OMME (S I(sexe = Fille, 1, 0)) T ITRE Filles,
S OMME (S I(sexe = Fille, 1, 0)) / N OMBRE DE LIGNES () * 100
T ITRE %,
S OMME (S I(sexe = Fille, 0, 1)) T ITRE garons
)[<rsultat2 >]
MySQL
R298 p. 268
SELECT s i g n a l e t i q u e _ f i c h e s . jour AS Jour ,
sexe ,
COUNT( ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s ,
bebes
WHERE id_bebe = bebes . id
GROUP BY s i g n a l e t i q u e _ f i c h e s . jour , sexe ;
R299 p. 269
Access
En 63 , lquivalent de la R298 p. 268.
63
En 64 , proche de R299 p. 269, on notera quil faut cocher la colonne pour quelle
figure dans le rsultat. Si ce nest pas le cas, la colonne est considre comme le paramtre
269
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
64
Le rsultat figure en 65 .
65
Une autre manire dutiliser le total de bbs par jour sans pour autant le faire figurer
dans le rsultat consiste le calculer directement dans la colonne %, comme en 66 .
66
270
R2100
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
,
,
J OINTURE(
id = fiche
)[signaletique_fiches,
occ_prema]
R EGROUPER SUR(id_infirmiere)[<rsultat1>]
P AR GROUPE(
id_infirmiere T ITRE Inf.,
N OMBRE DE VALEURS DISTINCTES(id) T ITRE nbre fiches,
C OMPTE (S I(categorie R ESSEMBLANT [ANRSDVCP], 1, 0))
T ITRE o.,
C OMPTE (S I(categorie R ESSEMBLANT [ANRSDVCP], 1, 0))
/ N OMBRE DE VALEURS DISTINCTES(id) T ITRE o. moy.,
N OMBRE DE VALEURS DISTINCTES (S I(categorie R ESSEM BLANT [ANRSDVCP], lemme, NULL)) T ITRE lemmes,
C OMPTE(Si(categorie R ESSEMBLANT [ANRSDVCP], 1, 0))
/ N OMBRE DE VALEURS DISTINCTES (S I(categorie R ESSEM BLANT [ANRSDVCP], lemme, NULL)) T ITRE o./lemmes
)[<rsultat2 >]
T RI
SUR (o.
moy.)[<rsultat3 >]
MySQL
SELECT i d _ i n f i r m i e r e AS I n f ,
COUNT( DISTINCT id ) AS nbre f i c h e s ,
COUNT( IF ( c a t e g o r i e REGEXP ^[ANRSDVCP] , 1 , 0 ) ) AS o . ,
COUNT( IF ( c a t e g o r i e REGEXP ^[ANRSDVCP] , 1 , 0 ) )
/ COUNT( DISTINCT id ) AS o . moy. ,
COUNT( DISTINCT IF ( c a t e g o r i e REGEXP ^[ANRSDVCP] , lemme, NULL ) )
AS lemmes ,
COUNT( IF ( c a t e g o r i e REGEXP ^[ANRSDVCP] , 1 , 0 ) )
/ COUNT( DISTINCT IF ( c a t e g o r i e REGEXP ^[ANRSDVCP] , lemme, NULL ) )
AS o ./lemmes
FROM s i g n a l e t i q u e _ f i c h e s ,
occ_prema
WHERE id = f i c h e
GROUP BY i d _ i n f i r m i e r e
ORDER BY o . moy. ;
271
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Inf
61
70
73
28
46
68
18
7
81
34
12
14
44
8
3
16
32
2
20
9
21
65
67
97
1
10
22
99
39
13
58
62
19
4
17
33
47
6
36
24
41
43
nbre fiches
22
16
10
16
19
27
62
14
38
22
41
44
3
18
29
39
28
7
14
19
2
35
16
25
18
14
46
21
27
27
29
9
42
28
52
19
25
24
23
21
14
12
o.
520
433
275
474
743
1071
2682
612
1700
1000
1895
2037
143
904
1491
2113
1579
401
804
1094
119
2093
976
1653
1192
956
3161
1463
2068
2104
2303
753
3564
2551
4828
1876
2475
2476
2538
2333
1590
1533
o. moy.
23.64
27.06
27.50
29.62
39.11
39.67
43.26
43.71
44.74
45.45
46.22
46.30
47.67
50.22
51.41
54.18
56.39
57.29
57.43
57.58
59.50
59.80
61.00
66.12
66.22
68.29
68.72
69.67
76.59
77.93
79.41
83.67
84.86
91.11
92.85
98.74
99.00
103.17
110.35
111.10
113.57
127.75
lemmes
60
75
40
82
105
100
273
86
161
140
177
159
38
121
216
200
128
63
127
144
32
260
163
210
177
169
262
172
238
198
229
121
280
261
430
237
281
282
340
243
222
232
o./lemmes
8.67
5.77
6.88
5.78
7.08
10.71
9.82
7.12
10.56
7.14
10.71
12.81
3.76
7.47
6.90
10.56
12.34
6.37
6.33
7.60
3.72
8.05
5.99
7.87
6.73
5.66
12.06
8.51
8.69
10.63
10.06
6.22
12.73
9.77
11.23
7.92
8.81
8.78
7.46
9.60
7.16
6.61
272
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
v1
1
3
5
7
9
11
13
15
17
19
R2101
mot1
Thramne
agit
pre
cacher
crainte
bords
Tnare
climats
pre
jours
cat1
Np
Adj
Nc
V
Nc
Nc
Np
Nc
Nc
Nc
v2
2
4
6
8
10
12
14
16
18
20
mot2
Trzne
oisivet
chre
chercher
Corinthe
morts
Icare
pas
mystre
amours
cat2
Np
Nc
Adj
V
Np
Nc
Np
Nc
Nc
Nc
J OINTURE(
o2.numero_vers = o1.numero_vers + 1
)[occurrences A LIAS o1,
occurrences A LIAS o2]
,
,
R ESTRICTION(
o2.numero_vers % 2 = 0
ET o1.fin_syl = 12
ET o1.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
ET o2.fin_syl = 12
ET o2.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
)[<rsultat1 >]
P ROJECTION(
o1.numero_vers T ITRE v1,
o1.occ_car T ITRE mot1
o1.cat T ITRE cat1
o2.numero_vers T ITRE v2,
o2.occ_car T ITRE mot2,
o2.cat T ITRE cat2
) [<rsultat1 >]
MySQL
SELECT o1 . numero_vers AS v1 ,
o1 . occ_car AS mot1 ,
o1 . cat AS cat1 ,
o2 . numero_vers AS v2 ,
o2 . occ_car AS mot2 ,
o2 . cat AS cat2
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv ,
Adj , Nc , Np , V )
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv ,
Adj , Nc , Np , V )
273
AND
AND
AND
AND
o1 . f i n _ s y l = 12
o2 . f i n _ s y l = 12
o2 . numero_vers % 2 = 0
o2 . numero_vers = o1 . numero_vers + 1 ;
Access
Le nombre des critres oblige fournir deux copies dcran :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
67
68
. . . ET
( o1 . occ_car = yeux OU
fournit les couples de mots-rimes dans lesquels yeux est impliqu en premire ou en deuxime
position. Il suffit en effet de rajouter une disjonction indiquant quon veut soit que le premier
mot soit yeux soit que le deuxime mot soit yeux. Cest la ralisation de la R172 t. 1 p. 137.
MySQL
Par rapport la requte abstraite, la ralisation en MySQL ajoute dautres colonnes dans
le rsultat (tableau 83 p. 275). En particulier, elle ajoute le dcompte des rimes observes, via
un regroupement pralable :
SELECT o1 . occ_car ,
o1 . occ_phon ,
o1 . cat ,
o2 . occ_car ,
o2 . occ_phon ,
o2 . cat ,
COUNT( ) AS o .
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o1 . f i n _ s y l = 12
AND o2 . f i n _ s y l = 12
AND o2 . numero_vers % 2 = 0
AND o2 . numero_vers = o1 . numero_vers + 1
AND ( o1 . occ_car = yeux OR o2 . occ_car = yeux )
GROUP BY o1 . occ_car , o2 . occ_car ;
274
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
occ_car
ambitieux
audacieux
cieux
dieux
furieux
glorieux
odieux
prodigieux
yeux
yeux
yeux
occ_phon
an |b i |s i |eu
oo |d a |s i |eu
s y eu
d y eu
f u |r i |eu
g l o |r i |eu
o |d i |eu
p r o |d i |j i |eu
y eu
y eu
y eu
cat
Nc
Adj
Nc
Nc
Adj
Adj
Adj
Adj
Nc
Nc
Nc
occ_car
yeux
yeux
yeux
yeux
yeux
yeux
yeux
yeux
dieux
furieux
lieux
occ_phon
y eu
y eu
y eu
y eu
y eu
y eu
y eu
y eu
d y eu
f u |r i |eu
l y eu
cat
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Nc
Adj
Nc
o.
1
1
1
1
2
1
4
1
1
1
3
69
Cela revient en effet chercher soit les mots en situation de rimes tels que le premier soit
yeux soit constituer les couples de yeux avec toutes les occurrences de la pice.
La requte corrige :
275
71
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
72
Une variante de la requte SQL Server, dont le rsultat figure en 73 , ajoute le personnage
responsable de chacun des mots en relation de rime et organise les rsultats en triant par
personnage :
SELECT Occurrences . numero_vers AS n 1 ,
Occurrences_1 . numero_vers AS n 2 ,
Occurrences . occ_car AS mot1 ,
Occurrences . personnage AS pers1 ,
Occurrences_1 . occ_car AS mot2 ,
Occurrences_1 . personnage AS pers2
...
ORDER BY Occurrences . personnage , Occurrences_1 . personnage ;
276
v1 6= yeux
12
v2 = yeux
12
v2 6= yeux
5
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
73
R2102
J OINTURE(
o2.numero_vers = o1.numero_vers + 1
)[occurrences A LIAS o1,
occurrences A LIAS o2]
,
R ESTRICTION(
o2.numero_vers % 2 = 0
ET o1.fin_syl = 12
ET o1.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
ET o2.fin_syl = 12
ET o2.cat PARMI (Dt/Pron, Conj, Prp, Rel, Adv,
Adj, Nc, Np, V)
E T (o1.occ_car = yeux O U o2.occ_car = yeux)
)[<rsultat1 >]
P ROJECTION(
S OMME (S I(o1.occ_car
S OMME (S I(o1.occ_car
S OMME (S I(o2.occ_car
S OMME (S I(o2.occ_car
) [<rsultat1 >]
=
=
=
=
yeux,
yeux,
yeux,
yeux,
1,
0,
1,
0,
0))
1))
0))
1))
T ITRE
T ITRE
T ITRE
T ITRE
v1
v1
v2
v2
= yeux,
<> yeux,
= yeux,
<> yeux
MySQL
SELECT SUM( IF ( o1 . occ_car
SUM( IF ( o1 . occ_car =
SUM( IF ( o2 . occ_car =
SUM( IF ( o2 . occ_car =
= yeux , 1 , 0) ) AS v1 = yeux ,
yeux , 0 , 1) ) AS v1 <> yeux ,
yeux , 1 , 0) ) AS v2 = yeux ,
yeux , 0 , 1) ) AS v2 <> yeux
277
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
o.
31
19
15
5
5
3
3
3
2
1
1
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o1 . f i n _ s y l = 12
AND o2 . f i n _ s y l = 12
AND o2 . numero_vers % 2 = 0
AND o2 . numero_vers = o1 . numero_vers + 1
AND ( o1 . occ_car = yeux
OR o2 . occ_car = yeux ) ;
,
,
J OINTURE(
v.numero_vers = p1.numero_vers
E T p1.numero_vers = p2.numero_vers
)[vers A LIAS v,
positions A LIAS p1,
positions A LIAS p2]
R ESTRICTION(
p1.position = 6
E T p2.position = 12
E T p1.voy = p2.voy
)[<rsultat1 >]
R EGROUPER
P AR GROUPE (
p1.voy T ITRE Voy. cho,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat3 >]
T RI
SUR (o.
D CROISSANT)[<rsultat4 >]
278
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
Access
Solution de lexercice n 8 p. 261 Le principe de rapprochement des mots en relation de
rime est le mme que dans les requtes prcdentes. Sajoute une condition de restriction :
on retient les mots rimant dont le dernier phonme de la transcription phontique diffre.
On renverse pour cela la chane de caractres constituant la transcription, cest--dire la
valeur de lattribut et on garde le premier caractre que lon peut alors comparer
avec son quivalent pour lautre mot. Le rsultat (tableau 86 p. 280) montre dun ct des
licences rpertories ou des sons proches, de lautre des erreurs de transcription (pour
remords, longtemps, nom).
R2104
J OINTURE(
o2.numero_vers = o1.numero_vers + 1
)[occurrences A LIAS o1, occurrences A LIAS o2]
R ESTRICTION(
o1.cat P ARMI (Dt/Pron, Conj, Prp, Rel, Adv, Adj,
Nc, Np, V)
Et o2.cat P ARMI (Dt/Pron, Conj, Prp, Rel, Adv, Adj,
Nc, Np, V) AND o1.fin_syl = 12
E T o2.fin_syl= 12
E T o2.numero_vers % 2 = 0
E T S OUS C HAINE (I NVERSER(o1.occ_phon),
1,
2) <>
S OUS C HAINE (I NVERSER(o2.occ_phon), 1, 2)
)[<rsultat1 >]
P ROJECTION(
o1.numero_vers T ITRE v1,
o1.occ_car T ITRE mot1,
o1.occ_phon T ITRE phon1,
o2.occ_car T ITRE mot2,
o2.occ_phon T ITRE phon2,
S OUS C HAINE (I NVERSER(o1.occ_phon),
phon1,
S OUS C HAINE (I NVERSER(o2.occ_phon),
phon2
)[<rsultat2 >]
1,
2) T ITRE fin
1,
2) T ITRE fin
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
v1
1635
895
1375
79
1195
951
1647
1487
435
1123
899
1403
1303
1227
395
983
1547
359
755
467
159
351
207
107
643
mot1
remords
remords
marcher
punis
avis
finis
claircis
suivis
mpris
asservis
avis
nom
longtemps
transports
fils
fils
fils
fils
Minos
clatants
noeuds
noeuds
raison
rejeton
flots
phon1
r @ |m o r d
r @ |m o r d
m a r |sh e
p u |n i
a |v i
f i |n i
e |k l ai r |s i
s yw i |v i
m e |p r i
a |s ai r |v i
a |v i
nom
l on |t an p
t r an s |p o r
fis
fis
fis
fis
m i |n oo s
e |k l a |t an
n oe
n oe
r ai |z on
r @ |j @@ |t on
f l oo
mot2
morts
morts
cher
Sinnis
fils
fils
fils
fils
fils
fils
fils
Junon
habitants
remords
avis
ennemis
nourris
btis
repos
longtemps
cheveux
feux
nom
nom
Minos
phon2
mor
mor
sh ai r
s i |n i s
fis
fis
fis
fis
fis
fis
fis
j u |n on
a |b i |t an
r @ |m o r d
a |v i
ai |n @@ |m i
n ou |r i
b aa |t i
r @ |p oo
l on |t an p
sh @ |v eu
f eu
nom
nom
m i |n oo s
fin phon1
d
d
e
i
i
i
i
i
i
i
i
m
p
r
s
s
s
s
s
an
oe
oe
on
on
oo
finphon2
r
r
r
s
s
s
s
s
s
s
s
on
an
d
i
i
i
i
oo
p
eu
eu
m
m
s
MySQL
SELECT o1 . numero_vers AS v1 ,
o1 . occ_car AS mot1 ,
o1 . occ_phon AS phon1 ,
o2 . occ_car AS mot2 ,
o2 . occ_phon AS phon2 ,
REVERSE(SUBSTRING (REVERSE( o1 . occ_phon ) , 1 , 2) ) AS f i n phon1 ,
REVERSE(SUBSTRING (REVERSE( o2 . occ_phon ) , 1 , 2) ) AS finphon2
FROM occurrences AS o1 ,
occurrences AS o2
WHERE o1 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o2 . cat IN ( Dt/Pron , Conj , Prp , Rel , Adv , Adj , Nc , Np , V )
AND o1 . f i n _ s y l = 12
AND o2 . f i n _ s y l = 12
AND o2 . numero_vers % 2 = 0
AND o2 . numero_vers = o1 . numero_vers + 1
AND SUBSTRING (REVERSE( o1 . occ_phon ) , 1 , 1) != SUBSTRING (REVERSE( o2 . occ_phon ) , 1 ,
1)
ORDER BY f i n phon1 , f i n phon2 ;
Access
En 74 , la partie pertinente de la requte :
280
74
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
281
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE VIII
3. Redondances et incohrences
' nombre dattestations, de combinaisons distinctes de bases et de drivs avec leurs catgories
R173 t. 1 p. 147
P AR GROUPE(
N OMBRE DE LIGNES() T ITRE Attestations,
N OMBRE DE VALEURS DISTINCTES(derive, cat_derive) T ITRE
drivs,
N OMBRE DE VALEURS DISTINCTES(base, cat_base) T ITRE
bases
)
[esque]
' sens, commentaires des couples base-catgorie ayant plus dune attestation
282
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R174 t. 1 p. 148
Type
int(11)
varchar(100) binary
varchar(10) binary
varchar(100) binary
varchar(255) binary
varchar(100) binary
varchar(10) binary
varchar(100) binary
blob
varchar(100) binary
varchar(50) binary
varchar(255) binary
blob
varchar(100) binary
varchar(255) binary
tinyint(4)
tinyint(4)
smallint(6)
varchar(100) binary
varchar(100) binary
R EGROUPER
,
SUR (base,
Null
(MySQL)
Key
PRI
Default
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
Extra
auto_increment
0
0
0
cat_base)[esque]
P AR GROUPE(
base,
cat-base,
sens_base,
commentaire_base
N OMBRE DE LIGNES() T ITRE o.,
)
AVEC (N OMBRE DE LIGNES() > 1)
[<rsultat1 >]
R EGROUPER
,
SUR (derive,
cat_derive)[esque]
P AR GROUPE(
derive,
N OMBRE DE LIGNES() T ITRE o.,
N OMBRE DE VALEURS DISTINCTES(base) T ITRE nbre bases
)
AVEC (N OMBRE DE VALEURS DISTINCTES(base) > 1)
[<rsultat1 >]
La dmarche dlimination des redondances passe alors par plusieurs tapes. La premire
est celle du reprage des incohrences dans la table de dpart (chapitre XI, 2). Pour ne pas
risquer de corrompre les informations initiales, on cre, dans une deuxime tape, un miroir
de la table. Cest la table cre et modifie au ch. XII. On modifie progressivement
ce miroir (ajout et suppression de colonnes, altration de lignes). Mais on peut revenir la
table de dpart en cas de problme.
283
Le modle relationnel pousse liminer dans la plupart des cas les redondances des
tables manipules. Dans la pratique cependant, on peut volontairement constituer des tables
conservant des redondances. Cest le cas par exemple quand on veut faire frquemment appel
des informations dont la production via une jointure risque de ralentir la consultation.
MySQL
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R173 t. 1 p. 147
SELECT COUNT( ) AS A t t e s t a t i o n s ,
COUNT( DISTINCT derive , cat_derive ) AS drivs ,
COUNT( DISTINCT base , cat_base ) AS bases
FROM esque ;
R174 t. 1 p. 148
SELECT base ,
cat_base ,
sens_base ,
commentaire_base ,
COUNT( base ) AS o .
FROM esque
GROUP BY base , cat_base
HAVING COUNT( base ) > 1
ORDER BY o . ;
R175 t. 1 p. 150
SELECT derive ,
COUNT( ) AS o . ,
COUNT( DISTINCT base ) AS nbre bases
FROM esque
GROUP BY derive , cat_derive
HAVING COUNT( DISTINCT base ) > 1;
Access
Acces ne dispose pas de lquivalent de N OMBRE DE VALEURS DISTINCTES(<attribut>). Il
faut donc passer par des dtours pour arriver au rsultat souhait. Nous en donnons un
exemple avec la ralisation de la R175 t. 1 p. 150.
Une premire tape consiste associer au couple (<driv>, <catgorie>) sa frquence, via
un regroupement sur les deux attributs correspondants : 1 . On peut demble, en outre, se
limiter aux couples qui ne sont pas des hapax. Seul un couple intervenant au moins 2 fois
peut avoir des bases distinctes. . . On sauvegarde la requte correspondante dont le rsultat
figure en 2 .
1
284
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La deuxime tape consiste constituer lensemble des triplets distincts (<driv>, <catgorie>, <base>), ce qui passe par un regroupement sur ces trois attributs lun aprs lautre en
3.
3
La troisime tape cre une requte partir des deux requtes prcdentes : 5 .
5
On tablit en 6 une jointure entre les deux requtes sur les attributs et en
faisant glisser avec le clic gauche le nom dun attribut dune requte sur son correspondant de
lautre. La nouvelle requte opre un regroupement sur , et (le nombre doccurrences du couple (<driv>, <catgorie>). Ce regroupement permet de calculer le nombre
de lignes de chaque groupe (C OMPTE), cest--dire en dfinitive le nombre de bases correspondant au couple.
285
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
4. Solutions
Solution de lexercice n 1 p. 287 324 bases sont assorties de drivs multiples. Un extrait
des rsultats figure au tableau 88, p. 288.
Est utilise la table dont la cration et lvolution sont dtailles au ch. XII. Des
attributs supplmentaires engrangent des informations nettoyes par rapport la table
. Dans lattribut , une marque NULL pour lattribut est remplace par
le driv prcd de la chane > . Cela veut dire que la base, inconnue, a servi produire le
driv en question. De manire similaire, la catgorie de la base est donne parfois comme
douteuse, ou bien se trouve assortie de traits morphologiques avec des diffrences de traitement selon les drivs. Un attribut fournit donc la seule partie du discours (Part of
Speech) du mot base.
Par commodit pdagogique, la requte enchsse est exprime part et la requte enchssante y rfre. Mais on pourrait remplacer tout aussi bien cette rfrence par la requte
enchsse elle-mme, comme on le constate dans la version MySQL.
R2105
R EGROUPER SUR(
base_normalisee,
base_POS
)[esque_tmp]
AVEC (N OMBRE DE VALEURS DISTINCTES(derive_cat_derive)
> 1)
P ROJECTION(base_normalisee)[<rsultat1 >]
287
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base_normalisee
> humoresque
> humoresque
Ali Baba
Ali Baba
Ali Baba
Ali Baba
Ali Baba
Almodovar
Almodovar
Amiga
Amiga
Amin Dada (Idi)
Amin Dada (Idi)
Anelka (Nicolas)
Anelka (Nicolas)
Arcimboldo (Guiseppe)
Arcimboldo (Guiseppe)
Arlequin
Arlequin
Arrabal (Fernando)
Arrabal (Fernando)
Arrabal (Fernando)
Arriv (Michel)
Arriv (Michel)
Artin (Pietro Aretino dit l)
Artin (Pietro Aretino dit l)
Avignon
Avignon
BD
BD
BD
Bada
Bada
Bada
Barbara
Barbara
Bardamu
Bardamu
Bardot (Brigitte)
Bardot (Brigitte)
Bardot (Brigitte)
Bassano (Iacopo)
Bassano (Iacopo)
Ben Laden (Ousmane)
Ben Laden (Ousmane)
Bergame
Bergame
Bernhardt (Sarah)
Bernhardt (Sarah)
Bernhardt (Sarah)
Berni (Francesco)
Berni (Francesco)
Berni (Francesco)
derive
humoresque
humoresque
ali-babaesque
Alibabesque
alibababesque
alibabesque
ali-babesque
almodovardesque
almodovaresque
amiganesque
amigaesque
idi-amin-dadaesque
amindadesque
anelkiesque
Anelkesque
arcimboldesque
archimboldesque
arlequinesque
arlequinesque
arrabalesque
Arrabalesque
arrabalesqua
arrivesque
arrivesque
aretinesque
artinesque
avignonesque
avignonnesque
BDesque
bdesque
BDesque
Badadesques
Badadesque
Badatesques
barbaresque
barbaresque
bardamuesque
bardamesque
bardesque
bardotesque
brigidesque
bassanesque
bassanesque
benladenesque
ben ladesque
Bergamesque
bergamesque
sarahbernhardtesque
sarahbernardtesque
bernhardtesque
bernesque
bernesque
berniesque
derive_POS
a
n
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
absente
a
a
a
absente
a
absente
a
a
a
a
absente
a
a
absente
n
absente
a
absente
a
a
a
a
absente
a
n
a
a
n
a
a
a
a
absente
a
a
288
R2106
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R ESTRICTION(
base_normalisee P ARMI (<rsultat R2105 p. 287)
)[esque_tmp]
P ROJECTION(
base_normalisee,
derive,
derive_POS
)[<rsultat1 >]
T RI
MySQL
SELECT DISTINCT
base_normalisee ,
derive ,
derive_POS
FROM esque_tmp
WHERE base_normalisee IN
(SELECT base_normalisee
FROM esque_tmp
GROUP BY base_normalisee ,
base_POS
HAVING COUNT( DISTINCT d e r i v e _ c a t _ d e r i v e ) > 1)
ORDER BY base_normalisee ;
Le mot-cl IN dans la clause WHERE attend une liste de valeurs. Cest pourquoi la requte
enchsse doit correspondre une table ayant une seule colonne, qui constitue elle aussi
une liste de valeurs. Cest pour cette raison qua t cr dans la table un attribut
qui est la concatnation des attributs et .
Solution de lexercice n 2 p. 287 102 drivs ont des bases multiples. Un extrait des
rsultats figure au tableau 89, p. 290. Pour les mmes raisons qu lexercice prcdent,
est utilise la table et la requte enchsse est nonce sparment de la requte
enchssante dans laquelle elle figure.
R2107
,
R2108
R EGROUPER SUR(
derive_cat_derive
)[esque_tmp]
AVEC (N OMBRE DE VALEURS DISTINCTES(base_normalisee)
> 1)
P ROJECTION(derive_cat_derive)[<rsultat1 >]
R ESTRICTION(
derive_cat_derive P ARMI (<rsultat R2107 p. 289)
)[esque_tmp]
P ROJECTION(
derive,
derive_POS,
base_normalisee
)[<rsultat1 >]
T RI
SUR (derive,
derive_POS)[<rsultat2 >]
289
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
derive
adamesque
adamesque
aillesque
aillesque
ambresque
ambresque
argentinesque
argentinesque
barbapapesque
barbapapesque
barbaresque
barbaresque
bardesque
bardesque
beatlestonesque
beatlestonesque
bergeresque
bergeresque
bergeresque
bibiesque
bibiesque
bilbaesque
bilbaesque
bricolesque
bricolesque
bubblegumesque
bubblegumesque
cacophonesque
cacophonesque
calvinesque
calvinesque
cambronnesque
cambronnesque
canardesque
canardesque
canardesque
capitalesque
capitalesque
carrachesque
carrachesque
charentonnesque
charentonnesque
charivaresque
charivaresque
chattesque
chattesque
chaudronnesque
chaudronnesque
chopinesque
chopinesque
clintonesque
clintonesque
clochardesque
clochardesque
conesque
conesque
cuivresque
cuivresque
derive_POS
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
base_normalisee
Adamo
Adams (Douglas)
aile
ail
ambre
Ambre
Argentine
Argentin
barbe papa
barba papa
Barbara
Barbarie
Bardot (Brigitte)
barde
Beatles (les)
Beatles (les), Rolling Stones
Berger (Michel)
Bergier (Jacques)
Bergerac (Cyrano de)
Bibi
BiBi
Bibao
Bilba (Jim)
bricol()e ()
bricole
bubblegum
Bubblegum (James)
cacophie
cacophonie
Calvin (Jean Cauvin, dit)
Calvin
Cambronne (Pierre)
Cambronne (Pierre Jacques Etienne)
canard
Canard enchan (Le)
Canardo
capital
capitale
Carrache
Carrache (les)
Charenton 1
Charenton 2
charivari
Charivari (le)
chatte
chat
chaudron
Chaudron
Chopin (Frdric)
Chopinot (Rgine)
Clinton ()
Clinton (Bill)
clachard
clochard
con
cone
cuivre
cuivresque
290
MySQL
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
291
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE IX
MODLISATION
Modlisation
1n
rdige
11
11
concerne
1n
INFIRMIERE
FICHE
BEBE
id
id
id
ge
texte
sexe
lieu de naissance
diplme
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cette fiche (tat de dpart, tat normalis, tat lemmatis, etc.) est une association un--un :
la signaltique dune fiche correspond une fiche et une seule.
La figure 6 p. 293 fournit une telle reprsentation pour un sous-ensemble du domaine
de P RMA. Les cardinalits sont portes sur les traits reliant les entits : on voit que, par
lassociation , une instance de BEBE est associe 1 ou n instances (mention 1-n) de
FICHE tandis quune instance de FICHE lest avec 1 et une seule de BEBE (mention 1-1). Un
cas de figure nest pas reprsent dans cet exemple : n-n (ou association plusieurs--plusieurs).
P HDRE
Sont toutes des associations un--n les associations entre un vers et les positions mtriques qui le constituent, entre un vers et les occurrences qui le forment, entre une occurrenc et les positions en lesquelles elle se dcomposent. Par contre, ressortit aux associations
un--un lassociation entre un vers graphique et sa transcription phontique.
Une association peut tre tablie entre un type dentit et lui-mme.
La relation est un exemple dassociation entre un type dentit et lui-mme : elle associe
soit deux instances de soit deux instances d .
Le vers 463 de Phdre est partag entre la scne I et la scne II de lacte II. La reprsentation choisie ne permet pas de rendre compte de cette situation, puisque le rattachement
un acte et une scne est opr globalement, pour le vers entier, dans la table . Les at
tributs et sont dans limmdiat des attributs de lentit vers. Il serait plus judicieux
de les rattacher lentit . Une occurrence se rattache de manire univoque une
scne dun acte, un vers non. Dans Phdre, il ny a quune seule exception au rattachement
dun vers une scne et une seule. Des comdies en vers comme Le Tartuffe obligeraient
une autre modlisation. Le partage dun vers entre deux scnes voire entre deux actes y est
commun.
E SQUE
Modlisation
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cest le cas de ltat global dun bb un jour donn. Il associe le score mdical (SM) et la classe
correspondant ce score ainsi que le lieu o est le bb : dans le service ; sorti de lhpital ou
dans un autre service ; dcd. une instance de BEBE pourrai(en)t tre associe(s) n (n = 4)
instances de ETAT_BEBE. Ces entits auraient les attributs , , et . Il a
toutefois paru plus naturel dattacher ces attributs aux entits de type BEBE, en distinguant
les jours en cause.
linverse, certaines entits peuvent absorber, via des attributs, des entits qui pourraient
exister en tant que telles. On a ainsi pu, comme dans la figure 6 p. 293 reprsenter le texte
dune fiche comme lun des attributs de lentit FICHE. Un tel choix est cohrent avec une
analyse donnant plus de place aux donnes factuelles et nutilisant le texte qu des fins illustratives. La place donn aux impressions des infirmires, la multiplicit des reprsentations
fournies pour chacune dentre elles a pouss faire galement de chaque tat du texte une
entit part entire (tableau 5, p. 30).
Exercice n 1 Fournir le nombre minimum et le nombre maximum dentits effectifs du ct
n de lassociation du modle E/A telle quelle est ralise dans P RMA.
Exercice n 2 Donner le nombre minimum et le nombre maximum de fiches qui ont t
consacres un bb, ainsi que les bbs concerns. Par jour, donner le maximum de fiches
consacres un bb et le ou les bb(s) correspondant(s).
P HDRE
E SQUE
Le reprage des rfrences dans des dictionnaires des drivs seffectue via :
R2109
R ESTRICTION(
reference_dans_dictionnaire E ST P AS NULL
[esque]
,
R EGROUPER SUR(
reference_dans_dictionnaire
[<rsultat1 >]
P AR GROUPE(
reference_dans_dictionnaire,
N OMBRE DE LIGNES () T ITRE o.
)
[rsultat2 >]
T RI
o.
67
3
1
1
1
294
Modlisation
DSA renvoie louvrage : Le Doran, Serge, Frdric Pellou & Philippe Ros, Dictionnaire SanAntonio, Paris : Fleuve Noir, 1993. On note dailleurs quun des renvois cet ouvrage se trouve
spar des 67 autres, pour cause de virgule manquante. . . Labrviation sv signifie sub verbo,
cest--dire sous lentre considre. Le driv chatounesque se trouve ainsi sous lentre rgion du DSA. Bjrkman rfre une thse sudoise sur les drivs en -esque : Bjrkman,
Sven, Lincroyable, romanesque, picaresque pisode barbaresque. Etude sur le suffixe franais
-esque et sur ses quivalents en espagnol, italien et roumain, Stockholm : Almqvist & Wiksell,
1984.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lattribut reference_dans_dictionnaire ne simpose pas (cf. tome 1). Sans doute faudrait-il dis4
tinguer les rfrences dans des dictionnaires de langue, du type Le Petit Robert, des mentions
dans des livres consacrs un idiolecte, comme le Dictionnaire San-Antonio, ou des tudes
linguistiques, comme celui de Bjrkman.
MySQL
La requte prcdente se ralise en MySQL par :
SELECT reference_dans_dictionnaire ,
COUNT( ) AS o .
FROM esque
WHERE reference_dans_dictionnaire IS NOT NULL
GROUP BY reference_dans_dictionnaire
ORDER BY o . DESC ;
5. Normalisations
6.
On se souvient du livre de Jules Verne, Vingt mille lieux sous les mers. Une expdition
est organise pour examiner et chasser un monstre marin qui sen prend aux navires. Il
sagit en fait du sous-marin Le Nautilus, du capitaine Nemo. Le double objectif, scientifique
et de lutte, de lexpdition explique que figurent parmi ses membres dune part M. Aronnax,
Professeur au Museum dHistoire Naturelle de Paris, charg du premier volet de lopration
et dautre part, Ned Land, harponneur de baleines de son tat, et responsable du deuxime
volet. Jules Verne met en scne un dialogue entre Conseil, serviteur de M. Aronnax et classificateur enrag danimaux, comme lui, dune part, et Ned Land dautre part. Ce dialogue
oppose prcisment deux points de vue sur la classification des animaux, qui relvent de deux
modlisations distinctes.
- Ami Ned, vous tes un tueur de poissons, un trs habile pcheur. Vous avez pris un grand
nombre de ces intressants animaux. Mais je gagerais que vous ne savez pas comment on les
classe.
295
Modlisation
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
- Eh bien ! ami Ned, coutez et retenez ! Les poissons osseux se subdivisent en six ordres :
primo, les acanthoptrygiens, dont la mchoire suprieure est complte, mobile et dont les branchies affectent la forme dun peigne. Cet ordre comprend quinze familles, cest--dire les trois
quarts des poissons connus. Type : la perche commune.
- Assez bonne manger, rpondit Ned Land.
6.1.
Pour P HDRE comme pour P RMA, le choix a t fait de faire coexister des grains danalyse des donnes textuelles de taille diffrentes, le vers et loccurrence dune part, le texte
dune fiche et les occurrences qui le constituent dautre part. La mme ralit textuelle est
donc conceptualise chaque fois de deux manires diffrentes, ce qui donne lieu deux
types dentits dans le modle Entit/Association correspondant.
P HDRE
Lanalyse a pu laisser dans lombre des entits ou des attributs pourtant importants. Pour
P HDRE, une entit PERSONNAGE permettrait dajouter chaque personnage des proprits
comme le sexe, le statut (personnage principal vs. secondaire ou roi/reine/prince(esse) vs.
confident). Les regroupements issus des proprits dune telle entit apporteraient ventuellement un autre regard sur les rpartitions des catgories, des longueurs de phrase, etc.
7. Solutions
Solution de lexercice n 1 p. 294 Cela revient dterminer dans le premier cas les nombres
minimum et maximum de fiches rdiges par une infirmire et dans le second les nombres
minimum et maximum de fiches concernant un bb. Le minimum de fiches rdiges par une
infirmire est de 2 et le maximum de 62. Le minimum de fiches pour un bb est 1 et le
maximum observ est 13, donc suprieur au maximum thorique de 12 (3 fiches 4 jours).
Le regroupement des fiches par identifiant dinfirmire permet de calculer le nombre de
fiches de chaque agrgat, cest--dire de chaque infirmire. Lorsquon trie ces nombres par
ordre croissant et que lon garde la premire ligne, on obtient le nombre minimal.
296
Modlisation
R2110
,
,
,
R EGROUPER SUR(id_infirmieres)[fiches_originelles]
P AR GROUPE(
N OMBRE DE LIGNES () T ITRE f.
)[<rsultat1 >]
T RI
SUR (f.)[<rsultat2>]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
R2110 p. 297
SELECT COUNT( ) AS f .
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY i d _ i n f i r m i e r e
ORDER BY f .
LIMIT 1 ;
SELECT COUNT( ) AS f .
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY i d _ i n f i r m i e r e
ORDER BY f . DESC
LIMIT 1 ;
Access
297
Modlisation
Solution de lexercice n 2 p. 294 La dmarche est la mme que dans la R2110 p. 297 pour
les fiches concernant un bb. On change simplement le regroupement initial, qui sopre sur
lattribut
et non sur lattribut .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
MySQL
En classant les bbs par nombre croissant de fiches associes, on constate que les bbs
66 et 103 nont quune seule fiche.
SELECT id_bebe ,
COUNT( id ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY id_bebe
ORDER BY o .
LIMIT 10 ;
En oprant de la mme manire, mais par ordre dcroissant de fiches associes, on isole
le bb 120 avec 13 fiches.
SELECT id_bebe ,
COUNT( id ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY id_bebe
ORDER BY o . DESC
LIMIT 10 ;
Rajouter un regroupement par jour permet de reprer le bb 105, auquel sont consacres
6 fiches le jour 3.
SELECT id_bebe ,
COUNT( id ) AS o .
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY id_bebe , jour
ORDER BY o . DESC
LIMIT 10 ;
298
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE X
Le schma volue a priori peu, puisquil doit tre modifi uniquement lorsquon entend
altrer la reprsentation du monde vise, tandis que souvent les tables gagnent, perdent en
volume et voient leur contenu amend. La situation diffre selon la base de donnes envisage.
Les tables de E SQUE, par dfinition, sont ouvertes : on souhaite ajouter les nouvelles
attestations rencontres, les bases correspondantes si elles ny figurent pas, etc. Les tables
de P HDRE et de P RMA peuvent ncessiter des corrections (chapitre XI, p. 2), mais elles
nattendent pas de nouvelles entits (il y a peu de chances que la tragdie Phdre senrichisse
de nouveaux vers. . .). Par contre, ces deux bases, tout comme E SQUE, peuvent gagner lajout
de nouvelles tables pour modliser dautres volets du domaine dapplication.
299
entrane la disparition de toutes les tables quelle peut contenir. Cest donc une opration
utiliser avec mesure.
Access
Il faut tout dabord lancer lapplication Access, dont le nom est associe licne dune cl :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le choix dFichier | Nouvelle base de donnese permet de crer effectivement une nouvelle
base de donnes :
3
Il faut alors choisir le type de cration souhaite, ici une base de donnes vide :
300
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On doit alors sauvegarder le fichier (dextension .mdb pour Microsoft Data Base, extension
ajoute automatiquement) dans le dossier souhait. Un nom prdfini, ici bd1, est propos :
5
On choisit le nom qui parat rendre compte clairement des objectifs de la base en cours de
cration :
6
Le fichier (ici
301
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le menu dFichiere donne accs aux oprations fondamentales : fermer la base courante,
en ouvrir une autre, ouvrir une des dernires bases ouvertes et dont les noms sont proposs,
quitter Access (et fermer par l-mme la base courante), etc. :
8
La suppression dune base de donnes seffectue une fois Access quitt via dFichier|Quittere.
On ouvre le dossier dans lequel a t sauvegarde la base, reconnaissable licne dAccess
(la cl) :
9
Un clic droit sur cette icne ouvre un menu contextuel o choisir dSupprimere :
302
10
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
11
Le fichier constituant la base de donnes est dplac dans la corbeille, dont licne manifeste quelle nest pas vide :
12
P RMA
P HDRE
E SQUE
303
2.1.
Le nom dune table, comme celui de ses attributs, rsulte dun compromis entre un renvoi
le plus explicite possible lentit/lattribut correspondant(e) et la commodit dutilisation.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On retient, pour chaque attribut, dans la palette des types proposs par le SGBD, celui qui
semble le plus pertinent pour bien rendre compte de la proprit vise. Les tailles des types
doivent tre suffisantes pour que les valeurs attendues tiennent (une taille trop courte
entrane la troncation de ce qui dpasse ), sans pour autant tomber dans le risque inverse :
gcher de la place disque et ralentir le traitement des donnes. Ainsi, le contexte le plus
long de la table initiale fait 1 087 caractres, soit plus dune centaine de mots.
MySQL
La cration dune table seffectue par la requte :
CREATE TABLE <nom> (
< d f i n i t i o n de colonne >+
< d f i n i t i o n de c l primaire >?) ;
CREATE TABLE est suivi du nom de la table crer, puis entre parenthses, des descriptifs
des attributs, spars par des virgules, et dindications valant pour la table entire (comme la
mention PRIMARY KEY. . . ).
Pour chaque attribut, on trouve son nom (par exemple ), son type (VARCHAR, BLOB,
etc.) et des paramtres rglant le comportement de cet attribut.
< d f i n i t i o n de colonne >
<nom de l a colonne >
<type et longueur ventuelle >
<caractre o b l i g a t o i r e >?
<valeur par dfaut >?
o
<caractre o b l i g a t o i r e > NOT NULL
et
<valeur par dfaut > DEFAULT <valeur par dfaut >
304
14
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lexemple choisi est celui dune table destine accueillir le glossaire constitu par lquipe
mdicale (ch. I 11). Le haut de lcran est destin fournir le nom, le type (via un menu droulant), et une description (des prcisions) sur chaque attribut jug ncessaire, qui occupe
une ligne dans cette partie de lcran. Le bas de lcran permet de prciser, pour lattribut
courant, ses caractristiques et son fonctionnement. Dans le cas prsent, on a choisi deux
attributs, et . Le bas de lcran indique les choix qui ont t faits pour lattribut
courant, , marqu par le triangle sur la gauche : interdiction de NULL (autoris par dfaut), interdiction de la chane vide (il ne peut pas y avoir dentre de la table sans que lattribut
soit renseign par une chane non vide, alors quun attribut de type texte accepte par
dfaut la chane vide comme valeur), indexation sans doublons (par dfaut pas dindexation) :
16
Slectionner un attribut par un clic gauche donne accs un menu contextuel par clic
droit, qui permet en particulier de faire de lattribut choisi la cl primaire :
305
17
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lorsquon ferme lcran de dfinition dune table en cliquant sur la case rouge en haut
droite, on se voit demander si lon souhaite enregistrer la table qui vient dtre dfinie :
19
Une rponse positive amne sur un cran permettant de choisir le dossier de destination
et proposant un nom par dfaut :
20
La table effectivement sauvegarde (rduite sa structure et donc vide) est visible dans
longlet dTablese de la feuille de navigation dans la base de donnes courante.
22
2.2.
Si la colonne est facultative, lajout dune colonne seffectue sans contrainte. Si elle est
obligatoire, soit la table doit tre vide soit la colonne doit tre accompagne dune valeur par
dfaut.
On ne peut supprimer directement une colonne qui intervient dans la cl primaire : on
risquerait de modifier profondment la nature de la relation (ce qui distingue les lments
qui y figurent). La suppression dune colonne participant une cl trangre est elle aussi
soumise conditions.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La suppression dune colonne fait disparatre toutes les informations qui y figuraient.
MySQL
La requte :
ALTER TABLE esque
ADD COLUMN datation DATE AFTER annee ;
change la table (ALTER). Elle lui ajoute une nouvelle colonne de type DATE, aprs la
colonne (AFTER). Lindication sur lendroit o insrer une nouvelle colonne est dailleurs
optionnelle. Si elle est abstente, la nouvelle colonne se place en dernier. Le type DATE accepte
des dates au format amricain (AAAA-MM-JJ) entre le 1er janvier 1000 et le 31 dcembre 9999
(dans le calendrier grgorien). Par contre, comme on la indiqu au chapitre VI, 3, p. 220,
le filtrage de dates impossibles est fruste : 2006-00-00 est une date tout fait acceptable. En
loccurrence, ce laxisme se rvle bnfique : pour une attestation issue dun livre, lanne de
publication suffit, et donner comme jour et mois 0 naffaiblit pas la rfrence mmorise.
Une colonne est obligatoire si sa dfinition comporte la mention NOT NULL. La dfinition
dune valeur par dfaut passe par la mention DEFAULT <valeur par dfaut> suivie de la valeur
par dfaut souhaite.
On peut de la mme manire supprimer une colonne :
ALTER TABLE <nom>
DROP COLUMN <colonne > ;
Access
En utilisant le volet dTablese de la fentre de navigation dans la base, on peut modifier la
structure dune table.
307
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
23
On peut alors ajouter une ligne 24 , qui sera une nouvelle colonne de la table, modifier le
type ou les caractristiques dune colonne.
24
Dans tous les cas, les choix faits doivent tre confirms avant dtre mis en uvre 25 .
25
On note que le type choisi (Date/Heure) ne permet pas dutiliser 0 comme pour jour non
connu ou non pertinent ou pour mois non connu ou non pertinent.
26
Lorsquon supprime une colonne de la table, aprs lavoir slectionne et indiqu quon
veut la supprimer 27 , une confirmation est galement demande 28 .
308
27
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
28
P RMA
destin mmoriser
Classes de poids
poids non fourni
poids < 750 g.
750 g. <= poids <= 1 000 g.
poids > 1 000 g.
destin m-
classe_position
position non fournie
ct
dos
ventre
ct
dos
ventre
309
P HDRE
MySQL
Access
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lobjectif est de diminuer la place occupe par une colonne, , dvolue la reprsentation
phontique dune syllabe. Dans la version princeps de la table , cette colonne est
de type texte, de 255 caractres. On imagine aisment que la reprsentation dune syllabe
noccupe pas tant de place. On peut calculer la taille maximale de la colonne 30 , ce qui
donne 11 caractres : 31 .
30
31
On peut mme chercher fournir les syllabes et leur taille, tries par taille dcroissante
32 33 .
32
33
310
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
34
Un message davertissement 36 indique la troncation de la colonne, qui peut effectivement
faire perdre des informations.
36
2.3.
Lors de la suppression dune table, la fois son contenu (les lignes quelle contient) et sa
structure disparaissent sans retour en arrire possible
MySQL
La requte dDROP TABLE <nom> ;e supprime la table dont le nom est indiqu. Cest, tout
comme DROP DATABASE, une instruction utiliser avec discernement. . .
311
Access
On supprime une table en slectionnant son icne dans le volet dTablese de la fentre de
navigation dans la base, puis en appuyant sur la touche Del/Suppr ou bien en passant par
dEdition | Supprimere ou bien encore via le clic droit de la souris et le choix de dSupprimere.
Une confirmation est demande.
E SQUE
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le hasard des lectures a permis de glaner lattestation suivante (Jacques Jouet, Cantates
de proximit Scnes et portraits de groupe, P.O.L., 2005, Paris, p. 44) :
Descendant des cheveux blonds tintinesques
le visage est long de sa croissance inacheve qui fatigue
et marqu du bleu clairant des yeux.
On souhaite ajouter ce contexte la base E SQUE qui comprend dj dailleurs 3 occurrences
du driv tintinesque ( . . . Le "Tintinraire" est boucl : prs de 180 000 kilomtres travers
tous les pays des pripties "tintinesques". . . , . . . mus par une foi trs tintinesque soulever
des montagnes. . . , . . . houppe tintinesque au vent. . . ).
MySQL
comme dans :
INSERT INTO a t t e s t a t i o n s
(
1 derive ,
2 cat_derive ,
3 base ,
4 cat_base ,
5 reference ,
6 contexte ,
7 auteur ,
8 datation )
VALUES
(
1 tintinesque ,
2 a ,
3 Tintin ,
4 npr ,
312
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Sont mentionns dans une premire liste les attributs pour lesquels une valeur va tre
fournie. Les attributs non mentionns prendront la valeur par dfaut qui est la leur dans la
dfinition de la table ou seront positionns NULL si cette possibilit est ouverte. Les attributs
mentionns sont remplis en fonction des valeurs indiques dans la liste suivant VALUES,
la valeur de rang k tant celle de lattribut de rang k dans la liste des noms dattributs.
Des indices ont t ajouts manuellement dans lexemple aux lments des deux listes pour
faciliter la comprhension des correspondances. Ainsi Tintin, de rang 3 est la valeur de
lattribut de rang 3 dans la liste des noms dattributs : .
Quand on utilise un attribut auto-incrment dans une table, chaque ajout dune ligne
affecte cet attribut dans la ligne la valeur suivante de la dernire valeur qui a t affect
cet attribut. Par contre, si on supprime des lignes, les valeurs correspondantes de lattribut
ne sont pas rutilises ultrieurement. Il y a des trous dans les valeurs successives de
lattribut.
Access
Lorsquon ouvre une table en mode feuille de donnes, la ligne du bas de la feuille de donnes permet de naviguer dans la table. Le triangle vers la gauche ou vers la droite permet de
se dplacer dune ligne vers le haut ou vers le bas. Accompagn dun trait vertical, il positionne en tout dbut ou en toute fin de table. Enfin, le triangle assorti dune toile positionne
en fin de table, sur une nouvelle ligne vierge attendant de nouvelles informations. Cest donc
le bouton quil faut cliquer pour insrer une nouvelle ligne. On peut par ailleurs taper directement le numro de la ligne que lon souhaite examiner dans la fentre entre les deux triangles
o apparat le numro de ligne courant.
37
Une fois positionn sur une nouvelle ligne vierge 38 , on est en mesure de la modifier
pour ajouter lattestation fournie comme exemple. La mention entre parenthses,
dans la colonne dextrme gauche, indique que la nouvelle ligne recevra automatiquement un
nouveau numro dordre, sans que lon ait le fournir.
38
313
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
39
3.2.
Lorsquon examine les catgories de dpart des drivs dans E SQUE (tableau 90, p. 315,
en haut), on constate une incohrence. Certains drivs, limmense majorit, ont pour cat
gorie ( ) tandis quun trs petit nombre est tiquet A. Lexamen des drivs en question
confirme quil sagit bien dune erreur : no-mondesque, julesque, quatorze juillesque, Freudesque, Vicoesque.
MySQL
On modifie ltiquette de ces drivs par la requte :
UPDATE esque
SET cat_derive = a
WHERE cat_derive = A ;
314
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
COUNT(cat_derive)
134
3
5
4137
13
20
2
27
1
38
1
1
1
Access
Le reprage des attestations o la catgorie du driv est A et non a est difficile sous Access.
En effet, les deux requtes 41 et 42 retournent lensemble des drivs dont la catgorie est
soit soit . Access ne semble pas prendre en compte la casse dans ces requtes.
41
42
Pour effectuer la modification souhaite, il faut modifier la requte pour quelle devienne
une requte Mise jour 44 .
315
44
La sous-fentre de formulation dune requte dispose alors dune ligne dMise joure destine donner la nouvelle valeur souhaite 45 .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
45
La clause WHERE semble ne chercher que les a minuscules. Nanmoins, les 4 142 lignes
concernes par la requte correspondent aux 4 137 avec a minuscule et aux 5 avec A majuscules. On constate dailleurs en 47 le changement effectif de la catgorie pour lexemple
donn supra en 43 .
47
Licne dune requte Mise jour est prcde dun petit crayon (Requte 2), contrairement
une requte ordinaire (Requte 1) 48 .
316
48
Il est galement possible de modifier directement une table ouverte en mode Feuille de
donnes. Il suffit alors de changer les cellules souhaites. Cest le cas en 49 o la base
errone Raspoutinesque est corrige en Raspoutine 50 .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
49
50
Les modifications ne deviennent toutefois effective quaprs fermeture de la feuille de donnes et confirmation des changements apports 51 .
51
P RMA
, mettez jour
P HDRE
E SQUE
Exercice n 7 On appelle drivation impropre lopration morphologique qui cre un mot en
le changeant de catgorie sans changer sa forme (cest le cas de doux dans le doux du ventre),
par opposition une drivation, dans laquelle intervient un affixe, comme -esque.
Reprer les mots en relation de drivation impropre dans la table
o il sagit probablement derreurs corriger.
317
Exercice n 8
1. Jacques Roubaud, La Bibliothque de Warburg, Seuil, 2002, Fiction & Cie, Paris, Version
mixte, p. 277 [...] le bord du bout de la langue fjordesque du Loch Dunvegan[...]
2. Laura Lippman, La colline des bouchers, Jai Lu, 1999, Policier, Paris, Butchers hill Traduction de Thierry Arson, p. 47-48 [Kitty est la tante, haute en couleur, sductrice,
de lhrone] En une seconde Will se perdit dans lunivers kittyesque, ce petit royaume
de douceurs fminines dont le drapeau avait la couleur de boucles blond-roux, dont le
parfum officiel tait le freesia du Jardin Botanique et o le seul son autoris tait un
murmure de contralto.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3. Michel Rocard, Entretien avec Judith Waintraub, Flammarion, 2001, Histoire, Paris,
(a) p. 87 Je men ouvre aussitt Depreux, patron du PSU, pagailleur, foutoiresque,
mais trs gnreux.
(b) p. 215 Jai t victime dune histoire abracadabrantesque.
4. Jean-Pierre Maurel, Malaver lhtel, Viviane Hamy, 1996, Chemins nocturnes, Paris,
(a) p. 70 Les murs dont la peinture saumon a t essuye au gant servent de cimaises
quelques grands pastels reposants et un tableau qui lest moins, dans lequel trois
figures diabolico-carnavalesques peintes grands traits dun pinceau color, pais
et circulaire, se tiennent les coudes pour me signifier tout le grotesque de notre
condition.
(b) p. 176 Il pige au quart de tour, ne se perd pas en vaines questions et son oeil
renardesque ptille dironie complice.
5. Gabriela Avigur-Rotem, Canicule et oiseaux fous, Actes Sud, 2006, Arles, Traduit de
lhbreu par Arlette Pierrot et Ziva Avran, p. 472 Encore un instant, encore un autre lavion tremble de colre, concentre ses forces pour dcoller, commence sa course sur la
piste, lent, lourd, canardesque, mais son dcollage grogne dj dans ses entrailles ; je le
sens dans la plante de mes pieds qui se contractent pour le capter, pour le propulser vers
lazur - vole, mtal, vole, je reprends mon incantation contre la gravitation, vole, mtal,
vole, et voil - jai encore rat ce moment merveilleux de la sparation [...]
Exercice n 9 Constituer le tableau des catgories des bases de E SQUE avec leur nombre
doccurrences. Vous constaterez que figure, une fois seulement, la catgorie . Le tableau
de la base et du driv pour cette catgorie vous permettra de constater que cest bien une
faute de frappe pour . Vous modifierez alors la table en consquence.
3.3.
MySQL
Supprimer une ou plusieurs entits sopre par la requte :
DELETE FROM <table>
[WHERE <condition >] ;
318
o la clause WHERE, optionnelle, opre la slection des entits dtruire. Par consquent,
la requte sans clause WHERE supprime toutes les entres de la table, mais conserve sa
structure, la diffrence de :
DROP <table> ;
qui efface table et structure. Comme DROP, DELETE est utiliser avec parcimonie et prcautions : la destruction est sans retour.
Par exemple, la requte :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
aboutirait effacer les 13 entres de qui sont des adverbes (gratinesquement, outragesquement, gidesquement, etc.) et dont on peut estimer quil sagit de drivs de drivs en
-esque, de deuxime niveau en somme.
Access
Deux approches sont possibles pour supprimer des entits, par interaction directe sur la
feuille de donnes ou par requte.
La premire consiste, en mode Feuille de donnes, se positionner sur la ligne concerne
52 , la slectionner en cliquant sur le triangle dans la marge de gauche 53 .
52
53
Appuyer sur la touche Del/Suppr ou passer par dEdition | Supprimere conduit une
demande de confirmation 55 .
319
55
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
57 , on obtient comme
57
58
et on slectionne dRequte
320
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
59
Licne dune requte Suppression est une croix en rouge suivie dun point dexclamation
62 .
62
4.
MySQL
Une des manires de sauvegarder consiste engendrer un fichier comprenant toutes les
instructions MySQL permettant de recrer la table ou la base et dy insrer les lignes qui y
figuraient.
Pour P RMA, voici un extrait dun tel fichier :
DROP TABLE IF EXISTS infirmieres_princeps ;
CREATE TABLE infirmieres_princeps (
...
) TYPE=MyISAM;
321
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
comme dans :
mysqldump adddroptable u habert p prema
Loption introduit lutilisateur qui veut utiliser la base de donnes , indique quun
mot de passe sera fourni avant de pouvoir accder la base. Le chevron fermant prcde le
nom du fichier dans lequel sont crites les instructions de reconstruction de la base. Cest
une manire, sous Unix/Linux, dcrire dans un fichier.
Sous Linux/Unix, on peut galement sauvegarder une ou plusieur table(s) sans sauvegarder la base tout entire :
comme dans :
mysqldump adddroptable u habert p prema
Access
La sauvegarde consiste faire une copie du fichier dextension (se terminant par ).
Ce fichier peut tre volumineux. Prema.mdb, Phedre.mdb et Esque.mdb psent respectivement 8,4, 12 et 7.5Mo (Mo = Mga-octets = million de caractres).
Lextension des fichiers (ici en loccurrence .mdb) nest pas forcment visible sous Windows
et dpend du paramtrage de laffichage.
5.
Les lignes dune table ne sont pas ranges (chapitre VI, 2). Elles ne suivent pas un ordre
particulier. Y chercher une information peut supposer de parcourir toute la table, opration
longue si la table est volumineuse. Les index permettent dacclrer les recherches. Un index
est une structure auxiliaire qui tablit la correspondance entre les valeurs ventuellement
322
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le mot-cl UNIQUE contraint la colonne (ou la combinaison de colonnes) utilises pour lindexation avoir des valeurs toutes diffrentes. Ce serait le cas par exemple pour lattribut
de la table du mme nom :
CREATE UNIQUE INDEX vers_ndx
ON vers ( vers ) ;
Access
323
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
63
Pour lindexation, il faut choisir entre pas dindexation, lindexation avec doublons et lindexation sans doublons 65 .
65
Cest lindexation avec doublons qui convient dans le cas prsent (de nombreuses fiches
ont la mme valeur pour lattribut ) et linterdiction de la marque NULL 66 .
324
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
66
En outre, une deuxime fentre indique que lajout de lindexation modifie les relations
entre tables 68 .
68
Dans certains cas, lindexation peut tre refuse par Access dans la mesure o elle contredit des relations prexistantes.
P RMA
P HDRE
E SQUE
6. Solutions
Solution de lexercice n 1 p. 306
P AR GROUPE(
M AXIMUM (L ONGUEUR(occ_car)) T ITRE mot graph. max.,
M AXIMUM (L ONGUEUR(occ_phon)) T ITRE mot phon. max.
)[occurrences]
325
MySQL
SELECT MAX(LENGTH( occ_car ) ) AS mot graph . max. ,
MAX(LENGTH( occ_phon ) ) AS mot phon . max.
FROM occurrences ;
Access
La requte :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
69
MySQL
ALTER TABLE s i g n a l e t i q u e _ f i c h e s
ADD COLUMN classe_poids VARCHAR( 5 0 ) AFTER poids ;
Access
Pour ajouter un attribut en mode Modification de la structure dune table, on se positionne
avant lattribut devant lequel on veut ajouter le nouvel attribut et on utilise le clic droit pour
avoir accs au menu permettant dinsrer une ligne 70 .
70
Ce choix fait, on indique le type de lattribut, ici Texte, et sa longueur, ici 50 caractres.
Par dfaut, NULL nest pas interdit et la chane vide est autorise 71 .
326
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
71
Solution de lexercice n 3 p. 309
MySQL
ALTER TABLE s i g n a l e t i q u e _ f i c h e s
ADD COLUMN c l a s s e _ p o s i t i o n VARCHAR( 5 0 ) AFTER position ;
Access
La solution est similaire celle de lexercice prcdent.
Solution de lexercice n 4 p. 309
MySQL
CREATE TABLE fiche_types_occurrences_lemmes (
i d _ f i c h e INT NOT NULL,
types INT NOT NULL,
occurrences INT NOT NULL,
PRIMARY KEY ( i d _ f i c h e ) ) ;
INSERT INTO fiche_types_occurrences_lemmes
SELECT fiche ,
327
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_base
a
a
a
a
a
a
a
a
a
a
a
a
a
a
NULL
nm
nm
derive
arabesque
burlesque
funambulesque
gigantesque
grotesque
mauresque
picaresque
pittoresque
putanesque
romanesque
romanesque
soldatesque
arabesque
picaresque
soldatesque
cuivresque
cartoon-esque
cat_derive
nf
nm
nm
nm
nm
nf
nm
nm
n
nf
nm
nf
nf
nm
nf
a
a
Access
Access
La requte 73 dbouche sur un rsultat lgrement diffrent de celui de la requte
MySQL 74 . On constate l encore quAccess semble insensible la casse, puisque Raspoutinesque et raspoutinesque sont considrs comme identiques. Il semble dailleurs quil sagisse
pour raspoutinesque et rouletabillesque dune erreur en ce qui concerne la base, erreur qui
serait galement corriger. Lobtention du mme rsultat avec MySQL suppose de modifier la
clause WHERE en :
328
73
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
74
4 classes.
UPDATE s i g n a l e t i q u e _ f i c h e s
SET classe_poids = poids non fourni
WHERE poids = 0 ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET classe_poids = poids < 750 g .
WHERE poids < 750 AND poids > 0 ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET classe_poids = 750 g . <= poids <= 1 000 g .
WHERE poids >= 750 AND poids <= 1000 ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET classe_poids = poids > 1 000 g .
WHERE poids > 1000 ;
On remarque que la deuxime modification suppose de vrifier que le poids est non seulement infrieur 750 grammes mais quil est aussi suprieur 0, sans quoi les fiches qui ont
t tiquets poids non fourni par la premire modification se verraient attribuer la catgorie
poids < 750 g. par la seconde.
Une modification en un coup seffectue par lappel laiguillage CASE :
UPDATE s i g n a l e t i q u e _ f i c h e s
SET classe_poids =
CASE
329
WHEN
WHEN
WHEN
ELSE
END ;
poids =
poids >
poids >
750 g .
Access
La solution passe par une requte Mise jour du type de :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
75
77
4 classes.
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = Non fournie
WHERE position = position non fournie ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = ct
WHERE position = p l a t ct ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = dos
WHERE position = p l a t dos ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = ventre
WHERE position = p l a t ventre ;
UPDATE
signaletique_fiches
330
SET c l a s s e _ p o s i t i o n = ct
WHERE position = p r o c l i v e ct ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = dos
WHERE position = p r o c l i v e dorsale ;
UPDATE s i g n a l e t i q u e _ f i c h e s
SET c l a s s e _ p o s i t i o n = ventre
WHERE position = p r o c l i v e ventrale ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
La solution est similaire celle de lexercice prcdent.
Solution de lexercice n 8 p. 317 Cet exercice nappelle pas de solution, puisquil sagit
simplement de reprendre les manuvres expliques.
Solution de lexercice n 9 p. 318 Les tableaux donnant les catgories de dpart des bases
avec leur nombre doccurrences et fournissant la base de catgorie nf> figurent dans le tableau 92 p. 332.
MySQL
Lenchanement des trois instructions suivantes permet dobtenir le rsultat souhait :
SELECT cat_base ,
COUNT( cat_base )
FROM esque
GROUP BY cat_base ;
SELECT derive ,
base
FROM esque
WHERE cat_base = nf > ;
UPDATE esque
SET cat_base = nf
WHERE cat_base = nf > ;
Access
La transformation de la requte Slection en requte Mise jour sobtient via le menu
dRequtee de la barre de menu du haut, mais aussi en utilisant le clic droit sur la sous-fentre
du haut de formulation des requtes :
331
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_base
NULL
?
a
a?
a/nm
acron
adv
adv ?
interj
ladj
ladv
loc
n
n?
nf
nf ?
nf/nm
nf>
nfpl
nm
nm ?
nm/nf
nmpl
nnpr
npl
npr
npr ?
npr ?
onomat
sigle
sigle ?
vtr
COUNT(cat_base)
339
7
130
10
4
1
4
1
8
1
3
2
58
2
517
1
1
1
5
1306
11
1
9
1
2
1879
22
1
3
49
2
2
derive
barbesque
base
barbe
332
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
333
78
79
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE XI
P ROJECTION(poids)[fiches_originelles]
T RI SUR(poids)[<rsultat1 >]
permet si les valeurs pour le poids dans la table sont raisonnables . Cette
vrification souligne le problme de la reprsentation des non-rponses par 0 pour le poids.
On a vu au chapitre IV 4 quune reprsentation par NULL est probablement plus approprie.
MySQL
SELECT DISTINCT poids
FROM f i c h e s _ o r i g i n e l l e s
ORDER BY poids ;
Access
La requte Access :
334
repose sur une dmarche diffrente. la place dune projection, cest un regroupement qui
permet de nobtenir quun exemplaire de chaque poids. On profite de ce regroupement pour
calculer le nombre doccurrences de chaque valeur.
Son rsultat est :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une autre vrification effectuer est celle de la justesse du regroupement en classes des
valeurs dune variable, continue ou non. Les requtes suivantes :
R2113
,
P ROJECTION(poids, classe_poids)[signaletique_fiches]
T RI SUR(classe_poids, poids)[<rsultat1 >]
P ROJECTION(position, classe_position)[signaletique_fiches]
T RI SUR(classe_position, position)[<rsultat1 >]
R2114
dans la
MySQL
SELECT DISTINCT poids , classe_poids
FROM s i g n a l e t i q u e _ f i c h e s
ORDER BY classe_poids , poids ;
SELECT DISTINCT position , c l a s s e _ p o s i t i o n
FROM s i g n a l e t i q u e _ f i c h e s
ORDER BY classe_position , position ;
335
Exercice n 1 Vrifier sil nexiste pas, pour un bb donn, des journes o il est bien
prsent dans le service de ranimation mais o aucune fiche na t rdige sur lui.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Exercice n 2 Les lemmes des formes verbales sont des infinitifs. Il peut sagir de mots
simples (tre, agripper) comme de mots en plusieurs mots (aller bien, donner envie, ficher
la paix). On veut vrifier si les lemmes de toutes les formes verbales de la table sont
bien des infinitifs. Pour se centrer sur les erreurs possibles de lemmatisation et ne pas avoir
vrifier toutes les formes verbales, on veut liminer les formes verbales dont les lemmes qui
peuvent constituer des infinitifs, cest--dire qui se terminent par une terminaison dinfinitif
(er, ir, re) ou qui comprennent un infinitif frquent dans les verbes en plusieurs mots (aller,
tre, avoir, faire, prendre, mettre). On veut donc liminer les formes verbales qui semblent
disposer dun lemme idoine.
Exercice n 3 Reprer sil existe des formes normalises de la table
cies plusieurs lemmes distincts.
Si cest le cas, fournir chacun de ces lemmes, avec les formes normalises associes, leur
catgorie et leur frquence.
P HDRE
La recherche des fins de phrase qui ne sont pas suivies dune majuscule seffectue par :
R176 t. 1 p. 177
R ESTRICTION(
vers R ESSEMBLANT
)
[vers]
,
[.] *[^A-Z]
MySQL
SELECT numero_vers , vers
FROM vers
WHERE vers REGEXP [ . ] [ az ] ;
Le point, caractre spcial des expressions rgulires, y est chapp par une double contreoblique et non par les crochets.
Une simple contre-oblique ne d-spcialise pas le point et aboutit lister les 1 654 vers
de la pice, puisque le motif filtre les vers comprenant un caractre quelconque (point) suivi
optionnellement despaces et suivi dun caractre minuscules. Tous les vers rpondent cette
contrainte.
Access
La requte 3 procde linverse de la requte MySQL ci-dessus. Elle retient les vers qui
comprennent 0 ou n caractres, suivis dun point (entre crochets pour le traiter comme un caractre ordinaire et non comme un caractre spcial ou mta-caractre), dune espace et dun
336
caractre qui nest pas une majuscule. Cette requte est plus proche de la R176 t. 1 p. 177. Cependant, il nest pas possible sous Access dindiquer quun caractre donn peut tre prsent
0 ou n fois (rle de ltoile post-pose dans la notation abstraite et en MySQL). Par ailleurs la
dfinition dun ensemble de caractres par la ngative, comme souvent, engendre du bruit. En
effet, les obliques qui sparent les fragments dans un vers partag ne correspondent pas des
majuscules. Les vers partags sont donc rapatris par la requte Access, mme lorsque les
obliques y sont suivis par des majuscules (dbut dune nouvelle rplique). La requte Access
ramne dailleurs 56 vers quand la requte MySQL supra en restitue 20.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Exercice n 4
cule.
Fournir le numro et le vers pour les vers ne commenant pas par une majus-
Exercice n 5 Le tableau 61 p. 210 prsente un intrus au sein des noms propres : il. On
peut donc chercher les mots qui sont tiquets comme des noms propres alors quils dbutent
en minuscules. Pour rendre les rsultats plus parlants, on fournira chaque fois, le mot, le
numro de vers concern et le vers en question.
Exercice n 6 Le vers 1252 Ils ne se verront plus. / Ils saimeront toujours., o interviennent
successivement Oenone et Phdre, voit sa transcription phontique effectue par le mtromtre marque par une liaison impossible :
i l n @ s @ v ai r on p l u lz i l s ai m @@ r on t ou j ou r
Cette liaison intervient en effet entre deux tirades de deux personnages diffrents. Utiliser la
table pour dtecter de tels cas de figure. titre daide, indiquons que la solution
fait appel une autojointure. . .
337
E SQUE
On sen souvient, dans la table , 0 est le moyen de noter que lanne de lattestation
nest pas connue. On peut donc chercher si les autres valeurs fournies sont raisonnables
par la requte :
R177 t. 1 p. 177
R ESTRICTION(
annee > 0
ET ANNEE P AS E NTRE 1000 ET 2006
)
[esque]
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cette requte met en vidence des annes errones (186, 18, 16, 2201).
MySQL
SELECT annee
FROM a t t e s t a t i o n s
WHERE annee > 0
AND annee NOT BETWEEN 1000 AND 2006 ;
R2115
,
permet de trouver les drivs pour lesquels il existe plus dune base.
MySQL
SELECT derive ,
COUNT( ) AS o . ,
COUNT( DISTINCT base ) AS nbre bases
FROM esque
GROUP BY derive , cat_derive
HAVING COUNT( DISTINCT base ) > 1;
3. Maintenir la cohrence
4. La base de donnes : un maillon dans une chane
Donnons-en deux exemples. Si lon sintresse la rgularit des patrons rythmiques des
vers de Phdre, on peut chercher le nombre daccents en positions 3 et 9, en se limitant aux
vers prononcs par un seul personnage pour ne pas introduire les probables irrgularits
dues au partage de la parole. On compare alors ce rsultat avec la rpartition par personnage
338
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Vers
1612
Personnage
ARICIE
HIPPOLYTE
ISMENE
OENONE
PANOPE
PHEDRE
THERAMENE
THESEE
3
679
vers
133
348
31
202
34
464
176
224
%
42.12
9
860
%
53.35
3
55
138
10
71
17
201
88
99
%
41.35
39.66
32.26
35.15
50.00
43.32
50.00
44.20
9
70
189
17
113
22
238
90
121
%
52.63
54.31
54.84
55.94
64.71
51.29
51.14
54.02
Mots
1174
3006
281
1770
317
4177
1517
1972
Adj
107
283
30
160
29
421
157
216
%
9.11
9.41
10.68
9.04
9.15
10.08
10.35
10.95
Nc
217
534
47
332
63
732
302
355
%
18.48
17.76
16.73
18.76
19.87
17.52
19.91
18.00
Np
20
77
14
23
8
65
42
30
%
1.70
2.56
4.98
1.30
2.52
1.56
2.77
1.52
V
200
509
44
323
52
753
247
336
%
17.04
16.93
15.66
18.25
16.40
18.03
16.28
17.04
(tableau 93 p. 339, respectivement haut et bas). Il nest pas possible simplement en examinant ces deux tableaux de savoir si certaines diffrences de proportions dun personnage
lautre sont effectivement significatives. Il en va de mme lorsquon examine la rpartition des
catgories morpho-syntaxiques principales par personnage (tableau 94 p. 339).
P RMA
P HDRE
E SQUE
5. Solutions
Solution de lexercice n 4 p. 337
R2116
Le rsultat de la requte :
R ESTRICTION(
vers R ESSEMBLANT ^[^A-Z]]
)[vers]
P ROJECTION(
numero_vers T ITRE N ,
vers
)[<rsultat1 >]
339
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
N
195
203
240
249
266
417
599
813
877
956
970
982
1005
1226
1367
1480
1498
1541
1561
1571
1573
1576
vers
quel affreux dessein vous laissez-vous tenter ?
ce fier ennemi de vous, de votre sang,
lhorreur de vous voir expirer mes yeux ?
haine de Vnus !O fatale colre !
dsespoir ! crime ! dplorable race !
toi qui me connais, te semblait-il croyable
votre inimiti jai pris soin de moffrir.
toi, qui vois la honte o je suis descendue,
votre accusateur que pourrai-je rpondre ?
ciel, de ma prison pourquoi mas-tu tir ?
ses monstres lui-mme a servi de pture ;
-t-elle au criminel accord quelque asile ?
tendresse ! bont trop mal rcompense !
quel nouveau tourment je me suis rserve !
nos amis communs portons nos justes cris ;
ciel ! Oenone est morte, et Phdre veut mourir ?
peine nous sortions des portes de Trzne,
travers des rochers la peur les prcipite ;
"Le ciel, dit-il, marrache une innocente vie.
mon fils ! cher espoir que je me suis ravi !
quels mortels regrets ma vie est rserve !
la face des dieux laccepter pour poux.
figure au tableau 95 p. 340. On constate quil ne sagit pas vraiment de caractres commenant par une minuscule, mais de vers dbutant soit par un guillemet (v. 1561) soit par une
majuscule accentue. On isole cependant un vers erron, mais pour une tout autre raison :
un accent superflu sur le A majuscule de A-t-elle au v. 982. Aurait-on intgr les majuscules
accentues quon naurait pas repr cette scorie. quelque chose bruit est bon, parfois. . .
MySQL
SELECT numero_vers AS N ,
vers
FROM vers
WHERE vers REGEXP ^[^AZ ] ;
La clause WHERE manifeste les deux emplois de laccent circonflexe comme caractre spcial au sein dune expression rgulire, en premier lieu pour lancrer en indiquant le dbut de
vers, ensuite, en premire position au sein de crochets pour indiquer le complmentaire dun
ensemble de caractres.
Une autre manire est de recourir dans la clause WHERE une classe de caractres
(character-class) pr-dfinie, lower, qui englobe lensemble des caractres minuscules, accentus ou non :
WHERE vers REGEXP ^[:lower:]
Avec cette restriction, plus forte que la prcdente, le rsultat est la table vide. Il ny a pas
de vers qui commencent par une minuscule.
Access
La requte 5 semble le strict quivalent de la premire requte MySQL ci-dessus, part
340
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Solution de lexercice n 1 p. 336 Il sagit de reprer des dcalages. La solution aura donc
recours une jointure externe. Il faut au pralable constituer les tables mettre en relation.
La premire table,
, associe un bb et un jour le nombre de fiches
rdig ce jour pour ce bb. Une deuxime table,
, associe un bb et un
jour un indicateur logique selon que le bb est prsent ou non dans le service de ranimation
le jour en question.
La table
comprend 378 lignes tandis que la table
en comprend 484 (121 bbs 4 jours), dont 384 correspondant une prsence. Il y a donc
au moins 6 journes sans fiches.
MySQL
On peut crer dabord la structure et ensuite la peupler. Il est galement possible de la
crer la vole, ce qui quivaut aux requtes Cration de table dAccess :
On nomettra pas de donner un alias aux colonnes calcules. Cest cet alias qui devient le
nom de la colonne dans la table engendre. Sans un tel alias, la troisime colonne sappellerait. . . COUNT(*).
La structure de la table engendre est la suivante :
Field
id_bebe
jour
nombre_fiches
Type
int(11)
int(11)
bigint(21)
Null
Key
Default
0
0
0
Extra
La deuxime table est galement engendre la vole pour les informations concernant le
premier jour :
341
AS present
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
jour
1
3
7
7
15
15
present
1
1
1
1
1
1
id_bebe
NULL
NULL
NULL
NULL
NULL
NULL
jour
NULL
NULL
NULL
NULL
NULL
NULL
nombre_fiches
NULL
NULL
NULL
NULL
NULL
NULL
Access
La cration de la table
7
, qui repose sur les critres fournis en
demande que la requte soit transforme en dRequte Cration de tablee par lappel au menu
8.
7
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
Lorsquon enregistre la requte 11 , licne rsultante pour une telle requte porte une
table, un clat de lumire et un point dexclamation : 12 .
11
12
La cration de la table
seffectue par une premire requte Cration de
table : 13 , pour le jour 1. Pour chaque identifiant de bb tel que a pour valeur ra,
on cre une ligne avec lidentifiant, la valeur 1 pour lattribut et la valeur 1 pour lattribut
.
13
Pour le jour 3, on cre ensuite une deuxime requte, cette fois-ci une requte Ajout : 14 .
.
Il sagit en effet de complter la table
14
Cette requte 15 a une barre du haut diffrente et une ligne dAjoutere en plus. Il faut
indiquer les attributs dans lesquels se font les ajouts.
343
15
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
17
19
La comparaison entre les deux tables fait appel une jointure externe, comme le montrent
les flches la place de lignes dans la sous-fentre du haut de 20 . La jointure locale a t
obtenue en faisant glisser le nom dun attribut dune table sur son correspondant de lautre
table.
344
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
20
En outre, via le clic droit sur chaque ligne unissant deux noms, on a pu en 21 et en 22
choisir le type de jointure souhait.
21
22
Le rsultat figure en 23 .
23
345
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R2117
,
,
forme_normalisee
attach
cest
changer dide
dialogue
donne limpression
donne envie
donne limpression
ennuie
entrer en contact
fiche la paix
il sagit d
il y a
a perdu de le poids
se passe mal
se porte bien
se sent en scurit
tirer la langue
tait
o.
1
179
1
1
1
3
2
1
2
1
2
5
1
1
1
1
1
4
R ESTRICTION(
categorie R ESSEMBLANT ^V
E T I NVERSER (S OUS C HANE (I NVERSER(lemme), 1, 2)) P AS
P ARMI (ir, re, er)
ET
lemme
NE
RESSEMBLANT
PAS
aller|tre|avoir|faire|prendre|mettre
)[occ_prema]
R EGROUPER SUR(lemme)[<rsultat1 >]
P AR GROUPE(
lemme,
forme_normalisee,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
346
NOT IN ( i r , re , er )
AND lemme
NOT REGEXP a l l e r | t r e |avoir | f a i r e |prendre|mettre
GROUP BY lemme ;
Une autre manire dextraire la terminaison du lemme pour vrifier sa non prsence dans
les terminaisons dinfinitifs est la suivante :
. . . SUBSTRING ( lemme, LENGTH( lemme ) 1, 2)
NOT IN ( i r , re , er )
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Access
La requte 24 constitue dessein une variante par rapport la version MySQL supra.
On a recours un motif, on cherche labsence de ir, er ou re en fin de lemme, plutt qu
des inversions et troncations de chane. On constate par ailleurs que les motifs dAccesss et
de MySQL Server sont plus frustes que ceux de MySQL et quil faudrait rajouter :
Et Pas Comme <verbe>
pour chacun des verbes courants pouvant figurer dans des mots en plusieurs mots et dont
les lignes correspondantes sont donc liminer.
24
SELECT forme_normalisee
FROM occ_prema
GROUP BY forme_normalisee
HAVING COUNT( DISTINCT lemme ) > 1 ;
347
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
forme_normalisee
+
/
approche
calme
caresse
ce
change
continue
couche
de
donne limpression
droite
est arriv
fait
grimace
pose
prsente
remuant
reste
scuris
une
coute
tait
veill
On peut alors, par jointure, obtenir les lemmes correspondants et les frquences des
formes normalises associes :
SELECT o . forme_normalisee ,
lemme,
SUBSTRING ( categorie , 1 , 1) AS POS,
COUNT( ) AS o .
FROM occ_prema AS o ,
formes_normalisees_a_plusieurs_lemmes_tmp AS t
WHERE o . forme_normalisee = t . forme_normalisee
GROUP BY o . forme_normalisee , lemme ;
Rien nempche enfin, cest la deuxime dmarche, de faire lconomie dune table temporaire et de recourir une requte enchsse :
SELECT forme_normalisee ,
lemme,
SUBSTRING ( categorie , 1 , 1) AS POS,
COUNT( ) AS o .
FROM occ_prema
WHERE forme_normalisee IN
(SELECT forme_normalisee
FROM occ_prema
GROUP BY forme_normalisee
HAVING COUNT( DISTINCT lemme ) > 1)
GROUP BY forme_normalisee , lemme ;
On notera que les requtes enchsses, mme relativement simples comme celle-ci, sont
longues excuter. titre de comparaison, avec la version 14.7 de MySQL, sous Linux (De348
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
forme_normalisee
+
+
+
/
/
approche
approche
calme
calme
caresse
caresse
ce
ce
change
change
continue
continue
couche
couche
de
de
donne limpression
donne limpression
droite
droite
est arriv
est arriv
fait
fait
grimace
grimace
pose
pose
prsente
prsente
remuant
remuant
reste
reste
scuris
scuris
une
une
coute
coute
tait
tait
veill
veill
lemme
++
et
plus
moins
,
par rapport
approche
approcher
calme
calmer
caresse
caresser
ce
cela
change
changer
continu
continuer
couche
coucher
de
un
donne limpression
donner limpression
droit
droite
arriver
tre arriv
faire
fait
grimace
grimacer
pose
poser
prsent
prsenter
remuant
remuer
reste
rester
scuriser
scuris
K
un
coute
couter
tait
tre
veiller
veill
POS
R
C
R
Y
R
Y
S
N
V
A
V
N
V
D
P
N
V
A
V
N
V
S
D
V
V
A
N
V
V
V
N
N
V
N
V
A
V
A
V
N
V
V
A
D
D
N
V
V
V
A
A
o.
2
4
3
901
1
2
1
1
1
427
1
3
8
42
4
4
4
3
1
1
1
430
4
1
2
1
1
1
1
51
1
1
20
4
7
15
3
1
1
1
36
1
1
1
128
1
15
4
3
1
47
349
bian), la requte prcdente, qui passe par une table temporaire sest excute en 1.47 seconde, la cration de la table temporaire ayant demand 1.93 seconde, tandis que la requte
enchsse en a demand littralement des heures.
Access
Access ne permettant pas de calculer directement le nombre de valeurs distinctes dune
colonne donne, lapproche est un peu plus contourne. Une premire requte 25 opre un
regroupement par forme normalise et par lemme.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
25
On observe dans le dbut des rsultats 26 une forme normalise ayant des lemmes distincts : le tiret.
26
La deuxime requte 27 prend en entre la requte 25 : elle opre cette fois un regroupement par forme normalise et un dcompte du nombre de lemmes associs : 28 .
27
28
dune table sur le nom identique de lautre table). Cest le moyen de restreindre lexamen de
la table aux seules formes normalises qui ont plus dun lemme.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
29
Cette troisime requte, pourtant proche de son quivalent MySQL, nest cependant pas
excutable par Access : 30 , qui ne semble pas accepter une colonne calcule entre deux
colonnes utilises pour des regroupements.
30
La requte corrige 31 qui dplace le calcul de la partie du discours aprs les regroupements, aboutit par contre au rsultat souhait : 32 .
31
32
On notera que cette diffrence de comportement entre MySQL et Access nest pas propre
linterface que constitue Access. La requte SQL Server qui interpose un attribut calcul entre
deux attributs servant par ailleurs aux regroupements dclenche aussi une erreur : 33 .
351
33
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Solution de lexercice n 5 p. 337 Le rsultat est fourni au tableau 99 p. 353. Les informations concernant 23 vers sont corriger.
Il sagit disoler les occurrences de catgorie (pour nom commun) et dont la reprsentation graphique ne commence pas par une majuscule. La jointure avec la table permet de
resituer le mot mal tiquet dans son contexte.
R2118
J OINTURE(
v.numero_vers = o.numero_vers
)[vers A LIAS v, occurrences A LIAS o]
R ESTRICTION(
cat = Np
E T occ_car N E RESSEMBLANT PAS ^[A-Z]
)[<rsultat1 >]
P ROJECTION(
o.numero_vers,
occ_car,
vers
)[<rsultat2 >]
MySQL
SELECT o . numero_vers ,
occ_car ,
vers
FROM occurrences AS o ,
vers AS v
WHERE v . numero_vers = o . numero_vers
AND cat = Np
AND occ_car NOT REGEXP ^[AZ ] ;
Access
La requte qui vient immdiatement lesprit 34 , qui teste la prsence de minuscules
en dbut de lattribut , ne fonctionne pas : 35 . Access ne distingue en effet pas les
majuscules des minuscules dans les motifs.
352
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
numero_vers
140
334
384
399
440
488
546
562
617
801
823
1080
1221
1261
1282
1289
1307
1469
1481
1482
1493
1540
1645
occ_car
est
il
avec
il
il
une
envi
ignore
un
il
il
ils
offensait
il
il
dieu
entends
entends
on
il
ai
dieu
une
vers
Seigneur ? / Cest mon dessein : tu peux len avertir.
Quil nentrane aprs lui tout un peuple volage.
Quavec Pirithos aux enfers descendu,
Quil plaindra mes malheurs ? / Madame, je le croi.
Quil mprise lui-mme, et quil semble ignorer.
Quune superbe loi semble me rejeter.
Tout vous livre lenvi le rebelle Hippolyte.
Elle vous cherche. / Moi ? / Jignore sa pense.
Quun soin bien diffrent me trouble et me dvore !
Quil mette sur son front le sacr diadme ;
Quil aime... mais dj tu reviens sur tes pas,
Quils mtent la parole et mtouffent la voix.
Quoffensait le respect, quimportunait la plainte,
Quil ne se borne pas des peines lgres :
Lorsquil verra sa fille ses yeux prsente,
Pardonne. Un dieu cruel a perdu ta famille ;
Quentends-je ? Quels conseils ose-t-on me donner ?
Quentends-je ? / Son trpas na point calm la reine :
Quon rappelle mon fils, quil vienne se dfendre !
Quil vienne me parler, je suis prt de lentendre.
Dieux ! / Jai vu des mortels prir le plus aimable,
Un dieu qui daiguillons pressait leur flanc poudreux.
Elle expire, Seigneur ! / Dune action si noire
34
35
Solution de lexercice n 6 p. 337 Lexamen attentif des lignes de la table correspondant au vers 1252 (tableau 100 p. 354) permet dabstraire un motif de liaison
malt propos : une liaison est indique pour une occurrence suivie presque immdiatement
aprs dune ligne dont lattribut a pour valeur ENTRE_PERSONNAGES, cest--dire
quon change dans les faits de locuteur. Le mot liaison malencontreuse est spar de la
ligne portant ENTRE_PERSONNAGES par une ou plusieurs lignes qui correspond(ent) une
ponctuation ou des espaces. Dans le cas du vers 1252, le mot plus prononc par none
et cens li au mot suivant qui est prononc en fait par Phdre (Ils), est spar de la ligne
correspondante ENTRE_PERSONNAGES par la ligne du point final de la tirade dnone.
Une auto-jointure de la table avec elle-mme permet de chercher les mots liaison tels quil y ait droite un changement de personnage. Il faut ensuite affiner les contraintes
353
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
personnage
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
occ_car
Ils
ne
se
verront
plus
.
/
Ils
s
aimeront
toujours
.
occ_phon
il
n@
s@
v ai |r on
plu
il
s
ai |m @@ |r on
t ou |j ou r
-
liaison
lz
-
SELECT o1 . numero_vers ,
o1 . occ_car , vers ,
vers_phonetique
FROM occurrences AS o1 , occurrences AS o2 , vers AS v
WHERE o1 . numero_vers = o2 . numero_vers
AND o1 . l i a i s o n REGEXP ^ l .
AND o2 . personnage = ENTRE_PERSONNAGES
AND o1 . numero_ligne < o2 . numero_ligne
AND v . numero_vers = o1 . numero_vers ;
On cherche toutes les combinaisons doccurrences (auto-jointure) au sein dun mme vers
telles que :
la premire occurrence comporte une liaison (le l est la marque conventionnelle dune
liaison, le phonme venant aprs indiquant la nature de la liaison cf. tableau 56
p. 205) ;
la deuxime occurrence est une marque de transition entre personnages (ENTRE_PERSONNAGES) ;
la premire occurrence intervient avant la seconde (son numro de ligne est infrieur
celui de la seconde).
Pour que le rsultat soit utilisable (tableau 101 p. 355), on a ajout une jointure avec la table
pour pouvoir afficher le vers lui-mme et sa transcription phontique. Nous ne gardons
que 12 lignes sur les 48 du rsultat effectif. Deux constats : cette requte isole effectivement
des liaisons malencontreuses (v. 151 et v. 1493) mais elle bgaie . Un mme vers est prsent
plusieurs fois. On comprend quil y a autant de combinaisons gagnantes que de lignes
354
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
occ_car
vient
151
vient
151
vient
..
.
1252
..
.
plus
1252
plus
1252
plus
1493
Dieux
1493
Dieux
1493
Dieux
vers
Elle vient. / Il suffit : je la
laisse en ces lieux,
Elle vient. / Il suffit : je la
laisse en ces lieux,
Elle vient. / Il suffit : je la
laisse en ces lieux,
..
.
Ils ne se verront plus. / Ils
saimeront toujours.
Ils ne se verront plus. / Ils
saimeront toujours.
Ils ne se verront plus. / Ils
saimeront toujours.
Dieux ! / Jai vu des mortels
prir le plus aimable,
Dieux ! / Jai vu des mortels
prir le plus aimable,
Dieux ! / Jai vu des mortels
prir le plus aimable,
vers_phonetique
ai l @@ v y in lt i l s u f i j @ l
a l ai s an s e l y eu
ai l @@ v y in lt i l s u f i j @ l
a l ai s an s e l y eu
ai l @@ v y in lt i l s u f i j @ l
a l ai s an s e l y eu
..
.
i l n @ s @ v ai r on p l u lz i l
s ai m @@ r on t ou j ou r
i l n @ s @ v ai r on p l u lz i l
s ai m @@ r on t ou j ou r
i l n @ s @ v ai r on p l u lz i l
s ai m @@ r on t ou j ou r
d y eu lz j ai v u d e m o r t ai
l p e r i l @ p l u lz ai m a b l
d y eu lz j ai v u d e m o r t ai
l p e r i l @ p l u lz ai m a b l
d y eu lz j ai v u d e m o r t ai
l p e r i l @ p l u lz ai m a b l
Le rsultat (tableau 102 p. 356) ne comprend plus que 15 lignes. La rptition du v. 463
nest pas une erreur dans llimination des doublons : il y a 2 mots avec liaisons (vous et vais)
qui sont successivement mis en correspondance avec la ligne portant ENTRE_PERSONNAGES
qui suit . Au v. 763, il y a deux liaisons errones lies un vers partag en trois et dautant
plus errones que les phonmes suivant ces liaisons sont dans les deux cas des consonnes.
Le v. 927 surprend : pas de liaison malencontreuse dans la transcription phontique. En fait,
cest une incohrence entre la transcription du vers qui a probablement t corrige quant
cette liaison inopportune, tandis que la table na pas t amende paralllement,
comme permet de le vrifier la requte (tableau 103 p. 357) :
SELECT numero_vers , personnage , occ_car , l i a i s o n
FROM occurrences
WHERE numero_vers = 927 ;
On peut contraindre enfin la ligne portant ENTRE_PERSONNAGES ntre pas trop loigne de la ligne avec liaison. On ajoute alors :
. . . AND o2 . numero_ligne < o1 . numero_ligne + 3 . . .
dans les contraintes de la requte de reprage. Le doublon pour le v. 463 disparat. Il en reste
2 pour le v. 763, pour des raisons proches du v. 927 : une des liaisons inlgantes a t
enleve de la ligne idoine de la table , il en reste une, par contre, la table na pas
t corrige en cohrence et les deux liaisons fcheuses y figurent.
Lexamen de la situation prototypique quest le vers 1252 amne dailleurs se demander
sil ne serait pas ncessaire de vrifier sil ny a pas des liaisons aprs certaines fins de phrase.
355
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
numero_vers
151
occ_car
vient
vers
Elle vient. / Il suffit : je la
laisse en ces lieux,
Cet Hippolyte... / Ah, dieux !
/ Ce reproche vous touche.
Aimez-vous ? / De lamour
jai toutes les fureurs.
Hippolyte ? grands dieux ! /
Cest toi qui las nomm.
Quil plaindra mes malheurs ? / Madame, je le
croi.
Il vient vous. / Madame,
avant que de partir,
Il vient vous. / Madame,
avant que de partir,
Et je vais... / Ah ! cruel, tu
mas trop entendue.
Quand je me meurs ! / Fuyez.
/ Je ne le puis quitter.
205
dieux
259
-vous
264
dieux
399
malheurs
463
vient
463
vous
670
vais
763
meurs
763
Fuyez
839
mourez
914
met
927
quitter
1252
plus
1493
Dieux
vers_phonetique
ai l @@ v y in lt i l s u f i j @ l
a l ai s an s e l y eu
s ai i p o l i t a d y eu lz s @ r
@ p r o sh @@ v ou t ou sh
e m e v ou lz d @ l a m ou r j
ai t ou t @@ l e f u r oe r
i p o l i t @@ g r an d y eu lz s
ai t w a k i l a n o m e
k i l p l in d r a m e m a l oe r
lz m a d a m @@ j @ l @ k r w
a
i l v y in lt a v ou lz m a d a m
a v an k @ d @ p a r t i r
i l v y in lt a v ou lz m a d a m
a v an k @ d @ p a r t i r
e j @ v ai lz a k r u ai l t u m
a t r oo lp an t an d u
k an j @ m @ m oe r lz f yw i
y ai lz j @ n @ l @ p yw i k i t
e
k an j @ m @ m oe r lz f yw i
y ai lz j @ n @ l @ p yw i k i t
e
v ou m ou r ai lz j u s t @ s y
ai l k ai j @ f ai lt oo j ou r lt
yw i
m a d a m e d an v oo b r aa
m ai lt a r e t e t e z e
v ou m on f i s m @ k i t e j @
n @ l a sh ai r sh ai p aa
i l n @ s @ v ai r on p l u lz i l
s ai m @@ r on t ou j ou r
d y eu lz j ai v u d e m o r t ai
l p e r i l @ p l u lz ai m a b l
356
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
numero_vers
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
927
personnage
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
ENTRE_PERSONNAGES
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
occ_car
Vous
,
mon
fils
,
me
quitter
?
/
Je
ne
la
cherchais
pas
:
liaison
lr
-
Normalement, une phrase constitue un groupe rythmique autonome, qui ne se lie pas avec la
suivante.
Access
Les crans 36 et 37 dcomposent la requte sous Access.
36
37
En tout tat de cause, cet exercice fait toucher du doigt la difficult des bases de donnes
357
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cet exercice montre aussi que la traque aux erreurs est sans fin. La requte a dailleurs
mis au jour des incohrences insouponnes entre les tables et . Elle tmoigne
aussi du louvoiement ncessaire entre silence et bruit. Elle montre enfin que les SGBD sont
les premiers moyens de reprer les incohrences des bases quils servent utiliser.
358
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE XII
L
Lobjectif est dabord de dtecter automatiquement le maximum dincohrences et de redondances dans la table , dy remdier dans la mesure du possible et de marquer les problmes rencontrs et les amendements apports ( 1). Une deuxime tape, aprs transferts de
donnes dun environnement un autre ( 2), est de vrifier les rsultats des premires modifications automatiques et deffecter des corrections manuelles ( 3). Il sagit ensuite, toujours
guid par le schma Entits/Associations dgag au ch. IX, de crer une base de donnes
articulant plusieurs tables partir des informations consolides de la table ( 4). On
peut enfin tirer les leons de cette tentative de remaniement des informations issues de la
table ( 5).
La ralisation de ce chapitre associe MySQL et Access dune manire diffrente des autres
chapitres de ce deuxime tome, non plus en parallle, mais de manire alterne. MySQL a
t privilgi pour lanalyse, le signalement et les corrections automatiques des redondances
et incohrences. Le mode ligne de commande et les requtes SQL sont plus rapides que le
passage par de multiples menus, choix, etc. Les atouts dAccess ont par contre t pleinement
exploits pour les corrections manuelles fines, o linterface graphique est particulirement
cruciale. Il faut lavouer tout net : linterface offerte par Phpmyadmin est relativement sommaire et insuffisante pour des ajustements minutieux et nombreux.
359
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1. atomiser les valeurs. Il est prfrable que la valeur dun attribut soit atomique, cest-dire ne rassemble pas plusieurs informations htrognes. On la vu, dans la table
de dpart, le mot-base rassemble plusieurs facettes distinctes : le mot lui-mme, mais
ventuellement lorigine trangre, et, parfois, le degr de confiance avec lequel cette base
a t attribue au driv, etc. Il en va de mme de la catgorie des bases et des drivs qui
conjoint partie du discours et traits morphologiques. On na ds lors pas accs chacune
des facettes indpendamment. Il convient alors de sparer les informations, pour aboutir
plusieurs attributs contenant chacun une information minimale , atomique.
2. liminer les redondances, surtout quand elles dbouchent sur des incohrences. Dans
la table de dpart, les informations sur une base ou sur un driv sont dupliques
entre les lignes qui les comportent, et ce, avec des dcalages dans les informations fournies. On sattache alors consolider les bases et les drivs, en fusionnant les donnes
les concerant.
On cre une nouvelle table qui, au dpart, est une simple copie de la table .
Lobjectif est dabord de ne pas risquer de dtriorer les donnes de dpart : il est toujours
possible dy revenir en reprenant celles de la table . En second lieu, la structure de cette
table est enrichie au fur et mesure dattributs tmmorisant des versions consolides automatiquement des attributs de dpart (par exemple un jeu de catgories nettoy pour les
attributs et ). Enfin, on souhaite pouvoir vrifier manuellement les corrections faites automatiquement et corriger manuellement les lignes problmatiques. On ajoute
alors la table des attributs permettant de signaler les lignes corriges automatiquement ou considres comme problmatiques, le premier pour ce qui concerne la base, le
second pour le driv, le troisime pour le contexte :
Ces attributs reoivent pour valeur par dfaut la chane vide. Au fur et mesure des
constats dincohrence ou des amendements automatiques, des requtes vont ajouter chaque
fois une chane indiquant une correction ou un problme. Les mises jour sont de la forme :
UPDATE esque_tmp SET verif_... = CONCAT(verif_..., " <chane ajoute>")
Pour chacun des aspects examins dans cette section, la dmarche sera la mme :
1. constat grce aux oprations des SGBD sur les incohrences, manques, etc. ;
2. ventuellement, dbut de correction automatique ;
3. marquage des lignes qui ont t repres et/ou amendes.
360
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
isolent les catgories employes pour les bases et pour les drivs ainsi que leurs occurrences.
Lexamen du tableau 104 p. 362 met en vidence les problmes suivants :
1. dans un nombre de cas non ngligeable, la catgorie nest pas renseigne. La prsence
de la marque NULL ne permet pas de savoir sil sagit dun oubli ou dune incertitude sur
la catgorie employer. On rencontre par contre le point dinterrogation comme marque
dincertitude assume.
2. Une catgorie peut tre attribue, mais avec un certain degr dincertitude, ce que
marque un point dinterrogation post-pos : , etc.
3. Il y a hsitation entre deux catgories, spares alors par une barre oblique : .
4. Des variantes graphiques ou de notation renvoient une mme catgorie : et
pour nom propre, et galement.
5. Certaines prcisions, de genre ou nombre pour les noms ( , , etc.), ou sur la nature
locutionnelle ( mots en plusieurs mots ) de certains adjectifs ou adverbes nots
et pour locution adjective et locution adverbiale, miettent certaines catgories et
compliquent les rapprochements : compter les noms parmi les drivs, cest compter les
lignes dont la catgorie figure dans lensemble : {
}. On trouve
dailleurs pour locution comme seule catgorie, sans quon connaisse la partie du
discours dont relvent les locutions en question.
: la partie du discours, abrge en POS, qui prend ses valeurs dans len
semble : { , , , , , }. La valeur correspond la marque NULL dans
lattribut , et le point dinterrogation, dcalque du point dinterrogation de lat
tribut , signifie que la catgorie du driv est douteuse.
2.
, qui aura pour valeur 1 quand la partie du discours attribue reste
douteuse (cest le cas pour deux noms) et 0 sinon.
3.
: les traits spcifiant une catgorie (par exemple le genre et le nombre
pour un nom, la construction pour un verbe).
361
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Bases
NULL
?
a
a?
a/nm
acron
adv
adv ?
interj
ladj
ladv
loc
n
n?
nf
nf ?
nf/nm
nfpl
nm
nm ?
nm/nf
nmpl
nnpr
npl
npr
npr ?
npr?
onomat
sigle
sigle?
vtr
o
339
7
130
10
4
1
4
1
8
1
3
2
58
2
518
1
1
5
1306
11
1
9
1
2
1880
22
1
3
49
2
2
Drivs
NULL
?
a
adv
n
n?
nf
nfpl
nm
npl
v
vintr
o
134
3
4143
13
20
2
27
1
38
1
1
1
362
Les mises jour des attributs rajouts en fonction des informations dj prsentes seffectue par les requtes :
UPDATE esque_tmp
SET derive_POS = n ,
derive_POS_douteuse = 1
WHERE cat_derive = n ? ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
UPDATE esque_tmp
SET derive_POS = cat_derive
WHERE cat_derive IN ( ? , a , adv , n , v ) ;
UPDATE esque_tmp
SET derive_POS = SUBSTRING ( cat_derive , 1 , 1) ,
derive_POS_traits = SUBSTRING ( cat_derive , 2 , 10)
WHERE cat_derive REGEXP ^[ nv ] [ az ]+ ;
via :
SUBSTRING(cat_derive, 1, 1)
SELECT cat_derive ,
derive_POS ,
derive_POS_douteuse ,
derive_POS_traits ,
COUNT( ) AS o .
FROM esque_tmp
GROUP BY cat_derive ,
derive_POS ,
derive_POS_douteuse ,
derive_POS_traits ;
Le tableau 105 p. 364 montre quen loccurrence les transformations effectues sont conformes
ce qui tait souhait.
Mots bases On opre de la mme manire pour la catgorie de la base, ceci prs quon
ajoute un attribut , valant 1 si la base est une locution (un mot en plusieurs
mots ) et 0 sinon. Il est dailleurs possible, voire probable, que la prsence de locutions dans
les bases soit sous-estime.
Cela qui conduit 4 requtes de modification de la structure de la table
363
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
derive_POS
absente
?
a
adv
n
n
n
n
n
n
v
v
derive_POS_douteuse
0
0
0
0
0
1
0
0
0
0
0
0
derive_POS_traits
f
fpl
m
pl
intr
o.
134
3
4143
13
20
2
27
1
38
1
1
1
On peut alors mettre jour les attributs ajouts en fonction des informations prsentes
dans lattribut :
UPDATE esque_tmp
SET base_POS_douteuse = 1
WHERE cat_base REGEXP ^ . + [ ? ] ;
UPDATE esque_tmp
SET base_POS = cat_base
WHERE cat_base IN ( " ? " , " a " , " adv " , " i n t e r j " , "n" , " npr " , "onomat " , " s i g l e " ) ;
UPDATE esque_tmp
SET base_POS = SUBSTRING ( cat_base , 2 , 10) ,
base_locution = 1
WHERE cat_base IN ( " ladv " , " l a d j " ) ;
cat_base
nnpr
acron
nf/nm
a/nm
a/nm
a/nm
a/nm
nm/nf
loc
loc
contexte rduit
du language [sic] <gnolesque>).
is cela est un bug <socratesque> et une ralit tarifaire st
Allons, tais-toi, <bouffresque>. Nous allons maintenant, me
oupant les tirades <maboulesques> de Viviani [...]
et de paix dans le <maboulesque> dessein de venir racheter u
La mort du prince imprial, qui ma frapp comme une image d
pilants o la gent <simiesque> dmontre sa facult utilise
ans les niaiseries <sitcomesques> du type "Hlne et les gar
sio ; les aventures <tout-autour-du-mondesques> dun irascibl
loser-vos-oreilles-<-la-fin-esque> "le dernier pas" font de
UPDATE esque_tmp
SET base_POS = " npr "
WHERE cat_base = " nnpr " ;
UPDATE esque_tmp
SET base_POS = " s i g l e "
WHERE cat_base = " acron " ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = f /m
WHERE cat_base IN ( " nf/nm" , "nm/nf " ) ;
UPDATE esque_tmp
SET base_POS = " a "
WHERE cat_base = " a/nm" ;
UPDATE esque_tmp
SET base_POS = " adv " ,
base_locution = 1
WHERE cat_base = " l o c " ;
UPDATE esque_tmp
SET base_POS = " a "
WHERE cat_base = " a ? " ;
UPDATE esque_tmp
SET base_POS = " a "
WHERE base_POS = " adj " ;
UPDATE esque_tmp
SET base_POS = " adv "
WHERE cat_base = " adv ? " ;
UPDATE esque_tmp
SET base_POS = "n"
WHERE cat_base = "n ? " ;
UPDATE esque_tmp
SET base_POS = " npr "
WHERE cat_base = " npr ? " ;
UPDATE esque_tmp
SET base_POS = " npr "
WHERE cat_base = " npr? " ;
UPDATE esque_tmp
SET base_POS = " s i g l e "
WHERE cat_base = " s i g l e ? " ;
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = f
365
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = m
WHERE cat_base = "nm ? " ;
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = m
WHERE cat_base = "nm" ;
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = mpl
WHERE cat_base = "nmpl " ;
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = f p l
WHERE cat_base = " nfpl " ;
UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = pl
WHERE cat_base = " npl " ;
UPDATE esque_tmp
SET base_POS = " v " ,
base_POS_traits = t r
WHERE cat_base = " v t r " ;
Comme pour les drivs, on effectue une vrification de la transformation des catgories
des mots bases (tableau 106 p. 367).
Sachant, grce la requte :
SELECT COUNT( DISTINCT base , base_POS )
FROM esque_tmp ;
366
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_base
NULL
?
a
a?
a/nm
acron
adv
adv ?
interj
ladj
ladv
loc
n
n?
nf
nf ?
nf/nm
nfpl
nm
nm ?
nm/nf
nmpl
nnpr
npl
npr
npr ?
npr ?
onomat
sigle
sigle ?
vtr
base_POS
absente
?
a
a
a
sigle
adv
adv
interj
adj
adv
adv
n
n
n
n
n
n
n
n
n
n
npr
n
npr
npr
npr
onomat
sigle
sigle
v
base_POS_traits
f
f
f/m
fpl
m
m
f/m
mpl
pl
tr
base_POS_douteuse
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
1
1
0
0
1
0
base_locution
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
o.
339
7
130
10
4
1
4
1
8
1
3
2
58
2
518
1
1
5
1306
11
1
9
1
2
1880
22
1
3
49
2
2
o.
7
120
228
8
7
1384
1370
3
40
2
%
0.22
3.79
7.19
0.25
0.22
43.67
43.23
0.09
1.26
0.06
367
o.
3
3249
134
13
78
2
%
0.09
93.39
3.85
0.37
2.24
0.06
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
GROUP BY derive_POS ;
UPDATE esque_tmp
SET v e r i f _ d e r i v e = CONCAT( v e r i f _ d e r i v e , " changement c a t g o r i e " )
WHERE cat_derive IS NULL
OR cat_derive <> derive_POS ;
On peut ensuite examiner en tant que telles toutes les entres dont les catgories de drives ont t effectivement changes, par une requte du type :
SELECT derive ,
cat_derive ,
derive_POS
FROM esque_tmp
WHERE v e r i f _ d e r i v e REGEXP changement c a t g o r i e
cat_derive
nf
NULL
NULL
n?
nf
NULL
NULL
NULL
NULL
NULL
derive_POS
n
absente
absente
n
n
absente
absente
absente
absente
absente
UPDATE esque_tmp
SET v e r i f _ b a s e = CONCAT( verif_base , changement c a t g o r i e )
WHERE cat_base IS NULL
OR cat_base <> base_pos ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1.2.1. Constats
En dehors de lensemble dtiquettes, de catgories employes, il peut se faire que des
incohrences se soient introduites dans lattribution dune catgorie une base donne ou
un driv donn. L encore, on souhaite utiliser les requtes du SGBD pour dceler de telles
incohrences.
Pour ce qui concerne les catgories des mots bases, une premire requte, base sur une
autojointure, isole les bases identiques pour lesquelles deux catgories distinctes existent et
dcompte les occurrences de chaque cas :
SELECT e1 . base AS Base ,
e1 . cat_base AS cat1 ,
e2 . cat_base AS cat2 ,
COUNT( ) AS o .
FROM esque_tmp AS e1 , esque_tmp AS e2
WHERE e1 . base = e2 . base
AND e1 . cat_base <> e2 . cat_base
GROUP BY e1 . base , e1 . cat_base , e2 . cat_base ;
Le rsultat, au tableau 109 p. 371, est rendu peu lisible du fait quune mme paire de catgories distinctes donne naissance deux couples. Ainsi, pour la discordance de BD,
on trouve le couple et le couple . La solution est dordonner lexicographiquement
les deux catgories (en cherchant, grce < lequel est le premier dans lordre lexicographique)
et de souder, de concatner (CONCAT) le couple rsultant :
SELECT e1 . base AS Base ,
IF ( IFNULL ( e1 . cat_base , "" ) < IFNULL ( e2 . cat_base , "" ) , CONCAT( IFNULL ( e1 .
cat_base , "" ) , " " , IFNULL ( e2 . cat_base , "" ) ) , CONCAT( IFNULL ( e2 . cat_base
, "" ) , " " , IFNULL ( e1 . cat_base , "" ) ) ) AS c a t g o r i e s ,
COUNT( ) AS o .
FROM esque_tmp AS e1 , esque_tmp AS e2
WHERE e1 . base = e2 . base
AND IFNULL ( e1 . cat_base , "" ) <> IFNULL ( e2 . cat_base , "" )
GROUP BY e1 . base ,
IF ( IFNULL ( e1 . cat_base , "" ) < IFNULL ( e2 . cat_base , "" ) , CONCAT( IFNULL ( e1 .
cat_base , "" ) , " " , IFNULL ( e2 . cat_base , "" ) ) , CONCAT( IFNULL ( e2 . cat_base
, "" ) , " " , IFNULL ( e1 . cat_base , "" ) ) ) ;
Par ailleurs, comme la marque NULL nest gale aucune valeur et nest donc pas comparable telle quelle, on transforme cette marque par lappel la fonction IFNULL. Si lattri
but contient la marque NULL, celle-ci est remplace par la chane "". Dans le cas
contraire, la chane de caractres qui symbolise la catgorie de la base est retourne.
Le tableau 110 p. 372 est effectivement plus compact et plus parlant. On distingue plusieurs cas de figure :
369
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1. deux catgories en fait concordantes, lune spcifiant lautre. Cest le cas de vaudou avec
et . Lalignement sur lune des deux catgories parat lgitime. On peut ramener
ventuellement ce cas la prsence ou non dune hsitation, comme pour Amiga ou Ra
Dada, ou Rentre peut-tre aussi dans cet ensemble le cas o soppose labsence
de catgorie, symbolise par la marque NULL, et une catgorie. Reste cependant choisir
dans ces diffrents cas de figure la catgorie la plus gnrale ou la plus spcifique.
2. deux spcifications distinctes dune mme catgorie, correspondant probablement deux
mots distincts. Cest le cas dun faune, , qui soppose effectivement la faune, . Les
deux mots doivent demeurer tels quels, et, partant, les deux catgories.
3. deux catgories distinctes potentiellement lgitimes, comme bidon dans une excuse
bidon et dans un bidon dessence, ou dont on peut se demander sil ne sagit pas
dune simple incohrence au moment de lentre des informations, comme pour BD,
et . Dans le premier cas, on peut recourir une catgorie composite, qui indique
lambivalence, par exemple pour bidon.
) isole les
1.2.2. Signalement
Pour la discordance de catgorisation des bases, une premire requte, reposant sur un
enchssement :
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , discordance c a t g o r i e )
WHERE base IN
(SELECT e1 . base
FROM esque_tmp AS e1 ,
esque_tmp AS e2
WHERE e1 . base = e2 . base
AND IFNULL ( e1 . cat_base , "" )
<> IFNULL ( e2 . cat_base , "" ) ) ;
370
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Base
Amiga
Amiga
BD
BD
E.T.
E.T.
Gnome
Gnome
Molire
Molire
Ra Dada
Ra Dada
bidon
bidon
canon
canon
chocolat
chocolat
espagnol
espagnol
faune
faune
gaucho
gaucho
hurluberlu
hurluberlu
louffe
louffe
ovale
ovale
philosophe
philosophe
roller
roller
somnambule
somnambule
vampire
vampire
vaudou
vaudou
cat1
npr
npr ?
nf
sigle
npr ?
sigle
nm
npr
nm
npr
npr
npr ?
a
nm
a
nm
nm
npr
a
nm ?
nf
nm
nf
nm
a
nm
n
nm
a
nm
n
nm
n
nm
n
nm
n
nm
n
nm
cat2
npr ?
npr
sigle
nf
sigle
npr ?
npr
nm
npr
nm
npr ?
npr
nm
a
nm
a
npr
nm
nm ?
a
nm
nf
nm
nf
nm
a
nm
n
nm
a
nm
n
nm
n
nm
n
nm
n
nm
n
o.
1
1
2
2
1
1
1
1
5
5
1
1
2
2
1
1
1
1
1
1
4
4
1
1
1
1
1
1
1
1
1
1
1
1
4
4
2
2
2
2
371
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
catgories
npr
npr npr ?
nf sigle
npr
npr
npr ? sigle
nm npr
nm
nm npr
npr npr ?
nm
a nm
nm
a nm
nm npr
nm
a nm ?
a
a
nf nm
vtr
a
a
nf nm
n?
nm
a
a
o.
212
2
4
2
2
2
2
2
10
2
2
4
4
2
2
12
2
2
2
8
2
4
6
2
2
2
16
2
hurluberlu
latin
louffe
morisco [esp.]
noble
ovale
philosophe
pittoresco [it.]
plateresco [esp.]
premier avril ?
prout
quincailler ?
roller
sauvage
simien
soldatesque
somnambule
todesco, tedesco [it.]
turc
vampire
vaudou
a nm
nm
n nm
a
a
a nm
n nm
a
a
nm
a
nm
n nm
a/nm
a/nm
a
n nm
nm
nm
n nm
n nm
2
2
2
20
2
2
2
4
4
2
2
2
2
2
8
2
8
4
12
4
4
372
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Driv
BDesque
Fela-esque
abracadabrantesque
arabesque
arlequinesque
arrivesque
asinesque
barbaresque
baronesque
barthesque
bassanesque
bernesque
boudinesque
bramantesque
burlesque
calamitesque
caravagesque
carnavalesque
chevaleresque
churrigueresque
cocoriquesque
confituresque
corsesque
crotesque
cyclonesque
danaesque
delaruesque
ellroyesque
faunesque
flandresque
foresque
foresque
foresque
fourbesque
funambulesque
gallianesque
gallimardesque
gigantesque
giorgionesque
giottesque
giottesque
giottesque
grenouillesque
catgories
a
a
a nm
a nf
a
a
a
a
a
a
an
a
a nf
a
a nm
a nm
an
a nm
a nm
a nm
a nm
a
a nf
an
a
a
a
a
a nm
a nf
a nf
a nm
nf nm
a nm
a nm
a
an
a nm
an
an
a nm
n nm
a
o.
2
2
10
8
4
2
2
6
2
4
2
2
4
2
2
4
6
8
12
4
6
2
4
6
4
2
2
2
8
2
2
2
2
6
8
2
4
6
2
4
4
2
4
Driv
grotesque
grotesque
grottesque
halloweenesque
humoresque
humoresque
humoresque
joliesque
langueste
machinesque
mauresque
miraillesque
moresque
moresque
moresque
noblesque
pagnolesque
papillonnesque
papinesque
perlimpimpesque
piratesque
pittoresque
plantardesque
porphyresque
proutesque
putanesque
rembranesque
romanesque
romanesque
romanesque
serpentesque
sitcomesque
soldatesque
spawnesque
titanesque
titianesque
tombesque
truandesque
zappaesque
zidanesque
cranesque
catgories
a nm
nf nm
a nf
a
an
a nf
n nf
a nm
a
a nm
a nf
a
an
a nf
n nf
a n?
a
a
a
a
a
a nm
nm
a nm
a
an
an
a nf
a nm
nf nm
a
a
a nf
a
a nm
an
a
a nm
a
a
a nm
o.
4
2
2
2
2
2
2
2
2
2
8
2
2
2
2
2
6
2
4
2
2
6
2
2
2
4
4
12
12
2
2
2
12
2
10
2
2
6
2
2
4
373
On procde de la mme manire pour les discordances de catgorisation portant sur les
drivs :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On peut chercher sil nexiste pas, pour un driv dont la base est manquante, une autre
occurrence de ce driv avec une base non manquante. Cest la requte :
SELECT base ,
cat_base ,
derive
FROM esque
WHERE base IS NOT NULL
AND base NOT REGEXP ^ \\? $
AND derive IN
(SELECT derive
FROM esque
WHERE base IS NULL
OR base REGEXP ^ \\? $ ) ;
Elle repose sur une requte enchsse dans les conditions de restriction. Ces dernires rclament une base qui ne contient ni la marque NULL ni uniquement un point dinterrogation
prcd et suivi optionnellement despaces et pour laquelle le driv figure dans lensemble
des drivs pour lesquels la base contient soit la marque NULL soit uniquement un point dinterrogation prcd et suivi optionnellement despaces, cest la requte enchsse. Lexamen
du rsultat (tableau 114 p. 376) est dcevant : on ne trouve en effet que 9 occurrences de
drivs rpondant ces conditions, qui couvrent 8 drivs distincts (simonesque est fourni
avec deux bases possibles : Simone (Marco) et Simon (Claude)). On ne peut donc pas se servir
de ce rsultat pour suppler aux manques constats.
La notation actuelle des bases est problmatique :
une base qui manque est toujours reprsente par un couple de marques NULL ou par
un point dinterrogation et une marque NULL pour les attributs et , si bien
que les multiples drivs de ces bases manquantes semblent relever de seulement deux
bases .
374
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
NULL
?
?
NULL
?
?
?
?
?
?
?
?
?
?
?
NULL
NULL
NULL
NULL
?
?
?
?
NULL
NULL
?
NULL
?
?
?
?
NULL
?
?
?
?
NULL
?
?
?
?
NULL
?
?
NULL
NULL
?
?
NULL
?
?
NULL
?
?
?
cat_base
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
npr
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
npr
derive
humoresque
CANesque
chamallowesque
tgvesque
auvesque
bavesque
boulardesque
bourrelesque
charbonniresque
ellesque
jamesque
josphiresque
rubesque
simonesque
tunequesque
bonhamesque
conandoylesque
cocodinguesque
bottonesque
monteputinesque
Carmividesque
brtesque
robesque
tocambolesque
latunesque
humiesque
avionnesque
baribaudesque
Benny-Hillesque
bonesque
caldoresque
colombanesque
colombesque
cornucopiesque
delmisque
Dr Quinnesque
escargotesque
explosiantesque
gothico-seborgiesque
mentonnesque
moriartyesque
papagalliesque
pistolesque
plonesque
post-lichesque
spawnesque
stryeresque
varittochiesque (ou varitochiesque)
wolfesque
morandinesque
champignolesque
ardissonnesque
bonaldiesque
catenacciesque
flo-joesque
375
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
Bourget (Paul) ?
bricol()e ( ?)
Charpini (Jean) ?
Charpini (Jean) ?
compile ?
coutumier ?
croquignole(t) ?
Del Duca (Gino) ( ?)
dprdateur ?
faramineux ?
flicard (+ picaresque ?)
grandiloqueur ?
libidineux ?
loukoum ou loukoumien ?
obu (+ ubuesque ?)
olympien ?
pataugeur ?
peinturlure ?
polardin (ou polar ?)
quincailler ?
Scapula (Franois) (+ scapulaire ?)
snile ?
tintinnabulant ( ?)
Valentin (Saint-) ( ?)
vido ( ?)
Albanie ?
spongieux ?
zapper ?
mercantesco [it.] ?
ventre ?
enchanteur ?
show bizness ?
avril ?
Corleon ?
Clinton ( ?)
faramineux ?
quincailler ?
bouquin ?
Ferry (Jules) ?
Pladan +asinus ?
cat_base
npr
NULL
npr
npr
nf
a
NULL
npr
NULL
a
NULL
NULL
a
NULL
nm
a
a
nf
NULL
NULL
npr
NULL
NULL
npr
NULL
npr
a
NULL
NULL
NULL
a?
nm
nm
npr
npr
NULL
nm
nm
npr
NULL
derive
bourgetesque
bricolesque
Charpinesque
charpiniesque
compilesque
coutumiesque
croquignolesque
delducatesque
dprdatesque
faraminesque
flicaresque
grandiloqueste
libidinesque
loukoumiesque
obuesque
olympiesque
pataugesque
peinturluresque
polardinesque
quincaillesque
scapularesque
snilesque
tintinnabulesque
valentinesque
vidotesque
dalbanesque
spongesquer
zappesque
mercantesque
ventresque
enchanteresque
showbizenesque
aprilesque
corlonesque
clintonesque
faraminesque
quincaillesque
boucquinesque
ferrychonnesque
pladasinesque
TABLEAU 114 E SQUE : drivs dont la base nest pas toujours manquante
base
Humoreske [all.]
Morandini (Jean-Marc)
Manson (Charles) ?
Simone (Marco)
Spawn
Simon (Claude)
Sex Pistols ?
Fela ?
Jam
cat_base
npr
npr
npr
npr
npr
npr
NULL
NULL
sigle
derive
humoresque
morandinesque
mansonnesque
simonesque
spawnesque
simonesque
pistolesque
Fela-esque
jamesque
376
lattribut , pour les bases douteuses, nest pas atomique . Il conjoint plusieurs
informations distinctes : la base propose, lindication du doute (un ou plusieurs points
dinterrogation), et ventuellement, prpos, le dito ( ), la marque utilise en morphologie
pour indiquer une base reconstruite et non atteste en tant que telle (cest le cas pour
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
loukoum ou loukoumien ?
polardin (ou polar ?)
Babar/Barre (Raymond)
ange/anglique
temple (ou templier ?)
Champolion ou Champollion ?
Sion (pierre de) ou Prieur de Sion ( ?)
Dive ou diva ?
face (ou farce)
AC/DC ?
bouche ou boucher ?
Titanic/titan
cucul/culte ?
moto / moteur ?
On notera que la barre oblique a visiblement plusieurs emplois : elle peut faire partie de la
base (AC/DC), ajouter une prcision smantique en permettant de distinguer des homonymes
(Babar/Barre (Raymond) ne pas confondre avec le personnage pour enfants) ou effectivement
indiquer une ambivalence quant la base effective.
1.3.2. Rorganisation
Pour aboutir une notation plus claire, on se propose dabord de rajouter un attribut
, qui aura pour valeur par dfaut , et pour autres valeurs possibles et
. Pour pouvoir contrler les transformations de lattribut , on introduit un attribut
1. une base manquante, quelle que soit sa reprsentation de dpart, est symbolise par le
driv prcd du chevron fermant, utilis souvent en morphologie pour indiquer une
relation de drivation. Ainsi ?, base manquante de mobydiesque, est remplac par >
modybiesque (on peut gloser cette notation de la manire suivante : la base de mobydiesque est la forme, non connue ou non note, qui a donn naissance mobydiesque)
et lattribut prend pour valeur .
2. le ou les point(s) dinterrogation manifestant le doute dans lattribut est/sont ef
fac(s) de cet attribut, par contre, lattribut prend pour valeur .
Voici les requtes ncessaires pour transformer la structure de la table
mettre jour les nouveaux attributs :
et pour
377
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
UPDATE esque_tmp
SET base_normalisee = base ;
UPDATE esque_tmp
SET statut_base = absente ,
base_normalisee = CONCAT( " > " , derive )
WHERE base IS NULL
OR base REGEXP ^ \\? $ ;
UPDATE esque_tmp
SET base_normalisee = RTRIM(REPLACE( base , " ? " , ) ) ,
statut_base = douteuse
WHERE base REGEXP \\?
AND base NOT REGEXP ^ \\? $ ;
Au total, 202 lignes de la table ont une valeur pour lattribut qui
diffre de celle de lattribut . On peut vrifier que la normalisation sest effectu correctement en examinant prcisment les lignes correspondantes (tableau 115 p. 379 pour un
extrait), via la requte :
SELECT base ,
base_normalisee ,
statut_base ,
derive
FROM esque_tmp
WHERE base <> base_normalisee
OR base IS NULL ;
est strictement ncessaire. En effet la marque NULL nest pas une valeur et nest donc pas
comparable une valeur effective. Sa prsence doit tre teste en tant que telle, grce aux
oprateurs appropris.
UPDATE esque_tmp
SET base_normalisee =
REPLACE( base_normalisee , " ( ) " , " " )
WHERE base_normalisee LIKE %()% ;
1.3.3. Signalement
378
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
mou ?
Pladan +asinus ?
?
zapper ?
?
NULL
?
?
mon-voisin-totor ?
plagiat ?
loukoum ou loukoumien ?
?
lonin ?
philia ? [grec]
Charpini (Jean) ?
estudiantin ?
fliper ?
?
temple (ou templier ?)
Bloody Valentino ?
?
croquignole(t) ?
enchanteur ?
Electronica ?
marine ?
?
Gladiator ?
show bizness ?
scimmiesco [it. ?]
quellegrosseconne ?
tintinnabulant ( ?)
Morgan ?
(ra)caille ?
?
ventre ?
?
Manson (Charles) ?
Crimson ?
Barthez (Fabien) ?
grimpe ?
base_normalisee
mou
Pladan +asinus
> auvesque
zapper
> brtesque
> tgvesque
> stryeresque
> bavesque
mon-voisin-totor
plagiat
loukoum ou loukoumien
> colombesque
lonin
philia [grec]
Charpini (Jean)
estudiantin
fliper
> boulardesque
temple (ou templier )
Bloody Valentino
> akira-esque
croquignole(t)
enchanteur
Electronica
marine
> humiesque
Gladiator
show bizness
scimmiesco [it. ]
quellegrosseconne
tintinnabulant ()
Morgan
(ra)caille
> lichesque
ventre
> murgesque
Manson (Charles)
Crimson
Barthez (Fabien)
grimpe
statut_base
douteuse
douteuse
absente
douteuse
absente
absente
absente
absente
douteuse
douteuse
douteuse
absente
douteuse
douteuse
douteuse
douteuse
douteuse
absente
douteuse
douteuse
absente
douteuse
douteuse
douteuse
douteuse
absente
douteuse
douteuse
douteuse
douteuse
douteuse
douteuse
douteuse
absente
douteuse
absente
douteuse
douteuse
douteuse
douteuse
derive
mollesque
pladasinesque
auvesque
zappesque
brtesque
tgvesque
stryeresque
bavesque
mon-voisin-totoresque
plagiesque
loukoumiesque
colombesque
leonesque
philianesque
charpiniesque
estudiantesque
flipesque
boulardesque
templiesque
Bloody Valentinesque
akira-esque
croquignolesque
enchanteresque
Electronica-esque
marinesque
humiesque
gladiatoresque
showbizenesque
simiesque
quellegrosseconnesque
tintinnabulesque
morganesque
caillesque
lichesque
ventresque
murgesque
mansonnesque
Crimson-esque
barthesque
grimpesque
379
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " normalisation base " )
WHERE base <> base_normalisee
OR base IS NULL ;
On marque spcifiquement les bases doubles , pour lesquelles la personne qui a rdig la
ligne hsite entre deux bases possibles. On indique par ailleurs quil sagit de bases douteuses.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " 2 bases " )
WHERE base REGEXP /| ou ;
derive
adgiornesque
laconesque
catiminesque
giornesque
-la-fin-esque
tout-autour-du-mondesque
La situation plus frquente est celle o la base conjoint ventuellement deux mots, o elle
constitue peut-tre un mot-valise, ce qui est signal par un + (et un point dinterrogation en
cas de doute) :
SELECT DISTINCT base ,
derive
FROM esque_tmp
WHERE base REGEXP [ + ]
380
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
calembour + bourde
carambole (+ Rocambole)
clitoris + pittoresque
Clochemerle + merde
flicard (+ picaresque ?)
gigantesque + tomate
hurluberlu + ubuesque
obu (+ ubuesque ?)
rhum + romanesque
Scapula (Franois) (+ scapulaire ?)
sofa + affal
sous + table
tl + lphantesque
abracadabrant + cassette
chier + picaresque
raffin + fignol
sensualo + lolita
Pladan +asinus ?
chteau + Chateaubriand (Franois Ren de) ?
calembour + bourde
zoo + man ?
cucul + Ku Klux Klan
cul + culture
Flammarion + Gallimard + Seuil
piste + pittoresque
Ravachol + gloupinesque ?
Amiga + Atari
bordel + drome
calembour + barnum
humano + simiesque
farfelu + fada ?
altissime + simiesque
javanais + java ?
cavalier + chevaleresque ?
Do Quichotte + shoot ?
formule + lune ?
Hue (Robert) + Hubu
abracadabra + dantesque
derive
calembourdesque
carambolesque
clitoresque
clochemerdesque
flicaresque
gigantomatesque
hurlubuesque
obuesque
rhumanesque
scapularesque
sofalesque
sous-tablesque
tlphantesque
abracassetabrantesque
chicarresque
rafignolesque
sensualolitesque
pladasinesque
chateaubriesque
calembourdinesque
zoomanesque
cucul-klanesque
CULturesque
flammario-galligrasseuilesque
pistoresque
ravacholinesque
amigataresque
bordelodromesque
calembarnumesque
humanosimiesque
farfadesque
altissimiesque
javanesque
cavaleresque
Dom Qui Shootesque
formulunesque
Hu(bu)esque ?
abracadantesque
381
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
4. [prov.] provenal ;
5. [lat.] latin ;
6. [all.] allemand ;
7. [esp.] espagnol.
Ces mentions touchent 63 bases (tableau 117 p. 117), comme le montre la requte :
SELECT DISTINCT base_normalisee
FROM esque_tmp
WHERE base_normalisee REGEXP \\[ ;
Dans un cas, gris dans le tableau, ce qui est entre crochets ne sert pas noter une langue,
mais une variante.
1.5.2. Rorganisation et signalement
un attribut textuel
qui prend
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " base non franais moderne " ) ,
base_normalisee =
CASE
WHEN base_normalisee REGEXP \\[ angl \\.\\] THEN REPLACE(
base_normalisee , " [ angl . ] " , " " )
WHEN base_normalisee REGEXP \\[ i t \\.\\] THEN REPLACE(
base_normalisee , " [ i t . ] " , " " )
WHEN base_normalisee REGEXP \\[a\\. f \\.\\] THEN REPLACE(
base_normalisee , " [ a . f . ] " , " " )
WHEN base_normalisee REGEXP \\[ prov \\.\\] THEN REPLACE(
base_normalisee , " [ prov . ] " , " " )
WHEN base_normalisee REGEXP \\[ l a t \\.\\] THEN REPLACE(
base_normalisee , " [ l a t . ] " , " " )
382
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base_normalisee
bummamus [lat.]
fetuccine [it.]
lourd [a.f.]
Michelangelo [it.]
muliebris [lat.]
ottocento [it.]
picaro [esp.]
tailor [taylor]
todesco, tedesco [it.]
plateresco [esp.]
pittoresco [it.]
pavone [it.]
morisco [esp.]
lama [esp.]
Humoreske [all.]
grottesco [it.]
gigantesco [it.]
furbesco [it.]
churrigueresco [esp.]
burlesco [it.]
asinesco [it.]
boschereccio [it.]
bertesca [it.]
cagnesca [it.]
cancelleresco [it.]
corsesca [it.]
cortigianesco [it.]
escoubas [prov.]
fantesca [it.]
fiabesco [it.]
forum, foris [lat.]
forfantesco [it.]
fratesco [it.]
graeciscus [lat.]
grottesca [it.]
levre [a.f.]
mercantesco [it.]
pintoresco [esp.]
principesco [it.]
cinquecento [it.]
quattrocento [it.]
trecento [it.]
scimmiesco [it. ]
settecento [it.]
Japan [angl.]
philia [grec]
thug [angl.]
villanelle [it.]
musical [angl.]
friend [angl]
lupus [lat.]
screenshot [angl]
two tone [angl]
Amnesiac [angl.]
background [angl.]
balloon [angl.]
banda [esp.]
calor [esp.]
comic [angl.]
dance floor [angl.]
game [angl.]
new order [angl]
commediante [it.]
383
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On remarque que dans le deuxime aiguillage CASE, on sappuie sur la valeur de lattribut
. En effet, au moment o le deuxime aiguillage
est examin, les valeurs de lattribut ont dj t changes et lindication de
langue en a disparu. Une autre solution, qui permettrait dutiliser dans les deux cas la valeur
de lattribut , serait dinverser les deux aiguillages : le second ne change pas la
valeur de lattribut , mais celle de lattribut .
et non sur celle de lattribut
SELECT base ,
base_normalisee ,
langue_base
FROM esque_tmp
WHERE v e r i f _ b a s e REGEXP moderne
ORDER BY RAND( )
LIMIT 10 ;
base_normalisee
corsesca
thug
levre
morisco
pavone
background
pittoresco
game
settecento
graeciscus
langue_base
it
angl
af
esp
it
angl
it
angl
it
lat
Mme sil sous-estime probablement la part des bases trangres (la notation de cette
facette ne semblant pas avoir t systmatique), le rsultat met en vidence le rle de litalien
et de lespagnol :
384
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base_POS
npr
n
n
n
n
absente
n
a
n
n
n
absente
n
n
langue_base
fr
it
esp
angl
lat
af
all
prov
o.
1
2
1
1
4
1
2
3
2
1
1
1
2
1
o.
4290
49
21
11
8
3
1
1
SELECT base_normalisee ,
base_POS ,
COUNT( ) AS o .
FROM esque_tmp
WHERE CONCAT( base_normalisee , base_POS ) IN
(SELECT CONCAT( base_normalisee , base_POS )
FROM esque_tmp
WHERE sens_base IS NOT NULL)
AND sens_base IS NULL
GROUP BY base_normalisee , base_POS ;
1.6.2. Signalement
CREATE TABLE base_a_sens_ou_non
(SELECT CONCAT( base_normalisee , base_POS )
FROM esque_tmp
WHERE CONCAT( base_normalisee , base_POS ) IN
385
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base
Boingo (Oingo)
Boingo (Oingo)
ballon
ballon
bombe
bombe
boulevard
boulevard
cardinal
cardinal
corsesca [it.]
corsesca [it.]
mirliton
mirliton
morisco [esp.]
morisco [esp.]
nana
nana
pavone [it.]
pavone [it.]
pion
pion
todesco, tedesco [it.]
todesco, tedesco [it.]
turlupin
turlupin
zadjal
zadjal
base_POS
npr
npr
n
n
n
n
n
n
n
n
absente
absente
n
n
a
a
n
n
n
n
n
n
absente
absente
n
n
n
n
sens_base
NULL
chanteur
NULL
aviation
NULL
bombe sexuelle
NULL
genre de spectacles lgers et populaires
NULL
couleur
NULL
arme lame fourchue, originaire de la Corse
NULL
espce de flte
NULL
"arabe, musulman ; hispano-arabe"
NULL
"fille [publique]"
NULL
"paon"
NULL
enseign.
NULL
"allemand"
NULL
"faiseur de mauvais jeux de mots"
NULL
ou zjel, "type de posie arabe"
o.
1
1
2
1
1
2
1
1
4
1
1
1
2
1
3
2
2
1
1
1
1
1
1
1
2
1
1
1
386
qui sappuie sur la prsence, issue de la pnultime requte, de sens ou non dans lattribut
verif_base. Le rsultat figure au tableau 119 p. 386.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le tableau 120 p. 388 fournit les bases problmatiques sous cet angle.
1.7.2. Signalement
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " commentaire ou non" )
WHERE CONCAT( base_normalisee , base_POS ) IN
(SELECT
FROM base_a_commentaire_ou_non ) ;
p. 390 :
SELECT derive ,
cat_derive ,
base ,
base_POS
COUNT( ) AS o .
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
387
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
base_normalisee
Amiga
Aragon (Louis)
Aristophane
Artin (Pietro Aretino dit l)
Barbarie
Bardot (Brigitte)
Barthez (Fabien)
Bergame
Berni (Francesco)
Bernini (Gian Lorenzo)
Boingo (Oingo)
Bramante (Donato di Angelo Lazzari, dit il)
Burton (Tim)
Calvin (Jean Cauvin, dit)
Camons (Luis de)
Capra (Frank)
Caravage (Michelangelo Meresi, dit le)
Cassandre
Cendrillon
Cervantes (Miguel de)
Chaban-Delmas (Jacques)
Chaplin (Charlie)
Charlemagne
Chateaubriand (Franois Ren de)
Chatwin (Bruce)
Chopin (Frdric)
Clochemerle
Cocteau (Jean)
Courteline (Georges)
DAnnunzio (Gabriele)
Dana
Dante (Alighieri)
David
Demille (Cecil B.)
Di Rupo (Elio)
Diafoirus
Don Quichotte
Ellroy
Fellini (Federico)
Flash Gordon
Florian (Jean-Pierre Claris de)
Fragonard (Jean-Honor)
Gargantua
Gaulle (Charles de)
Giono (Jean)
Giorgione
Giotto
Giuliani (Rudy)
Goya (Francisco de)
Harry Potter
Hoffmann (Ernst)
base_POS
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
npr
o.
1
1
3
1
1
3
1
3
1
1
1
1
1
1
1
1
3
1
3
2
2
6
1
3
1
1
2
3
2
1
1
6
1
1
1
1
6
1
3
1
1
1
3
1
2
1
2
1
2
1
1
388
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_derive
a
a
Flash-Gordonesque
HarryPotteresque
Queen-esque
Tim Burtonesque
a
a
a
Wooesque
acidesque
acidesque
amigaesque
amiganesque
annunziesque
arabesque
arabesque
aragonesque
aragonesque
a
a
a
a
a
a
a
a
a
a
aretinesque
aristophanesque
aristophanesque
artinesque
ayatollesque
ayatollesque
bamboulesque
bamboulesque
a
a
a
a
a
a
a
a
barbaresque
barbaresque
a
a
bardesque
bardotesque
barnumesque
barnumesque
a
a
a
a
barthesque
barthesque
bergamesque
a
a
commentaire_base
cinaste amricain, 18811959
Film fantastique amricain,
britannique (1980).
Groupe de musique
Scnariste, enfant terrible du
cinma fantastique amricain
Drogue.
Nom du site ?
Ecrivain italien (1863-1938).
Form sur lit. Arabesco.
Ecrivain
1982).
franais
(1897-
v. 445-v.386 av J.C.
Ecrivain italien (1492-1556).
Chef religieux chiite.
Danse africaine, pop. "ripaille".
Ancienne Barbarie,
Afrique du Nord.
c.a.d.
base
Demille (Cecil B.)
Demille (Cecil B.)
base_POS
npr
npr
o.
1
1
Flash Gordon
npr
Harry Potter
Queen
Burton (Tim)
npr
npr
npr
1
1
1
Woo (John)
acide
acide
Amiga
Amiga
DAnnunzio (Gabriele)
arabe
arabe
Aragon (Louis)
Aragon (Louis)
npr
n
n
npr
npr
npr
n
n
npr
npr
1
1
1
1
1
1
1
1
1
1
npr
npr
npr
npr
n
n
n
n
1
3
1
1
4
1
2
1
Barbarie
Barbarie
npr
npr
1
1
Bardot (Brigitte)
Bardot (Brigitte)
barnum
barnum
npr
npr
n
n
2
1
2
1
Barthez (Fabien)
npr
Barthez (Fabien) ?
Bergame
npr
npr
1
2
389
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_derive
a
a
a
a
a
a
a
nf
a
a
a
a
a
a
a
a
a
a
a
a
base
abracadabra
background [angl.]
Bardot (Brigitte)
James Bond
Borgia (Cesare)
boy-scout
Brando (Marlon)
brouillon
canular
canular
cauchemar
cauchemar
Cendrillon
Chateaubriand (Franois Ren de)
churrigueresco [esp.]
clip
Clochemerle
Cocteau (Jean)
con
cornichon
base_POS
absente
n
npr
npr
npr
n
npr
n
n
n
n
n
npr
npr
absente
n
npr
npr
n
n
o.
3
1
1
2
1
1
1
1
2
2
5
3
2
1
1
2
2
2
2
1
1.8.2. Signalement
CREATE TABLE derive_a_variantes_ou_non
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE variantes_de ri ve IS NOT NULL
AND variantes_deri v e <> )
AND ( variantes_der iv e IS NULL
variantes_der iv e = )
GROUP BY derive , cat_derive , base , base_POS ) ;
UPDATE esque_tmp
SET v e r i f _ d e r i v e =
CONCAT( v e r i f _ d e r i v e , " variantes ou non" )
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT
FROM derive_a_variantes_ou_non ) ;
390
cat_base
nm
nm
a
derive
soldatesque
soldatesque
soldatesque
cat_derive
a
a
nf
sens_derive
vx
NULL
NULL
o.
1
2
2
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On constate que ladjectif soldatesque est donn comme , vieux, dans un cas seulement
sur 3. Il sagit l dune ingalit de traitement qui aboutit une incohrence.
Par ailleurs, les ingalits de traitement peuvent ne pas dissimuler des incohrences mais
des drivs distincts (des homonymes). Cest la situation avec romanesque :
base
romain
roman
romanesque
romanesque
cat_base
a
nm
a
a
derive
romanesque
romanesque
romanesque
romanesque
cat_derive
a
a
nf
nm
sens_derive
vx
NULL
vx, "femme romaine"
NULL
o.
1
5
1
1
Ladjectif romanesque est vieux quand il provient de romain, pas quand il a pour base
roman. Vrification faite, ladjectif soldatesque a toujours pour base soldat, tandis que le nom
soldatesque a pour base ladjectif soldatesque.
En tout tat de cause, il sagit de reprer les cas o un couple driv/catgorie se rencontre
parfois assorti dun sens parfois non (tableau 123 p. 392 le nombre doccurences en colonne
de droite indique le nombre de fois o le driv na pas de sens alors quil existe au moins une
occurrence avec un sens associ). Cest encore une requte enchsse qui permet disoler ces
cas. La requte enchsse produit lensemble des chanes de caractres concatnant le driv
et la catgorie quand ce couple a un sens associ. On est oblig dutiliser la concatnation
dans la mesure o loprateur IN attend un ensemble dlments et non pas un ensemble de
couples. On recherche les lignes telles quune chane driv/catgorie retourne par la requte
enchsse se rencontre sans sens associ :
SELECT derive ,
cat_derive ,
base ,
base_POS ,
COUNT( ) AS o .
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE sens_derive IS NOT NULL)
AND sens_derive IS NULL
GROUP BY derive , cat_derive , base ;
Au total, cest une dizaine de couples driv/catgorie quil faudra regarder de prs pour
liminer les incohrences tout en prservant les homonymies.
391
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
derive
arabesque
calvinesque
charlatanesque
fanfaresque
matelotesque
mazarinesque
philosophesque
priapesque
soldatesque
turlupinesque
cat_derive
a
a
a
a
a
a
a
a
a
a
base
arabe
Calvin (Jean Cauvin, dit)
charlatan
fanfare
matelot
Mazarin (Jules)
philosophe
Priape
soldat
turlupin
base_POS
n
npr
n
n
n
npr
n
npr
n
n
o.
1
1
3
2
2
1
1
2
2
2
1.9.2. Signalement
CREATE TABLE derive_a_sens_ou_non
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE sens_derive IS NOT NULL)
AND sens_derive IS NULL
GROUP BY derive , cat_derive , base ;
UPDATE esque_tmp
SET v e r i f _ d e r i v e =
CONCAT( v e r i f _ d e r i v e , " sens ou non" )
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT
FROM derive_a_sens_ou_non ) ;
Les drivs avec et sans sens associs sont fournis dans le tableau 123 p. 392.
392
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
derive
arabesque
arabesque
calvinesque
calvinesque
charlatanesque
charlatanesque
fanfaresque
fanfaresque
matelotesque
matelotesque
mazarinesque
mazarinesque
philosophesque
philosophesque
priapesque
priapesque
soldatesque
soldatesque
turlupinesque
turlupinesque
cat_derive
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
sens_derive
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
vx
NULL
base
arabe
arabe
Calvin (Jean Cauvin, dit)
Calvin (Jean Cauvin, dit)
charlatan
charlatan
fanfare
fanfare
matelot
matelot
Mazarin (Jules)
Mazarin (Jules)
philosophe
philosophe
Priape
Priape
soldat
soldat
turlupin
turlupin
base_POS
n
n
npr
npr
n
n
n
n
n
n
npr
npr
n
n
npr
npr
n
n
n
n
o.
1
1
1
1
1
3
1
2
1
2
1
1
1
1
1
2
1
2
1
2
cat_derive
a
base
soldat
base_POS
n
o.
2
393
cat_derive
a
a
mode_formation
NULL
form sur lit. Soldatesco
base
soldat
soldat
base_POS
n
n
o.
2
1
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1.10.2. Signalement
CREATE TABLE derive_a_formation_ou_non
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
WHERE mode_formation IS NOT NULL)
AND mode_formation IS NULL
GROUP BY derive , cat_derive , base , base_POS ) ;
UPDATE esque_tmp
SET v e r i f _ d e r i v e =
CONCAT( v e r i f _ d e r i v e , " formation ou non" )
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT
FROM derive_a_formation_ou_non ) ;
Le tableau 125 p. 393 montre quun seul driv est concern. Faut-il en conclure quil
y a deux adjectifs soldatesque, lun ayant pour origine le franais soldat et lautre litalien
soldatesco ?
394
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
origine
NULL
AFC
AFC, Bjrkman 118
AFC, MNC 1
Bjrkman (sv), DDL 47
Bjrkman 100
Bjrkman 101
Bjrkman 102
Bjrkman 103
Bjrkman 104
Bjrkman 105
Bjrkman 106
Bjrkman 107
Bjrkman 108
Bjrkman 109
Bjrkman 110
Bjrkman 111
Bjrkman 112
Bjrkman 113
Bjrkman 114
Bjrkman 115
Bjrkman 116
Bjrkman 117
Bjrkman 118
Bjrkman 119
Bjrkman 120
Bjrkman 121
Bjrkman 122
Bjrkman 123
Bjrkman 28
Bjrkman 30
Bjrkman 31
Bjrkman 32
Bjrkman 33
Bjrkman 34
Bjrkman 35
Bjrkman 36
Bjrkman 55
Bjrkman 65
Bjrkman 66
Bjrkman 67
Bjrkman 71
Bjrkman 72
Bjrkman 73
Bjrkman 74
Bjrkman 79
Bjrkman 81
Bjrkman 85
Bjrkman 86
Bjrkman 87
Bjrkman 89
Bjrkman 93
Bjrkman 94
Bjrkman 99
Borno
Borno, MNC 2
o.
1345
72
2
1
1
11
14
10
13
11
18
15
15
19
18
16
17
10
16
16
14
18
13
14
13
16
11
15
11
3
2
1
9
7
7
4
4
3
3
7
1
2
1
3
5
2
5
1
5
4
2
2
1
7
247
1
DDL 10
DDL 10, Bjrkman 116
DDL 12
DDL 13
DDL 14
DDL 15
DDL 15, Bjrkman 110
DDL 15, Bjrkman 120
DDL 17
DDL 18
DDL 2
DDL 20
DDL 21
DDL 22
DDL 24
DDL 25
DDL 25 ; Bjrkman 34
DDL 26
DDL 27
DDL 28
DDL 30
DDL 31
DDL 33
DDL 34
DDL 34, Bjrkman 112
DDL 35
DDL 35, Bjrkman 116
DDL 35, Bjrkman 120
DDL 35, Bjrkman 31
DDL 35, Bjrkman 74
DDL 37
DDL 39
DDL 40
DDL 40, Bjrkman 93
DDL 42
DDL 43
DDL 46
DDL 47
DDL 5
DDL 6, Bjrkman 123
DDL 7
DDL 9
DDl 14
FEW V, 472
Frantext
Frantext, DDL 35, Bjrkman 35
GlossaNet
MNC 1
MNC 2
WEB
attestaion orale
attestation orale
correspondance prive
web
ww
1
1
3
8
8
38
1
1
11
2
1
2
5
2
12
2
1
4
3
3
2
4
3
12
1
2
2
1
1
1
4
4
12
1
7
2
1
2
4
1
5
1
1
1
44
1
3
17
9
1
3
92
12
1913
1
395
o.
67
3
1
1
1
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R ESTRICTION(
reference_dans_dictionnaire E ST P AS NULL
[esque]
,
R EGROUPER SUR(
reference_dans_dictionnaire
[<rsultat1 >]
P AR GROUPE(
reference_dans_dictionnaire,
N OMBRE DE LIGNES () T ITRE o.
)
[rsultat2 >]
T RI
dont le tableau 128 p. 396 donne le rsultat et dont lquivalent MySQL est :
SELECT reference_dans_dictionnaire ,
COUNT( ) AS o .
FROM esque
WHERE reference_dans_dictionnaire IS NOT NULL
GROUP by reference_dans_dictionnaire
ORDER BY o . DESC ;
La requte suivante vise isoler les drivs qui tantt ont la marque NULL pour cet attribut,
tantt non.
SELECT derive ,
cat_derive ,
base ,
base_POS ,
COUNT( ) AS o .
FROM esque_tmp
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT CONCAT( derive , cat_derive , base , base_POS )
FROM esque_tmp
396
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
TABLEAU 129 E SQUE : drivs avec et sans rfrences dans des recueils
derive
auberginesque
bananiesque
berlusconesque
bondesque
braquemardesque
cacophonesque
camlonesque
casanovesque
chaplinesque
connesque
gaguesque
hiroshimiesque
jocondesque
kangouresque
mandolinesque
muranesque
mnageresque
niagaresque
olidesque
panthonesque
patatesque
plumesque
pttesque
rocambolesque
rcamiesque
tarzanesque
tobogganesque
ttonnesque
vermotesque
cat_derive
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
base
aubergine
Banania
Berlusconi (Silvio)
James Bond
braquemard
cacophonie
camlon
Casanova (Francesco)
Chaplin (Charlie)
con
gag
Hiroshima
Joconde (la)
kangourou
mandoline
Murano
mnagerie
Niagara
Olida
Panthon
patate
plume
PTT
Rocambole
Rcamier (Madame de)
Tarzan
toboggan
tton
Vermot (almanach)
base_POS
n
npr
npr
npr
n
n
n
npr
npr
n
n
npr
npr
n
n
npr
n
npr
npr
npr
n
n
sigle
npr
npr
npr
n
n
npr
o.
1
1
1
2
1
1
4
3
5
2
2
2
1
2
1
3
4
3
3
3
2
1
2
4
1
1
1
1
1
397
FROM derive_dans_dic_ou_non ) ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
1.14.1. Constat
Lexamen des attributs , et met en vidence dune part des conventions de
notation respecter, dautre part des incohrences rectifier. Pour les jours, 0 sert indiquer
que le jour nest pas connu, mais on trouve, outre les jours de 1 31, le jour 127. . . De la
mme manire, 0 note la non-connaissance du mois, mais on trouve le mois 15. Enfin, pour
les annes, la situation est plus confuse, comme le montre le tableau 131 p. 131, qui provient
de la requte :
SELECT
CASE
WHEN annee >= 1300 AND annee <=
WHEN annee >= 1400 AND annee <=
WHEN annee >= 1500 AND annee <=
WHEN annee >= 1600 AND annee <=
WHEN annee >= 1700 AND annee <=
WHEN annee >= 1800 AND annee <=
WHEN annee >= 1900 AND annee <=
ELSE CONCAT( " anne " , annee )
END AS priode/anne ,
COUNT( ) AS o .
FROM esque_tmp
GROUP BY
CASE
WHEN annee >= 1300 AND annee <=
...
WHEN annee >= 1900 AND annee <=
ELSE annee
END
ORDER BY priode/anne ;
1399
1499
1599
1699
1799
1899
1999
THEN
THEN
THEN
THEN
THEN
THEN
THEN
14e
15e
16e
17e
18e
19e
20e
sicle
sicle
sicle
sicle
sicle
sicle
sicle
On peut imaginer que les annes 16, 18, 186 et 2201 correspondent des erreurs et
sont donc rectifier, par exemple en indiquant que lanne nest pas connue. On note par
ailleurs le dsquilibre de reprsentation des diffrents sicles : la place crasante des 20e
et 21e sicles peut renvoyer la fois une plus grande productivit du suffixe -esque et la
plus grande disponibilit pour cette priode de corpus numriques et doutils de moissonnage
automatique, sur la Toile en particulier.
La requte suivante :
SELECT jour ,
mois ,
annee
FROM esque_tmp
WHERE
( annee <> 0
AND ( annee NOT BETWEEN 1300 AND 2005))
OR ( mois NOT BETWEEN 0 AND 12)
OR ( jour NOT BETWEEN 0 AND 31) ;
isole les lignes dont la datation boite . Le rsultat figure au tableau 132 p. 400.
398
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cat_derive
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
reference_dans_dictionnaire
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
Bjrkman (sv)
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv) 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
NULL
DSA (sv), 1993
base
aubergine
aubergine
Banania
Banania
Berlusconi (Silvio)
Berlusconi (Silvio)
James Bond
James Bond
braquemard
braquemard
cacophonie
cacophonie
camlon
camlon
Casanova (Francesco)
Casanova (Francesco)
Chaplin (Charlie)
Chaplin (Charlie)
con
con
gag
gag
Hiroshima
Hiroshima
Joconde (la)
Joconde (la)
kangourou
kangourou
mandoline
mandoline
Murano
Murano
mnagerie
mnagerie
Niagara
Niagara
Olida
Olida
Panthon
Panthon
patate
patate
plume
plume
PTT
PTT
Rocambole
Rocambole
Rcamier (Madame de)
Rcamier (Madame de)
Tarzan
Tarzan
toboggan
toboggan
tton
tton
Vermot (almanach)
Vermot (almanach)
base_POS
n
n
npr
npr
npr
npr
npr
npr
n
n
n
n
n
n
npr
npr
npr
npr
n
n
n
n
npr
npr
npr
npr
n
n
n
n
npr
npr
n
n
npr
npr
npr
npr
npr
npr
n
n
n
n
sigle
sigle
npr
npr
npr
npr
npr
npr
n
n
n
n
npr
npr
o.
1
1
1
1
1
1
2
1
1
1
1
1
4
1
3
1
5
1
2
1
2
1
2
1
1
1
2
1
1
1
3
1
4
1
3
1
3
1
3
1
2
1
1
1
2
1
4
1
1
1
1
1
1
1
1
1
1
1
399
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
priode/anne
anne 0
anne 16
anne 18
anne 186
anne 2000
anne 2001
anne 2002
anne 2003
anne 2004
anne 2005
anne 2201
14e sicle
15e sicle
16e sicle
17e sicle
18e sicle
19e sicle
20e sicle
o.
97
1
1
1
207
645
873
36
6
8
1
1
1
63
36
10
235
2162
mois
8
0
0
10
3
15
annee
186
18
16
1999
2201
1999
400
1.14.2. Rorganisation
On peut, sur la base de ces constats, mettre en place une reprsentation parallle des
datations des contextes qui soit plus cohrente. On commence par ajouter un attribut
de type date qui peut contenir la marque NULL. La marque NULL signifie en loccurrence soit
que la datation minimale, lanne, est inconnue, ce qui est signifi conventionnellement par 0
dans la table soit que les informations sur lanne de la table ne
sont pas fiables.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Il reste mettre jour cette colonne en fonction des informations collectes dans les
attributs , et , en tenant compte des incohrences repres :
UPDATE esque_tmp
SET datation = CONCAT( annee , "" , mois , "" , jour )
WHERE ( annee = 0 OR annee BETWEEN 1300 AND 2005)
AND ( mois BETWEEN 0 AND 12)
AND ( jour BETWEEN 0 AND 31) ;
Au total, sur 4 384 contextes, seuls 6 sont dpourvus dune date (les 4 annes errones,
plus les deux dates dont soit le jour soit le mois sont incohrents).
1.14.3. Signalement
UPDATE esque_tmp
SET v e r i f _ c o n t e x t e = CONCAT( v e r i f _ c o n t e x t e , datation boiteuse )
WHERE numero_ligne IN
(SELECT
FROM contexte_a_datation_boiteuse ) ;
401
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
verif_base
2 bases
base non franais moderne
changement catgorie
changement catgorie 2 bases
changement catgorie base non franais moderne
changement catgorie commentaire ou non
changement catgorie commentaire ou non base non franais moderne
changement catgorie discordance catgorie
changement catgorie discordance catgorie base non franais moderne
changement catgorie discordance catgorie commentaire ou non
changement catgorie discordance catgorie mot-valise
changement catgorie discordance catgorie normalisation base
changement catgorie discordance catgorie sens ou non base non franais moderne
changement catgorie mot-valise
changement catgorie normalisation base
changement catgorie normalisation base 2 bases
changement catgorie normalisation base base non franais moderne
changement catgorie normalisation base commentaire ou non
changement catgorie normalisation base mot-valise
changement catgorie sens ou non
changement catgorie sens ou non base non franais moderne
changement catgorie sens ou non commentaire ou non
changement catgorie sens ou non commentaire ou non base non franais moderne
commentaire ou non
discordance catgorie
discordance catgorie base non franais moderne
discordance catgorie commentaire ou non
discordance catgorie normalisation base
discordance catgorie sens ou non base non franais moderne
mot-valise
normalisation base
normalisation base 2 bases
normalisation base commentaire ou non
normalisation base mot-valise
sens ou non commentaire ou non
o.
1744
1
16
1806
2
38
50
8
62
12
7
3
58
2
23
124
5
3
1
11
21
2
5
2
266
27
6
6
3
5
4
49
3
5
2
2
FROM esque_tmp
GROUP BY v e r i f _ c o n t e x t e ;
Leurs rsultats figurent dans les tableaux 133 et 134 p. 402 et p. 403.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
verif_base
changement catgorie
changement catgorie commentaire ou non
changement catgorie discordance catgorie
changement catgorie discordance catgorie commentaire ou non
changement catgorie discordance catgorie normalisation base
changement catgorie discordance catgorie sens ou non
changement catgorie normalisation base
changement catgorie normalisation base commentaire ou non
changement catgorie sens ou non
changement catgorie sens ou non commentaire ou non
commentaire ou non
discordance catgorie
discordance catgorie commentaire ou non
discordance catgorie normalisation base
discordance catgorie sens ou non
normalisation base
normalisation base commentaire ou non
sens ou non commentaire ou non
verif_derive
changement catgorie
changement catgorie discordance catgorie
changement catgorie variantes ou non
dictionnaire ou non
dictionnaire ou non variantes ou non
discordance catgorie
discordance catgorie sens ou non
discordance catgorie sens ou non formation ou non
discordance catgorie variantes ou non
sens ou non
variantes ou non
verif_contexte
datation boiteuse
o.
1765
1869
58
77
7
58
2
143
1
23
7
266
33
6
3
5
54
5
2
o.
3697
128
72
4
75
13
138
2
3
5
22
225
o.
4378
6
403
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
cette base, il sagit au contraire de fournir une seule fois les informations sur cette base et
simplement y renvoyer dans les lignes de la table correspondant aux drivs. Le principe est
le mme pour les attestations dun mme driv.
Pour pouvoir distribuer les informations entre plusieurs tables, il faut au pralable faire
en sorte que des discordances non voulues ne viennent pas clater entre 2 bases (ou entre
2 drivs) qui relvent en fait dun mme chef. Un premier type de discordance se concrtise
par le fait de fournir conceptuellement la mme information, mais sous une forme lgrement
diffrente. Dans lexemple utilis pour la 2e forme norme normale (ch. IX 5), les commentaires concernant la base Tonton, npr, divergent en fait un tantinet : Surnom donn Franois
Mitterrand. dans un cas (le point fait partie de la valeur de lattribut), surnom de Franois Mitterrand dans lautre. Il y a 3 points dloignement entre les deux valeurs : majuscule ou non
linitiale, point final ou non, donn vs. de. Le second type de discordance, le plus frquent,
de loin, se marque par lalternance, pour un driv ou une base donn(e) et pour un attribut
particulier, dune version o lattribut a une valeur et dune version o il nen a pas.
La rpartition des informations sur les mots en -esque peut supposer linverse de dgrouper les bases et les drivs quand il y a lieu.
On fait le pari que les oprations cruciales pour faciliter lidentification correcte des bases
et des drivs ont t effectues supra :
normalisation des mots bases avec enlvement de lindication dhsitation sur la nature
de la base ;
clatement des catgories en partie du discours et traits ;
mise part des informations concernant la langue de dpart du mot-base.
On veut vrifier manuellement dabord les bases, puis les drivs, enfin les attestations. On
va utiliser pour ce faire Access et donc exporter vers Access les tables ncessaires.
La premire table, , est une table provisoire (cf. comme abrviation de temporaire) qui va recevoir une bauche des bases dfinitives. On la cre via les requtes suivantes :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Field
id_base
base
POS
traits
POS_douteuse
numero_sens
sens
commentaire
locution
langue
nbre_attestations
base_depart
cat_depart
verif_base
Type
int(10) unsigned
varchar(100)
varchar(10)
varchar(10)
int(11)
bigint(1)
varchar(100)
blob
int(11)
varchar(10)
bigint(21)
varchar(100)
varchar(10)
varchar(255)
Null
Default
Extra
auto_increment
base manquante
absente
YES
0
0
YES
YES
0
fr
0
YES
YES
YES
o.
2449
435
152
63
28
11
7
1
2
405
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
qui retourne la valeur de lattribut quand il ne sagit pas de la marque NULL et qui sinon
renvoie la valeur donne comme deuxime argument.
Les commandes :
|sed e "s/./&~/"|tr ~ \r
406
Au sein du dossier o figure le fichier tabul (auquel est souvent donne lextension ,
pour indiquer que cest du texte brut ), on choisit de visualiser les fichiers textes. On double
clique alors sur le nom de fichier pertinent, ici .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Limport proprement dit commence. Le choix par dfaut, correct en loccurrence, est limportation dun fichier dlimit par des caractres spciaux sparant les colonnes et les lignes.
3
On peut choisir le caractre de dlimitation des colonnes, par dfaut la tabulation, ce qui
convient ici. Une case permet dindiquer si la premire ligne contient les noms des colonnes.
4
407
Comme cest le cas, la case est coche et Access utilise la premire ligne pour nommer
chacune des colonnes. Dans le cas contraire, il faut donner un nom chaque colonne.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Limport se fait par dfaut dans une nouvelle table. Il pourrait galement complter une
table existante.
6
On peut ajuster ensuite les facettes de chaque attribut (les champs pour Access).
7
408
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Cliquer sur le bouton dAvance permet de voir tous les attributs ensemble, ce qui facilite les
rglages. On peut indiquer quon ne souhaite pas importer une colonne du fichier de dpart.
En fonction des valeurs quil a rencontres, Access propose un type pour chaque attribut. On
peut le modifier.a
9
Par rapport 9 , on change les entiers longs en simples entiers dans la mesure o les
entiers mmoriser dans les attributs correspondants ne sont jamais trs grands (un peu
plus de 3 000 pour , par exemple).
10
On choisit une cl primaire parmi les attributs existants, ici . Ne pas en choisir
conduirait lapparition dun attribut auto-incrment servant de cl primaire.
409
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
11
On choisit le nom de la table crer. Par dfaut, cest celui du fichier utilis pour limportation amput de son extension.
12
Une fois tous ces rglages faits, Access cre la structure de la table et y transfre les
informations du fichier dlimit. Access signale les problmes ventuels. Dans le cas prsent,
deux des lignes du fichier dentre ont une valeur pour lattribut qui dpasse les
255 autoriss par le type Texte. La valeur stocke dans la base pour cet attribut est donc
tronque pour ces deux lignes.
13
Longlet dTablese de la fentre de navigation dans la base courante montre les deux nou
velles tables cres : et . Cette dernire table contient des
indications sur les erreurs dimportation.
14
410
L
La table donne le point de dpart pour tablir une liste aussi dfinitive que
possible des mots-bases, assortis des informations ncessaires.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
16
Limportation du fichier dlimit .txt seffectue dans les mmes conditions. Lat
tribut est omis : son format, amricain, nest pas celui attendu par la version dAccess
utilise. Comme dans le cas prcdent, deux valeurs de lattribut ont t
tronques.
Il est ais sous MySQL de retrouver les deux commentaires ltroit . Ce sont forcment
les deux plus longs. La requte suivante donne les mots-bases correspondants, la taille de
ces deux commentaires et manifeste la partie qui est conserve et celle qui est perdue lors de
limportation :
SELECT base ,
LENGTH( commentaire ) AS car . ,
LEFT( commentaire , 255) AS gard ,
RIGHT( commentaire , LENGTH( commentaire ) 255) AS perdu
FROM bases_tmp
ORDER BY LENGTH( commentaire ) DESC
LIMIT 2 ;
car.
282
NIN
267
gard
Shtru : Courant artistique musical caractris par une
forte aptitude chanter vite et haut. Les chanteurs shtrus,
dont un grand mystere plane autour de la personnalit, reprennent des clbres chansons leur sauce, et dans un
langage incomprhensible do
Derrire Nine Inch Nails se cache essentiellement une
seule personne : Trent Reznor , il cumule les talents au sein de NIN ou il est la fois compositeur , chanteur, clavier, guitariste, bassiste, producteur
(http ://www.modenation.com/html/artiste_du_mom
perdu
nt eux seuls
ont le secret.
ent_NIN.htm)
411
3. Corrections manuelles
3.1. Consolider les bases
3.1.1. Identifier les mots-bases, mettre en cohrence leurs facettes
Lobjectif premier est lidentification des mots-bases effectifs
Lorsque deux mots-bases A et B sont fusionner dans la table
du mme mot-base) :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On souhaite par ailleurs garder la trace des amendements raliss, pour pouvoir les v
rifier, avoir une ide de leur nombre, etc. On modifie en consquence la table . On
lui ajoute deux attributs. Le premier, , boolen, qui par dfaut a pour valeur ,
indique si la ligne est supprimer (pour cause de fusion de ses informations avec une autre).
Le second, , de type Texte, permet de noter le dtail des modifications apportes.
17
412
18
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lexemple de 19 montre bien les problmes rsoudre. On constate les incohrences
entre les lignes d 6 et 7, concernant tant lorthographe de Mai 68 que sa catgorie
morpho-syntaxique. Lobjectif est donc dune part de ne garder quune base 68 (Mai) et dautre
part de rapatrier vers cette base le ou les driv(s) qui dpendai(en)t de la base liminer.
Supposons quon souhaite garder la base d 6, et ramener elle le driv dpendant
de la base d 7. On ne peut pas modifier dans la ligne de la table lattribut
puisquil est prcisment utilis pour assurer la jointure.
On ajoute un attribut la table
.
20
413
21
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
22
Si lattestation est raffecte une autre base, on lui donne manuellement la valeur de
lidentifiant de cette autre base. On observe ainsi, pour lattestation 2439, la diffrence entre
23 , o vaut 7 et 24 o lattribut vaut maintenant 6, ce qui indique que cette
attestation est rattache la base d 6.
23
24
Nous allons simplement dans un premier temps montrer rapidement la cration assiste
dun formulaire rudimentaire.
Longlet dFormulairese de la fentre de navigation dans la base de donnes est le point
dentre. On va ici recourir lAssistant.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
25
Le premier pas revient choisir la ou les table(s)/requte(s) qui seront affiche(s) par le
formulaire, les attributs qui y figureront et lordre dans lequel ils interviendront.
26
On choisit alors un style de formulaire, en colonne comme en 27 , ou justifi comme en
28 . chaque fois la partie gauche de lcran fournit un aperu.
27
415
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
28
Ce choix fait (en loccurrence, en colonne), il reste choisir le type de fond, les caractres
des titres, etc.
29
On dtermine le nom du formulaire et on dcide soit de lutiliser immdiatement soit de se
servir de cette bauche pour parvenir une mise en forme plus labore.
30
Dans le premier cas, on obtient un formulaire plus agrable que la saisie en mode Feuille
de donnes.
416
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
31
Ce premier rsultat montre une ide de lappui que constituent les formulaires pour sparer lutilisateur du format concret de la table support. On peut ne pas montrer tous les
attributs, changer leur ordre, donner des titres plus clairs que ceux des attributs aux zones
de saisie, etc.
3.1.5. Formulaire sous-formulaire
On va dans un deuxime temps faire appel des formulaires plus complexes qui permettent la fois de garder le lien entre les deux tables lies et de rendre co-prsentes les
informations matriser et modifier. On cre un formulaire sous-formulaire. Le formulaire principal correspond la table matresse , du ct 1 de la relation 1 n, dans le cas
prsent . Le sous-formulaire correspond la table auxiliaire , du ct n de la re
lation 1 n, ici . Lexemple de Mai 68 est repris. Le formulaire principal montre la
base d 6 avant toute modification. La premire ligne fournit dans lordre les attributs
suivants : , , , , , , , .
32
En 33 , on voit plus commodment quen mode Feuille de donnes les modifications effectues : changement de catgorie, indication que le mot d 7 a t absorb ( ).
33
En haut du formulaire principal, on trouve un bouton permettant de dplier le formulaire auxiliaire. Cest le cas en 34 qui correspond au driv dont le numro d a t
chang de 7 6. Lidentifiant vrifi figure aprs la mention OK. Dans le formulaire principal,
on indique que cette base est supprimer et quelle est fusionne avec celle d 6 (>6).
417
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
34
35
valeur soit lattribut ne contient pas la marque NULL. Les 207 modifications
de 38 correspondent la fusion de 70 80 mots-bases : chaque fusion donne lieu deux
modifications, lune dune ct de la ligne supprime, lautre du ct de la ligne augmente
, comme on le voit sur les deux premires lignes en ce qui concerne Mai 68. Lexamen du
rsultat met en vidence des incohrences rmanentes. Ainsi lentre d 176 absorbe-telle ses voisines 175 et 177. Pour 175, la valeur d _ a bien t mise jour 176,
ce nest pas le cas pour 177.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
38
39
comme supprimer et enfin que dans deux cas (gourou), le sens correspond en fait des
traits morphologiques.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
41
42
On dcide de retirer la base gourou destine rester dans les bases consolides le
sens nm. Par ailleurs, pour les bases dont le sens nquivaut pas la marque NULL, on
choisit, via une requte Mise jour, de donner lattribut la valeur de lattribut
concatne la chane ; et la valeur prcdente de lattribut .
43
Les deux crans qui suivent montrent la transformation opre. La concatnation est particulirement claire pour la ligne turlupin.
44
420
45
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
46
vers
.
47
421
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
48
49
50
422
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
53
54
423
Il reste nommer cet attribut, le doter dun type, le documenter. On sauvegarde la structure ainsi modifie.
57
Il faut donner donner ces nouveaux attributs la valeur quils ont dans la table
.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Les deux tables partagent maintenant les mmes identifiants pour les drivs, lattribut
tant la cl primaire de la table et la cl trangre de la table .
On tablit une jointure de type 1 n entre les tables et sur lattribut
partag .
60
424
On voit en 61 un exemple de deux drivs distincts qui sont fusionner : ils partagent la
mme base et, sauf erreur, ne diffrent que par leur catgorie, ( ) dans un cas, absente
dans lautre.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
61
(
On voit en 62 les deux drivs delaruesque, qui ont mme base, mais lun est tiquet
), ltiquette de lautre est absente.
62
confirme le constat.
63
Les corrections sont alors portes. Le deuxime driv est marqu comme supprimer.
On indique quil fusionne avec le prcdent, et quinversement ce dernier accueille la ou les
attestation(s) qui en dpendai(en)t. Lattestation rattache au second driv est maintenant
rattachable au premier, grce au changement de valeur de lattribut .
64
425
65
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
revenir sur la table pour vrifier si ces mots-bases partie du discours absente
peuvent effectivement tre supprimes ;
pour les attestations des drivs dont la base peut effectivement tre supprime, les
rattacher au driv fait sur lautre base (celle o la partie du discours est prsente).
Les crans suivants illustrent le problme et sa solution.
Lexamen des bases Twin manifeste la discordance de catgorie. On marque la base sans
catgorie comme supprimer.
67
La table Derives_tmp contient au moins 6 autres exemples de cette situation, qui sont
dtaills dans les crans qui suivent.
426
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
427
69
70
71
72
73
74
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
75
En regardant les lignes correspondantes, on constate que le driv qui va tre conserv,
la diffrence de ceux marqus supprimer dont les attestations lui seront rattaches, ne
dispose pas de la marque (pour vieux).
76
On lui ajoute cette marque.
77
On cre alors une requte Mise jour qui ajoute avant la valeur de lattribut et
spare de lui par la chane , la valeur de lattribut , quand cet attribut ne porte pas la
marque NULL.
78
428
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
79
la table Derives_tmp
. Il
80
81
429
82
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La valeur de lattribut
3.3. Examiner les attestations
Il sagit simplement de donner la mesure des vrifications et transformations consentir.
Nous ne ferons en effet quesquisser cette dernire tape, dont la finition demanderait trop de
temps.
3.3.1. Cration dune table temporaire des attestations
Sur le modle suivi pour les bases comme pour les drivs, on cre une table
Une manire de faire est de copier la table via un clic droit
sous un
nouveau nom, puis de supprimer les attributs inutiles.
430
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
85
La table rsultant comprend alors les attributs suivants hrits de la table Esque_tmp :
. On ajoute deux attributs : ,
pour noter les modifications apportes une attestation, , boolen, ayant pour
valeur par dfaut .
La requte :
86
permet de reprer un nombre non ngligeable de doublons. En dehors des 362 contextes
vides , on compte 26 contextes prsents pour lessentiel 2 fois. Mais un contexte non vide
totalise 4 occurrences. . .
87
On sauvegarde cette requte pour pouvoir faire une jointure avec la table rsultante et
examiner en dtail les attestations redoubles. La premire tentative
431
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
88
choue dans la mesure o lon cherche effectuer une jointure sur des attributs de type
Memo, ce qui nest pas possible, comme le montre le message derreur :
89
Une approximation est alors de faire une jointure sur lgalit des 50 premiers caractres
de lattribut des deux tables :
90
La feuille de donnes produite :
91
pousse regarder de plus prs les situations. ct dattestations partageant un mme identifiant de driv, on en trouve dautres dont les drivs diffrent.
Lorsque lidentifiant diverge, il sagit le plus souvent dune attestation qui conjoint plusieurs drivs et qui est donc lgitimement rpertorie sous chacun deux.
432
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
92
o il sagit vraiment dune mme citation, obtenue dans un cas via le TLF. On rencontre
galement des rcoltes effectues automatiquement sur le Web quelques mois dintervalle
et qui ne diffrent que par la date de rcolte. Cest le cas des attestations 3026 et 4181, par
exemple, ou encore de lexemple suivant :
93
3.3.3. Cohrence des datations
Lorsquon extrait les attributs
et
:
94
on constate que ce dernier attribut, dans les 88 fois o il ne correspond pas la marque NULL,
a des valeurs trs varies :
av. (60 o. + 14 variantes av) ce qui signifie probablement que lattestation est antrieure la
date forme par les trois autres attributs (il sagit dailleurs le plus souvent dun simple
millsime, jour et mois ayant alors pour valeur 0, signe conventionnel de non rponse) ;
v. (6 o.) sans doute comme vers, comme marque dapproximation ;
433
? (2 o.) le doute est peut-tre plus fort que dans le cas prcdent ;
s. (2 o.) associ un nombre comme 16 ou 17 comme valeur d renvoie possiblement
sicle (mais on trouve galement . comme valeur d ) ;
web enfin (2 o.) sans que le sens vis ici soit clair.
Cet attribut serait recoder de manire plus cohrente.
3.3.4. Origine des attestations
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La premire fonction est un renvoi un inventaire (Bjrkman), la seconde indique que lattestation figure galement dans le DSA (Dictionnaire de San-Antonio). Il serait plus logique de
supprimer cet attribut et de redistribuer les rares informations quil consigne dans lattribut
origine dment transform (cf. supra).
Une premire tape consiste crer une copie de la table , sous le nom de
. Une premire requte suppression permet dliminer toutes les lignes pour
lesquelles lattribut vaut :
96
434
97
On modifie alors la structure de cette table pour laguer les colonnes qui ne sont pas
pertinentes :
.
,
copie au dpart de
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
98
On lague les attributs
99
et
Mme si la base de donne
nest pas une version entirement remanie
de , loin sen faut, on entrevoit cependant, en 101 , le rsultat vis. Dans le cas
prsent, la base BD a deux drivs, BDesque et bdesque, qui ont chacun une attestation.
435
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
101
5. Bilan
Une srie de constats lissue de cette restructuration des donnes de la table pour
progresser vers une vritable base de donnes, articulant des tables consacres aux diffrentes informations pertinentes pour le domaine.
En premier lieu, reprendre et rorganiser une base de donnes est une opration consommatrice en temps et en nergie. Les manipulations de ce chapitre reprsentent au bas mot
deux semaines de travail, en particulier en raison des nombreuses vrifications manuelles
ncessaires.
Par ailleurs, les rsultats sont tout le moins hasardeux. Il reste trs certainement de
nombreuses scories dans les tables de la nouvelle base de donnes. En outre, partir du
moment o cette restructuration a t effectue sans consultation des auteurs de la table
initiale , les incomprhensions et erreurs dinterprtation dans les attributs comme dans
leurs valeurs ne sont pas exclure.
On a constat, au fil du travail, de mauvaises dcisions initiales qui ont compliqu les
tapes ultrieures. Cest le cas de la dcision de garder ? comme une des catgories possibles
des bases ou des drivs.
Pour finir sur une touche dhumour, autant dire, au vu du cot en temps et de la qualit
incertaine de la rorganisation dune base de donnes pr-existante, quil vaut nettement
mieux commencer par analyser soigneusement le problme, en chercher une modlisation
correcte en termes dentits et dassociations et ensuite en fournir une ralisation effective
pour un SGBD dtermin. . .
436
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE XIII
L
Une base de donnes est un maillon dans une chane de traitements possibles. On est donc
amen changer des informations entre une base de donnes et dautres logiciels (ventuellement dautres SGBD que celui employ pour la base de donne manipule). Il est donc ncessaire dimporter des donnes ou den exporter.
Ces changes entre logiciels supposent un accord sur les formats employer. Par
ailleurs, ils ncessitent souvent de remodeler les donnes pour faciliter leur usage par les
logiciels viss.
1. Jeux de caractres
La manipulation de donnes lectroniques continue rserver de mauvaises surprises,
par exemple lorsque des courriels prsentent, sans raison apparente, de curieux caractres,
c
c de corpus. La relecture sous
comme dans lexemple suivant : Question de repr
sentativit
Unix/Linux de la fiche 62 de Prma : Petit bb trs calme, passif de la mme fiche compose sous MacOS donnerait : Petit b]b] tr]s calme, passif (le caractre ] symbolise un caractre non visualisable sous Unix/Linux). On constate que les caractres accentus ne sont pas
bien reprsents. De tels dcalages sexpliquent par un dsaccord sur le codage de linformation. Unix/Linux et MacOS nutilisent pas exactement le mme jeu de caractres. Les lettres
non accentues sont les mmes, mais les lettres accentues et la signalisation dun passage
la ligne diffrent. La reprsentation HMTL de la mme fiche est : Petit bé ;bé ;
trè ;s calme, passif . Les caractres accentus sont reprsents par des noms symboliques ou entits (egrave pour un e avec un accent grave, eacute pour un e avec un accent
aigu), noms reprables leur encadrement par lesperlute (&) et le point-virgule ( ;). La situation tait nagure encore plus dlicate quand il sagissait de faire coexister dans un mme document des systmes dcriture diffrents (langue morte comme le grec, Alphabet Phontique
International API, etc.). Il fallait recourir des polices spcifiques et lies une plateforme
437
donne, ce qui fragilisait les exports et les partages. Lvolution des jeux de caractres change
la donne.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Au niveau le plus lmentaire en effet, des donnes sont une suite de caractres. Ces
caractres sont eux-mmes cods par une suite de 0 ou 1, ou bits (binary digit). Une suite
de 7 bits permet de coder 27 caractres, soit 128 caractres, une suite de 8 bits (un octet)
28 256 caractres et ainsi de suite. Lentre dans lre numrique dun nombre croissant de
langues, vivantes ou mortes, a conduit augmenter progressivement le nombre de caractres
encoder, et partant, la taille ncessaire cet encodage.
Lorigine anglo-saxonne de linformatique labsence de caractres accentus en anglais a
amen utiliser au dpart un ensemble de caractres limit (128 positions les 32 premiers
caractres sont des caractres de contrle, non imprimables) : lASCII (American Standard
Code for Information Interchange), devenu en 1963 la norme ISO 646. ISO (International Organization for Standardization) est linstitution qui fixe des normes internationales pour faciliter
les changes intellectuels, scientifiques, techniques et conomiques entre pays. Il regroupe
les organismes de normalisation nationaux (pour la France, lAFNOR, Association Franaise
de Normalisation).
Ltape suivante a t le dveloppement dun ensemble de normes sur 8 bits (256 positions)
pour rendre compte des diffrentes langues europennes. Pour lEurope de lOuest, il sagit
dISO-LATIN-1 (ou ISO-8959-1). Pour rester compatible avec lASCII, les 128 premiers caractres dISO-LATIN-1 sont identiques ceux de lASCII (qui en est donc un sous-ensemble).
Cest le jeu de caractres par dfaut pour Windows. , et ny figurent pas, si bien quils
noccupent pas la mme position sous Unix/Linux et sous Windows.
Ltape actuelle, depuis 1991, est celle dUnicode. Cette nouvelle norme vise disposer
dun encodage unique couvrant toutes les langues et tous les systmes dcriture, anciens
ou modernes (lAlphabet Phontique International est intgr Unicode). Unicode est devenu
lencodage interne de nombreux langages de programmation (Java, Perl, Python) ainsi que
lencodage par dfaut des documents XML. La version de 2003 (4.0) dUnicode reprsente
96 382 caractres diffrents (dans un espace permettant den recevoir 1 114 112). Unicode
spare nettement la notion de caractre, considr comme la plus petite unit ou composante
signifiante du langage crit (lettres, mais aussi signes de ponctuation, symboles techniques,
units de mesure, radicaux didogrammes, etc.) et le glyphe, cest--dire la reprsentation
visuelle du caractre. Un caractre peut correspondre plusieurs glyphes, comme pour certains caractres arabes dont la forme diffre selon la position, initiale, mdiane ou finale dans
le mot. Un glyphe inversement peut tre partag par des caractres diffrents (le glyphe est
utilis la fois pour lapostrophe et pour le guillemet simple droit) ou correspondre plusieurs
caractres, comme dans le cas des ligatures. Cest le cas aussi des moticnes smileys dans
les courriels o une combinaison de caractres, par exemple :-) ou :), donne naissance
un mini-visage souriant ou perplexe, comme :
A chaque caractre est associ un certain nombre de proprits, par exemple la directionalit (de droite gauche en hbreu, de haut en bas en japonais), les combinaisons, etc. Ces
proprits permettent aux programmes utilisant Unicode de trier, rechercher, substituer, etc.
Diffrentes formes dencodage existent pour stocker Unicode : UTF-32, UTF-16 et UTF-8. En
UTF-8, le code dun caractre peut occuper un nombre variable doctets.
438
La gnralisation dUnicode va diminuer progressivement les mauvaises surprises mentionnes en dbut de section. Elle est fondamentale pour la gestion harmonieuse du multilinguisme 1 . Il reste ncessaire en attendant de pouvoir transcoder dun jeu de caractres plus
ancien vers un autre, en particulier Unicode.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le fichier prsente les 246 127 mots de la partie utilise de Frantext. Cidessous un extrait de 10 lignes dont la premire contient un mot en esque :
alibabesque 1 0.03
alibert 17 0.54
alibi 120 3.82
alibis 24 0.76
alibise 1 0.03
aliboron 2 0.06
1
M. Jacobson, 2004, Corpus oraux en linguistique de terrain , TAL, vol. 45, n 2, p. 6388.
439
alibour 2 0.06
alicante 10 0.32
alice 316 10.07
alicia 11 0.35
Les trois colonnes perceptibles contiennent les informations suivantes :
1. les mots prsents dans Frantext ;
2. leur frquence brute dans Frantext (textes de Frantext publi aprs 1950 interrogs en
avril 2000 ce qui constitue un corpus de 31,39 millions de mots) ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3. leur frquence par million doccurences (frquence brute divise par 31,39).
Si lon visualise le mme extrait sous Word en demandant la visualisation des caractres
invisibles, on obtient un rsultat proche de :
alibabesque10.03
alibert170.54
alibi1203.82
alibis240.76
alibise10.03
aliboron20.06
alibour20.06
alicante100.32
alice31610.07
alicia110.35
La flche vers la droite symbolise un caractre qui autrement ne se distingue pas visuellement de lespace, la tabulation. La marque symbolise le changement de ligne.
Pour des raisons historiques, le changement de ligne nest pas ralis de la mme manire
selon les systmes dexploitation. Il utilise ou combine les deux caractres qui correspondent
deux oprations distinctes sur les machines crire mcaniques :
1. newline, abrg en \n, lobtention dune nouvelle ligne par mouvement du rouleau sur
lui-mme ;
2. carriage-return, abrg en \r, ou retour-chariot, le retour du chariot vers la gauche.
La situation est la suivante :
Systme dexploitation
Linux/Unix
Mac OS
Windows
alicia110.35\r\n. . .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le fichier en question relve de ce qui est appel un format dlimit, ce qui abrge format
dlimit par des caractres spcifiques. Cela signifie que les colonnes sont spares par un
caractre donn, qui ne peut donc figurer dans les valeurs des colonnes. Le caractre tabulation est un bon candidat comme dlimiteur, puisquil na aucune raison a priori de figurer
dans les valeurs dune colonne. Les lignes sont galement spares, en gnral par le ou les
caractre(s) qui indiquent un changement de ligne.
On rencontre parfois la mention fichier csv pour comma separated values, cest--dire pour
un fichier dont les valeurs sont spares par des virgules. Les fichiers csv taient souvent employs pour des donnes comptables dans lesquelles les valeurs numriques ne comportaient
pas de virgule mais employaient le point comme sparateur dcimal. Par extension, et abus
de langage, lexpression format csv est parfois employe comme synonyme de format dlimit,
alors quelle en constitue une spcialisation (un hyponyme).
2.2. Importation
Pour importer un fichier dlimit, on commence par crer la table destine accueillir ces
informations. Elle doit comporter autant de colonnes que le fichier dlimit, les types de ces
colonnes doivent tre compatibles avec ceux du fichier. Dans lexemple choisi, on cre par
exemple la table suivante :
Une instruction spcifique lit le fichier dlimit ligne ligne et cre chaque fois une
nouvelle ligne dans la table, dont les valeurs sont celles de la ligne correspondante du fichier
dlimit. Elle est de la forme :
LOAD DATA LOCAL INFILE
" < f i c h i e r dlimit > "
INTO TABLE <table d accueil > ;
Par dfaut, les colonnes sont dlimites par la tabulation, les lignes par le caractre \n et
la contre-oblique (\) permet dchapper les caractres spciaux.
Pour lexemple choisi, on doit indiquer que le changement de ligne est celui de Windows,
la suite du caractre \r et du caractre \r, do lajout de la mention LINES. . . :
LOAD DATA LOCAL INFILE
" /home/habert/FrantextAvr . t x t "
INTO TABLE FrantextLexique
LINES TERMINATED BY \r\n ;
441
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
frequence
1
360
1
431
1
2
1
1
2
1
1
1
1908
1970
1
2
1
1
2
2
proportion
0.03
11.47
0.03
13.73
0.03
0.06
0.03
0.03
0.06
0.03
0.03
0.03
60.78
62.76
0.03
0.06
0.03
0.03
0.06
0.06
Un premier examen des 192 lignes restant dans la table montre quil reste
des instrus et que lexpression rgulire ayant servi laguer tait trop laxiste. Les mots
qui commencent avec une majuscule commencent avec "*". Les chanes commenant par "%"
indiquent les symboles.
On repre par ailleurs dune part des adverbes forms sur des adjectifs en -esque, dautre
part que cette liste est une liste doccurrences et non de lemmes : figurent les singuliers et les
pluriels. On isole dabord les lignes dont les graphies ne se terminent pas par , ou
SELECT
FROM FrantextLexique
WHERE graphie NOT REGEXP esques?$
AND graphie NOT REGEXP esquement$ ;
Le rsultat figure dans le tableau 135 p. 442. On constate quil sagit bien dintrus liminer, do la requte :
DELETE FROM FrantextLexique
WHERE graphie NOT REGEXP esques?$
AND graphie NOT REGEXP esquement$ ;
Lexamen des 172 lignes restants fait apparatre des formes douteuses. On vrifie leur
prsence dans la table :
442
SELECT
FROM esque
WHERE derive IN ( besque , esques , fiesque , fresque , fresques , kesque ,
nesque , perplesque , poesque , presque , quesques , vesque , vesque ,
lebesque , levesque , lvesque ) ;
Seule poesque, form sur Edgar Poe, apparat. On supprime donc les autres :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Quand la graphie sachve par esques, on ne garde que les caractres jusquavant le s final
(premier WHEN), lorsquil y a une toile en dbut de graphie, on la remplace par la chane vide
(second WHEN). Dans les autres cas, on laisse la graphie telle quelle (ELSE). Le tableau 136
p. 444 donne un aperu des rsultats. Les lemmes diffrant de la forme de dpart figurent sur
une ligne grise.
On utilise un principe similaire pour crer la vole une table des lemmes, avec frquence
et proportion. On regroupe sur les lemmes produits et on ajoute les frquences et proportions
au sein dun regroupement (rsultat au tableau 137 p. 445) :
CREATE TABLE lemmeFrantext_frequence_proportion
(SELECT
CASE
WHEN graphie REGEXP esques$
THEN SUBSTRING ( graphie , 1 , LENGTH( graphie ) 1)
WHEN graphie LIKE % THEN REPLACE( graphie , , )
ELSE graphie
END AS lemme,
COUNT( ) AS formes
SUM( frequence ) AS frequence ,
SUM( proportion ) AS proportion
FROM FrantextLexique
GROUP BY
CASE
WHEN graphie REGEXP esques$ THEN SUBSTRING ( graphie , 1 , LENGTH(
graphie ) 1)
443
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
graphie
gracianesque
picaresque
churrigueresque
fallacesque
clownesques
grotesquement
goeringesque
tintamarresque
vaticanesque
simonesque
dantonesque
donquichottesques
chewinggumesque
arabesques
diablesque
hugolesque
zombiesque
*demillesque
karabesque
zigantesque
babelesque
frequence
2
8
1
1
1
18
1
5
1
1
1
1
1
99
1
1
1
1
1
1
1
proportion
0.06
0.25
0.03
0.03
0.03
0.57
0.03
0.16
0.03
0.03
0.03
0.03
0.03
3.15
0.03
0.03
0.03
0.03
0.03
0.03
0.03
et
Elle montre que les lemmes les plus frquents dans Frantext ne sont pas pour autant fortement reprsents dans la table . On entrevoit le dessein qui a prsid la constitution de
la table : multiplier les types de drivs distincts, plutt que les occurrences dun mme
driv, pour pouvoir tirer des conclusions sur les modes de formation partir dun ventail le
plus ouvert possible. Lcart de taille entre les deux tables est en tant que tel loquent : 115
drivs diffrents pour et prs de 3 500 pour esque.
Une jointure externe donne accs aux lemmes qui ne figurent pas parmi les drivs de la
table :
444
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
graphie
alibabesque
animalesque
animalesques
arabesque
arabesques
aubignesque
aviationnesque
babelesque
barbaresque
barbaresques
barytonesques
frequence
1
1
1
88
99
1
1
1
8
20
1
proportion
0.03
0.03
0.03
2.80
3.15
0.03
0.03
0.03
0.25
0.64
0.03
lemme
alibabesque
animalesque
arabesque
aubignesque
aviationnesque
babelesque
barbaresque
barytonesque
formes
1
2
2
1
1
1
2
1
frequence
1
2
187
1
1
1
28
1
proportion
0.03
0.06
5.95
0.03
0.03
0.03
0.89
0.03
SELECT lemme,
frequence ,
proportion
FROM lemmeFrantext_frequence_proportion
LEFT OUTER JOIN esque
ON lemme = derive
WHERE derive IS NULL ;
On constate que tous les lemmes de Frantext ne sont pas prsents dans . On note dans
les rsultats du tableau 139 p. 447 des drivs de deuxime niveau, des adverbes sur des
adjectifs en -esque : chevaleresquement, grotesquement, pittoresquement, mais galement des
formes douteuses : fiesque, levesque, voire latudesque.
On notera que dans les deux requtes prcdentes, il y a un dcalage entre les deux tables,
puisque que les drivs de la table comportent une catgorie tandis que ceux de la table
non.
445
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Driv
gigantesque
romanesque
pittoresque
grotesque
arabesque
burlesque
mauresque
chevaleresque
livresque
barbaresque
simiesque
soldatesque
titanesque
picaresque
rocambolesque
dantesque
carnavalesque
clownesque
gargantuesque
pdantesque
tudesque
donjuanesque
cauchemardesque
tintamarresque
lphantesque
moliresque
prudhommesque
plateresque
pharaonesque
ubuesque
goyesque
grottesque
donquichottesque
funambulesque
ingresque
truandesque
animalesque
canularesque
cassandresque
faunesque
fourmillesque
vaudevillesque
caravagesque
courtelinesque
moresque
gracianesque
guignolesque
botticellesque
chaplinesque
aviationnesque
barytonesque
ctxtes
4
8
4
4
4
2
5
7
3
4
6
5
6
2
5
7
5
5
3
3
2
2
6
4
7
3
3
2
5
3
3
2
1
5
3
4
3
3
2
5
3
4
4
3
3
2
4
2
6
1
1
frq.
461
319
311
281
187
77
61
50
46
28
20
19
17
13
8
8
8
8
7
7
7
7
6
6
5
5
4
4
4
4
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
1
1
prop.
14.69
10.17
9.91
8.95
5.95
2.46
1.95
1.59
1.47
0.89
0.64
0.61
0.54
0.41
0.25
0.25
0.26
0.25
0.22
0.22
0.23
0.22
0.19
0.19
0.16
0.16
0.13
0.12
0.13
0.13
0.09
0.09
0.09
0.10
0.09
0.09
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.06
0.03
0.03
Driv
cafardesque
charlatanesque
chichinesque
crapaudesque
gionesque
himalayesque
hugolesque
lonardesque
mirlitonesque
palestiniesque
perrichonesque
pluchesque
sardanapalesque
seicentesque
taglionesque
turlupinesque
vampiresque
zurbaranesque
raphalesque
dantonesque
fantmastesque
kagbesque
zingaresque
alibabesque
babelesque
bignolesque
canovesque
diablesque
farcesque
footballesque
gendarmesque
giottesque
hippopotamesque
poesque
rembranesque
sauvagesque
statuesque
vaticanesque
zombiesque
churrigueresque
giorgionesque
boulardesque
simonesque
cyranesque
chewinggumesque
goeringesque
loyolesque
cornichonnesque
clochemerlesque
scoutesque
ctxtes
2
4
1
2
3
5
3
1
3
1
1
1
3
1
1
3
3
1
2
3
1
1
1
1
1
1
1
1
4
3
5
4
2
1
3
1
3
5
5
3
2
1
3
4
1
1
1
1
3
1
frq.
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
prop.
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
0.03
446
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
frequence
1
1
2
2
1
18
1
1
1
1
2
1
4
1
proportion
0.03
0.03
0.06
0.06
0.03
0.57
0.03
0.03
0.03
0.03
0.06
0.03
0.12
0.03
le caractre de sparation entre les colonnes est arbitraire (hormis le fait quil ne doit
bien sr pas figurer dans le contenu des colonnes) ;
le passage dune ligne lautre dpend des choix du systme dexploitation sous-jacent
et diffre donc selon le systme dexploitation.
Autant dire que la transmission par de tels formats est intrinsquement fragile : rien
nempche un dcalage entre lexport et limport et donc des difficults dans la rutilisation
des donnes.
Lutilisation de formats structurs relevant de XML a pour objectif de disposer de conventions plus fermes et plus aisment changeables. On va les voir loeuvre dans lexport de la
table vers XML, sous Access comme sous MySQL.
On choisit alors la fois le dossier et le nom de destination et le format cible, en loccurrence XML.
447
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On doit dterminer si lon veut sous format XML les donnes seulement, ou bien galement le modle de document, voire les indications de prsentation. On sen tient ici aux deux
premiers choix, qui sont les choix par dfaut :
3
au format XML.
4
dataroot
Infirmieres_princeps
Infirmieres_princeps
...
id
age
etudes
diplome
anciennete
id
age
etudes
diplome
41
26
BEPC
73
29
BAC
F IGURE 7 Table
anciennete
service
1.5
Jour
et enchssements
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
dataroot
Infirmieres_princeps
Infirmieres_princeps
...
id
age
etudes
diplome
anciennete
id
age
etudes
diplome
41
26
BEPC
73
29
BAC
F IGURE 8 La table
anciennete
service
1.5
Jour
comme arbre
fait rfrence un
449
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
450
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Une DTD permet de formuler une telle grammaire. Un schma comme celui supra ajoute
des contraintes supplmentaires, par exemple sur les valeurs admissibles en un endroit
donn. Il est ainsi prcis qu doit tre un entier, et un entier long,
un reel, et une chane de 255 caractres maximum.
Cocher dTransmettree aboutit dans les faits sauvegarder dans un fichier. Il y a transmission parce que Phpmyadmin transmet effectivement les requtes la base de donnes et leurs
rsultats.
451
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On se voit demander si lon souhaite ouvrir le fichier rsultant ou au contraire louvrir avec
une application.
8
Le fichier rsultant est de la forme :
452
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On remarque la proximit avec lexport vers XML sous Access. La premire ligne indique,
de la mme manire, que ce qui suit est un document XML rpondant la version 1.0 de
ce standard et que les caractres relvent du jeu UTF-8. La racine du document porte ici le
nom de la base de donnes dont elle est extraite (BDL). Chaque ligne a pour racine le nom
de la table, infirmieres_princeps. Chaque colonne devient un sous-arbre ayant le nom de
la colonne et dominant sa valeur. Pour linfirmire 41, la valeur NULL pour la colonne service
nest pas reprsente, le sous-arbre correspondant ne figure pas dans les enfants du noeud
infirmieres_princeps en cause.
En dehors du nom diffrent pour les lments ( vs. ) et
pour la racine de larbre ( vs. ), on note que la version Phpmyadmin ajoute des
commentaires entre la premire ligne du document et la racine de larbre. Ces commentaires,
dlimits respectivement par
et donnent des renseignements sur lengendrement de
cette table (version de MySQL employe, date, etc.). On remarquera des caractres bizarres
, lis au dcalage entre le jeu de caractres de Phpmyadmin (UTF-8) et celui utilis pour ce
livre (ISO-Latin1).
.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
On constate que les caractres accentus de la premire fiche sont correctement rendus.
10
454
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
11
Ce rsultat rassurant est moins vident quil ny parat. Si lon examine par exemple lun
des lements de , on obtient :
<moral_infirmiere>plutt bien</moral_infirmiere>
Pour son correspondant de
,
on obtient :
<moral_infirmiere>plutt bien</moral_infirmiere>
o le a un rendu curieux. On constate que lditeur utilis pour composer ces pages
utilise le jeu de caractres Latin1 et quil ne sait pas rendre les caractres accentus du jeu
de caractres UTF-8. A contrario, le navigateur Firefox utilise les indications de la premire
ligne du document XML pour reprsenter les caractres en fonction du jeu dont ils relvent.
Limport de chacune de ces deux tables en XML sous Access suppose de choisir dFichier |
Donnes externes | exportere :
455
13
On choisit de considrer les fichiers XML en jouant sur le menu droulant permettant de
choisir les types de fichiers importer :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
14
Aprs avoir choisi , un menu spcifique apparat, dont les options permettent de choisir dimporter structures et donnes seulement (choix par dfaut), ou
la structure seule, ou dimporter dans une table existante :
15
Longlet dTablese de la fentre de navigation dans la base montre que la table a t importe.
Elle porte par dfaut le nom des lments enchssant les colonnes, cest--dire le nom de la
table de dpart, ici :
456
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
16
,
en ISO-Latin1, ont
17
Lorsquon examine cette table, on voit que les caractres, au dpart en UTF-8, ont galement t bien interprts et donc quAccess, tout comme Firefox, utilise la premire ligne du
document XML pour savoir comment interprter les caractres du document.
19
457
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
<forme>,.<informations catgorielles>
comme dans :
prmaturissime,.N :ms :fs
ou encore en :
<forme>,<lemme>.<informations catgorielles>
comme dans :
prmaturissimes,prmaturissime.N :mp :fp
Les informations catgorielles pour prmaturissime indiquent quil sagit dun nom, soit
masculin singulier ( ) soit fminin singulier ( ). Pour prmaturissimes, le lemme est prmaturissime et cest un nom soit masculin pluriel soit fminin pluriel.
Lobjectif est dans un premier temps dinsrer toutes les lignes du DELA dans une table
provisoire, puis dliminer toutes les formes qui ne contiennent pas le motif .*esque.* et enfin
dessayer dextraire des entres restantes les informations ncessaires pour rapprocher la
table finale des tables attendues pour mmoriser les attestations lexicographiques de mots en
-esque.
MySQL
4.2. Importation
Une premire tape consiste crer une table provisoire,
entres du DELA :
458
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
entree
accouchement prmatur,.N+NA+z1 :ms
enfant prmatur,.N+NA+Hum+z1 :ms
enfants prmaturs,enfant prmatur.N+NA+Hum+z1 :mp
fin prmature,.N+NA+E01+z1 :fs
mort prmature,.N+NA+z2 :fs
prmaturation,.N :fs
prmaturations,prmaturation.N :fp
prmaturissime,.N :ms :fs
prmaturissimes,prmaturissime.N :mp :fp
prmaturit,.N+z2 :fs
prmaturits,prmaturit.N+z2 :fp
prmatur,.N+z1 :ms
prmatur,.A+z1 :ms
prmature,prmatur.N+z1 :fs
prmature,prmatur.A+z1 :fs
prmatures,prmatur.N+z1 :fp
prmatures,prmatur.A+z1 :fp
prmaturment,.ADV+VADV+z1
prmaturment,.ADV+PADV+z1
prmaturment,.ADV+z1
prmaturs,prmatur.N+z1 :mp
prmaturs,prmatur.A+z1 :mp
vieillissement prmatur,.N+NA+z1 :ms
on dtruit toutes les entres qui ne contiennent pas le motif .*esque.* ou qui contiennent une
espace, soit 792 081, par la requte :
DELETE FROM dela_tmp
WHERE entree_depart NOT REGEXP esque
OR entree_depart REGEXP ;
On remarque au passage que ces entres supprimes comprennent probablement des adjectifs en -esque qui ne sont pas des ralisations phmres mais qui sont au contraire entrs dans lusage : barbaresque, mauresque, romanesque, livresque, burlesque, rocambolesque,
459
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
TABLEAU 141 E SQUE : mots en plusieurs mots avec esque dans le dictionnaire DELA
entree_depart
Etat barbaresque,.N+NA+HumColl :ms
amour romanesque,.N+NA+z1 :ms
aventure rocambolesque,.N+NA+E01+z2 :fs
aventures rocambolesques,aventure rocambolesque.N+NA+E01+z2 :fp
cration romanesque,.N+NA+z2 :fs
culture livresque,.N+NA+z1 :fs
cultures livresques,culture livresque.N+NA+z1 :fp
cycle romanesque,.N+NA+z2 :ms
cycles romanesques,cycle romanesque.N+NA+z2 :mp
dossier rocambolesque,.N+NA+Conc+E01 :ms
esprits romanesques,esprit romanesque.N+NA+z2 :mp
fentre mauresque,.N+NA+Conc :fs
fiction romanesque,.N+NA+z1 :fs
fictions romanesques,fiction romanesque.N+NA+z1 :fp
film burlesque,.N+NA+Conc+z2 :ms
forme romanesque,.N+NA+z1 :fs
formes romanesques,forme romanesque.N+NA+z1 :fp
fresque historique,.N+NA+Conc+z1 :fs
fresque murale,.N+NA+Conc+z2 :fs
fresques historiques,fresque historique.N+NA+Conc+z1 :fp
genre romanesque,.N+NA+z1 :ms
grande fresque,.N+AN :fs
grandes fresques,grande fresque.N+AN :fp
histoire rocambolesque,.N+NA+E01+z1 :fs
histoires rocambolesques,histoire rocambolesque.N+NA+E01+z1 :fp
illusion romanesque,.N+NA :fs
langage romanesque,.N+NA :ms
littrature chevaleresque,.N+NA :fs
littrature romanesque,.N+NA+z2 :fs
oeuvre romanesque,.N+NA+z1 :fs
oeuvres romanesques,oeuvre romanesque.N+NA+z1 :fp
ou presque,.ADV+PJC+z1
parodie burlesque,.N+NA+z2 :fs
peintre de fresques,.N+NDN+Hum :ms :fs
personnage romanesque,.N+NA+Hum+z2 :ms
pirate barbaresque,.N+NA+Hum :ms
pirates barbaresques,pirate barbaresque.N+NA+Hum :mp
pour presque rien,.ADV+PAC+z1
posie burlesque,.N+NA :fs
production romanesque,.N+NA+z2 :fs
repas gargantuesque,.N+NA+E01+z1 :ms
roman picaresque,.N+NA+Conc :ms
scne romanesque,.N+NA+z2 :fs
scnes romanesques,scne romanesque.N+NA+z2 :fp
structure romanesque,.N+NA+z2 :fs
style burlesque,.N+NA :ms
style mauresque,.N+NA+z2 :ms
technique romanesque,.N+NA+z2 :fs
temps romanesque,.N+NA+z2 :ms
texte romanesque,.N+NA+Conc+z2 :ms
thtre burlesque,.N+NA :ms
tortues mauresques,tortue mauresque.N+NA+Anl :fp
univers romanesque,.N+NA+z1 :ms
vaste fresque,.N+AN :fs
criture romanesque,.N+NA+z2 :fs
rudits livresques,rudit livresque.N+NA+Hum :mp
460
chevaleresque, gargantuesque, picaresque. Ces adjectifs comme les noms quils modifient renvoient souvent lart.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Exercice n 1
Les entres o la forme est galement le lemme sont celles qui rpondent aux conditions
de restriction suivantes :
. . . WHERE entree_depart REGEXP ,\\. ;
. . . WHERE entree_depart LIKE %,.% ;
et la sous-chane de
UPDATE dela_tmp
SET
lemme =
SUBSTRING ( entree_depart , 1 , LOCATE( " , " , entree_depart ) 1) ,
forme =
SUBSTRING ( entree_depart , 1 , LOCATE( " , " , entree_depart ) 1)
WHERE entree_depart LIKE %,.% ;
461
Le lemme ou la forme est la sous-chane de lentre qui part du dbut de lentre et qui
sarrte 1 caractre avant lendroit o se trouve la virgule.
Quand lentre relve du motif :
<forme>,<lemme>.<informations catgorielles>
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Les entres de dpart en esque du DELA ont t analyses pour extraire la forme et le
lemme. Il reste leur attribuer des catgories identiques, si possible, celles de E SQUE. Une
premire tape est celle du reprage du jeu dtiquettes employ pour cet ensemble dentres,
via la requte :
Le rsultat figure au tableau 142 p. 463. La comparaison avec les tiquettes des drivs
dans la table :
Catgorie du driv
?
a
adv
n
n?
nf
nfpl
nm
npl
v
vintr
o
134
3
4143
13
20
2
27
1
38
1
1
1
via la requte :
SELECT cat_derive AS Catgorie du driv ,
COUNT( ) AS o
FROM esque
GROUP by cat_derive ;
montre que 3 catgories sont pertinentes : a(djectif), adv(erbe) et n(om). Les mises jour et les
conditions de restriction sont aises formuler :
462
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
tiquette
A+XA :mp :fp
A+XA :ms :fs
A+z1 :mp :fp
A+z1 :ms :fs
A+z2 :fp
A+z2 :fs
A+z2 :mp :fp
A+z2 :ms :fs
A :mp :fp
A :ms :fs
ADV
ADV+z1
ADV+z2
N+z1 :fp
N+z1 :fs
N+z1 :mp
N+z1 :mp :fp
N+z1 :ms
N+z1 :ms :fs
N+z2 :fp
N+z2 :fs
N+z2 :mp :fp
N+z2 :ms :fs
N :fp
N :fs
N :mp
N :mp :fp
N :ms :fs
o.
2
1
19
19
2
2
19
19
22
22
5
3
5
2
2
1
1
5
1
3
3
1
1
2
2
1
1
1
UPDATE dela_tmp
SET
c a t e g o r i e = adv
WHERE entree_depart REGEXP [ . ] ADV ;
UPDATE dela_tmp
SET
categorie = a
WHERE entree_depart REGEXP [ . ] A [ : + ] ;
UPDATE dela_tmp
SET
categorie = n
WHERE entree_depart REGEXP [ . ] N [ : + ] ;
Le tableau 143 p. 464 le montre via un extrait, les entres en esque du DELA ont t reformates par des combinaisons relativement simples de motifs et doprations sur les chanes
de caractres de manire tre rapproches autant que ncessaire de la reprsentation employe par E SQUE.
Access
La table contenant des lemmes et non des flexions de drivs, on regroupe les formes
dun mme lemme dans une nouvelle table :
463
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
forme
Moresque
Moresques
arabesque
arabesques
aristophanesque
aristophanesques
barbaresque
barbaresque
barbaresques
barbaresques
burlesque
burlesque
burlesquement
burlesques
burlesques
calembouresque
calembouresques
camlonesque
camlonesques
cannibalesque
dictionnaire
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
DELA
464
categorie
n
n
n
n
a
a
n
a
n
a
n
a
adv
n
a
a
a
a
a
a
lemme
More
More
arabesque
arabesque
aristophanesque
aristophanesque
barbaresque
barbaresque
barbaresque
barbaresque
burlesque
burlesque
burlesquement
burlesque
burlesque
calembouresque
calembouresque
camlonesque
camlonesque
cannibalesque
entree_depart
Moresque,More.N+z2 :fs
Moresques,More.N+z2 :fp
arabesque,.N+z1 :fs
arabesques,arabesque.N+z1 :fp
aristophanesque,.A :ms :fs
aristophanesques,aristophanesque.A :mp :fp
barbaresque,.N+z2 :ms :fs
barbaresque,.A+z2 :ms :fs
barbaresques,barbaresque.N+z2 :mp :fp
barbaresques,barbaresque.A+z2 :mp :fp
burlesque,.N+z1 :ms
burlesque,.A+z1 :ms :fs
burlesquement,.ADV+z2
burlesques,burlesque.N+z1 :mp
burlesques,burlesque.A+z1 :mp :fp
calembouresque,.A+z1 :ms :fs
calembouresques,calembouresque.A+z1 :mp :fp
camlonesque,.A+z2 :ms :fs
camlonesques,camlonesque.A+z2 :mp :fp
cannibalesque,.A+z2 :ms :fs
Les 167 formes en -esque du DELA donnent naissance 92 lignes dans la nouvelle table.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
69 des 92 formes en -esque du DELA figurent dans la table esque (tableau 144 p. 466),
comme le montre la requte :
SELECT derive AS Driv ,
derive_POS AS POS ,
COUNT( ) AS c t x t e s ,
formes AS DELA
FROM esque_tmp AS e ,
lemmeDELA_categorie_nombreFormes AS d
WHERE derive = lemme
AND derive_POS = c a t e g o r i e ;
Une jointure externe permet disoler les 23 formes en -esque du DELA qui ne figurent pas
dans la table esque :
Lexamen du rsultat (tableau 145 p. 467) est instructif. On note dabord limportance des
drivs de deuxime niveau , les adverbes construits sur des adjectifs en -esque : 13 lemmes
sur 23. Par ailleurs, les formes maure et more, avec ventuellement une majuscule, adjectif et
nom, inclus dans un autre adjectif (hispano-moresque) regroupent 5 lemmes. Pour le DELA,
maure et more sont les lemmes respectivement de mauresque et moresque.
On peut par ailleurs, l encore via des jointures externes, isoler les mots propres chacune
des tables (tableau 147 p. 469) :
R2120
465
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Driv
arabesque
aristophanesque
barbaresque
burlesque
burlesque
calembouresque
camlonesque
cannibalesque
canularesque
caravagesque
carnavalesque
cauchemardesque
chaplinesque
charlatanesque
chevaleresque
churrigueresque
clownesque
dantesque
donjuanesque
farcesque
faunesque
feuilletonesque
feuilletonnesque
flandresque
funambulesque
gagesque
gargantuesque
gigantesque
gigantesque
giottesque
giottesque
grand-guignolesque
grotesque
grotesque
guignolesque
POS
n
a
a
a
n
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
n
a
n
a
a
n
a
ctxtes
2
4
3
1
1
1
5
4
3
3
4
6
6
4
6
2
5
7
2
4
4
2
1
1
4
1
3
3
1
2
2
3
2
2
4
DELA
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
2
2
2
2
3
2
Driv
hippopotamesque
humoresque
ingresque
livresque
madrigalesque
mauresque
mauresque
moliresque
moresque
moresque
niagaresque
nirvanesque
pittoresque
pittoresque
plateresque
prudhommesque
pdantesque
pruginesque
raphalesque
rembranesque
rocambolesque
romanesque
romanesque
rouletabillesque
sardanapalesque
simiesque
soldatesque
soldatesque
somnambulesque
titanesque
tudesque
ubuesque
vaudevillesque
lphantesque
POS
a
n
a
a
a
a
n
a
a
n
a
a
a
n
a
a
a
a
a
a
a
a
n
a
a
a
a
n
a
a
a
a
a
a
ctxtes
2
2
3
3
4
4
1
3
1
2
4
2
3
1
2
3
3
1
2
2
5
6
2
2
3
6
3
2
4
5
2
3
4
7
DELA
2
2
2
2
2
2
2
2
2
2
2
2
2
1
2
2
2
2
2
2
2
2
1
2
2
2
2
2
2
2
2
2
2
2
466
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Lemme
barbaresque
burlesquement
chevaleresquement
gigantesquement
grotesquement
grotesques
hispano-moresque
livresquement
maure
maure
mauresquement
michlangelesque
monalisesque
More
more
picaresque
pittoresquement
prudhommesquement
pdantesquement
rocambolesquement
romanesquement
soldatesquement
sultanesquement
POS
n
adv
adv
adv
adv
n
a
adv
a
n
adv
a
a
n
a
a
adv
adv
adv
adv
adv
adv
adv
DELA
2
1
1
1
1
1
1
1
2
2
1
2
2
2
2
2
1
1
1
1
1
1
1
R2121
SELECT DISTINCT f .lemme
FROM lemmeFrantext_frequence_proportion AS f
LEFT OUTER JOIN lemmeDELA_categorie_nombreFormes AS d
ON d . lemme = f . lemme
WHERE d . lemme IS NULL ;
Le dcalage en faveur des mots en -esque venant du corpus Frantext par rapport ce qui
figure dans le DELA, un rapport de 2 un, souligne la sous-estimation de ce type de mots
dans les dictionnaires de langue, et sa productivit dans lusage.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
TABLEAU 146 E SQUE : mots en -esque partags par Frantext (Lexique) et DELA
lemme
arabesque
barbaresque
burlesque
caravagesque
carnavalesque
cauchemardesque
chevaleresque
chevaleresquement
clownesque
dantesque
faunesque
gargantuesque
gigantesque
grotesque
grotesquement
guignolesque
ingresque
lemme
livresque
mauresque
moliresque
picaresque
pittoresque
pittoresquement
plateresque
prudhommesque
pdantesque
rocambolesque
romanesque
simiesque
titanesque
tudesque
vaudevillesque
lphantesque
BDL
infirmieres
...
...
infirmieres
id
age
etudes
diplome
anciennete
classe
_anciennete
service
29
BEPC
2.50
entre 1
et 5 ans
Jour
F IGURE 9 Table
infirmieres
en XML
<?xml version= " 1.0 " encoding= " utf 8" ?>
<BDL>
468
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
lemme
grottesque
himalayesque
hugolesque
kagbesque
karabesque
latudesque
levesque
loyolesque
lonardesque
mahonesque
mirlitonesque
palestiniesque
perrichonesque
pharaonesque
pluchesque
poesque
prudhonesque
rafinesque
sauvagesque
scoutesque
seicentesque
simonesque
statuesque
taglionesque
tintamarresque
truandesque
turlupinesque
vampiresque
vaticanesque
zigantesque
zingaresque
zombiesque
zurbaranesque
469
...
<infirmieres >
<id>2</id>
<age>29</age>
<etudes>3</etudes>
<diplome>BEPC</diplome>
<anciennete>2.50</anciennete>
<classe_anciennete>entre 1 et 5 ans</classe_anciennete>
< s e r v i c e>Jour</ s e r v i c e >
</ i n f i r m i e r e s >
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
...
</BDL>
La figure 9 p. 468 visualise larbre not en XML par les enchssements dlments, eux-mmes
dlimits par des balises ouvrante, entre chevrons, et fermante, o le nom de llment est
prcd dun chevron ouvrant et dune oblique, et suivi dun chevron fermant. Llment
domine des lments . Llment de lexemple domine lui-mme 7 lments :
, , , , ,
et . Llment prcde immdiatement
llment et prcde, immdiatement ou non, les lments , , , ,
et .
.
On notera quun document trait par XSLT comporte une racine additionnelle qui domine
llment racine du document XML originel. La racine du document XML est llment . Il
se trouve domin dans la figure 9 p. 468 par une racine supplmentaire, de nom / (oblique).
Cette racine supplmentaire se justifie par la ncessit de pouvoir traiter un arbre XML mme
lorsquon ne connat pas le nom de son lment racine. Il faut en quelque sorte pouvoir tenir
cet arbre par la racine .
Notre premire utilisation de XSLT vise produire, partir du document XML issu de la
table , un tableau HTML, visualisable avec un navigateur quelconque.
Les rgles XSLT ci-dessous sont groupes en un document XML de racine xsl:stylesheet.
Chaque rgle constitue un lment xsl:template dont lattribut match indique la cible, cest-dire la partie de larbre XML quelle transforme.
La premire rgle a pour cible la racine, loblique, du document XML trait par XSLT.
Lorsque cet lment est rencontr, la structure densemble dune page HTML est engendre :
la racine domine un noeud . Cet lment domine son tour un noeud h1, cest
-dire un titre de niveau 1 et un lment , cest--dire un tableau HTML. Un tableau
HTML est constitu dlments (pour table row, ligne de tableau), pour chaque ligne, qui
dominent eux-mmes des lments , pour chaque cellule. Lorsquest rencontre la racine
du document, est engendre une table au sein dun document HTML. Cette table comprend
une premire ligne, o chaque cellule reprsente un en-tte de colonne, en italiques, dans la
mesure o le texte au sein de la cellule est domin par un lment . Aprs cette premire
ligne, cette premire rgle fait appel une instruction XSLT xsl:applytemplates , qui indique
quil faut appliquer la descendance du noeud courant toutes les rgles pertinentes et intgrer
leur rsultat.
La deuxime rgle indique que la rencontre dun noeud doit dclencher lengen
drement dune nouvelle ligne, cest--dire dun lment HTML , qui va dominer le rsultat de
lapplication des rgles pertinentes en dessous .
Les trois dernires rgles sappliquent aux lments domins par un noeud
le document XML.
La rgle 3 sapplique un lment
fiant de linfirmire.
dans
470
. Elle engendre
La figure 10 p. 472 donne une reprsentation graphique de ces rgles. Pour chaque rgle,
on trouve gauche de la flche de rcriture en gras, larbre-cible dans le document XML, et
droite, le fragment darbre HTML engendr.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
<?xml version= " 1.0 " encoding= " utf8 " ?>
<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " >
<xsl:output method= " html " encoding= " utf8 " />
10
< ! R1 >
<xsl:template match= " / " >
<html>
<body>
<h1 a l i g n = " center " > I n f i r m i ères</h1>
< table border= " 1 " >
<tr>
<td>< i > I d e n t i f i a n t </ i ></td>
<td>< i >âge</ i ></td>
<td>< i >années d études</i ></td >
<td ><i > d i p l ôme</i ></td >
<td ><i >anciennet é</ i ></td >
<td ><i >classe d anciennet é</ i ></td>
<td>< i > s e r v i c e </ i ></td>
</ t r >
<xsl:applytemplates/>
</ table >
</body>
</html>
</xsl:template >
15
20
25
30
< ! R2 >
<xsl:template match= " i n f i r m i e r e s " >
< t r ><xsl:applytemplates/></ t r >
</xsl:template >
35
40
< ! R3 >
<xsl:template match= " id " >
<td><b><xsl:valueof select= " . " /></b></td>
</xsl:template >
471
R1
R2
html
infirmieres
body
<rsultat du
traitement des
sousarbres de
racine infirmieres>
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
tr
td
td
Iden
tifiant
...
tr
<rsultat du
traitement des
enfants du noeud
infirmieres>
table
td
i
ge
service
R5
R4
R3
td
etudes|
anciennete
td
align=
"right"
age|
diplome|
classe_
anciennete
x3
caractres4
x4
caractres5
x5
id
td
carac
tres3
F IGURE 10 Table
45
< ! R4 >
<xsl:template match= " age|diplome|classe_anciennete| s e r v i c e " >
<td><xsl:valueof select= " . " /></td>
</xsl:template >
50
55
< ! R4 >
<xsl:template match= " etudes|anciennete " >
<td a l i g n = " r i g h t " ><xsl:valueof select= " . " /></td>
</xsl:template >
</xsl:stylesheet >
Un certain nombre de programmes prennent en entre les rgles XSLT et le document XML
et appliquent les rgles ce document. On se reportera par exemple (Fitzgerald, 2004) pour
un aperu selon les environnements. Cest le cas, sous Unix/Linux, de :
xsltproc TableInfirmieres1.xsl infirmieres.xml > TableInfirmieres1.html
avec pour les rgles XSLT qui viennent dtre prsentes et ,
document XML export de la table de mme nom. Le rsultat de lapplication des rgles figure
dans le fichier HTML , dont est fourni un extrait :
<html>
472
html
R1
body
table
R2 tr
tr
tr
tr
R2
R2
...
td
...
td
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
R4
Iden
tifiant
service
F IGURE 11 Table
td
td
R3
29
td
R5
td
R4
BEPC
td
R5
td
R4
2.50
...
td
R4
entre
1 et 5
ans
Jour
<body>
<h1> I n f i r m i r e s </h1>
<table border= " 1 " >
<tr >
<td>< i > I d e n t i f i a n t </ i ></td>
<td>< i >ge</ i ></td>
<td>< i >annes d tudes</ i ></td>
<td>< i >diplme</ i ></td>
<td>< i >anciennet</ i ></td>
<td>< i >classe d anciennet</ i ></td>
<td>< i > s e r v i c e </ i ></td>
</tr>
...
<tr >
<td><b>2</b></td>
<td>29</td>
<td align= " r i g h t " >3</td>
<td>BEPC</td>
<td align= " r i g h t " >2.50</td>
<td>entre 1 et 5 ans</td>
<td>Jour</td>
</tr >
...
</table >
</body>
</html>
8
13
18
23
et
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableInfirmieres1 . x s l " ?>
<BDL>
...
</BDL>
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
20
21
474
10
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
15
<xsl:output method= " html " encoding= " utf8 " />
...
<xsl:template match= " age|diplome " >
<td><xsl:valueof select= " . " /></td>
</xsl:template >
20
25
30
35
ces rgles :
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableInfirmieres3 . x s l " ?>
475
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
23
4
14
19
24
<tr >
<td><b>6</b></td>
<td>30</td>
<td align= " r i g h t " >4</td>
<td>BEPC</td>
<td align= " r i g h t " >7.00</td>
<td><font size= " +1" >plus de 5 ans</font></td>
<td><b>Jour</b></td>
</tr > . . .
</table >
</body>
</html>
XSLT permet galement deffectuer des tris. La rgle ci-dessous stipule l. 20-21 quil faut
trier les lments de type dabord par ordre croissant du contenu (textuel) des l
ments puis par ordre croissant du contenu (numrique) des lments
avant
dappeler des rgles (<xsl:applytemplates> - l. 23) sur les lments domins par les noeuds
.
<?xml version= " 1.0 " encoding= " utf8 " ?>
<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " > <
xsl:output method= " html " encoding= " iso88591 " />
476
10
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
15
20
25
30
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableInfirmieres4 . x s l " ?>
Les deux crans qui suivent montrent le dbut et la fin du rsultat par rapport lcran
23 . On constate que les tris successifs sont effectus. Les mises en valeur diffrentes des
valeurs de et d
associes aux tris montrent par exemple, dans le deuxime
cran, la part prpondrante des infirmires ayant plus de 5 ans danciennet au sein des
infirmires de nuit.
477
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
24
25
5.3. Relier des arbres transforms
On vient de le constater, un document XML muni de rgles XSLT appropries devient
pour le navigateur qui sert louvrir un document HTML comme un autre. On a ainsi
obtenu des tables HTML avec jeu sur les tailles de caractres et sur lopposition maigre/gras
et droit/italiques.
Rien nempche ds lors dengendrer avec XSLT partir de documents XML des documents HTML navigables, cest--dire munis dune part de liens hypertextuels vers dautres
documents et dautre part dancres, cest--dire de points darrive spcifiques dun lien hypertextuel.
Rappelons quen HTML, un lment de type :
<a name= " X " > . . . </a>
place une ancre de nom X au sein dun document HTML. Par exemple, au sein du document
:
478
.
cre un lien hypertextuel (manifest souvent par un soulignement) vers le document . Ainsi :
<a href= " bebe_et_fiches.xml " > . . . </a>
tandis que :
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Dans le premier cran, pour chaque bb sont fournies les informations signaltiques le
concernant et des liens sur les fiches idoines. Si lon clique sur lun de ces liens, ici par
exemple sur celui correspondant la fiche 16 concernant le bb 3, on arrive dans une visualisation HTML du fichier , prcisment lendroit concernant la fiche 16.
Les deuxime et troisime cran montrent la visualisation de cette fiche. On note en par
ticulier un lien permettant daller dans la visualisation du document
lendroit des informations sur le bb 3 tandis que le lien a le mme rle, mais pour re
trouver linfirmire 43 dans la visualisation du fichier . La visualisation
de ce dernier fichier (quatrime cran) est similaire celle de
: signaltique
de chaque infirmire et liens sur les fiches quelle a rdiges.
Lapplication de rgles XSLT aux trois fichiers XML en fait un ensemble de documents
HTML relis de manire prcise entre eux, ce qui permet daller dun bb ou dune infirmire
aux fiches correspondantes ou dune fiche linfirmire ou au bb en cause.
26
479
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
fiche
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sexe
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Garon
Fille
Fille
Fille
Fille
Fille
Fille
Fille
Fille
Fille
Fille
Fille
accouchement
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
voie basse
lieu_naissance
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
non locale
poids_naissance
745
745
745
745
745
745
745
745
745
745
745
745
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
lieu_jour15
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
Centre Hospitalier X
27
28
29
Pour obtenir la visualisation souhaite dun bb, on doit connatre les fiches qui lui correspondent. Si lon revient la base de donnes P RMA, cest ce que permet une jointure
entre la table
et la table . De la table , on ne garde dans
cette jointure que le numro de la fiche. On obtient le tableau 148 p. 480. Cette table est
redondante : elle donne toutes les fiches concernant un bb donn au prix de la rptition
chaque fois de lensemble des informations signaltiques concernant ce bb.
On mmorise dans la table
480
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
:
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableBebes1 . x s l " ?>
<bdl>
<bebe_et_fiches>
<bebe>2</bebe>
< f i c h e >1</ f i c h e >
<sexe>Garon</sexe>
<accouchement>voie basse</accouchement>
<lieu_naissance >non l o c a l e </lieu_naissance >
<poids_naissance>745</poids_naissance>
<classe_poids_naissance>poids &l t ; 750 g . </classe_poids_naissance>
<terme>27.29</terme>
<terme_normalise>27</terme_normalise >
<classe_terme >> ;= 26 et &l t ; 28 SA</classe_terme >
<CRIB>4</CRIB>
<classe_CRIB>3 &l t ;= CRIB &l t ;= 6</classe_CRIB>
<jour>5</jour>
<mois>3</mois>
<annee>99</annee>
<jour_experience >1</jour_experience >
<SM1>12</SM1>
481
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Il ny a quune seule rgle de transformation. Cette rgle examine chaque lment de type
successivement. Si lidentifiant du bb, cest--dire la valeur de llment
,
diffre de lidentifiant de llment
prcdent (l. 11), on a affaire un bb non
encore rencontr. On engendre une ancre de la forme : <numro du bb> pour ce bb (l. 1318). On affiche les lements signaltiques de ce bb, on passe la ligne (l. 21), on crit
(l. 22) et on cre un lien (l. 23-29), de la forme :
, vers la
fiche dont le numro figure dans llment . Si lidentifiant du bb est le mme que celui
de llment
prcdent, on ne rpte pas les informations signaltiques. On se
contente dajouter un lien vers la fiche dont le numro figure dans llment (l. 30-37).
On le voit, cette rgle, outre lancre et les liens quelle positionne, limine les redondances du
fichier XML.
<?xml version= " 1.0 " encoding= " utf8 " ?>
482
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
12
17
<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " > <
xsl:output method= " html " encoding= " utf8 " />
22
27
32
37
483
42
</xsl:choose>
</xsl:foreach >
</body>
</html>
</xsl:template >
</xsl:stylesheet >
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
<html>
<body>
c
s</h1>
c
<h1 align= " center " >B
b
<h2><a name= " b2 " >
Bc
bc
2</a></h2>
Sexe Garon , accouchement voie basse , naissance non l o c a l e , poids 745,
c 27, classe &
classe poids &l t ; 750 g . , terme 27.29 , terme normalis
gt ;= 26 et &l t ; 28 SA, CRIB 4 , classe 3 &l t ;= CRIB &l t ;= 6 , jour
5399, date 1 , SM1 12, classe 11 &l t ;= SM &l t ;=20 , SM3 11, classe 11
&l t ;= SM &l t ;=20 , SM7 6 , classe &l t ;= 10, SM15 8 , classe &l t ;=
10, J1 Centre Hospita l i e r X, J3 Centre H o s p i t a l i e r X, J7 Centre
H o s p i t a l i e r X, J15 Centre H o s p i t a l i e r X<br>
Fiches
<a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f1 " > 1</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f2 " > 2</a><a href= " f i c h e s _ o r i g i n e l l e s 2.xml#f3 " > 3</a><a
href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f4 " > 4</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f5 " > 5
</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f6 " > 6</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml
#f7 " > 7</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f8 " > 8</a><a href= " fiches_o
r i g i n e l l e s 2 . xml#f9 " > 9</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f10 " > 10</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f11 " > 11</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f12 " > 12</
a>
<h2><a name= " b3 " >
Bc
bc
3</a></h2>
Sexe F i l l e , accouchement voie basse , naissance non l o c a l e , poids 1010,
c 27, classe
classe poids > ; 1 000 g . , terme 27.00 , terme normalis
> ;= 26 et &l t ; 28 SA, CRIB 2 , classe &l t ;= 2 , jour 6399, date 2 ,
SM1 19, classe 11 &l t ;= SM &l t ;=20 , SM3 16, classe 11 &l t ;= SM &l t
;=20 , SM7 14, classe 11 &l t ;= SM &l t ;=20 , SM15 12, classe 11 &l t ;=
SM &l t ;=20 , J1 Centre H o s p i t a l i e r X, J3 Centre H o s p i t a l i e r X, J7
Centre H o s p i t a l i e r X, J15 Centre H o s p i t a l i e r X<br>
Fiches
<a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f13 " > 13</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f14 " > 14</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f15 " > 15</
a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f16 " > 16</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#
f17 " > 17</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f18 " > 18</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f19 " > 19</a><a href= " f i c h e s _ o r i g i n e l l e s . xml#f20 " > 20</a>
< a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f21 " > 21</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#
f22 " > 22</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f2 3 " > 23</a><h2><a name= "b4 " >
...
</body>
</html>
6
11
On note des caractres bizarres dans le HTML engendr ci-dessus : ils relvent du jeu
de caractres UTF-8 alors que le prsent ouvrage est compos en ISO-Latin1 (cf. 1, p. 437).
La dmarche est similaire pour les infirmires. Le tableau 149 p. 485 donne la jointure
entre et en ne gardant de cette table que le numro de fiche. On
cre la table :
484
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
fiche
16
21
139
143
148
201
205
215
289
296
363
386
age
26
26
26
26
26
26
26
26
26
26
26
26
etudes
4
4
4
4
4
4
4
4
4
4
4
4
diplome
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
BEPC
anciennete
2.00
2.00
2.00
2.00
2.00
2.00
2.00
2.00
2.00
2.00
2.00
2.00
classe_anciennete
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
entre 1 et 5 ans
service
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
Jour
CREATE TABLE i n f i r m i e r e _ e t _ f i c h e s
select i . id AS i n f ,
f . id AS f i c h e ,
age ,
etudes ,
diplome ,
anciennete ,
classe_anciennete ,
service
FROM i n f i r m i e r e s AS i ,
s i g n a l e t i q u e _ f i c h e s AS f
WHERE i . id = i d _ i n f i r m i e r e
ORDER BY i . id , id_bebe , jour ;
Lexport XML,
, est de la forme :
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableInfirmieres5 . x s l " ?>
<bdl>
<infirmiere_et_fiches>
< i n f >1</ i n f >
< f i c h e >588</ f i c h e >
<age>23</age>
<etudes>4</etudes>
<diplome>BEPC</diplome>
<anciennete>0.00</anciennete>
<classe_anciennete>moins de 1 an</classe_anciennete>
< s e r v i c e>Nuit</ s e r v i c e >
</ i n f i r m i e r e _ e t _ f i c h e s >
<infirmiere_et_fiches>
< i n f >1</ i n f >
< f i c h e >636</ f i c h e >
<age>23</age>
<etudes>4</etudes>
<diplome>BEPC</diplome>
<anciennete>0.00</anciennete>
<classe_anciennete>moins de 1 an</classe_anciennete>
< s e r v i c e>Nuit</ s e r v i c e >
</ i n f i r m i e r e _ e t _ f i c h e s >
485
...
</bdl>
Les rgles XSTL placent une ancre sur chaque numro dinfirmire, de la forme : i<numro
dinfirmire>. Elles engendrent des liens pour chacune des fiches de linfirmire et factorisent
par contre la signaltique.
<?xml version= " 1.0 " encoding= " utf8 " ?>
<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " > <
xsl:output method= " html " encoding= " utf8 " />
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
15
20
25
30
35
40
486
45
</xsl:stylesheet >
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
<html>
<body>
<h1 align= " center " > I n f i r m i r e s</h1>
...
<h2><a name= " i43 " >
I n f i r m i r e 43</a></h2>
c
c 2.00 s e r v i c e Jour<br>
ge 26
tudes
4 diplme BEPC anciennet
Fiches
<a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f16 " > 16</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f21 " > 21</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f139 " > 139
</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f143 " > 143</a><a href= " f i c h e s _ o r i g i n e l l e s 2 .
xml#f148 " > 148</a><a hre f = " f i c h e s _ o r i g i n e l l e s 2 . xml#f201 " > 201</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f205 " > 205</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f21 5 " >
215</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f289 " > 289</a><a href= "
f i c h e s _ o r i g i n e l l e s 2 . xml#f296 " > 296</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f363 " >
363</a><a href= " f i c h e s _ o r i g i n e l l e s 2 . xml#f386 " > 386</a><h2><a name= " i44 " >
...
</body>
</html>
est de
<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableFiches1 . x s l " ?>
<bdl>
<fiches_originelles>
<id>3</id>
<id_bebe>2</id_bebe>
<jour>3</jour>
<heure_saisie>6.00</heure_saisie>
<poids>680</poids>
<classe_poids >poids &l t ; 750 g . </classe_poids >
<position > p l a t dos</position >
<c l a s s e _ p o s i t i o n>dos</ c l a s s e _ p o s i t i o n>
<sedation >non</sedation >
c
< v e n t i l a t i o n >intub
</
ventilation>
< i d _ i n f i r m i e r e >47</ i d _ i n f i r m i e r e >
c
<frequence_occupation>non r
ponse</frequence_occupation>
<moral_infirmiere>p l u t t bien</moral_infirmiere>
<p r o n o s t i c _ i n f i r m i e r e> p l u t t bon</ p r o n o s t i c _ i n f i r m i e r e>
< r e l a t i o n _ i n f i r m i e r e _ p a r e n t s > j e ne connais pas l e s parents </
relation_infirmiere_parents >
<relation_mere_bebe > j e ne sais pas</relation_mere_bebe >
c
<frequence_visites_parents >non r
ponse</frequence_visites_parents
>
< t e x t e >BB tonique pendant que l on s en occupe . Reaction normale aux soins
douloureux ou désagrable . BB qui veut s en s o r t i r combatif pour
v i v r e . </ texte >
</ f i c h e s _ o r i g i n e l l e s >
...
</bdl >
487
Les rgles XSLT transforment larbre XML en un tableau HTML. Dans ce tableau, une ancre
est cre pour chaque fiche, de la forme : <numro de la fiche>. Deux liens sont engendrs,
lun de contenu <numro du bb> vers ladresse
<numro du bb> et
lautre de contenu <numro de linfirmire> vers ladresse <numro de
linfirmire>.
1
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
11
16
<?xml version= " 1.0 " encoding= " utf8 " ?> <xsl:stylesheet version= " 1.0 " xmlns:xsl= "
h t t p : //www.w3. org/1999/XSL/Transform " >
<xsl:output method= " html " encoding= " utf8 " />
21
26
31
36
41
46
488
51
56
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
61
66
<xsl:applytemplates
<xsl:applytemplates
<xsl:applytemplates
<xsl:applytemplates
<xsl:applytemplates
</ t r >
</xsl:template >
71
<xsl:template match= " i d _ i n f i r m i e r e " >
<td>
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
< xsl:text > i n f i r m i e r e _ e t _ f i c h e s . xml# i </ xsl:text ><xsl:valueof select=
" . " />
</xsl:attribut e >
i n f <xsl:valueof select= " . " />
</xsl:element>
</td>
</xsl:template >
76
81
91
96
86
101
489
</xsl:stylesheet >
Larbre HTML engendr par ces rgles est de la forme (cf. crans 27 et 28 ) :
2
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
12
17
<html>
<body>
<h1>Fiches</h1>
<table border= " 1 " >
<tr >
<td>< i >id </ i ></td>
<td>< i > t e x t e </ i ></td>
c
</
c i ></td>
<td>< i >b
b
<td>< i >jour</ i ></td>
<td>< i >heure s a i s i e </ i ></td>
<td>< i >poids</ i ></td>
<td>< i >classe poids</ i ></td>
<td>< i >position </ i ></td>
<td>< i >classe position </ i ></td>
c
<td>< i >s
dation</
i ></td>
<td>< i > v e n t i l a t i o n </ i ></td>
<td>< i > i n f i r m i r e </ i ></td>
c
<td>< i >fr
quence
occupation</ i ></td>
<td>< i >moral i n f . </ i ></td>
<td>< i >pronostic i n f . </ i ></td>
<td>< i > r e l a t i o n i n f ./ parents </ i ></td>
c
</
c i ></td>
<td>< i > r e l a t i o n mre b
b
c
<td>< i >fr
quence
v i s i t e s parents </ i ></td>
</tr>
...
<tr >
<td><a name= " f16 " ><b>16</b></a></td>
c
c une s
dation
c
<td>Bc
bc
trs mignonne , r
active
pendant l e s soins malgr
. Bouge
c </td>
l e s bras et l e s jambes . Fait des grimace s Garde l e s yeux ferm
s
<td><a href= " bebe_et_fiches . xml#b3 " >
bb3</a></td>
<td align= " r i g h t " >3</td> <td align= " r i g h t " >11.00</td>
<td align= " r i g h t " >1010</td> <td>poids > ; 1 000 g . </td>
<td>p l a t dos</td> <td>dos</td>
<td>hypnovel ou fentanyl </td>
c
<td>intub
</td>
<td><a href= " i n f i r m i e r e _ e t _ f i c h e s . xml#i43 " >
inf43</a></td>
c
<td>r
gulirement</td>
<td> p l u t t bien</td>
<td>p l u t t bon</td>
<td>bon</td>
<td>p l u t t bonne</td>
<td>trs souvent</td>
</tr>
...
</body>
</html>
22
27
32
37
42
6. Solutions
Solution de lexercice n 1 p. 461
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
491
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE XIV
L
Ce chapitre indique les tapes ncessaires linstallation ou lutilisation des SGBD utiliss : MySQL et Access.
Pour chaque environnement, il montre comment mettre en place les bases de donnes
exemples partir des diffrentes versions fournies dans larchive en ligne.
Lutilisation de ces trois bases de donnes est libre condition dindiquer chaque fois
lorigine et les publications de rfrences (sans oublier le prsent ouvrage) :
E SQUE Marc Plnat aid par Nicole Serna (Plnat, 1997) ;
P HDRE Valrie Beaudouin pour ce qui concerne les donnes dramatiques et mtriques
(Beaudouin, 2002), Valrie Beaudouin et moi-mme pour le (re)dcoupage en mots graphiques et phontiques ;
P RMA une quipe de ranimation nonatale. On ne peut en dire plus pour prserver lanonymat des infirmires comme des bbs concerns. Soulignons quun certain
nombre de modifications ont t apportes aux donnes pour rendre lidentification des
personnes concernes moins facile.
1. MySQL
1.1. EasyPHP sous Windows
Une application, EasyPHP, fournit dun coup plusieurs fonctionnalits autour de MySQL :
1. un noyau MySQL et la possibilit de formuler directement des requtes en MySQL ;
2. une interface relativement simple sous forme de pages HTML locales, accessibles donc
via le navigateur que lon prfre ;
492
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
La prsentation qui suit se centre sur les deux premiers volets. Le deuxime et le troisime
reposent par ailleurs sur la transformation en serveur local de lordinateur sur lequel est
install EasyPHP, ce qui permet le traitement de formulaires HTML et lengendrement de pages
HTML dynamiques, cest--dire dont le contenu nest pas prdfini une fois pour toutes, mais
varie en fonction des informations prsentes dans une base de donnes et de celles fournies
par lutilisateur (via un formulaire). Ces pages HTML dynamiques sont engendres grce un
langage de programmation galement fourni : PHP.
Un des intrts dEasyPHP par rapport Access est que linterface graphique sert de la
mme manire engendrer des requtes SQL mais que la requte SQL est fournie en mme
temps que son rsultat, alors quavec Access, il faut faire appel un mode particulier. Cest
faciliter lapprentissage progressif du langage de requtes. Cest pouvoir modifier une requte
SQL sur un point prcis sans les lourdeurs du passage par linterface.
493
La version beta est en gnral la dernire version en dveloppement : elle comprend ventuellement de nouvelles fonctionnalits mais peut se rvler moins stable. Cest pourquoi cest
la version non beta qui est en gnral dcharge : 3 .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Le fichier rcupr est un fichier dinstallation qui comprend le logiciel et les utilitaires
permettant de linstaller sur la machine courante.
Linstallation proprement dite commence : 5 , avec une suite dtapes dont certaines demandent des choix. Il faut ainsi dabord accepter la licence propose. Des informations sont
fournies ensuite sur la version que lon installe (numro de version, nouvelles caractristiques,
etc.).
5
494
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Les informations du fichier Readme.txt 8 indiquent la version dEasyPHP comme enveloppe et celles des composants : MySQL, lenvironnement graphique (PhpMyAdmin), le
serveur local (Apache) et le langage de programmation utilis (PHP).
495
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Licne est un e avec un point rouge. Elle apparat alors droite dans la barre de menu du
bas et permet daccder lapplication : 10 .
10
Cliquer le e dans un carr blanc gauche en dessous de la barre de menu du haut ouvre
un menu : 11 .
11
Choisir dAdministratione ouvre un navigateur (Internet Explorer dans lexemple) sur le serveur local, dont ladresse est http://127.0.0.1/, avec les diffrents volets de lapplication :
12 .
12
Le choix de dPhpMyAdmin | Gestion BDDe est celui dune interface graphique simple avec
MySQL double de la possibilit de requtes directement en MySQL : 13 . On voit en particulier sur cet cran que lon peut crer une base de donnes, en fournissant son nom.
496
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
13
Ce dernier cran montre larrt dEasyPHP : les deux feux passent au rouge, parfois aprs
un certain temps dattente :
14
Cration dune base de donnes
clique sur le bouton dCrere.
La base se trouve cre : 16 et devient la base courante. La requte MySQL quivalent est
fournie en mme temps que lindication de succs de la commande.
16
497
Le choix de dSQLe donne accs une fentre en 17 o lon peut soit crire une requte
MySQL soit charger un fichier comprenant une ou plusieurs instructions SQL. Cest ce dernier
choix qui est utilis pour lire le fichier contenant les instructions de cration et de peuplement
de la table . La taille dun tel fichier dinstruction est limite (2Mo), mais le fichier peut
tre compress (bas de lcran).
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
17
18
, le
498
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
21
La base est une base utilise par le logiciel pour la gestion des bases des utilisateurs.
On sinterdira donc de la modifier, sous peine de surprises dsagrables.
Le choix de la table
Cliquer sur dSQLe ouvre une fentre o formuler une requte SQL, ici le dcompte des
lignes de la table : 24 .
24
Le rsultat 25 comprend la reprise de la requte qui vient dtre excute. Elle peut ainsi
tre reprise, amende, etc.
499
25
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
27
On constate en 28 que la requte sest vue adjoindre automatiquement LIMIT 0,30 qui
entrane laffichage de 0 30 lignes maximum. Si 30 lignes sont affiches et que le rsultat en
comprend dautres, un lien permet dafficher les lignes suivantes, par tranches de 30 lignes
au plus : cest tenir compte des contraintes de linterface HTML qui rechigne aux trop longs
tableaux qui supposent de manipuler lascenseur latral.
28
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
par exemple :
mysql u bdadmin p
qui signifie que le super-utilisateur MySQL (-u), de nom bdadmin, veut se connecter MySQL
aprs avoir fourni un mot de passe (password, do loption -p).
Lexamen des bases de donnes existantes dcoule de la requte :
SHOW DATABASES ;
par exemple :
CREATE DATABASE esque ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Par exemple :
GRANT ALL PRIVILEGES ON esque .
TO habert@ "%" IDENTIFIED BY Cadou51
WITH GRANT OPTION ;
GRANT ALL PRIVILEGES ON esque .
TO habert@ " l o c a l h o s t " IDENTIFIED BY Cadou51
WITH GRANT OPTION ;
On ne rentrera pas dans le dtail des droits qui peuvent tre accords ou refuss. On se
reportera la documentation de MySQL. Notons tout de mme que MySQL permet des gestions trs fines des droits (lire une table mais sans pouvoir la modifier, etc.). Tous les SGBD
professionnels permettent dailleurs une telle gestion. Il importe en effet de distinguer ladministrateur dune base et ses utilisateurs mais galement de pouvoir dterminer, au sein de
ces derniers, des sous-ensembles qui vont accder des parties et des oprations ventuellement distinctes. Tout nest pas pertinent pour chaque utilisateur. En outre, il faut pouvoir
se prmunir contre les dgts accidentels et contre la malveillance.
502
habert@harris :~$ su
Password :
harris :/home/habert#
mysql
Welcome to the MySQL monitor . Commands end with ; or \g . Your MySQL connection id
i s 6 to server version : 4.1.11 Debian_4sarge5log
Type help ; or \h f o r help . Type \c to c l e a r the buffer .
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
15
mysql> mysql> GRANT ALL PRIVILEGES ON phedre . TO habert@ "%" IDENTIFIED BY Cadou51
WITH GRANT OPTION ;
Query OK, 0 rows a f f e c t e d (0.19 sec )
mysql> GRANT ALL PRIVILEGES ON phedre . TO habert@ " l o c a l h o s t " IDENTIFIED BY Cadou51
WITH GRANT OPTION ;
Query OK, 0 rows a f f e c t e d (0.00 sec )
20
25
mysql> quit
Bye
harris :/home/habert#
10
503
15
| positions
|
| vers
|
++
3 rows in set (0.00 sec )
20
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
25
30
35
mysql> SELECT COUNT( ) FROM vers ;
++
| COUNT( ) |
++
|
1654 |
++
1 row in set (0.04 sec )
40
45
mysql> quit
Bye
habert@harris :~$
Excution des instructions de cration des tables puis peuplement sous MySQL On
reprend juste aprs la cration de la base par le super-utilisateur MySQL et loctroi des
droits ncessaires lutilisateur :
habert@harris :~$ mysql u habert p phedre
Enter password :
...
mysql> show tables ;
Empty set (0.00 sec )
mysql> quit
Bye
habert@harris :~$
Le fichier
504
La seconde tape, sous MySQL, revient remplir les tables dment cres (mais vides cf. l. 520) grce aux fichiers dlimits (de type CSV) disponibles galement dans larchive en ligne
(l. 23) :
habert@harris :~$ mysql u habert p phedre
Enter password :
...
5
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
10
15
20
25
30
35
Records : 1655
Deleted : 0
Skipped : 0
Warnings : 2
Linstruction LOAD DATA permet dinsrer dans une table existante (ici ) des lignes dun
fichier dlimit dont le nom est fourni. Remarquer quon spcifie que les changements de
ligne sont marqus dans ce fichier par la suite de deux caractres propre Windows : un
retour-chariot (\r) suivi dun passage la ligne (\n).
2. Access
2.1. Logiciel
Les bases de donnes supposent des oprations conceptuelles plus complexes que celles
des outils bureautiques les plus courants : traitement de texte, tableur et gestionnaire de
prsentations visuelles. Cest pourquoi Access ne fait pas partie de la distribution la plus
courante de MS Office, lventail Microsoft doutils bureautiques.
505
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
506
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C HAPITRE XV
L
1. Terminologies compares
Rappelons quun SGBD manipule des tables qui ne sont pas forcment des relations au
sens strict, cest--dire des ensembles de tuples tous diffrents : elles peuvent contenir des
doublons (des lignes identiques). On parle alors plus prcisment de multi-ensembles. Une
restriction qui prend en entre une relation en entre produit galement une relation. La slection dun sous-ensemble de colonnes peut produire ou non une relation. Cest lopposition
dans le livre entre P ROJECTION AVEC DOUBLONS et P ROJECTION (sans doublons).
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Physique
relationnelle
Access
informelle
relation
table, feuille de
donnes
table
enregistrement record
n-uplet tuple
enregistrement
ligne row
champ field
attribut
champ
colonne column
jointure
relation
lien
cardinalit dune
relation
nombre de lignes
nombre
colonnes
de
identifiant
(unique),
cl
primaire primary
key
la mention SQL renvoie une ralisation dune opration abstraite valide en MySQL
comme en SQL Server, la version de SQL sous-jacente aux oprations dAccess ;
la mention MySQL une ralisation spcifique de ce SGBD ;
la mention Access rfre ce quil faut indiquer dans linterface et qui peut diffrer
de la requte SQL Server engendre automatiquement ou crite directement. Ainsi, les
arguments de certaines fonctions dans linterface dAccess sont spars par des pointsvirgules, alors que la fonction SQL Server correspondante utilise des virgules. On sera
attentif ces distinguos sources derreurs.
Sont prsentes les diffrences dialectales entre MySQL et SQL Server uniquement pour les
fonctionnalits exemplifies dans louvrage. (Gennick, 2006) montre les oprateurs disponibles pour des SGBD trs rpandus : Oracle, IBM DB2, mais aussi MS (MicroSoft) SQL
Server et MySQL. On sen servira donc de rfrence.
On sera attentif au caractre servant sparer les arguments dune fonction :
MySQL et SQL Server : une virgule ;
Access : le plus souvent, un point virgule.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Rle
tout car.
chiffre
0 ou n car.
ensemble
numr
ensemble
born
complmentaire
dun
ensemble
Ensembles de caractres
?
#
*
. (point)
[0-9]
.*
id.
[^<ensemble de car.>]
[ !<ensemble de car.>]
0 ou n fois
1 ou n fois
0 ou 1 fois
en dbut
colonne
en
fin
colonne
Access
oprateur
de
de
non ncessaire
non ncessaire
combinaison de motifs
disjonction
parenthsage
| (barre verticale)
()
absent
absent
Access : Gauche(<chane> ; k)
Inversion
MySQL : REVERSE(<chane>)
SQL Server : StReverse(<chane>)
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3.1.1. MySQL
MySQL oppose des attributs faisant la distinction de casse (majuscules / minuscules) dans
le tri comme dans la comparaison et la recherche. Cette distinction pour les types CHAR et
VARCHAR se marque par un modifieur (BINARY), pour les autres par une opposition entre
les types de suffixe TEXT, insensibles la casse, et les types de suffixe BLOB, sensibles la
casse.
Pour les valeurs limites, MySQL offre les types suivants :
CHAR(<taille>) La taille va de 0 255 caractres ;
VARCHAR(<taille>) La taille varie galement de 0 255 caractres, mais un attribut de ce
type permet de stocker du texte de taille variable, allant jusqu la <taille> dclare. Ainsi
un attribut dclar comme VARCHAR(4) pourra stocker des valeurs de 0 (chane vide)
4 caractres ;
Smallint nombre compris entre -32 768 et 32 767 (non sign : entre 0 et 65 535) ;
Mediumint nombre compris entre -8 388 608 et 3 388 607 (non sign : entre 0 et 16 777 215) ;
Int entre -2 147 483 648 et 1 147 483 647 (non sign : entre 0 et 4 294 967 295) ;
Bigint entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807 (non sign : entre 0
et 18 446 744 073 709 551 615).
Pour les nombres dcimaux, les types suivants correspondent des prcisions croissantes :
Decimal de la forme Decimal(<nombre de chiffres significatifs>, <dont chiffres significatifs
aprs le sparateur dcimal>). Ainsi Decimal(4,2) permet daller de -99,99 99,99 ;
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Float ;
Double .
3.2.2. Access
Trois types sont disponibles pour les valeurs entires, selon la taille des nombres mmoriser :
Octet nombre positif de 0 255 ;
Entier nombre positif ou ngatif de -32 768 32 767 ;
Entier long nombre positif ou ngatif de -2 147 483 647 2 147 483 447.
Trois types sont galement disponibles pour les nombres dcimaux, par ordre de prcision
croissante :
Rel simple (prcision dcimale : 7) ;
Rel double (prcision dcimale : 15) ;
Dcimal (prcision dcimale : 28).
3.3.2. Access
Date/Heure Le paramtrage dun attribut de ce type permet de prciser le mode daffichage.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
3.4.2. Access
NumroAuto
513
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
C ONCLUSION
1.
Si louvrage scarte dun guide de lutilisateur pour un ou plusieurs logiciels et sil prsente les principes gnraux des systmes de gestion de bases de donnes (relationnelles), il
napprofondit cependant pas trois aspects plus techniques et moins fondamentaux pour les
applications vises dans ces pages :
1. la ralisation matrielle sous-jacente en termes de fichiers, etc. Les SGBD ont dailleurs
pour fonction explicite de protger lutilisateur des dtails du niveau matriel.
2. les facilits quoffrent les SGBD pour permettre plusieurs utilisateurs de travailler
sur des donnes partages sans crer dincohrences (si nous avons rserv une place
dans un train, nous entendons bien quelle ne soit pas loue en parallle quelquun
dautre). Les SGBD, gnralement multi-utilisateurs, sont dailleurs prvus pour permettre chaque utilisateur de se comporter comme si le systme tait mono-utilisateur.
3. les normalisations de donnes conseilles, qui ne sont traites que partiellement.
2.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Conclusion
dans P RMA :
existence dinfirmires fantmes dont les fiches en fait ont d tre rattaches
dautres infirmires ;
fiche saisie au jour 2, ce qui droge aux choix de lenqute ;
inadquation du codage de certaines variables (le 0 pour indiquer labsence du poids,
par exemple) ;
lemmes inadquats pour certains verbes ;
lemmes multiples sans raison pour une mme forme normalise ;
dans P HDRE :
absence de majuscules en dbut de phrase ;
transcriptions phontiques errones ;
dans E SQUE :
reprsentation gnante de labsence dinformation (NULL) pour la base dun nombre
non ngligeable de drivs en -esque ;
...
En somme, les bases de donnes engagent une dmarche pnlopesque, o il faut sans
cesse sur le mtier remettre louvrage. Reste que les SGBD constituent loutil privilgi damlioration de la qualit des donnes.
Les SGBD permettent une amlioration continue de la qualit des donnes. Pour autant,
une base de donnes est le reflet, un moment prcis, des informations qui y sont mmorises, de leur structure et de leurs relations. Par contre, une base de donnes ne donne pas
directement accs lhistorique de la constitution de ces informations et leur volution.
Ainsi, la fiche rdige un 2e jour de vie dun prmature et qui a t juge ne rpondant pas
au protocole de ltude a disparu pour toujours dans les oubliettes lectroniques. L paisseur
de la constitution des donnes chappe. Si lon souhaite en conserver la trace, il faut sen
donner les moyens, en rajoutant par exemple une table dans la base associant une date,
et un utilisateur, la description textuelle des modifications faites, ou de manire plus fine,
en associant chaque table susceptible dvoluer une table-mmoire, qui conserve les tats
prcdents des lignes modifies.
3.
3.1.
Les deux citations qui suivent tmoignent de limportance des schmas classificatoires. La
premire, via un exemple emprunt la littrature, souligne la difficult quil y a comprendre
les motivations sous-jacentes aux subdivisions choisies pour un domaine, tant la diversit des
points de vue permet des partitionnements et hirarchies distincts. Lhumour de la seconde
citation laisse transparatre limportance vitale des classements adopts : classer, cest agir,
et mal classer, cest prendre des risques.
Ce livre a son lieu de naissance dans la lecture dun texte de Borges. [...] Ce texte cite une
certaine encyclopdie chinoise o il est crit que les animaux se divisent en : a) appartenant
lEmpereur, b) embaums, c) apprivoiss, d) cochons de lait, e) sirnes, f) fabuleux, g) chiens en
libert, h) inclus dans la prsente classification, i) qui sagitent comme des fous, j) innombrables,
k) dessins avec un pinceau trs fin en poils de chameau, l) et caetera, m) qui viennent de casser
la cruche, n) qui de loin semblent des mouches.
Michel Foucault Les mots et les choses, Gallimard, 1966, p. 7.
515
Conclusion
Dans notre dition dhier, une lgre erreur technique nous a fait imprimer les noms des
champignons vnneux sous les photos des champignons comestibles, et vice-versa.
Nos lecteurs survivants auront rectifi deux-mmes.
Pierre Desproges Fonds de tiroir, Le Seuil, 1990.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
4.
Il est frappant de voir converger, un quart de sicle de distance, Maurice Gross et Geoffrey
Sampson, un des tenants actuels dune linguistique empirique lie lannotation automatique de corpus, dans le soutien une dmarche explicitement linnenne en linguistique.
Ils indiquent tous deux que la description botanique a progress grce lacceptation dun
schma classificatoire imparfait, et connu comme tel, mais offrant un langage commun favorisant la convergence des efforts taxonomiques. Le premier ( Prsentation , in J.-P. Boons,
A. Guillet, C. Leclre La structure des phrases simples en franais, Droz, Genve, 1976, p. 16
17) plaide pour une phase pralable, taxonomique, de classification des phrases : [. . .] la
classification des formes syntaxiques semble encore loin davoir trouv son Linn, son Tournefort ou ses Jussieu, encore moins son Adenson 1 [. . .] il nexist[e] pas dautre voie possible
la construction de thories, ce terme tant pris au sens des sciences naturelles et non pas
dans son sens mtaphorique de plus en plus rpandu et appliqu aux sciences humaines et
sociales. De telles classifications constituent la seule base empirique praticable aujourdhui.
partir de telles constructions pourraient ventuellement se dgager des thories permettant des vrifications exprimentales et constituant des explications dont les caractrisations
seraient analogues celles des sciences dures. Les termes du second font cho trs exactement ceux du premier (G. Sampson, Empirical Linguistics, Continuum, Londres, 2001,
p. 84) : Il est peu probable quune science se trouve en position de dvelopper des thories
profondes pour expliquer ses donnes avant quil existe un cadre faisant consensus (agreed
scheme) sur la manire didentifier et de noter ces donnes , y compris dans la rfrence
Linn (ibid., p. 84 et p. 93, note 3).
Dans cette optique, les bases de donnes constituent un apport fondamental dans une
dmarche classificatoire, en linguistique mais aussi plus largement en sciences humaines.
En premier lieu, la modlisation du domaine dapplication en termes dentits et de relations
et en fonction dun point de vue dtermin dbouche sur une ontologie possible de ce domaine
selon le point de vue choisi. En second lieu, la mise en tables des entits du domaine permet
a posteriori un retour sur la modlisation. En particulier, les oprations offertes par les SGBD
facilitent lexamen de la cohrence des choix classificatoires effectus. On la vu par exemple
pour ce qui regarde les catgories des bases ou des drivs de E SQUE. En troisime lieu, les
bases de donnes permettent de cumuler les informations venant de sources distinctes et
de les confronter. Par exemple, pour Esque, aussi bien des attestations issues de livres, de
journaux, de la Toile que des indications sur la prsence dans les diffrents dictionnaires.
5.
Les langues dites naturelles comme le franais, langlais, etc. permettent de tout dire
, au prix ventuellement de priphrases. Par opposition les langages artificiels, comme les
langages de programmation, comme SQL, restreignent ce qui est exprimable. On la constat
1
Voir F. Dagognet, Le catalogue de la vie, PUF, 1970, pour le tournant taxonomique en botanique et en zoologie des
18e et 19e sicle.
516
Conclusion
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
au ch. VII 6, les SGBD relationnels ne permettent pas de traiter des relations transitives
comme rimer avec . On peut, par auto-jointure, rapprocher les vers ou les mots qui riment
deux deux. On ne peut pas rassembler lensemble des vers ou des mots tels quau sein de
cet ensemble, chaque lment rime avec un autre et que de proche en proche chaque lment
rime avec tous les autres. De la mme manire, on la vu, les SGBD relationnels offrent une
prise limite sur les phnomnes squentiels. L encore, lauto-jointure permet disoler le
contexte gauche de puce, mais on pourrait difficilement gnraliser cette dmarche pour des
contextes arbitrairement plus larges. Nous touchons du doigt, sur deux points, les limites du
pouvoir expressif des bases de donnes relationnels. Dautres types de bases de donnes, les
bases de donnes dductives, savent utiliser les relations transitives.
Lutilisation systmatique de MySQL et de SQL Server dans la partie en ligne de louvrage
rend manifeste l encore des diffrences de pouvoir expressif au sein mme des bases de donnes relationnelles. Il ny a pas dquivalent immdiat en SQL Server de N OMBRE DE VALEURS
DISTINCTES (<attribut>), qui sexprime sous MySQL via :
COUNT(DISTINCT(<attribut>)
Il faut user de priphrases pour obtenir cette fonctionnalit. En ce qui concerne les motifs,
le langage dexpressions rgulires disponible sous MySQL est plus fin que les caractres
gnriques dAccess (chapitre III 8.3 et tableau 151 p. 510). linverse, les requtes croises
dAccess sont ralisables en MySQL, mais de manire plus contourne.
Dans tous les cas, il est crucial de savoir aussi prcisment que possible ce qui peut
se dire dans le langage artificiel dont on dispose. Ainsi, lobtention des tables ,
, etc., de la base P RMA, nest pas possible en utilisant uniquement les ressources de SQL. Il a fallu recourir un langage de programmation autre (en loccurrence PHP)
pour lire la table et peupler partir des informations qui y figurent les tables dvolues un tat donn du texte. Savoir par avance ce qui peut se dire, cest la fois utiliser au
mieux le langage artificiel dont on dispose, en reconnatre les limites et dterminer quand il
est ncessaire de recourir dautres langages artificiels.
La ralisation des requtes du premier tome comme les exercices ont souvent montr plusieurs manires, y compris pour un SGBD donn (MySQL vs. Access) darriver un rsultat
donn. On a soulign, de ci de l, les bizarreries de chaque SGBD, pour mettre en garde
et faire sentir lcart qui existe entre le modle relationnel et les systmes qui le mettent en
oeuvre.
On ne confondra pas le pouvoir dexpression et la facilit avec laquelle on peut exprimer
telle ou telle opration. Linterface que fournit Access a lavantage de fournir de nombreux
filets : les oprations potentiellement dangereuses sont prcdes de demandes de confirmation. Lutilisation directe de MySQL peut dboucher sur des dgts, en cas dinattention.
Lutilisation de linterface dans Access par rapport lutilisation directe de SQL Server peut
par contre limiter ce qui peut tre dit. Certaines oprations ne se formulent pas bien ou pas
du tout via linterface dAccess.
517
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Michel Lastes (LIMSI) a install les versions de logiciels (MySQL, Access, vmware) qui mont
permis de fabriquer les exemples, les exercices et leurs solutions. Sammy Debaggi (LIMSI)
ma permis de comprendre comment obtenir en Access lquivalent de N OMBRE DE VALEURS
DISTINCTE s (<colonne>).
Le prt clicher de la version papier et de son complment en ligne ont t composs en
LATEX sous Linux (Debian), en utilisant lditeur LATEX Lyx (version 1.3.4). Bernard Desgraupes
(universit Paris X Nanterre), auteur en particulier de LATEX : apprentissage, guide et rfrence
(Vuibert, Paris, 2003), a cr la feuille de style LATEX correspondant la collection Lessentiel
franais et ma aid composer en LATEX le prt clicher du premier tome et le second tome.
Pierre Zweigenbaum (LIMSI) a galement contribu aux choix de mise en page et de notation
abstraite des requtes.
Les tableaux ont t engendrs par un script PHP transmettant la requte MySQL la
base de donnes exemple en cause et utilisant la rponse pour crer les instructions LATEX
correspondant la table-rsultat.
Remerciements
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Plusieurs collgues et ami(e)s mont aid par leurs relectures et leurs ides : Valrie Beaudouin (FT R&D) ; Didier Bourigault (ERSS) ; Sammy Debaggi (LIMSI) ; Sara El Ayarri (LIMSI) ;
Ccile Fabre (ERSS) ; Serge Fleury (SYLED) ; Anne Garcia-Fernandez (LIMSI) ; Marie Gugan
(LIMSI) ; Sylvain Loiseau (LIMSI) ; Natacha Lubtchansky (universit de Tours) ; Pierre Zweigenbaum (LIMSI) ; Carole Tisset (IUFM de Versailles) et Marie-Paule Pry-Woodley (ERSS).
519
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
L IENS
au 20 juillet 2009
Logiciels
Microsoft Access
http://office.microsoft.com/fr-fr/FX010857911036.aspx
MySQL http://www.mysql.fr/ et sa documentation http://dev.mysql.com/doc/ en version HTML ou PDF (A4) [plus de 1 600 pages]
OpenOffice Base http://fr.openoffice.org/
Cours et tutoriels
Tutoriels en franais http://sgbd.developpez.com/cours/
(Georges Gardarin) http://www.prism.uvsq.fr/~gardarin/home.html (en particulier les
transparents en anglais http://www.prism.uvsq.fr/~gardarin/index.htm)
Tutoriels en anglais de difficult graduelle http://www.sql.org/
(Nicole Bidoit) http://www.lri.fr/~bidoit/ (ouverture sur les bases de donnes dductives) Suppose de pouvoir afficher lcran des fichiers PostScript (cf. Ghostscript http:
//www.cs.wisc.edu/~ghost/)
520
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
O RIENTATIONS BIBLIOGRAPHIQUES
Les guides dutilisation des gestionnaires de bases de donnes foisonnent. On utilisera autant que faire se peut les dernires ditions, y compris les rditions quand elles existent pour
les ouvrages cits ci-dessous : un changement de version dun logiciel peut saccompagner de
remaniements importants. Ainsi le format de fichier a-t-il chang entre Access97 et Access
2000.
Pour les ouvrages dinformatique, on se fiera surtout ceux des ditions Eyrolles, et, plus
encore, ceux des ditions OReilly, largement mises contribution ci-dessous.
Orientations bibliographiques
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
(Brouard & Soutou, 2005) met laccent sur la norme SQL (1999 et 2003). Il dtaille les
types de donnes, en particulier ceux introduits par ces versions de la norme SQL. Un chapitre est consacr aux diffrents types de jointure et aux oprations ensemblistes sur les
tables (union, intersection, etc.). Louvrage, comme tous ceux de la collection, comprend de
nombreux exercices corrigs.
MySQL
(Reese, 2004) constitue un aide-mmoire pratique pour les oprations courantes. (Metayer,
2001) fournit une prsentation plus tendue, en particulier sur les types de donnes et fonctions associes. On y trouvera galement des indications prcieuses sur loptimisation dune
base MySQL et sur son administration (gestion de droits, sauvegardes). (Rivereau & Pichot,
2002), qui avoisine les 1000 pages, relve des guides de rfrence, en particulier sur les aspects avancs (types de tables, scurit, API). La documentation en ligne (et en franais) de
MySQL reste toutefois la source dinformation la plus fiable, la plus complte et la plus jour.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Orientations bibliographiques
Cet usage majeur sort lui aussi des limites du prsent ouvrage. De nombreux ouvrages
y sont consacrs. MySQL est trs souvent mobilis dans de telles architectures. Cest ainsi
MySQL qui sert de socle au wiki, mediawiki, utilis par les diffrentes versions de Wikipedia,
ce qui tmoigne indirectement de la fiabilit de MySQL pour grer des bases de donnes trs
volumineuses et soumises de trs nombreuses requtes. MySQL est souvent coupl dans
ce cadre au langage de scripts PHP (Lerdorf, 2000) qui permet dengendrer facilement les
formulaires denvoi de requtes la base de donnes et des programmes de traitement de ces
requtes. (Metayer, 2001) fournit un chapitre dintroduction larticulation PHP et MySQL.
Des ouvrages comme (Nocton, 2001) vont plus loin, en reprenant les protocoles sous-jacents
(HTTP) et en prsentant les notions HTML ncessaires la comprhension de lengendrement
de formulaires ou de pages prsentant les rsultats de requtes une base de donnes.
Cependant, on se reportera de prfrence (Rigaux, 2001), dans la dernire dition disponible.
Le lien est fait avec XML. En outre, la mthodologie de dveloppement dune base de donnes
en ligne est prsente via un exemple suivi raliste .
Access
Un certain nombre de guides de lutilisateur pour Access consacrent une portion tout
fait congrue aux notions des SGBD. Ils visent plutt le reprage des manipulations usuelles
et de leurs variantes. Les copies dcran, ventuellement incrustes dlments de reprage
additionnels, facilitent la prise en main de linterface graphique. Cest le cas par exemple
de (Maran, 1999). Dans le mme esprit, mais sous une forme plus concise, (Israel, 1997)
comprend par contre un chapitre relativement substantiel et bien organis sur les requtes
ainsi quun autre, prcieux, sur ladministration et la scurit. Dans cette famille de guides,
(Nashe, 2000) offre un grand volume dinformation, en particulier sur les relations et sur
les tris, filtrages et requtes (dont le recours des motifs), auxquels trois chapitres sont
consacrs. (Spona, 2001) comprend un chapitre trs dtaill sur les formulaires et tats.
Le parti pris de (Aubert, 2004) est diamtralement oppos : cest une introduction aux
SGBD et leurs oprations et notions fondamentales, qui prend appui sur Access et un cas
utilis tout du long (la modlisation de recettes de cuisines). Le modle Entits/Associations
est prsent en dtail, ainsi que les concepts connexes (dpendances fonctionnelles, normalisation, intgrit rfrentielle). En mme temps, cet ouvrage constitue une bonne introduction
aux aspects pratiques dAccess, quil sagisse des requtes, des formulaires ou des tats. Une
annexe juridique est consacre aux liens entre bases de donnes et protection de la vie prive.
(Mata-Toledo & Cushman, 2002) sappuie galement sur Access pour ses exemples, mais
ne dveloppe pas un cas suivi. Mme si louvrage contient de nombreux exercices corrigs, la
dmarche privilgie les principes formels des bases relationnelles et dtaille les dpendances
fonctionnelles ainsi que le processus de normalisation. Curieusement, cest in fine seulement
quest abord le modle entit-relation.
(Bluttman, 2005) vise un public sachant et voulant programmer, dsireux de construire des
applications complexes sur Access (mode multi-utilisateur, contrle fin de la saisie, protection
des informations prcieuses, etc.). Le chapitre sur les requtes fait le lien entre interface et
ralisation en SQL Server, il dtaille la formulation de motifs. Louvrage traite particulirement
les relations entre Access et dautres logiciels, dont Excel et Word, donc les fonctionnalits
dimport et dexport (y compris en XML).
Orientations bibliographiques
dj un peu ancien, donne un aperu de lventail large des traitements disponibles autour
de XML et des logiciels correspondants.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
(Amann & Rigaux, 2002) fournit une prsentation densemble de XSLT. Ce livre aborde
galement le lien avec les bases de donnes via XSLT. (Mangano, 2003), comme les autres
ouvrages de la mme collection en action chez OReilly, montre des solutions en XSLT
de nombreux problmes classiques (utiliser XML pour produire du texte, des pages HTML,
du XML transform, etc.). Il dtaille les parcours possibles dans les arbres des documents
traits.
524
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
B IBLIOGRAPHIE
A KOKA J. & C OMYN -WATTIAU I. (2001). Conception des bases de donnes relationnelles en
pratique. Informatique. Paris : Vuibert.
A MANN B. & R IGAUX P. (2002). Comprendre XSLT. Paris : OReilly. Edition originale.
A UBER T J. (2004). Informatique de gestion Bases de donnes Implmentation avec Access.
Technosup. Paris : Ellipses.
O. B AUDE, Rdacteur (2006). Corpus oraux Guide des bonnes pratiques 2006. Paris : Presses
universitaires dOrlans & CNRS ditions.
B EAUDOUIN V. (2002). Mtre et rythmes du vers classique : Corneille et Racine. Lettres numriques. Paris : Honor Champion.
B LUTTMAN K. (2005). Access 200% : 100 techniques pour tirer le meilleur parti de vos donnes.
Paris : OReilly. Traduction dHerv Soulard.
B ROUARD F. & S OUTOU C. (2005). SQL. Synthex. Paris : Pearson Education.
C ELKO J. (1999). SQL avanc. Informatique. Paris : Vuibert. traduction de Martine Chalmond.
C HEN P. P. (1976). The Entity-Relationship Model Towards a Unified View of Data. ACM
TODS, 1(1), 936.
C ODD E. F. (1970). A Relational Model of Data for Large Shared Data Banks. Communications
of the ACM, 13(6).
D ATE C. J. (2000). Introduction aux bases de donnes. Informatique. Vuibert, 7e edition.
Traduction de Martine Chamond, Nora et Frdric Cuppens.
F ITZGERALD M. (2004). XML hacks : 100 industrial-strength tips & tools. Cambridge : OReilly.
F LORY A. & L AFOREST F. (2005). Les bases de donnes relationnelles. Gestion. Paris : Economica, 3me edition.
F OURMOND V. (2005). Les expressions rgulires par lexemple. Technique & Pratique. Paris :
H&K.
G ARDARIN G. (2005). Bases de donnes. Best of. Paris : Eyrolles. 6me tirage.
525
BIBLIOGRAPHIE
G ENNICK J. (2006). SQL prcis & concis. Paris : OReilly. Traduction de ric Jacoboni.
H ABER T B. (2005). Instruments et ressources lectroniques pour le franais. Lessentiel franais. Gap/Paris : Ophrys.
H ABER T B., N AZARENKO A. & S ALEM A. (1997). Les linguistiques de corpus. U Linguistique.
Paris : Armand Colin/Masson.
H AINAUT J.-L. (2002). Bases de donnes et modles de calcul. Outils et mthodes pour lutilisateur. Sciences Sup. Paris : Dunod, 3me edition.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
M ATA -T OLEDO R. A. & C USHMAN P. K. (2002). Introduction aux bases de donnes relationnelles. Schaums. Paris : EdiSciences/Dunod. Traduit de lamricain par Jean-Claude de
Vos.
M ETAYER F. (2001). MySQL. PC Poche. Paris : Micro Application.
526
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
G LOSSAIRE : COMPLMENTS
Les dfinitions figurent directement dans le texte de la partie-papier. Elles sont galement
accessibles via la page en gras italique lentre correspondante de lindex.
Annotation dbarque Les donnes primaires (le texte, le son, limage, la vido) sont munies
de coordonnes : par exemple, les caractres pour le texte, le droulement du temps
en milli-secondes pour le son. Les annotations sont conserves part. Chaque annotation indique les rfrences, dans le systme de coordonnes, du segment de donnes
primaires sur lequel elle porte.
Clause Composant dune requte SQL : clause SELECT, clause FROM, clause WHERE, etc.
cart-type Lcart-type mesure la dispersion des valeurs par rapport la moyenne. Cest la
racine carre du carr des carts de chaque valeur la moyenne. Prendre le carr des
carts la moyenne accrot la contribution des grands carts .
Formes contractes Issues historiquement dune prposition suivie dun article ou dun
pronom relatif. Ainsi des, au, desquels proviennent de : de les, le, de lesquels.
Invite Marque conventionnelle qui indique lutilisateur quil doit entrer une commande.
Langage artificiel Langage dvelopp pour raliser une tche sur un ordinateur (programmation, gestion de bases de donnes) et conu pour empcher les ambiguts : une
phrase dun tel langage a une interprtation et une seule.
Langue naturelle Langue qui sert la communication dune population humaine donne
(franais, qubcois, espagnol, etc.). Elle se caractrise par lambigut et par la variation
(phontique, lexicale, syntaxique) des ralisations dun sens donn.
Monde ferm (hypothse du) On considre que la base de donnes comprend lensemble des
assertions pertinentes du domaine dapplication. Labsence dune assertion quivaut au
fait que cette assertion est considre comme fausse.
Multi-ensembles Voir Tables multi-ensembles.
Norme homologation explicite dun langage par une instance de normalisation, nationale,
comme lAFNOR (Association Franaise de Normalisation), ou internationale, comme ISO
(International Organization for Standardization). Le mtalangage de description et dchange
de documents, SGML, anctre dXML, a t adopt comme une norme par ISO en 1986.
527
Glossaire : complments
Pouvoir expressif Ensemble des oprations qui peuvent sexprimer dans un langage artificiel
donn.
Prompt (anglais) Voir Invite.
Question ferme (P RMA) Question dont la rponse possible figure dans une liste pr-dfinie
Question ouverte (P RMA) Question dont la rponse est libre.
Standard homologation implicite dun langage par une communaut dutilisateurs. XML, mtalangage de description et dchange de documents qui est le descendant de SGML,
est une proposition de standard international, promue en particulier par le consortium
qui gre le Web, W3C. Standard de fait, XML est engag dans le processus permettant
den faire une norme.
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
528
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
I NDEX
*
0 fois ou n fois, 96
0 ou n caractres (Access), 100
abrviation des colonnes, 64
sens pour Access et pour MySQL, 117
+
1 ou n fois, 96
somme, 148
ambigut, 78
0 ou 1 fois, 96
[. . .]
indicateur doption, 63
#
0 ou n chiffres (Access), 100
$ (fin de chane), 98
%
oprateur dapproximation, 94
reste division entire, 149
tat (Access), 151
cration, 151
(accent circonflexe)
dbut de chane, 98
(accent circonflexe)
ambigut, 99
complmentaire dun ensemble, 98, 99
dbut de chane, 99
_ (soulign)
oprateur dapproximation, 94
ABS, 149
algique (P RMA), 31
alias
de colonne, 85, 119, 124
de table, 48, 124, 244
ALIAS, 264
ALTER TABLE
ADD COLUMN, 307
DROP COLUMN, 307
annotation dbarque, 527
antalgique (P RMA), 31
antidouleur (P RMA), 31
API, 437
AS
mot-cl optionnel, 86
ASCII, 438
aspiration (P RMA), 31
ASSISTANT LISTE DE CHOIX (Access), 513
attribut auto-incrment, 313
auto-incrment (attribut), 313
auto-jointure (Access), 261
AUTO_INCREMENT (MySQL), 206, 207, 513
AVEC (PAR GROUPE), 128
avenir neurologique (P RMA), 31
AVG, 149
base de donnes
et droits
MySQL, 58
ouverture et fermeture
Access, 59
MySQL, 58
schma, 299
BIGINT (MySQL), 512
BINARY (MySQL), 27, 205207, 511
bit, 438
BLOB (MySQL), 511
bradycarde (P RMA), 31
bradycardies (P RMA), 31
bruit, 358
Canadou (P RMA), 31
529
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
INDEX
Fentanyl (P RMA), 32
feuille de donnes (Access), 64
field, voir attribut
FLOAT (MySQL), 512
FLOOR, 149
FORMAT, 119, 149
format csv, voir format dlimit
format dlimit, 441
forme contracte, 527
formulaire
pour filtrage (Access), 73
= arbre, 448
DOUBLE (MySQL), 512
DROP
DATABASE, 300
INDEX, 323
TABLE, 311
dysmorphique (P RMA), 32
530
INDEX
glyphe, 438
grimpe dans son incubateur (P RMA), 32
GROUPE (PAR ), 118
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
Hypnovel (P RMA), 32
hypotrophe (P RMA), 32
ictrique (P RMA), 32
IF (MySQL), 49, 136
IIF (SQL Server), 53, 136
incubateur (P RMA), 32
index, 24, 322
avec doublons, 24
et cl trangre, 24
et cl primaire, 24
sans doublons, 24
indurations (P RMA), 32
infiltr (P RMA), 32
informations squentielles
et modle relationnel, 40
inscuris (P RMA), 32
INT (MySQL), 24, 25, 27, 205207, 512
intgrit rfrentielle, 241
intubation (P RMA), 32
invasif (P RMA), 32
invite, 58, 527
IS
NOT NULL, 77
NULL, 77
ISO, 18
ISO-LATIN-1 (caractres), 438
JOIN
INNER (MySQL), 239
NATURAL (MySQL), 239
jointure
auto-jointure, 271
et nombre de conditions de rapprochement, 47
externe, 241
naturelle, 244
semi-jointure, 257
JOINTURE
EXTERNE, 264
NATURELLE, 238
KTC (P RMA), 32
labile (P RMA), 32
langage artificiel, 516, voir langue naturelle,
527
langue naturelle, 516, voir langage artificiel, 527
INDEX
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
PRODUIT, 232
projection, 79
avec doublons, 79
prompt, voir invite, 528
pronostic vital (P RMA), 33
Python, 438
question
ferme (P RMA), 528
ouverte (P RMA), 528
REL DOUBLE (Access), 512
REL SIMPLE (Access), 512
Raniplex (P RMA), 33
record, voir n-uplet
regexp, voir expressions rgulires
REGEXP, 96
REGROUPER SUR, 128
relation, 71, 79
= jointure (Access), 65
REMPLACER, 106
REMPLACER (Access), 106
RENVERSER, 108
REPLACE, 106, 108, 150
requte
analyse croise (Access), 53, 179, 186
cration de table (Access), 229
enchsse, 348
ligne Critres et regroupements (Access),
39
Mise jour (Access), 315
paramtre (Access), 166
SQL : forme gnrale, 63
union (Access), 122
RESSEMBLANT
NE RESSEMBLANT PAS , 96
restriction, 71
par formulaire (Access), 73
RESTRICTION, 64
REVERSE, 150
RIGHT, 150
RND() (Access), 91
sdation (P RMA), 33
slection multi-ensemble, 79
SA (P RMA), 33
Sat (P RMA), 33, voir saturation
saturation (P RMA), 33
saturo (P RMA), 33, voir saturation
schma
de base de donnes, 299
de relation, 71
SET (MySQL), 513
532
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009
INDEX
variable
modalits dune , 82
ventil (P RMA), 33
VRAIFAUX (Access), 136
vue, 70
XML, 448
lment, 448
balise, 449
entit, 437
YEAR (MySQL), 512
TA (P RMA), 33
table
cration, 304
indexation, 323
ligne
ajouter, 312
modifier, 314
supprimer, 318
modification, 307
suppression, 311
terminologie
choix, 507
TEXT (MySQL), 511
TEXTE (Access), 511
TIME (MySQL), 512
TIMESTAMP (MySQL), 512
TINYBLOB (MySQL), 511
TINYINT (MySQL), 511
TINYTEXT (MySQL), 511
tirage intercostal (P RMA), 33
TITRE, 85
trmulations (P RMA), 33
tri
en mode feuille de donnes (Access), 91
TRI SUR, 88
Unicode, 438
UPPER, 150
utrin (P RMA), 33
UTF-8, 438
VARCHAR (MySQL), 24, 25, 27, 205207, 511
533
Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009