Sunteți pe pagina 1din 535



Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Construire des bases de donnes tome 2 :


ralisations
Benot Habert
20 juillet 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

TABLE DES MATIRES

Table des matires

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

tude de cas 1 : Prmaturs

23

Relier perception et situation de bbs prmaturissimes . . . . . . . . . . . . . . .

23

Organisation globale de lenqute et des donnes . . . . . . . . . . . . . . . . . . .

23

Des points dentre multiples

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

Les bbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

Les infirmires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

Les fiches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Normaliser et clater les textes . . . . . . . . . . . . . . . . . . . . . . . . . . . .


L
7.1
Jeu de catgories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

Individus et caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

29
29

11

Des informations relier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


L
Versions du texte des fiches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L
Glossaire de lquipe mdicale . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

10

28

31

TABLE DES MATIRES

Chapitre II

46

Les tableaux en texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

Les tableaux en cellules dune feuille de calcul . . . . . . . . . . . . . . . . . . . .

46

Les tables dans une base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . .


L
3.1
Calcul dindications globales . . . . . . . . . . . . . . . . . . . . . . . . .

46

Bases de donnes : aperu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

57

Chapitre III
1

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Sur quoi tab(u)ler ?

Extraire et trier les informations

46

58

Oprations et mise en uvre . . . . . . . . . . . . . . . . . . . . .


L
1.1
Dmarrer/quitter, ouvrir/fermer une base de donnes
L
1.2
Forme gnrale dune requte SQL . . . . . . . . . . . .
L
1.3
Forme gnrale dune requte sous Access . . . . . . .
L
1.4
De linterface Access SQL Server . . . . . . . . . . . .

. . . . . . . . . .

58

. . . . . . . . . .

58

. . . . . . . . . .

63

. . . . . . . . . .

64

. . . . . . . . . .

67

Un rsultat = une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


L
2.1
Accueillir dans une nouvelle table le rsultat dune requte . . . . . . .
L
2.2
Pouvoir rejouer une requte . . . . . . . . . . . . . . . . . . . . . . . .

68

Restreindre : un sous-ensemble de lignes . . . . . .


L
3.1
Restriction : dfinition relationnelle . . . .
L
3.2
Restriction : ralisations . . . . . . . . . . .
L
3.3
Combinaison de conditions de restrictions
L
3.4
Traitement de NULL . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

71

. . . . . . . . . . . . . . . . .

71

. . . . . . . . . . . . . . . . .

71

. . . . . . . . . . . . . . . . .

74

. . . . . . . . . . . . . . . . .

77

Projeter : un sous-ensemble dattributs . . . . . . . . . . . . . . . . . . . . . . . . .

79

Combiner restriction et projection . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

Calculer des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85

Ordonner et limiter les rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


L
7.1
Tri en mode feuille de donnes (Access) . . . . . . . . . . . . . . . . . . .

88

Recherches par air de famille . . . . . . . . . . . . . . .


L
8.1
Filtrage grossier . . . . . . . . . . . . . . . . . . .
L
8.2
Filtrage fin : les expressions rgulires . . . . .
L
8.3
Pouvoir de filtrage compar de MySQL et Access

. . . . . . . . . . . . . .

94

. . . . . . . . . . . . . .

94

. . . . . . . . . . . . . .

96


8

68
70

91

. . . . . . . . . . . . . . 102

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Chapitre IV

Calculer de nouvelles informations

118

Indicateurs globaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Oprateurs sur les colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Faire face linconnu : NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3

TABLE DES MATIRES

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Chapitre V

tude de cas 2 : Phdre

202

Vers, syntaxe, drame : vues en tension . . . . . . . . . . . . . . . . . . . . . . . . . 202


L
1.1
Rpartition des fins de phrases par personnages et positions mtriques 202

Une base pour articuler les points de vue . . . . . . . . . . . . . . . . . . . . . . . 204

Les vers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204


L
3.1
Conventions phontiques du mtromtre . . . . . . . . . . . . . . . . . . 204

Les positions mtriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

Les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Chapitre VI

Retour aux bases. . .

215

Une ligne de table = une entit unique . . . . . . . . . . . . . . . . . . . . . . . . . 215


L
1.1
Une ligne de table = une conjonction dassertions sur une mme entit 215
L
1.2
Cls primaires, secondaires, trangres . . . . . . . . . . . . . . . . . . . 216

Une table = une relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

Les facettes dune entit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220


L
3.1
Les types disponibles varient selon les SGBD . . . . . . . . . . . . . . . 220
L
3.2
Cacher la ralisation vs. rester conome . . . . . . . . . . . . . . . . . . 220

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Chapitre VII Mettre en relation les informations

228

Combiner les informations : le produit relationnel . . . . . . . . . . . . . . . . . . 228


L
1.1
Prparer les tables mettre en relation . . . . . . . . . . . . . . . . . . . 228
L
1.2
Obtenir le produit relationnel . . . . . . . . . . . . . . . . . . . . . . . . . 232

Combiner et restreindre : la jointure . . . . . . . . . . . . . . . . . . . . . . . . . . 238


L
2.1
Jointures la demande (MySQL) vs. stables (Access) . . . . . . . . . 238

Combiner jointure et regroupement . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
L
4.1
Auto-jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
L
4.2
Semi-jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Reprer les dcalages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

Au del du modle relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Chapitre VIII tude de cas 3 : le suffixe -esque

282

Induire la grammaire du suffixe -esque . . . . . . . . . . . . . . . . . . . . . . . 282

Formulaire initial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Redondances et incohrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

TABLE DES MATIRES

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Chapitre IX

Modlisation

292

Le modle Entit/Association (E/A) . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Un modle Entit/Association pour les mots en -esque . . . . . . . . . . . . . . . 293

Relativit des schmas Entit/Association (E/A) . . . . . . . . . . . . . . . . . . . 293

Dun schma E/A celui dune base de donnes . . . . . . . . . . . . . . . . . . . 295

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

Crer et peupler une base de donnes

299

Crer/modifier/supprimer une base de donnes . . . . . . . . . . . . . . . . . . . 299

Crer/modifier/supprimer une structure de


L
2.1
Crer une table . . . . . . . . . . .
L
2.2
Modifier une table . . . . . . . . .
L
2.3
Supprimer une table . . . . . . . .


3

table . . . . . . . . . . . . . . . . . . 303
. . . . . . . . . . . . . . . . . . . . . . 304
. . . . . . . . . . . . . . . . . . . . . . 307
. . . . . . . . . . . . . . . . . . . . . . 311

Ajouter/modifier/supprimer des entits


L
3.1
Ajouter une entit . . . . . . .
L
3.2
Modifier une entit . . . . . . .
L
3.3
Supprimer une entit . . . . .
L
Sauvegarder une base ou une table .
L
Rester efficace : les index . . . . . . .

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

Chapitre XI

Pratiques et bonnes pratiques

. . . . . . . . . . . . . . . . . . . . . . . . 312
. . . . . . . . . . . . . . . . . . . . . . . . 312
. . . . . . . . . . . . . . . . . . . . . . . . 314
. . . . . . . . . . . . . . . . . . . . . . . . 318
. . . . . . . . . . . . . . . . . . . . . . . . 321
. . . . . . . . . . . . . . . . . . . . . . . . 322

334

Prvenir les incohrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Vrifier la justesse des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Maintenir la cohrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

La base de donnes : un maillon dans une chane . . . . . . . . . . . . . . . . . . 338

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

TABLE DES MATIRES

Chapitre XII

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009


2

Rorganiser une base de donnes

359

Traquer et signaler les incohrences . . . . . . . . . . . . . . . . . . . . . . . . . . 359


1.1

Jeux de catgories pour les mots bases et les drivs . . . . . . . . . . . . . 360

1.2

Discordances de catgorisation pour une base ou un driv spcifique . . 369

1.3

Bases absentes ou douteuses

1.4

Plusieurs mots comme base . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

1.5

Indication dune origine autre que le franais moderne . . . . . . . . . . . . 382

1.6

Sens associs aux bases

1.7

Commentaires associs aux bases . . . . . . . . . . . . . . . . . . . . . . . . 387

1.8

Variantes de drivs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

1.9

Sens associs aux drivs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

1.10

Mode de formation des drivs . . . . . . . . . . . . . . . . . . . . . . . . . . 392

1.11

Caractristiques gnrales des attestations . . . . . . . . . . . . . . . . . . 394

1.12

Origine des attestations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

1.13

Rfrences aux drivs dans des recueils . . . . . . . . . . . . . . . . . . . . 396

1.14

Datation des contextes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

1.15

Bilan des changements et problmes . . . . . . . . . . . . . . . . . . . . . . 401

. . . . . . . . . . . . . . . . . . . . . . . . . . 374

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Prparer les corrections manuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 402


2.1

Objectifs gnraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

2.2

Exporter les donnes partir de MySQL en format dlimit . . . . . . . . . 406

2.3

Importation dun fichier tabul sous Access . . . . . . . . . . . . . . . . . . 406

Corrections manuelles

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

3.1

Consolider les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

3.2

Consolider les drivs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

3.3

Examiner les attestations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

Consolidation de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . 434

Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

Chapitre XIII

Importer exporter remodeler

437

Jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

Importer des fichiers dlimits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

2.1

Format dlimit

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

2.2

Importation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

2.3

lagage de la table des lemmes de Frantext . . . . . . . . . . . . . . . . . . 442

2.4

Rapprochement avec la table

2.5

Les mots en -esque au regard de Frantext . . . . . . . . . . . . . . . . . . . 444

 

. . . . . . . . . . . . . . . . . . . . . . . . 443

Echanger des donnes structures : XML . . . . . . . . . . . . . . . . . . . . . . . 445


3.1

Exporter partir dAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

3.2

Exporter partir de MySQL

. . . . . . . . . . . . . . . . . . . . . . . . . . . 451
6

TABLE DES MATIRES

3.3
4

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Remodeler des informations peu structures . . . . . . . . . . . . . . . . . . . . . 458


4.1

Le dictionnaire lectronique DELA . . . . . . . . . . . . . . . . . . . . . . . . 458

4.2

Importation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

4.3

lagage des entres du dictionnaire DELA . . . . . . . . . . . . . . . . . . . 459

4.4

Rapprochement avec la table


2

 

. . . . . . . . . . . . . . . . . . . . . . . . 461

4.5

Les mots en -esque au regard du dictionnaire DELA . . . . . . . . . . . . . 465

4.6

Convergences/divergences entre Frantext et DELA . . . . . . . . . . . . . . 465

Remodeler des informations structures . . . . . . . . . . . . . . . . . . . . . . . . 467


5.1

Transformer des arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

5.2

Contrler les transformations darbres . . . . . . . . . . . . . . . . . . . . . 474

5.3

Relier des arbres transforms . . . . . . . . . . . . . . . . . . . . . . . . . . 478

Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

Chapitre XIV
1

Importer sous Access des donnes XML . . . . . . . . . . . . . . . . . . . . 453

Installations et mises en route

492

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
1.1

EasyPHP sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492

1.2

Sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

1.3

Bases de donnes exemples

. . . . . . . . . . . . . . . . . . . . . . . . . . . 502

Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
2.1

Logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505

2.2

Bases de donnes-exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . 506

Chapitre XV

MySQL, Access et SQL Server

507

Terminologies compares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

De la notation abstraite SQL, MySQL, Access et SQL Server . . . . . . . . . . . 507

2.1

Oprations sur les regroupements . . . . . . . . . . . . . . . . . . . . . . . . 508

2.2

Slection de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

2.3

Oprateurs logiques (boolens) . . . . . . . . . . . . . . . . . . . . . . . . . . 509

2.4

Traitement de la marque NULL

2.5

Fonctions sur les chanes de caractres . . . . . . . . . . . . . . . . . . . . 509

2.6

Oprateurs dapproximation sur les chanes de caractres

2.7

Fonctions numriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

2.8

Tris, limitation des rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

. . . . . . . . . . . . . . . . . . . . . . . . . 509
. . . . . . . . . 510

Types dattributs disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511


3.1

Valeurs textuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511

3.2

Valeurs numriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511

3.3

Valeurs temporelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512

3.4

Valeur auto-incrmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

3.5

Types propres MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

3.6

Types propres Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513


7

TABLE DES MATIRES

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

TABLE DES FIGURES

De lanalyse dun domaine la base de donnes . . . . . . . . . . . . . . . . . . .

17

Deux dialectes de SQL : MySQL et SLQ Server . . . . . . . . . . . . . . . . . . . .

19

Noyau SQL et interface(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

P RMA : la terminologie relationnelle luvre . . . . . . . . . . . . . . . . . . . . 219

P RMA : notion de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

P RMA : modle Entit/Association . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Table

La table

Table

  

en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

10

Table

  

: rgles XSLT de transformation en tableau HTML . . . . . . . . . 472

11

Table

  

: transformation en tableau HTML via XSLT . . . . . . . . . . . . . 473

  

  

  



  



et enchssements . . . . . . . . . . . . . . . . . . . . . . . 449


comme arbre . . . . . . . . . . . . . . . . . . . . . . . . 449

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

L ISTE DES TABLEAUX

P RMA : structure de la table

P RMA : structure de la table

  

P RMA : structure de la table

P RMA : structure de la table      

(MySQL) . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .

25

  (MySQL) . . . . . . . . . . . . . . . .

27

 (MySQL) . . . . . . . . . . . . . . . . . . .

27

P RMA : tats du texte (fiche 131) . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

P RMA : frquence des parties du discours . . . . . . . . . . . . . . . . . . . . . . .

34

P RMA : table      

 , ^ et * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

PREMA : premiers lemmes de mots pleins

. . . . . . . . . . . . . . . . . . . . . . .

37

PREMA : premiers lemmes de mots-outils . . . . . . . . . . . . . . . . . . . . . . . .

38

10

P RMA : contextes gauches de puce . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

11

P RMA : lemmes ambigus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

12

P RMA : occurrences des lemmes ambigus . . . . . . . . . . . . . . . . . . . . . . .

45

13

P RMA : ge/anciennet des infirmires selon le service . . . . . . . . . . . . . . .

47

14

P RMA : les infirmires, les fiches et les bbs . . . . . . . . . . . . . . . . . . . . .

48

15

P RMA : exemple dutilisation de IF ou IIF . . . . . . . . . . . . . . . . . . . . . . .

50

16

P HDRE : catgories de la table      

. . . . . . . . . . . . . . . . . . . . . . .

82

17

P HDRE : vers en 3 segments

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

18

P RMA : infirmires de nuit et tri alatoire . . . . . . . . . . . . . . . . . . . . . . .

89

19

P RMA : LIKE vs. REGEXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

99

20

P HDRE : Phdre dans les vers quelle partage . . . . . . . . . . . . . . . . . . . . . 107

21

P HDRE : mots la rime se terminant par le phonme eu . . . . . . . . . . . . . . 109

22

E SQUE : drivs avec hiatus potentiel . . . . . . . . . . . . . . . . . . . . . . . . . . 111

23

E SQUE : emplois qualificatifs de drivs (extraits) . . . . . . . . . . . . . . . . . . . 112



  

    






(MySQL)

24

10

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

LISTE DES TABLEAUX

24

P RMA : modalits de la variable relation infirmire-parents . . . . . . . . . . . 115

25

P RMA : indicateurs sur lge des infirmires . . . . . . . . . . . . . . . . . . . . . 121

26

P RMA : renommer les colonnes dans une table rsultat . . . . . . . . . . . . . . . 124

27

E SQUE : nombre dattestations et de drivs . . . . . . . . . . . . . . . . . . . . . . 128

28

P RMA : rpartition des fiches par jour . . . . . . . . . . . . . . . . . . . . . . . . . 136

29

P RMA : les dnominations des bbs au fil du temps . . . . . . . . . . . . . . . . 137

30

P HDRE : vers partags entre personnages . . . . . . . . . . . . . . . . . . . . . . . 142

31

P HDRE : regroupements dassociations de personnages . . . . . . . . . . . . . . . 143

32

P HDRE : nombre doccurrences des associations de personnages . . . . . . . . . 144

33

P HDRE : associations rptes de personnages . . . . . . . . . . . . . . . . . . . . 144

34

Phdre : partages de vers par acte et par scne . . . . . . . . . . . . . . . . . . . . 147

35

P RMA : lexprience dans le temps . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

36

P RMA : contextes droits de bb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

37

E SQUE : driv 6= base + -esque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

38

Prma : poids par jour et non-rponses . . . . . . . . . . . . . . . . . . . . . . . . . 159

39

P RMA : nombre de types et doccurrences de lemmes . . . . . . . . . . . . . . . . 162

40

Prma : poids la naissance par sexe

41

P HDRE : place dOenone et de Thse . . . . . . . . . . . . . . . . . . . . . . . . . 168

42

P RMA : accouchement et lieu de naissance . . . . . . . . . . . . . . . . . . . . . . 171

43

P RMA : rpartition des fiches par jour . . . . . . . . . . . . . . . . . . . . . . . . . 173

44

P RMA : nombre de bbs par jour . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

45

P RMA : sdation globalement et par jour . . . . . . . . . . . . . . . . . . . . . . . 176

46

P RMA : ventilation globalement et par jour . . . . . . . . . . . . . . . . . . . . . . 176

47

Phdre : pourcentage daccents par position . . . . . . . . . . . . . . . . . . . . . . 189

48

P HDRE : proportion de vers partags par personnage . . . . . . . . . . . . . . . . 190

49

P HDRE : mots (hors hapax) prononcs uniquement par Phdre . . . . . . . . . . 194

50

P HDRE : mots (hors hapax) prononcs uniquement par Hipollyte . . . . . . . . . 195

51

P HDRE : mots (hors hapax) prononcs uniquement par Aricie . . . . . . . . . . . 195

52

P HDRE : mots (hors hapax) prononcs uniquement par Thse . . . . . . . . . . 196

53

P HDRE : mots la rime propres 1 personnage . . . . . . . . . . . . . . . . . . . 197

54

E SQUE : les auteurs de plus de 5 drivs en -esque . . . . . . . . . . . . . . . . . . 199

55

P HDRE : noms communs > 5 o. par personnage . . . . . . . . . . . . . . . . . . . 201

56

P HDRE : conventions phontiques du mtromtre . . . . . . . . . . . . . . . . . . 205

57

P HDRE : structure de la table

. . . . . . . . . . . . . . . . . . . . . . . . . 163

(MySQL) . . . . . . . . . . . . . . . . . . . . . . 205


58

P HDRE : structure de la table       (MySQL)

59

P HDRE : structure de la table      

60

P HDRE : frquence des catgories de la table      

61

P HDRE : 10 premiers Adj, Adv, Nc, Np, V . . . . . . . . . . . . . . . . . . . . . . . 210



. . . . . . . . . . . . . . . . . . . 206

(MySQL) . . . . . . . . . . . . . . . . . . 207


. . . . . . . . . . . . . . 209

11

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

LISTE DES TABLEAUX

62

P HDRE : 10 premiers Conj, Dt/Pron, Rel, Prp . . . . . . . . . . . . . . . . . . . 211

63

P HDRE : personnages et nombre moyen de mots par phrase et tirade . . . . . . 212

64

Esque : contextes doublons

65

P RMA : table

  

tri par identifiant (numrique) . . . . . . . . . . . . . . . 222

66

P RMA : table

  

tri par identifiant (caractres) . . . . . . . . . . . . . . . 223

67

P HDRE : positions du pronom il

68

P HDRE : monstr occurrences par personnage . . . . . . . . . . . . . . . . . . . . . 225

69

P HDRE : monstr par personnage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

70

P RMA : produit relationnel

71

P RMA : combinaisons ralises ventilation sdation




. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    

    . . . . . . . . . . . . . . . . . . . 236

72

P RMA : jointure     

73

P HDRE : jointure et vers partags . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

74

P HDRE : vers partags par personnage . . . . . . . . . . . . . . . . . . . . . . . . 250

75

P HDRE : paires de vers rimant par auto-jointure . . . . . . . . . . . . . . . . . . . 253

76

P RMA : jointure de 4 tables et rsultat . . . . . . . . . . . . . . . . . . . . . . . . . 257

77

P RMA : texte de dpart pour le bb 38 . . . . . . . . . . . . . . . . . . . . . . . . 259

78

P HDRE : voyelles en cho hmistiche-rime (extrait) . . . . . . . . . . . . . . . . . 261

79

P RMA : lemmes par jour : indications globales . . . . . . . . . . . . . . . . . . . . 267

80

P RMA : fiches et sexe des prmaturs par jour . . . . . . . . . . . . . . . . . . . . 268

81

P RMA : infirmires et richesse lexicale . . . . . . . . . . . . . . . . . . . . . . . 272

82

P HDRE : mots en relation de rime . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

83

P HDRE : couples de rime avec yeux . . . . . . . . . . . . . . . . . . . . . . . . . . 275

84

P HDRE : dcompte des couples de rime avec yeux . . . . . . . . . . . . . . . . . . 277

85

P HDRE : frquence des voyelles en cho hmistiche-rime . . . . . . . . . . . . . . 278

86

P HDRE : rimes pas pour loreille . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

87

ESQUE : structure de la table

88

E SQUE : bases drivs multiples (extraits) . . . . . . . . . . . . . . . . . . . . . . 288

89

E SQUE : drivs bases multiples (extraits) . . . . . . . . . . . . . . . . . . . . . . 290

90

E SQUE : catgories de dpart des drivs . . . . . . . . . . . . . . . . . . . . . . . . 315

91

E SQUE : drivations impropres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

92

E SQUE : catgories de dpart des bases

93

P HDRE : accents et personnages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

94

P HDRE : proportions des catgories chez les personnages . . . . . . . . . . . . . 339

95

P HDRE : vers ne commenant pas par une majuscule . . . . . . . . . . . . . . . . 340

96

P RMA : lemmes de verbes vrifier . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

97

P RMA : formes normalises ayant des lemmes distincts . . . . . . . . . . . . . . 348



 

  -           

. . . . . . . . . . . . . . . 237

 

. . . . . . . . . . . . . . . . . . 244

(MySQL) . . . . . . . . . . . . . . . . . . . . . . 283

. . . . . . . . . . . . . . . . . . . . . . . . 332

12

LISTE DES TABLEAUX

98

P RMA : lemmes distincts pour une mme forme . . . . . . . . . . . . . . . . . . . 349

99

P HDRE : noms propres sans majuscules . . . . . . . . . . . . . . . . . . . . . . . 353

100 P HDRE : liaison en fin de tirade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354


101 P HDRE : reprage liaisons malencontreuses (version 1) . . . . . . . . . . . . . . . 355
102 P HDRE : reprage liaisons malencontreuses (version 2) . . . . . . . . . . . . . . . 356
103 P HDRE : reprage liaisons malencontreuses (version 3) . . . . . . . . . . . . . . . 357
104 E SQUE : catgories initiales de la table
105 E SQUE : transformation de lattribut  

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

106 E SQUE : transformation de lattribut  

. . . . . . . . . . . . . . . . . . . . . . 362

 




. . . . . . . . . . . . . . . . . . . . 364



. . . . . . . . . . . . . . . . . . . . . 367

107 E SQUE : rpartition des bases par partie du discours

. . . . . . . . . . . . . . . . 367

108 E SQUE : rpartition des drivs par partie du discours . . . . . . . . . . . . . . . . 368


109 E SQUE : bases ayant plusieurs catgories (version 1) . . . . . . . . . . . . . . . . . 371
110 E SQUE : bases ayant plusieurs catgories (version 2) . . . . . . . . . . . . . . . . . 372
111 E SQUE : drivs ayant plusieurs catgories . . . . . . . . . . . . . . . . . . . . . . 373
112 E SQUE : bases manquantes (extrait)

. . . . . . . . . . . . . . . . . . . . . . . . . . 375

113 E SQUE : bases douteuses (extrait) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

114 E SQUE : drivs dont la base nest pas toujours manquante

. . . . . . . . . . . . 376

115 E SQUE : bases normalises (extrait) . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

116 E SQUE : base = mot-valise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

117 E SQUE : origine de base autre que le franais moderne . . . . . . . . . . . . . . . 383


118 E SQUE : bases avec et sans sens associ

. . . . . . . . . . . . . . . . . . . . . . . 385

119 E SQUE : bases sens associ ou non . . . . . . . . . . . . . . . . . . . . . . . . . . 386


120 E SQUE : bases avec et sans commentaire (extrait)
121 E SQUE : bases commentaire ou non (extrait)

. . . . . . . . . . . . . . . . . . 388

. . . . . . . . . . . . . . . . . . . . 389

122 E SQUE : drivs avec et sans variantes (extrait) . . . . . . . . . . . . . . . . . . . . 390


123 E SQUE : drivs avec et sans sens associ . . . . . . . . . . . . . . . . . . . . . . . 392
124 E SQUE : drivs avec et sans sens associ . . . . . . . . . . . . . . . . . . . . . . . 393
125 E SQUE : drivs avec et sans mode de formation . . . . . . . . . . . . . . . . . . . 393
126 E SQUE : drivs avec mode de formation ou non . . . . . . . . . . . . . . . . . . . 394
127 E SQUE : valeurs de lattribut origine

. . . . . . . . . . . . . . . . . . . . . . . . . . 395

128 Esque : rfrences aux drivs dans des recueils . . . . . . . . . . . . . . . . . . . 396


129 E SQUE : drivs avec et sans rfrences dans des recueils . . . . . . . . . . . . . . 397
130 E SQUE : drivs avec et sans rfrence dictionnairique

. . . . . . . . . . . . . . . 399

131 Esque : rpartition des contextes par anne ou sicle . . . . . . . . . . . . . . . 400


132 E SQUE : contextes datation boiteuse

. . . . . . . . . . . . . . . . . . . . . . . 400

133 E SQUE : changements et problmes (1/2) . . . . . . . . . . . . . . . . . . . . . . . 402


134 E SQUE : changements et problmes (2/2) . . . . . . . . . . . . . . . . . . . . . . . 403
135 E SQUE : intrus dans les mots en -esque de Frantext . . . . . . . . . . . . . . . . . 442
13

LISTE DES TABLEAUX

136 E SQUE : lemmatisation des formes de Frantext . . . . . . . . . . . . . . . . . . . . 444


137 E SQUE : table des lemmes de Frantext . . . . . . . . . . . . . . . . . . . . . . . . . 445
138 E SQUE : lemmes de Frantext prsents dans la table
139 E SQUE : lemmes de Frantext absents de la table

 

 

. . . . . . . . . . . . . . 446

. . . . . . . . . . . . . . . . 447

140 P RMA : formes ressemblant .*prmatu.* dans le dictionnaire DELA . . . . . . 459


141 E SQUE : mots en plusieurs mots avec esque dans le dictionnaire DELA . . . . 460
142 E SQUE : tiquettes des mots en esque dans le DELA . . . . . . . . . . . . . . . . . 463
143 E SQUE : entres du DELA reformates pour la base . . . . . . . . . . . . . . . . . 464

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

144 E SQUE : mots du DELA prsents dans la table


145 E SQUE : mots du DELA absents de la table

 

 

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

151 Oprateurs dapproximation : MySQL vs. Access . . . . . . . . . . . . . . . . . . . 510

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

La consultation et lutilisation des pages qui suivent supposent la lecture pralable du


premier tome. Chaque chapitre comporte des exemples ou des exercices emprunts aux trois
bases de donnes fournies. Ces exemples et exercices sappuient souvent sur lensemble des
notions prsentes dans le tome 1. Il nest donc pas toujours possible de lire en parallle le
tome 1 et le tome 2.
Le plan est cependant pour lessentiel parallle celui de louvrage-papier. Certaines sections sont vides : elles sont nanmoins conserves pour assurer le paralllisme avec louvrage
L
papier. Suivent des chapitres ou des sections supplmentaires, identifis par le symbole
dans le titre. Dans la table des matires du tome 1, Notions, les titres des chapitres ou sections supplmentaires du tome 2, Prise en
L main, sont en italiques et signals galement par
le symbole . en lieu et place du symbole
: le numro de page, en retrait gauche, est alors
celui du tome 2.
Au sein de chaque section parallle, sont fournis dans lordre la ralisation en MySQL et
en Access des oprations dont le principe, les tapes et le rsultat figurent dans louvrage
papier, des complments, des exemples et des exercices pour tout ou partie des trois bases
de donnes utilises. Une section supplmentaire en fin de chapitre donne les solutions de
15

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.

Parcours de lecture et de travail

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

Reprage des "entits" pertinentes, de leurs proprits saillantes


et des relations entre entits dans le domaine analys

2 MODLISATION

Modle Entit/Association

Etudes de cas : I, V, VIII

IX1 IX2

F IGURE 1 De lanalyse dun domaine la base de donnes

3 IMPLMENTATION
Une table par type dentit, une colonne par proprit dentit
Liens entre tables par identits de valeur pour certaines proprits

VI
IX3

Crer une base

Crer, modifier, supprimer une table X2


(ajout, suppression, modification
X3
de lignes et/ou de colonnes)

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

III3 III8 IV3 IV4

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

Restreindre les rsultats


(liminer les doublons,
garder une portion)

Changer lordre des


rsultats
III7

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.

La langue universelle des SGBD : SQL

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

F IGURE 2 Deux dialectes de SQL : MySQL et SLQ Server


L

Langage textuel de requte vs. interface graphique

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


vise extraire la premire lettre de la colonne     dans la table      


SQL Server sur dMID([categorie], 1, 1)e.

 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

DE VALEURS DISTINCTES (<attribut>)

prsente dans le tome 1, ralisable sous MySQL via :


DISTINCT(<attribut>)

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

Se rajoutent celles du tome 1 les conventions suivantes :


complments Les sections ou chapitres complmentaires sont identifis par le symbole
avant le titre.

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

F IGURE 3 Noyau SQL et interface(s)

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

TUDE DE CAS 1 : PRMATURS

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.

1. Relier perception et situation de bbs prmaturissimes


2. Organisation globale de lenqute et des donnes
3. Des points dentre multiples
4. Les bbs
MySQL
La requte :
DESCRIBE bebes_princeps ;

donne la structure de la table


 (tableau 1 p. 24), cest--dire pour chaque attribut, sur
une ligne, en colonnes, son nom et ses proprits :
nom (col.1 ) ;
23

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 1: P RMA : structure de la table


Field 1
id
sexe
accouchement
lieu_naissance
poids_naissance
terme
terme_normalise
CRIB
jour_naissance
jour_experience
SM1
SM3
SM7
SM15
etat_J1
etat_J3
etat_J7
etat_J15

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

On note que la valeur par dfaut de lattribut de type date      


cain AAAA-MM-JJ (<anne>-<mois>-<jour>).

  

est au format amri-

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

tude de cas 1 : Prmaturs

TABLEAU 2 P RMA : structure de la table

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

CREATE TABLE infirmieres_princeps (


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 ) ,
KEY id ( id )
) ;

La cration dune table obit au schma suivant :

CREATE TABLE <nom de l a table> (


< d f i n i t i o n de l a t t r i b u t 1 >
...
< d f i n i t i o n de l a t t r i b u t n >
<dclaration de l a c l primaire >?
<dclaration d un index > ) ;

Une virgule spare les diffrentes dfinitions et dclarations.


Une <dfinition dattribut> est de la forme :
1. <nom de lattribut>
2. <type>
3. <impossibilit dune marque NULL> ?
4. <existence dune valeur par dfaut> ?
avec :
<impossibilit dune marque NULL = NOT NULL
et
<existence dune valeur par dfaut> = DEFAULT <valeur par dfaut>
Plusieurs types MySQL sont exemplifis dans cette table :
entier : int(11) ;
nombre dcimal : decimal(4,2) indique un nombre de 4 chiffres dont deux aprs le sparateur dcimal ;
date ;
chane de caractres de longueur variable : varchar(50) indique que la valeur de lattribut
qui sest vu confrer ce type peut tre la chane vide, contenant 0 caractres () mais
peut aller jusqu 50 caractres. Par opposition, char(50) renvoie une chane de longueur fixe, 50 caractres. On utilise gnralement le type varchar pour conomiser
des caractres.
25

tude de cas 1 : Prmaturs

Les principaux types disponibles sous MySQL sont dtaills ch. XV 3.


Si la combinaison de plusieurs colonnes constitue la cl primaire, leurs noms sont fournis
entre parenthses et spars par des virgules.
Les contre-apostrophes qui entourent les noms de la table et des attributs ne sont pas
ncessaires.
La ligne KEY id ( id ) indique que la table est indexe sur lattribut
thses) et que le nom de lindex rsultant est .

(mis entre paren-

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Access
En 1 figure la structure de la table

  

.

signale le rle de cl primaire de lattribut correspon-

La cl gauche du nom dattribut


dant.

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



    

  est dcrite dans le tableau 3 p. 27.

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

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 3 P RMA : structure de la table


Field
id
id_bebe
jour
heure_saisie
poids
position
sedation
ventilation
id_infirmiere
frequence_occupation
moral_infirmiere
pronostic_infirmiere
relation_infirmiere_parents
relation_mere_bebe
frequence_visites_parents
texte

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

TABLEAU 4 P RMA : structure de la table      


Field
numero_ordre
fiche
forme_depart
forme_normalisee
lemme
categorie

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

7. Normaliser et clater les textes


La structure de la table      

 est dcrite dans le tableau 4 p. 27

27

tude de cas 1 : Prmaturs

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

La partie du discours, cest--dire la catgorie principale, vient en premire position : N,


V, A, P, D, R, S, C, Y. Suivent ensuite des abrviations de traits morpho-syntaxiques et la
position qui est la leur dans la catgorie complte. Ainsi,  ou  peuvent intervenir en premire
position aprs N pour distinguer un nom commun dun nom propre. Une catgorie-balai, H,
a t ajoute pour rendre compte de deux signes nots par les infirmires dans leurs fiches
papier et que la secrtaire qui a recopi les fiches na pas russi transcrire.
Les conventions utilises dans      

 sont les suivantes :

N(oun) 1) c(ommon), p(roper), k (cardinal) 2) m(asculine), f(eminine) 3) s(ingular) p(lural) ;


V(erb) 1) m(ain), a(uxiliary) 2) i(ndicative), s(ubjonctive), m (iMperative), c(onditional), n (iNfinitive), p(articiple) 3) p(resent), i(mperfect), f(uture), a (pAst) 4) 1, 2, 3 5) m(asculine),
f(eminine) 6) s(ingular) p(lural) ;
A(djective) 1) f (qualiFicative), o (Ordinal), k (cardinal), i(ndefinite), p(ossessive) 2) p(ositive)
c(omparative) 4) m(asculine), f(eminine) 4) s(ingular) p(lural) ;

P(ronoun) 1) p(ersonal), d(emonstrative), i(ndefinite), s (poSsessive), t (inTerrogative), r(elative),


x (refleXive), k (cardinal) 2) 1, 2, 3, 3) m( asculine), f(eminine) 4) s(ingular) p(lural) 5) Case
n(ominative), a(ccusative), d(ative), o(blique) 6) Possessor s(ingular), p(lural) ;
D(eterminer) 1) a(rticle), d(emonstrative), p(ossessive), i(ndefinite), t (inTerrogative/exclamative), k (cardinal) 2) 1, 2, 3, 3) m(asculine), f(eminine) 4) s(ingular) p(lural) 5) Possessor
s(ingular), p(lural) 6) Nature d(efinite), i(ndefinite) ;
R (adveRb) 1) g(eneral), p(article), x (interro-exclamative) 2) p(ositive), c(omparative), n(egative) ;

S (prepoSition) p(reposition), d(eictic) ;


C(onjunction) c(oordination), s(ubordination) ;
Y (punctuation) s(entence), w(ord).
Des exemples, o, entre crochets, chaque forme est suivie de son lemme et de sa catgorie,
facilitent la comprhension de ce jeu dtiquettes :
N(oun) [enfant enfant Nc.s], [aspirations aspiration Ncfp], [soins soins Ncmp], [Fentanyl Fentanyl Np..] ;
V(erb) [sont tre Vaip3p], [a avoir Vaip3s], [environnent environner Vmip3p], [arrache arracher
Vmip3s], [accepter accepter Vmn], [avoir du mal avoir du mal Vmn], [drange dranger
Vmpasf], [en bougeant bouger Vmpp] ;
A(djective) [moindre petit Afcms], [agrable agrable Afp.s], [active actif Afpfs], [agressifs
agressif Afpmp] ;
P(ronoun) [lon on Pp3.sn], [on on Pp3.sn], [la le Pp3fsa], [qui qui Pr-..a] ;
D(eterminer) [des un Da-.p-i], [les le Da-fp-d], [cette ce Dd-fs-], [ce ce Dd-ms-], [beaucoup d
beaucoup de Di-..-], [mon mon Ds1.ss], [ma mon Ds1fss] ;
R (adveRb) [+ + + + Rg], [plus plus Rgc], [que que Rgc], [non non Rgn], [pas pas Rgn], [+ + + +
+ + Rgp], [TRS trs Rgp], [actuellement actuellement Rgp] ;
S (prepoSition) [aprs aprs Sp], [au moment de au moment de Sp] ;
28

tude de cas 1 : Prmaturs

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

Si ncessaire, on sinspirera de la dmarche quivalente pour P HDRE (chapitre V 5


p. 207).
MySQL
La fonction
SUBSTRING(<chane>, <caractre de dpart>, <nombre de caractres souhaits>)

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

ExtracChaine(<chane>; <caractre de dpart>; <nombre de caractres souhaits>) est lquivalent de SUBSTRING.

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.

Versions du texte des fiches

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

tude de cas 1 : Prmaturs

TABLEAU 5 P RMA : tats du texte (fiche 131)


Table

texte

   


 

BB bien vigoureux pt les soins, se debat bcp. Reste paisible


en dehors des soins.

 

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

   


  

 

 



  

 
 
   


  
 
 

bb bien_R vigoureux pendant_S les soins , se_dbat


beaucoup . reste_V paisible en_dehors_de les soins .
bb bien_R vigoureux pendant_S le_D soin , se_dbattre
beaucoup . rester paisible en_dehors_de le_D soin .
Ncms Rgp Afpms Sp Da-__-d Ncmp Ypw V_ip3s Rgp Yps .
V_ip3s Afp_s Sp Da-__-d Ncmp Yps .
Nc Rgp A Sp Dad Nc Ypw V3s Rgp Yps . V3s A Sp Dad Nc
Yps .
NRASDNYVRY.VASDNY.

brut :         ;
normalis :              ;

lemmatis :            ;


rduit aux catgories :                   ;


rduit des catgories simplifies :             
rduit aux parties du discours ou POS (Part of Speech) :   








  .

Dans les tables              et            , la partie du discours est colle en cas


dambigut : on distingue ainsi le_D(terminant) dans pendant_S le_D soin et le_P(ronom)

dans quand on le_P laisser tranquille. Paralllement, une table                   a
 
t constitue, qui comprend tous les attributs de            sauf lattribut  . Une

jointure sur lidentifiant de la fiche entre la table                    et lune des tables
mentionnes permet de disposer de la version souhaite du texte de chaque fiche et des
mtadonnes correspondantes.
Exercice n 3

(MySQL)

Reprer les mots en plusieurs mots , comme de nouveau, le restant de la journe ou


sonde gastrique, dans les lemmes de la table         . Pour chaque mot en plusieurs mots,
identifier le nombre de mots simples correspondants. Compter enfin le nombre de mots en
plusieurs mots, le nombre de mots simples correspondants, le nombre de mots simples en
dehors des mots en plusieurs mots.
Le nombre de mots simples dans un mot en plusieurs mots correspond 1 de plus que le
nombre despaces entre les mots simples. Une manire de compter le nombre de mots simples
dans un mot en plusieurs mots est alors dliminer les espaces en son sein, de soustraire la
longueur de la chane rsultante celle du lemme de dpart et dajouter 1.
On utilisera pour MySQL les fonctions :
R EPLACE(<chane>, <chane remplacer>, <chane de substitution>)
et
L ENGTH(<chane>) qui retourne la longueur de la chane en nombre de caractres.
NB : Les quivalents SQL Server sont R EPLACE et L EN.

30

tude de cas 1 : Prmaturs

Exercice n 4 En utilisant les techniques dauto-jointure du chapitre VII 4, fournir une


table avec les mots qui cooccurrent gauche de puce et le numro de la fiche correspondante.
Exercice n 5

Donner le nombre de garons et de filles qui sont qualifis de puce.

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.

Glossaire de lquipe mdicale

algique Douloureux
antalgique Mdicament ou attitude pour traiter la douleur. Equivalent antidouleur, analgsique, parfois sdatif qui introduit en plus la notion de calmer.

antidouleur Analgsique, voir antalgique plus haut.


aspiration Soin agressif qui consiste descendre un tube fin dans la sonde de ventilation qui
est dans la trache pour aller retirer les scrtions en excs.
avenir neurologique Ide quon se fait des chances qua le bb dvoluer sans squelles
neurologiques, cest--dire avec un dveloppement normal, des acquisitions dans les
temps habituels, vision et audition normales, comportement normal.
bradycarde Frquence cardiaque qui diminue. En gnral cest le signe que le bb oublie de
respirer mais a peut tre plus grave.
bradycardies Coeur qui ralentit.
Canadou Sucre liquide qui a un effet puissament sdatif et antalgique chez le prmatur.
Cest le mme qui sert faire des punchs quand on rajoute du rhum.
canal artriel Persistance dun canal entre laorte et lartre pulmonaire (2 gros vaisseaux)
qui normalement se ferme la naissance.

cartonn Modification de laspect de la peau qui a perdu sa souplesse naturelle. En gnral


ce nest pas bon, a signe une infection grave.
coconou Dispositif, de la forme dun boudin, fait en linges ou en mousse qui permet dinstaller et de contenir lenfant. But : confort et viter certaines dformations.
cyanos (Enfant bleu ou noir). Reflet cutan de la baisse du taux doxygne dans le sang.
dsaturation Diminution de la saturation en oxygne, oublie de respirer ou a besoin de plus
doxygne.
dsature Voir Sat. Cest la saturation qui diminue. Les besoins en oxygne augmentent. L
aussi cela peut tre d au fait quil oublie de respirer.
Dextro Examen fait sur une goutte de sang pour doser la quantit de sucre. Contrle habituel
chez les diabtiques et chez les prmas.
31

tude de cas 1 : Prmaturs

dysmorphique Avec des malformations apparentes.


en peau peau Bb install directement sur la peau de sa mre o il va passer un long
moment. Pour le contact, le plaisir et la chaleur.
cho(graphie) crbrale Visualisation du cerveau par chographie permettant de dpister un
saignement, une malformation du cerveau ou dautres complications crbrales. Examen
fait systmatiquement plusieurs fois pendant le sjour.
enfant jaune Signe cutan de lictre (= jaunisse). Immaturit du mtabolisme de la bilirubine
(pigments biliaires jaunes).
entrocolite Infection intestinale grave du prmatur.

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.

ictrique Jaune. Il a la jaunisse ou lictre cest la mme chose.


incubateur Cest la maison du prma, cest une boite transparente roulettes avec un chauffage pour le garder bien au chaud.
indurations Zones cutanes plus dures que le reste de la peau.
infiltr Avec des oedmes sous la peau.
inscuris Parat inquiet.
intubation Pose dun tube intratrachal pour une ventilation artificielle.
invasif Comme en franais courant. On dit quun geste est invasif quand il comporte une
part dinvasion du corps. Par exemple la saturation nest pas invasive car elle donne un
rsultat alors quelle nest que colle sur la peau alors que le dextro est invasif car il
ncessite une goutte de sang donc de faire une piqre qui est invasive.
labile Instable, parfois mieux parfois moins bien.
leucomalacie Anomalie crbrale de la substance blanche du cerveau qui signe que le cerveau a souffert et que le bb peut en garder des squelles.
lunettes de photothrapie lunettes en tissu qui protgent les yeux pendant les sances de
lumire bleue en cas dictre.
mningocle Malformation crbrale. Le cerveau sort comme un chignon du crne.
Narcan Antidote des mdicaments anti douloureux de la famille des opiacs, les morphines.
Donn quand on a des effets indsirables des morphines comme par exemple de ne plus
respirer.
32

tude de cas 1 : Prmaturs

oedmati avec des oedmes, gonflement, infiltration deau sous la peau.


oedme Gonflement sous cutan d une infiltration par de leau.
PCO2 Appareil qui, coll sur la peau, donne la teneur du sang en gaz carbonique (CO2).
photothrapie Lumire bleue qui traite lictre.
polypnique Respire vite. Mal employ : on devrait dire tachypnique mais on ny arrive pas.
pose dun KTC mise en place dun cathter central.
proclive ventral Un peu inclin, tte surleve par rapport aux pieds et ventral car il est
couch sur le ventre.
pronostic vital Ide quon se fait des chances de survie du bb.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Raniplex Mdicament anti acide donn pour prvenir un ulcre de lestomac.


SA Semaine damnorrhe, cest--dire dlai entre le premier jour des dernires rgles et la
date de naissance. Par exemple 6 mois de grossesse, cest 6 mois ou 52/2, 26 semaines
plus les 2 semaines entre le premier jour des dernires rgles et la conception. Donc, 6
mois de grossesse = 28 semaines damnorrhe = 28 SA. 24 SA, cest peu prs 5 mois
de grossesse. 29 SA cest 6 mois et une semaine de grossesse. Il lui manque 2 mois et 3
semaines.
Sat Saturation en plus clair saturation en oxygne de lhmoglobine ou teneur en oxygne du
sang. Lappareil : le saturomtre ou oxymtre de pouls se pose sur la peau et indique un
pourcentage. De 90 100% cest OK chez le prma.

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

tude de cas 1 : Prmaturs

TABLEAU 6 P RMA : frquence des parties du discours

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.

La requte abstraite est alors de la forme :

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

On ne garde de chaque catgorie que le premier caractre et on regroupe les occurrences


sur ce premier caractre. Pour chaque regroupement, on fournit le premier caractre correspondant et le nombre doccurrences.
Le tableau 6 p. 34 donne le rsultat. On note des catgories inhabituelles : labsence
de catgorie, pour les espaces ; laccent circonflexe qui indique quune ligne correspond un
fragment dun mot en plusieurs mots et donc ne porte pas de catgorie en tant que telle.
Ltoile joue un rle un peu similaire laccent circonflexe. Il est utilis en particulier pour
les mots en plusieurs mots discontinus, cest--dire dont les composants sont spars dans
la version de dpart mais regroups dans les autres versions, comme la ngation (tableau 7
p. 35).
MySQL
Une solution possible est :
SELECT SUBSTRING ( categorie , 1 , 1) AS Catgorie ,
COUNT( ) AS o .
FROM occ_prema
GROUP BY SUBSTRING ( categorie , 1 , 1) ;

34

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 7 P RMA : table      


numero_ordre
66346
66347
66348
66349
66350
66351
66352
66353
66354
66355
66356

 , ^ 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.

SELECT LEFT ( [ c a t e g o r i e ] , 1 ) AS Catgorie ,


Count ( Occ_prema . numero_ordre ) AS o
FROM Occ_prema
GROUP BY LEFT ( [ c a t e g o r i e ] , 1 ) ;

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

qui est engendre par Access partir de lappel E XTRAC C HANE : 2 .


La comparaison entre linterface et la requte SQL Server est instructive. Le nom de la fonction
est francis dans linterface. Il ne correspond pas celui de la requte SQL Server, qui par
ailleurs recourt des virgules et non des points virgules pour sparer les arguments.
Quand le titre donn la colonne dans la table rsultat est un nom simple, sans espace, il
4
nest pas ncessaire de lencadrer de crochets.
2

Solution de lexercice n 2 p. 29 On utilise une restriction pour se limiter aux lemmes de la


catgorie choisie. On regroupe alors par lemme, et pour chaque lemme, on fournit le lemme
et le nombre de lignes du regroupement correspondant. Il ne reste plus qu trier par nombre
doccurrences dcroissant et se limiter aux 10 premiers rsultats.
35

tude de cas 1 : Prmaturs

R22

R ESTRICTION(categorie Comme A%)[occ_prema]


,
,

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

R EGROUPER

SUR (lemme)[<rsultat1 >]

P AR GROUPE(
lemme T ITRE Lemme,
N OMBRE DE LIGNES () T ITRE o.
)[<rsultat2 >]
T RI

SUR

(o. D CROISSANT)[<rsultat3 >]

L IMIT (10)[<rsultat4 >]

Les tableaux 8 et 9 p. 37 et p. 38 fournissent les rsultats. Les adjectifs ne comportent


quun vocabulaire positif. Les adverbes manifestent limportance du degr, y compris la ngation. On note une erreur dans les noms propres (nettoyage) et la place des prnoms, tandis
que les noms de mdicaments ont des frquences faibles. Les noms manifestent limportance
des soins (le retour au contexte le montre, les prpositions frquentes pendant, lors de, en
dehors de, entre sont associes au lemme soin), du contact visuel (oeil), la place particulire
accorde aux filles, le contact sonore (voix) et ce qui manifeste le tonus, le mouvement (bras,
jambe). Les verbes renvoient aux actions typiques des bbs, mais aussi au contact visuel
(le fait douvrir les yeux est important). On remarque dans les mots dits outils la place des
mots en plusieurs mots (ds que, lors de, en dehors de, beaucoup de). La temporalit joue
un grand rle : quand, lorsque, ds que dans les conjonctions. K est ici le lemme pour des
dterminants numraux (deux, trois, quatre. . .).

MySQL
La requte pour les A(djectifs) est prototypique des autres :

SELECT lemme AS Lemme ,


COUNT( ) AS o .
FROM occ_prema
WHERE c a t e g o r i e LIKE A%
GROUP BY lemme
ORDER BY o . DESC
LIMIT 10 ;

La condition de restriction aurait aussi pu se formuler de la manire suivante :


WHERE categorie REGEXP A;

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

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 8 PREMA : premiers lemmes de mots pleins

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

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 9 PREMA : premiers lemmes de mots-outils

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

tude de cas 1 : Prmaturs

On se reportera p. 92 pour la limitation aux k premiers rsultats.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Dans linterface dAccess, lutilisation des regroupements change subtilement le sens


donner certaines lignes de linterface de requte.
Dans une requte sans regroupement, la ligne dCritrese permet ddicter des conditions de
restriction, cest--dire quelle correspond la clauses WHERE dune requte SQL.
Dans une requte avec regroupement, cette ligne correspond la clause HAVING. Si lon veut
utiliser une clause WHERE, il faut choisir dOe dans le menu associ la ligne dOpratione.
Cest ce qui est fait en 3 pour se limiter aux lemmes dont la catgorie commence par A,
les adjectifs donc, dans le contexte, cest--dire en aval, dun regroupement en fonction des
valeurs de lattribut    (premire colonne). On note la diffrence dexpression du motif
entre MySQL et Access :

REGEXP A vs. C OMME A

Solution de lexercice n 3 p. 30 Isoler les lemmes de mots en plusieurs mots suppose


dabord que le lemme comporte au moins une espace et que la catgorie du lemme commence
par une lettre indiquant une catgorie autre que ponctuation (Y) :

SELECT lemme
FROM occ_prema
WHERE c a t e g o r i e REGEXP ^[AS ] .
AND lemme REGEXP ;

Les rsultats sont de la forme :


lemme
de faon
sonde gastrique
les anges
le reste de le temps
pendant que

Ajouter dans la clause SELECT :


LENGTH( lemme ) LENGTH(REPLACE( lemme, , ) ) + 1
AS nbre mots simples

complte avec le nombre de mots correspondants :


lemme
de faon
sonde gastrique
les anges
le reste de le temps
pendant que

nbre mots simples


2
2
3
5
2

Il est ds lors ais dobtenir les dcomptes globaux demands :


Mots en plusieurs mots
1552

mots simples correspondants


3704

mots simples
20477

39

tude de cas 1 : Prmaturs

via la requte :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SELECT SUM( IF ( lemme REGEXP , 1 , 0) )


AS Mots en plusieurs mots ,
SUM( IF ( lemme REGEXP , LENGTH( lemme ) LENGTH(REPLACE( lemme, , ) ) + 1 ,
0) )
AS mots simples correspondants ,
SUM( IF ( lemme REGEXP , 0 , 1) )
AS mots simples
FROM occ_prema
WHERE c a t e g o r i e REGEXP ^[AS ] . ;

Solution de lexercice n 4 p. 30 Le tableau 10 p. 41 donne le rsultat. Lauto-jointure sur


la table         a pour condition de rapprochement le fait que le numro dordre de la
deuxime instance de la table soit gal au numro dordre de la premire instance de la table
plus 2 : il faut en effet prendre en compte lespace qui spare les deux mots et auquel est
consacre galement un ligne de la table. Voir le tableau 7 p. 35 pour les valeurs de la colonne
        .
R23

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 (

On rflchira au fait que lattribut         , qui note la squentialit des occurrences,


est strictement ncessaire la construction de la requte souhaite. Sans cet attribut, il ne
serait pas possible de dire quune occurrence donne suit une autre. On touche du doigt le
fait que les SGBD relationnels ne sont pas naturellement destins noter des informations
squentielles.
On constate que puce est toujours prcd de petite. La seule exception, la fiche 660,
nen est pas vraiment une : un guillemet vient en effet sinterposer entre les deux mots (Petite
"puce" toute maigre. . .).
MySQL
SELECT o1 . fiche ,
o1 . lemme,
o2 . lemme
FROM occ_prema AS o1 ,
occ_prema AS o2
WHERE o2 . numero_ordre = o1 . numero_ordre + 2
AND o2 .lemme = puce ;

Access
La solution figure en 4 .
40

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 10 P RMA : contextes gauches de puce


fiche
299
316
488
569
602
660
676
694
706
788
809
853
857
930

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

Le rsultat est de la forme :


Sexe
Fille
Garon

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

SUR (sexe)[<rsultat2 >]

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

tude de cas 1 : Prmaturs

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

Solution de lexercice n 6 p. 31 Il y a 29 lemmes ayant 2 catgories ou plus (tableau 11


p. 43). La solution revient regrouper par lemme et ne garder que les regroupements pour

lesquels la premire lettre de lattribut      varie (a plus dune valeur).
R25

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

Les ambiguts catgorielles rpertories relvent de cas classiques :

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

tude de cas 1 : Prmaturs

TABLEAU 11 P RMA : lemmes ambigus


Lemme
TiretChevronFermant
antalgique
aprs
avant
bien
bleu
bref
calme
comme
clin
de
entre
gauche
grand
le
limite
mal
mme
pendant
physique
prmatur
que
rflexe
si
son
sourire
toucher
tout
tre

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

tude de cas 1 : Prmaturs

SELECT lemme AS Lemme ,


COUNT( DISTINCT SUBSTRING ( categorie , 1 , 1 ) ) AS c a t g o r i e s
FROM occ_prema
GROUP BY lemme
HAVING COUNT( DISTINCT SUBSTRING ( categorie , 1 , 1 ) ) > 1 ;

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 :

On cre tout dabord la table des lemmes ambigus quant

CREATE TABLE lemme_prema_a_k_POS


(SELECT lemme
FROM occ_prema
GROUP BY lemme
HAVING COUNT( DISTINCT SUBSTRING ( categorie , 1 , 1 ) ) > 1) ;

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

On trouve au tableau 12 p. 45 le rsultat.

44

tude de cas 1 : Prmaturs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 12 P RMA : occurrences des lemmes ambigus

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

SUR QUOI TAB(U)LER ?

1. Les tableaux en texte


2. Les tableaux en cellules dune feuille de calcul
3. Les tables dans une base de donnes
3.1.

Calcul dindications globales

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

Sur quoi tab(u)ler ?

TABLEAU 13 P RMA : ge/anciennet des infirmires selon le service

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]

SUR (service)[<rsultat1 >]

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

Le rsultat figure au tableau 13 p. 47.

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

Sur quoi tab(u)ler ?

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 14 P RMA : les infirmires, les fiches et les bbs


Infirmire
18
17
22
14
19
..
.
73
62
2
44
21

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

SUR (i.id)[<rsultat1 >]

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

Sur quoi tab(u)ler ?

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

La requte suivante montre au ralenti le fonctionnement de IF en MySQL ou de son


quivalent IIF en SQL Server. Le tableau 15(haut) p. 50 juxtapose en effet la valeur de la
colonne   et la valeur rsultante en fonction des deux IF. Dans le premier IF, si la valeur
est la chane Garon, lidentifiant du bb est gard, il est remplac par NULL dans le cas
contraire. Pour le second IF, si la valeur est la chane Fille, lidentifiant du bb est gard, il
est remplac par NULL dans le cas contraire.
SELECT i . id AS I n f i r m i r e ,
service , s . id AS f i c h e s ,
id_bebe AS bbs ,
sexe ,
IF ( sexe = Garon , id_bebe , NULL) AS garons ,
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
ORDER BY i . id LIMIT 25 ;

49

Sur quoi tab(u)ler ?

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 15 P RMA : exemple dutilisation de IF ou IIF

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

Sur quoi tab(u)ler ?

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

Sur quoi tab(u)ler ?

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Cette requte est mmorise sous le nom                  . Cette requte


fournit la matire premire des deux solutions au problme pos. Les deux requtes correspondantes utilisent cette requte comme entre .
La premire solution est tout fait similaire celle utilise en MySQL. On opre un regroupement par infirmire et service. On peut calculer pour chaque groupe le nombre de fiches
rdiges (cest la somme des dcomptes des fiches crites pour chacun des bbs dont sest
occupe linfirmire) et le nombre de bbs traits (cest le dcompte des bbs figurant dans
le groupe). La capture 5 rend compte de ce volet de la requte.

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

Sur quoi tab(u)ler ?

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte SQL Server engendre est :


SELECT R_InfirmiereServiceBebeSexeDistincts . I n f i r m i r e ,
R_InfirmiereServiceBebeSexeDistincts . service ,
Sum( R_InfirmiereServiceBebeSexeDistincts . f i c h e s ) AS fiches ,
Count ( R_InfirmiereServiceBebeSexeDistincts . bb ) AS bbs ,
Sum( I I f ( [ sexe ]= Garon , 1 ) ) AS garons ,
Sum( I I f ( [ sexe ]= F i l l e , 1 , 0 ) ) AS f i l l e s
FROM R_InfirmiereServiceBebeSexeDistincts
GROUP BY R_InfirmiereServiceBebeSexeDistincts . I n f i r m i r e ,
R_InfirmiereServiceBebeSexeDistincts . s e r v i c e ;

IIF(<condition>, <rsultat si condition remplie>, <rsultat sinon>)


est lquivalent SQL Server de la fonction MySQL IF.

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

On peut alors choisir dAssistant requte analyse croisee.


53

Sur quoi tab(u)ler ?

On fournit alors le nom de la table ou de la requte partir de laquelle effectuer la requte.




Il sagit ici de          
      (cf. supra).

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

Sur quoi tab(u)ler ?

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

On donne un nom la requte rsultante.

55

Sur quoi tab(u)ler ?

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

15

Son quivalent SQL Server est :


TRANSFORM Count ( R_InfirmiereServiceBebeSexeDistincts . bb ) AS CompteDebb
SELECT R_InfirmiereServiceBebeSexeDistincts . I n f i r m i r e ,
R_InfirmiereServiceBebeSexeDistincts . service ,
Count ( R_InfirmiereServiceBebeSexeDistincts . bb ) AS [ Total de bb ]
FROM R_InfirmiereServiceBebeSexeDistincts
GROUP BY R_InfirmiereServiceBebeSexeDistincts . I n f i r m i r e ,
R_InfirmiereServiceBebeSexeDistincts . s e r v i c e
PIVOT R_InfirmiereServiceBebeSexeDistincts . sexe ;

Le rsultat figure en 16 .
16

On peut modifier la requte obtenue. On voit dans la visualisation de linterface apparatre


des intituls propres ce type de requte : en-tte de ligne et en-tte de colonne.
17

Une premire modification, minime, consiste disposer dun titre de colonne plus parlant

que   
  . On donne comme titre la colonne correspondante    .

56

Sur quoi tab(u)ler ?

18

On voit le changement en 19 par rapport 16 .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

19

On se voit demander confirmation de la sauvegarde de la requte ainsi modifie.


20

Une deuxime modification, plus subtantielle, consiste rajouter une colonne,     , et


oprer la somme pour chaque infirmire, des fiches correspondant chacun des bbs.
21

Le rsultat est finalement celui qui tait souhait.


22
4

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.

4. Bases de donnes : aperu


57

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE III

EXTRAIRE ET TRIER LES INFORMATIONS

1. Oprations et mise en uvre


1.1.

Dmarrer/quitter, ouvrir/fermer une base de donnes

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

Extraire et trier les informations

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

Extraire et trier les informations

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

Extraire et trier les informations

Lorsque plusieurs fentres sont ouvertes, comme en 7 o la table      est ouverte en


mode feuille de donnes (affichage standard dune table), on peut retrouver cette fentre de
navigation partir du menu dFentree de la barre du haut, en choisissant lentre correspondant la base de donnes : ici le choix 1 dPrma : Base de donnes (format de fichier Access
2000)e.

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

Rendre les extensions lies une application visibles sous Windows


Un fichier sous Windows comprend un nom suivi dune extension : trois caractres prcds dun point. Pour rendre la lecture des noms de fichiers plus simple, les extensions sont
par dfaut omises dans la prsentation, au sein dun dossier, de noms de fichiers.
Windows permet dassocier une extension donne une application : par exemple un fichier se terminant par .pdf sera ouvert avec Acrobat Reader. Windows permet galement de
choisir si lon veut ou non rendre visible lextension des fichiers ayant une extension donne.
On utilise pour cela dDmarrer|Panneau de configuratione.

61

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

10

On choisit dOptions des dossierse.


11


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

Extraire et trier les informations

13

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

On obtient alors un rsultat du type 3 .

1.2.

Forme gnrale dune requte SQL

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 ] ] ;

Les crochets encadrent une partie optionnelle.


Pour les diffrents composants dune requte, on parle de clauses (clause SELECT, clause
FROM, clause WHERE, etc.) :
la clause FROM prcise la ou les table(s) qui va/vont servir dentre (la combinaison de
plusieurs tables est prsente au chapitre VII 2) ;
la clause WHERE dicte les critres que doivent respecter les lignes pour tre prises en
compte (restriction chapitre III 3) ; elle permet galement dindiquer des conditions de
rapprochement entre tables lors de jointures (chapitre VII 2) ;
la clause SELECT dtermine les colonnes retenues (projection chapitre III 4) et les
colonnes issues dun calcul sur les colonnes existantes (chapitre IV 3) ;
la clause GROUP BY permet les regroupements sur des combinaisons de valeurs dattributs (chapitre IV 2) ;
la clause ORDER BY permet de trier la table rsultat (chapitre III 7).
4
Lquivalent de L IMIT (k) qui permet de ne garder que k lignes dans les rsultats sexprime
par LIMIT k en MySQL et par TOP k en SQL Server. Cependant cette indication se place juste
aprs le mot-cl SELECT en SQL Server et en dernire position de la requte en MySQL.
Dans les exemples fournis, les clauses sont gnralement isoles sur des lignes distinctes
pour faciliter leur reprage et leur comprhension, mme si la prsence ou non despaces ou
de passages la ligne supplmentaires ne change pas le comportement du SGBD.
Le point-virgule signale la fin de la requte, comme dans :

SELECT FROM i n f i r m i e r e s WHERE s e r v i c e = Nuit ;

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 ;

o mysql> reprsente linvite initiale, et > linvite secondaire.


63

Extraire et trier les informations

MySQL
' caractristiques des infirmires de nuit
R11 t. 1 p. 60

R ESTRICTION(service = "Nuit")[infirmieres]

La requte correspondante est :


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
WHERE s e r v i c e = " Nuit " ;

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Elle peut aussi prendre la forme :


SELECT
FROM i n f i r m i e r e s
WHERE s e r v i c e = " Nuit " ;

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.

Forme gnrale dune requte sous Access

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

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

14

La barre de menu du haut se transforme : 15 .


15

La premire tape consiste choisir la ou les table(s) ou requte(s) concerne(s) par


la nouvelle requte. Les tables et requtes sont affiches. On ajoute celle(s) quon juge
pertinente(s) 16 . La ou les table(s) et requte(s) choisie(s) apparaissent dans la sousfentre du haut 17 (ventuellement relies par des traits marquant des relations au
sens dAccess, cest--dire des jointures).

16

17

65

Extraire et trier les informations

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

3. On peut galement faire glisser un nom de la table affiche dans la sous-fentre du


haut vers une colonne de la sous-fentre du bas.
On peut aussi slectionner tous les attributs en double-cliquant sur ltoile en premire
place dans la liste des attributs dune table/requte affiche dans la sous-fentre du
haut. Si ncessaire, on double-clique galement sur le ou les attribut(s) utiliss pour
une restriction, mais en dcochant pour eux la bote dAffichere (pour quils ne le soient
pas deux fois) 19 .
18

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

Extraire et trier les informations

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.

De linterface Access SQL Server

Lorquon formule une requte via linterface 22 , on peut basculer en mode SQL Server,
via dRequte | Spcifique SQL | SQL directe : 23 .
22

23

La requte automatiquement engendre apparat alors : 24 .

67

Extraire et trier les informations

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

On excute la requte en cliquant sur licne de dclenchement dune requte, le point


dexclamation rouge de la barre de menu du haut. Si lon choisit de mmoriser la requte
pour pouvoir la rejouer, on constate que son icne est un petit cercle, tandis quune requte
cre via linterface est prcde par deux petits rectangles qui se superposent : 25 .
25

2. Un rsultat = une table

2.1.

Accueillir dans une nouvelle table le rsultat dune requte

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

On insre ensuite dans cette table le rsultat de la requte :


INSERT INTO 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 " ;

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

Extraire et trier les informations

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

Extraire et trier les informations

29

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

30

2.2.

Pouvoir rejouer une requte

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 :

CREATE VIEW vue_infirmieres_nuit


AS
SELECT
FROM infirmieres_princep s
WHERE s e r v i c e = " Nuit " ;

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

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

31

P RMA
P HDRE
E SQUE

3. Restreindre : un sous-ensemble de lignes

3.1.

Restriction : dfinition relationnelle

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

Extraire et trier les informations

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

Extraire et trier les informations

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

Un formulaire comprend les attributs de la table examine 38 .


38

Il permet la conjonction directe de conditions de restriction 39 , de la mme manire quen


mode dCration de requtese.
39

73

Extraire et trier les informations

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.

Combinaison de conditions de restrictions

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"

On peut utiliser dans les mmes circonstances la ngation :


WHERE NOT( anciennete = 0 AND s e r v i c e = Nuit ) ;
WHERE anciennete NOT BETWEEN 0 AND 5 ;

Avec la premire condition de restriction, la requte quivaut :


' caractristiques des infirmires qui ne travaillent pas de nuit et dont lanciennet nest pas
gale 0
Avec la seconde, elle revient :
' caractristiques des infirmires dont lanciennet nest pas comprise entre 0 et 5 ans (bornes
incluses)
74

4
4

Extraire et trier les informations

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

' caractristiques des infirmires qui ne travaillent ni de jour ni de nuit


75

Extraire et trier les informations

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

Extraire et trier les informations

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

La formulation spcifique pour tester la prsence de NULL et sa ngation : 51 souligne


le fait que NULL nest pas une valeur, mais une marque.
' caractristiques des infirmires dont le service nest pas connu (cest--dire comprend la
marque NULL)
R19 t. 1 p. 63

R ESTRICTION(service

EST NULL )[infirmieres]

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

Extraire et trier les informations

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 :

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
WHERE anciennete = 0 ;

Cette clause se paraphrase par dans le(s) cas o lattribut   


contre, dans la requte de mise jour (chapitre X 3) :



a pour valeur 0 . Par

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

Extraire et trier les informations

4. Projeter : un sous-ensemble dattributs


Projection : dfinition relationnelle
La projection, au sens relationnel, produit une relation dfinie par un sous-ensemble des
attributs de la relation source et qui contient uniquement les n-uplets de la relation source
ralisant des combinaisons distinctes de ce sous-ensemble dattributs.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Projection et projection avec doublons


La projection avec doublons est lopration primitive des SGBD. La projection au sens strict
en est drive.
Lappellation Projection avec doublons est une dnomination informelle. Il sagit plutt
dune slection multi-ensemble, cest--dire dune slection qui produit un multi-ensemble,
o un lment donn peut figurer plusieurs fois, la diffrence dun ensemble o un lment
donn ne figure quune seule fois.
MySQL

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

P ROJECTION AVEC DOUBLONS(


service, anciennete
)[infirmieres]

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

Extraire et trier les informations

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 y fait appel aussi en cliquant sur licne correspondante de la barre de menu 56 .


56

On choisit alors la ligne dValeurs distinctese, par dfaut Non 57 , et que lon met Oui
grce au menu droulant 58 .

80

Extraire et trier les informations

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

On remarquera que la partie principale de la requte reste identique sous linterface et


quil faut accder au menu contextuel dProprits de la requtee pour savoir si lon a affaire
une projection avec doublons ou une projection sans doublons. Les requtes SQL Server
correspondant une projection avec vs. sans doublons sont les suivantes :
SELECT Infirmieres_princeps . service ,

81

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 16 P HDRE : catgories de la table      



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 ;

SELECT DISTINCT Infirmieres_princeps . service ,


Infirmieres_princeps . anciennete
FROM Infirmieres_princeps ;

P RMA

Exercice n 3 Fournir les diffrentes modalits de la variable relation de linfirmire avec




les parents , variable laquelle correspond la colonne               s de la table
           .

P HDRE
La requte :
SELECT DISTINCT cat
FROM occurrences ;

permet dobtenir la liste des 17 diffrentes catgories employes dans la table         de


P HDRE (tableau 16, p. 82). Sans ce modifieur, la table aurait. . . 28 248 lignes, soit le nombre
de lignes de la table argument, et comprendrait dinnombrables doublons.

E SQUE

5. Combiner restriction et projection


' valeurs distinctes de lattribut   



pour les seules infirmires de jour

82

Extraire et trier les informations

R215

R ESTRICTION(service = Jour)[infirmieres]
,

P ROJECTION(anciennete)[<rsultat1 >]

' valeurs de lattribut   


R216



pour les seules infirmires de jour

R ESTRICTION(service = Jour)[infirmieres]
,

P ROJECTION

AVEC DOUBLONS (anciennete)[<rsultat1 >]

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 ;

La projection avec doublons sobtient par la requte :

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

En 60 figure la combinaison dune restriction (aux seules infirmires de jour) et dune



projection : une colonne seulement est fournie,     . La ligne dCritrese contient la ou
les condition(s) de restriction. La ou les colonne(s) retenue(s) dans le rsultat correspond(ent)
la projection souhaite. Par dfaut, il sagit dune projection avec doublons, qui quivaut
la R216 p. 83 supra. liminer les doublons, pour obtenir lquivalent de la R215 p. 83, suppose
la dmarche exemplifie en 57 et 58 supra.
60

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

Extraire et trier les informations

TABLEAU 17 P HDRE : vers en 3 segments


numero_vers
205

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

Cet Hippolyte... / Ah, dieux ! / Ce reproche vous


touche.
Jaime... / Qui ? / Tu connais ce fils de lamazone,

Elle vous cherche. / Moi ? / Jignore sa pense.

Quand je me meurs ! / Fuyez. / Je ne le puis quitter.


Quil laime. / Quoi, seigneur ? / Il la dit devant
moi.

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


La restriction dans 61 se matrialise par la colonne       lextrme-droite. Elle


ne doit pas figurer dans le rsultat. La bote de la ligne dAffichere nest donc pas coche.
Par contre, 3 dans la ligne dCritrese indique que, pour tre retenue, la ligne doit avoir cette

valeur pour la colonne       Les trois premires colonnes correspondent la projection :
ce sont les colonnes conserves dans le rsultat.

84

Extraire et trier les informations

61

Exercice n 4

On donnera deux autres moyens de reprer les vers partags en 3.

E SQUE

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

6. Calculer des attributs


P RMA


' combinaisons distinctes, pour les infirmires de nuit, des attributs  ,     


et de lge

larrive en nonatalit, cest--dire de la soustraction de la valeur pour lattribut     
la valeur pour lattribut 
R114 t. 1 p. 71

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 ;

Lajout de titres aux colonnes (ou alias) sobtient par le mot-cl AS :


SELECT DISTINCT
age AS ge ,
anciennete AS anciennet ,
age anciennete AS a r r i v e
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit ;

85

Extraire et trier les informations

Le mot-cl AS est optionnel. On pourrait ainsi rcrire la rqute prcdente :


SELECT DISTINCT
age ge ,
anciennete anciennet ,
age anciennete a r r i v e
FROM i n f i r m i e r e s
WHERE s e r v i c e = Nuit ;

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

Cest ce nom qui sert den-tte la colonne de la table rsultat : 63 .


63

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

Extraire et trier les informations

87
64

65

Extraire et trier les informations

P HDRE
E SQUE

7. Ordonner et limiter les rsultats


Tri
' identifiant et anciennet des infirmires de nuit

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

R116 t. 1 p. 74

R ESTRICTION(service = Nuit)[infirmieres]
,

P ROJECTION(id, anciennete)[<rsultat1 >]

' identifiant et anciennet des infirmires de nuit, tris par anciennet croissante
R117 t. 1 p. 74

R ESTRICTION(service = Nuit)[infirmieres]
,
,

P ROJECTION(id, anciennete)[<rsultat1 >]


T RI

SUR (anciennete CROISSANT)[<rsultat2 >]

' identifiant et anciennet des infirmires de nuit, tris par anciennet dcroissante
R118 t. 1 p. 74

R ESTRICTION(service = Nuit)[infirmieres]
,
,

P ROJECTION(id, anciennete)[<rsultat1 >]


T RI

SUR (anciennete DCROISSANT)[<rsultat2 >]

' identifiant et anciennet des infirmires de nuit, tris de manire alatoire


R218

R ESTRICTION(service = Nuit)[infirmieres]
,
,

P ROJECTION(id, anciennete)[<rsultat1 >]


T RI

ALATOIRE [<rsultat2 >]

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

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 18 P RMA : infirmires de nuit et tri alatoire


id
10
20
7
44
47
16
3
1
14
12
28
58

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

Extraire et trier les informations




conserve, pour les infirmires travaillant de nuit (restriction), les attributs ,  et     


(projection). Elle trie les rsultats dabord par ge dcroissant puis par anciennet croissante
(le modifieur ASC est optionnel). Elle combine donc deux tris successifs.
Access

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

Extraire et trier les informations

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.

Tri en mode feuille de donnes (Access)

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

Extraire et trier les informations

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

La feuille de donnes est trie en consquence : 74 .


74


On peut slectionner plusieurs colonnes. Mais le tri sera alors croissant ou dcroissant
sur lensemble de ces colonnes.

Limiter les rsultats


MySQL
On ajoute dLIMIT ke en fin de requte (aprs un appel ventuel ORDER BY) pour se restreindre aux k premiers rsultats. 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
LIMIT 2 ;

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

Extraire et trier les informations

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

Extraire et trier les informations

On peut galement utiliser le menu droulant dToute 77 de la barre de menu du haut (


ct du sigma majuscule 78 ).

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

77

78

En 79 figure le rsultat du choix opr en 75 .


79

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

Tirer au hasard le texte dune fiche de P RMA

P HDRE
Exercice n 6

Tirer au hasard un vers prononc par Phdre

E SQUE

8. Recherches par air de famille


8.1.

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

Extraire et trier les informations

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

Extraire et trier les informations

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.

Filtrage fin : les expressions rgulires

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 . ] ;

' texte contenant fille en minuscules ou commenant par une majuscule


R128 t. 1 p. 79

R ESTRICTION(
texte RESSEMBLANT
[Ff]ille
)[fiches_originelles]

96

Extraire et trier les informations

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 ;

' texte contenant garon en minuscules ou commenant par une majuscule


R129 t. 1 p. 79

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

Extraire et trier les informations

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$

cest--dire o lon souhaite que la chane prma commence et termine la colonne.


Elles correspondent respectivement aux requtes abstraites suivantes :
98

Extraire et trier les informations

TABLEAU 19 P RMA : LIKE vs. REGEXP


(a) R220 et R222
numero_ordre
39462
39937
48267
49799

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

R ESTRICTION(forme_depart C OMME prma)[occ_prema]


,

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

Extraire et trier les informations

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.


Le motif de 80 permet de chercher la chane "bb" nimporte quel endroit de lattribut


, grce aux deux toiles avant et aprs la chane vise.

80

Le motif de 81 cherche par contre "bb" tout au dbut de lattribut

et accepte un

nombre indiffrent de caractres quelconques aprs, comme le montre le rsultat : 82 .


81

82

On constate en 82 que la recherche est indiffrente la casse, puisque sont rapatris


aussi des textes dans lesquels Bb figure tout au dbut.
Le dise dans 83 remplace un chiffre quelconque. Le motif permet donc de rapatrier les
fiches dont le texte contient un chiffre en nimporte quelle position : 84 .

100

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Extraire et trier les informations

101
83

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

84

Le motif de 85 isole les fiches dont le texte contient un tiret : 86 .


85

8.3.

86

Pouvoir de filtrage compar de MySQL et Access

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

Extraire et trier les informations

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

Extraire et trier les informations

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

Extraire et trier les informations

R223

R ESTRICTION(personnage_s C OMME % %)[vers]


,
,

R EGROUPER

SUR (personnage_s)[<rsultat1 >]

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

R ESTRICTION(personnage_s C OMME PHEDRE %)[vers]


,

P ROJECTION(
numero_vers T ITRE v.,
R EMPLACER(personnage_s, PHEDRE, *),
vers T ITRE vers commencs par Phdre
)[<rsultat1 >]

On suppose lexistence de la fonction :

105

Extraire et trier les informations

R EMPLACER(<chane dentre>, <sous-chane cible>, <sous-chane de substitution>)


qui remplace dans la <chane dentre> la <sous-chane cible> par la <sous-chane de substitution>.
Cette fonction permet de substituer la chane "PHEDRE" ltoile dans         : la
chane transforme est tout la fois plus courte et plus lisible quant la place o Phdre
intervient.

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

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 20 P HDRE : Phdre dans les vers quelle partage

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

vers commencs par Phdre


Hlas ! / Dieux tout-puissants, que nos pleurs vous apaisent.
Tu le veux. lve-toi. / Parlez, je vous coute.
Jaime... / Qui ? / Tu connais ce fils de lamazone,

personnages
OENONE *
OENONE
THESEE *
THESEE

vers o Phdre est encadre


Cet Hippolyte... / Ah, dieux ! / Ce reproche vous touche.

personnages
OENONE *
OENONE *
OENONE *
* OENONE
*
OENONE *
HIPPOLYTE
*
* OENONE
*
OENONE *
OENONE *
OENONE *
THESEE *
OENONE *
OENONE *
OENONE *

vers termins par Phdre


Quoi, Madame ? / Insense, o suis-je ? et quai-je dit ?
Aimez-vous ? / De lamour jai toutes les fureurs.
Pour qui ? / Tu vas our le comble des horreurs.
Jaime... / Qui ? / Tu connais ce fils de lamazone,

Ciel ! / Pour le choix dun matre Athnes se partage.


Donne. / Que faites-vous, Madame ? Justes dieux !
Quand je me meurs ! / Fuyez. / Je ne le puis quitter.
Il ntait point coupable. / Ah ! pre infortun !

Quil laime. / Quoi, seigneur ? / Il la dit devant moi.

Hippolyte ? grands dieux ! / Cest toi qui las nomm.


Et je vais... / Ah ! cruel, tu mas trop entendue.
Quand je me meurs ! / Fuyez. / Je ne le puis quitter.
Quoi ? / Je te lai prdit ; mais tu nas pas voulu.
Vous mourez ? / Juste ciel ! quai-je fait aujourdhui ?
On vient ; je vois Thse. / Ah ! je vois Hippolyte ;
Madame ; et dans vos bras met... / Arrtez, Thse,
Comment ? / Hippolyte aime, et je nen puis douter.
Aricie ? / Ah ! douleur non encore prouve !
Ils ne se verront plus. / Ils saimeront toujours.

107

Extraire et trier les informations

96

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

97

Attention : la requte 98 produit une table rsultat vide 99 . En effet, la condition de


restriction dComme PHEDRE *e porte sur une colonne transforme, dans laquelle la chane
PHEDRE a en ralit disparu. On le comprend mieux en comparant les 2 requtes SQL Server
engendres respectivement par 96 et par 98 :

SELECT Vers . numero_vers AS v ,


Replace ( [ personnage_s ] , "PHEDRE" , " " ) AS personnages ,
Vers . vers
FROM Vers
WHERE ( ( ( Vers . personnage_s ) Like "PHEDRE " ) ) ;

SELECT Vers . numero_vers AS v ,


Replace ( [ personnage_s ] , "PHEDRE" , " " ) AS personnages ,
Vers . vers
FROM Vers
WHERE ( ( ( Replace ( [ personnage_s ] , "PHEDRE" , " " ) ) Like "PHEDRE " ) ) ;

98

99

Vers se terminant par un phonme donn

On suppose la fonction :

R ENVERSER(<chane>)
qui retourne la chane de dpart inverse.

108

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 21 P HDRE : mots la rime se terminant par le phonme eu


occ_car
eux
deux
feux
souponneux
poudreux
affreux
dangereux
gnreux
heureux
malheureux
rigoureux
amoureux
honteux
voeux
cheveux
yeux
dieux
adieu

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$

SUR (occ_car)[<rsultat1 >]

P AR GROUPE(
occ_car,
R ENVERSER(occ_phon) T ITRE phon. invers,
N OMBRE DE LIGNES () T ITRE o.
[<rsultat2 >]
T RI

SUR (R ENVERSER (occ_phon))[<rsultat3 >]

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

Extraire et trier les informations

ORDER BY REVERSE( occ_phon ) ;

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

La mme requte pourrait tre abrge en :


SELECT DISTINCT derive
FROM esque
WHERE derive REGEXP [ AZ ] ;

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

Extraire et trier les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 22 E SQUE : drivs avec hiatus potentiel


derive
tapiesque
lamaesque
fabliesque
bdesque
raimuesque
charabiesque
dariomorniesque
foliesque
bibaesque
bougiesque
mobutuesque
ziziesque
chicagoesque
zaziesque
incaesque

derive
starmaniesque
casanoviesque
victor-hugoesque
zappaesque
hurluberluesque
carcoesque
avenuesque
zidiesque
Uoesque
tooliesque
dadaesque
ferriesque
carrapichiesque
Le corbusiesque
nerjiesque

Cinq drivs comprennent un chiffre : 1 avrilesque, 3D-esque, 4 pattesque, M6-esque et TF1esque.

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

SELECT DISTINCT derive


FROM esque
WHERE derive REGEXP [ aiou ] esque
AND derive NOT REGEXP [ qg ] uesque
ORDER BY RAND( )
LIMIT 30 ;

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

Extraire et trier les informations

TABLEAU 23 E SQUE : emplois qualificatifs de drivs (extraits)

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 :

REGEXP [ ; , . : ! ? ] ( t r s | f o r t |un peu|nettement ) <[^ >]+ >

Lajout de cette nouvelle contrainte fait disparatre le contexte erron.


Exemple de silence dbusqu : lorsquon prend en compte la possibilit que ladverbe de
degr commence par une majuscule :
REGEXP [ ; , . ! ? ] ( [ tT ] rs |[ fF ] o r t |[Uu] n peu|[Nn] ettement ) <[^ >]+ >

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

Les solutions sont de la forme :

R ESTRICTION(
sexe = Fille
ET
poids_naissance E NTRE 750 E T 1000
)[bebes]

112

Extraire et trier les informations

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

102 et 103 sont de simples variantes lune de lautre.

113

Extraire et trier les informations

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

Extraire et trier les informations

TABLEAU 24 P RMA : modalits de la variable relation infirmire-parents


relation_infirmiere_parents
je ne connais pas les parents
moyen
bon
mauvais

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]

Le rsultat figure au tableau 24 p. 115. Il dcoule de la

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

Solution de lexercice n 4 p. 85 Un vers partag en 3 se caractrise soit parce que lattribut


vers comprend 2 barres obliques spares, soit parce que lattribut personnage_s inclut deux
espaces spars par des majuscules.
Pour MySQL, introduit par REGEXP, le motif correspondant au premier cas de figure serait
/.+/ et au second [AZ]+ .

115

Extraire et trier les informations

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

Tirer au hasard le texte dune fiche de P RMA peut

T RI

ALATOIRE [<rsultat1 >]

L IMIT (1)[<rsultat2 >]

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

ALATOIRE [<rsultat2 >]

L IMIT (1)[<rsultat3 >]

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

Extraire et trier les informations




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

Lquivalent exact de la requte Access en MySQL est :


SELECT lemme,
categorie
FROM occ_prema
WHERE c a t e g o r i e REGEXP ^V.
ORDER BY RAND( )
LIMIT 10 ;

qui a pour rsultat par exemple :

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

CALCULER DE NOUVELLES INFORMATIONS

1. Indicateurs globaux
' nombre dinfirmires
R138 t. 1 p. 84

P AR GROUPE (
N OMBRE DE LIGNES ()
)[infirmieres]

TITRE

Nbre inf.

' nombre dinfirmires de jour


R139 t. 1 p. 84

R ESTRICTION(service = Jour)[infirmieres]
,

P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]

TITRE

Nbre inf. jour

' nombre dinfirmires de nuit


R140 t. 1 p. 84
R ESTRICTION(service = Nuit)[infirmieres]
,
P AR GROUPE (
N OMBRE DE LIGNES () TITRE Nbre inf. nuit
)[<rsultat1 >]
' nombre dinfirmires de jour ou de nuit
R141 t. 1 p. 84

R ESTRICTION(service Parmi (Nuit, Jour))[infirmieres]


,

P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]

TITRE

Nbre inf. jour + nuit


118

Calculer de nouvelles informations

' nombre dinfirmires ne travaillant pas de jour


R142 t. 1 p. 84

R ESTRICTION(service <> Jour)[infirmieres]


,

P AR GROUPE (
N OMBRE DE LIGNES ()
)[<rsultat1 >]

TITRE

Nbre inf. <> jour

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

Calculer de nouvelles informations

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

Calculer de nouvelles informations

TABLEAU 25 P RMA : indicateurs sur lge des infirmires


(a) Infirmires de jour version de dpart
R232 p. 120
COUNT(*)
29

MIN(age)
21

MAX(age)
44

AVG(age)
29.0000

STD(age)
4.7850

(b) Infirmires travaillant de jour version retitre et formate

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

(c) Infirmires travaillant de nuit version retitre et formate


R234 p. 120
Nbre inf. nuit
12

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 ;

qui produit comme rsultat :


COUNT(*)
29

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

Calculer de nouvelles informations

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

La table rsultante ne garde effectivement que les 13 ges diffrents.


2

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

Le rsultat est une table dune seule ligne.


4

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

Calculer de nouvelles informations

Le rsultat a la mme structure que 4 .

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

Calculer de nouvelles informations

TABLEAU 26 P RMA : renommer les colonnes dans une table rsultat


Identifiant
41
46
81
97
1
..
.

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

Le nom dune requte union est prcd de deux anneaux.


10

Renommer les colonnes de la table rsultat


MySQL

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]
,

P ROJECTION AVEC DOUBLONS(


id T ITRE Identifiant,
age T ITRE ge,
etudes T ITRE "annes dtude"
)[<rsultat1 >]

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

Calculer de nouvelles informations

FROM i n f i r m i e r e s
WHERE anciennete = 0 ;
SELECT . . .
etudes AS annes d\ tude ,
FROM . . . ;

tandis que le remplacement de la 3e ligne dans la requte par :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

etudes AS annes d tude

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

En 12 et en 13 figurent les oprations globales permises : regroupement, dcompte,


somme, maximum, minimum, variance (var carr de lcart type), etc.
12

13

125

Calculer de nouvelles informations

En 14 , est opr le dcompte du nombre dinfirmires, par le biais de celui de leurs


identifiants. Par ailleurs, Nbre inf suivi de deux points avant le nom de la colonne indique le
titre souhait dans la feuille de donnes rsultat, comme on le constate en 15 .
14

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

ou moins clairement laide : 17 .


16

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

Calculer de nouvelles informations

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

Exercice n 2 Fournir le nombre de lemmes distincts (types) et le nombre total de lemmes


(occurrences) prsents dans la table         et qui ont une catgorie adquate (cf. chapitre I
7), cest--dire commenant par A(djectif), N(om), R (pour AdveRbe), S (pour PrpoSition),
D(terminant), V(erbe), C(onjonction), P(ronom).
Exercice n 3 Pour les filles puis pour les garons, la naissance, calculer le nombre dindividus, le poids minimal, le poids maximal, le poids moyen et lcart-type.

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

Calculer de nouvelles informations

TABLEAU 27 E SQUE : nombre dattestations et de drivs


Attestations
4384

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]

' regroupement des infirmires par service


R145 t. 1 p. 87

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

Calculer de nouvelles informations

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 ;

Le regroupement par service par :

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 ;

Pour obtenir le nombre doccurrences de chacune des ralisations de bb (R147 t. 1 p. 90),


on a recours la requte :
SELECT
forme_depart ,
COUNT( ) AS o .
FROM occ_prema
WHERE lemme = bb
GROUP BY forme_depart

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

Calculer de nouvelles informations

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

Calculer de nouvelles informations

24

La requte 25 diffre de la prcdente par des alias de colonnes : 26 .

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

La requte 29 ajoute la prcdente le tri par ordre croissant du nombre dinfirmires


par groupes : 30 .
29

30

La requte 31 indique comment obtenir les diffrentes ralisations du lemme bb. Un



regroupement est effectu sur deux colonnes,    dabord,        ensuite. La restriction sur la colonne    conserve uniquement les lignes dont le lemme est bb. Pour
131

Calculer de nouvelles informations

chacune des ralisations de   


lignes correspondantes.

  pour ce lemme, on demande le calcul du nombre de

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

Calcul de pourcentages en connaissant leffectif de rfrence

' 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

Calculer de nouvelles informations

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

On peut obtenir simplement le nombre de bbs de chaque sexe la naissance : dCOUNT(*)e.


Comme il y a au total 121 prmaturs tudis, le pourcentage occup par chaque sexe se calcule aisment, cest le nombre de bbs du groupe courant divis par leffectif total (121) et
multipli par 100 :
R149 t. 1 p. 91

SELECT sexe AS Sexe ,


COUNT( ) AS nbre ,
COUNT( ) / 121 100 AS %
FROM bebes
GROUP BY sexe ;

Lobtention de la situation (mort, sortie de ranimation, ranimation) J3 dcoule de la


requte :
R150 t. 1 p. 92
SELECT
etat_J3 ,
COUNT( ) AS nbre ,
FORMAT(COUNT( ) / 121 100, 2) AS %
FROM bebes_princeps
GROUP BY e t a t _ j 3 ;

Le croisement du sexe et de la situation J3, en privilgiant dabord le sexe et ensuite la


situation, sobtient par les deux requtes :
R151 t. 1 p. 93
SELECT
sexe AS Sexe ,
etat_J3 ,
COUNT( ) AS nbre ,
FORMAT(COUNT( ) / 121 100, 2) AS %
FROM bebes_princeps
GROUP BY sexe , e t a t _ j 3 ;

133

Calculer de nouvelles informations

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

En comparant la requte formule via linterface graphique et celle engendre en SQL


Server, on note le passage du point-virgule la virgule pour sparer les arguments de la
fonction FORMATNUMBER.
SELECT Bebes_princeps . etat_J3 ,
Count ( Bebes_princeps . id ) AS nbre ,
FormatNumber ( [ nbre ]/121100 ,2) AS [%]
FROM Bebes_princeps
GROUP BY Bebes_princeps . etat_J3 ;

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

Calculer de nouvelles informations

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.

Calcul de pourcentages sans connatre leffectif de rfrence

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

Elle nopre pas de regroupements, la diffrence de la prcdente. Lexpression d      


retourne donc le nombre total de fiches. Loprateur
 (<condition>, <rsultat pour succs>, <rsultat pour chec>)
appliqu chaque fiche retourne la valeur 1 si la fiche est bien du jour 1 et 0 sinon. La
somme (S OMME) des appels cet oprateur est le nombre de fiches du jour 1. Le calcul du
pourcentage des fiches du jour 1 seffectue en utilisant ce nombre. Noter que la premire
colonne de la table rsultat est occupe par la chane J1 qui est place directement dans ce
qui est retourn. La gnralisation du calcul la vole du total de fiches et du nombre pour
un jour donn aboutit au tableau 28(bas) p. 136.



 e

MySQL

135

Calculer de nouvelles informations

TABLEAU 28 P RMA : rpartition des fiches par jour


R238 p. 135
J1
J1

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

Access engendre la requte SQL Server suivante :


SELECT " J1 " AS Moment,
Sum( I I f ( [ jour ] = 1 , 1 , 0 ) ) AS fiches ,
Sum( I I f ( [ jour ] = 1 , 1 , 0 ) ) /Count ( [ id ])100 AS [%]
FROM f i c h e s _ o r i g i n e l l e s ;

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

Calculer de nouvelles informations

TABLEAU 29 P RMA : les dnominations des bbs au fil du temps


R239 p. 137
Jour
1
3
7
15

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

SELECT jour AS Jour ,


COUNT( ) AS f . ,
SUM( IF ( t e x t e REGEXP [ Bb ] [ Ee . ] ? [ Bb ] [ Ee . ] ?
AS bb ,
SUM( IF ( t e x t e REGEXP [ Bb ] [ Ee . ] ? [ Bb ] [ Ee . ] ?
/ COUNT( ) 100 AS % ,
...
SUM( IF ( t e x t e REGEXP [ Pp ] rma
AND t e x t e NOT REGEXP [ Pp ] rmaturit ,
AS prma ,
SUM( IF ( t e x t e REGEXP [ Pp ] rma
AND t e x t e NOT REGEXP [ Pp ] rmaturit ,
/ COUNT( ) 100 AS % ,
...
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY jour ;

, 1, 0))
, 1, 0))

1, 0))

1, 0))

137

Calculer de nouvelles informations

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 ;

fournit les 10 premires lignes des poids de naissance des bbs :


poids_naissance
920
830
1620
1350
1045
1400
910
640
790
500

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 ;

remplace la valeur du poids la naissance par celle correspondant la voie adquate de


laiguillage. Les deux premires lignes de la table correspondent la troisime condition, la
troisime la deuxime condition et la dernire au premier cas de figure. On obtient alors la
table :

138

Calculer de nouvelles informations

Classe poids naissance


750-1000
750-1000
> 1000
> 1000
> 1000
750-1000
750-1000
> 1000
750-1000
< 750

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 ;

Elle produit la table :


Classe poids naissance
750-1000
< 750
> 1000

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

Calculer de nouvelles informations

Exercice n 11 Les fiches indiquent pour chaque bb si, au moment du remplissage de la


fiche, il est sous ventilation ou sous sdation. Les modalits de chacune de ces variables sont
les suivantes :

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

Calculer de nouvelles informations

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

R ESTRICTION(partage_en > 1)[vers]


,

La requte :

P ROJECTION(
...
numero_vers,
personnage_s,
partage_en
)[<rsultat1 >]
T RI

SUR (personnage_s)[<rsultat2 >]

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 ESTRICTION(partage_en > 1)[vers]


,
,

R EGROUPER

SUR (personnage_s)[<rsultat1 >]

P AR GROUPE(
...
numero_vers,
personnage_s,
partage_en,
...
)[<rsultat2 >]

aboutit ainsi au tableau 31, p. 143.


La requte encore amende :
141

Calculer de nouvelles informations

TABLEAU 30 P HDRE : vers partags entre personnages


R240 p. 141

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

Calculer de nouvelles informations

TABLEAU 31 P HDRE : regroupements dassociations de personnages


R241 p. 141

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 ESTRICTION(partage_en > 1)[vers]


,
,

R EGROUPER

SUR (personnage_s)[<rsultat1 >]

P AR GROUPE(
personnage_s,
C OMPTE(personnage_s) T ITRE nbre v.
)[<rsultat2 >]

indique le nombre de vers correspondant chaque association de personnages (tableau 32,


p. 144).
Dans la requte R243 :
R243

R ESTRICTION(partage_en > 1)[vers]


,
,

R EGROUPER SUR(personnage_s)[<rsultat1 >]


AVEC (C OMPTE(personnage_s) > 1)
P ROJECTION(
personnage_s,
C OMPTE(personnage_s) T ITRE nbre v.
)[<rsultat2 >]
T RI

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

Calculer de nouvelles informations

TABLEAU 32 P HDRE : nombre doccurrences des associations de personnages

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 :

SELECT . . . , numero_vers , personnage_s , partage_en , . . .


FROM vers
WHERE partage_en > 1
ORDER BY personnage_s ;

TABLEAU 33 P HDRE : associations rptes de personnages


R243 p. 143
personnage_s
OENONE PHEDRE
ARICIE HIPPOLYTE
THERAMENE HIPPOLYTE
PHEDRE OENONE
PHEDRE OENONE PHEDRE
ARICIE ISMENE
THESEE HIPPOLYTE
THESEE THERAMENE

nbre v.
10
4
3
3
2
2
2
2

144

Calculer de nouvelles informations

La requte R242 p. 143 sincarne en :


SELECT personnage_s ,
COUNT( personnage_s ) AS nbre v .
FROM vers
WHERE partage_en > 1
GROUP BY personnage_s ;

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte R243 p. 143 donne naissance :


SELECT personnage_s ,
COUNT( personnage_s ) AS nbre v .
FROM vers
WHERE partage_en > 1
GROUP BY personnage_s
HAVING COUNT( personnage_s ) > 1
ORDER BY nbre v . DESC ;

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 SQL Server engendre est la suivante :


SELECT Vers . personnage_s ,
Count ( Vers . personnage_s ) AS [ nbre vers ]
FROM Vers
WHERE ( ( ( Vers . partage_en ) > 1 ) )
GROUP BY Vers . personnage_s ;

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

La requte SQL Server engendre est la suivante :


SELECT Vers . personnage_s ,
Count ( Vers . personnage_s ) AS [ nbre vers ]
FROM Vers
WHERE ( ( ( Vers . partage_en ) > 1 ) )
GROUP BY Vers . personnage_s
HAVING ( ( ( Count ( Vers . personnage_s ) ) > 1 ) ) ;

145

Calculer de nouvelles informations

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

SELECT acte AS Acte ,


COUNT( ) AS nbre v . ,
SUM( IF ( partage_en = 1 , 0 , 1 ) ) AS v . partags
FROM vers
GROUP BY acte ;

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 34 Phdre : partages de vers par acte et par scne


R244 p. 146
Acte
I
II
III
IV
V

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

Calculer de nouvelles informations

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.

3. Oprateurs sur les colonnes


On se reportera p. 507 pour les diffrences entre MySQL et SQL Server.

Oprateurs numriques
MySQL
Oprateurs numriques :
somme (+),
148

Calculer de nouvelles informations

TABLEAU 35 P RMA : lexprience dans le temps


R246 p. 149
Dbut exprience
1999-03-17

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

Oprateurs sur une suite de donnes numriques ( 2) :

comptage (COUNT),
somme (SUM),
moyenne (AVG),
cart-type (STD),
minimum (MIN),
maximum (MAX). . .

Oprateurs sur les donnes temporelles


Supposons lexistence dune fonction
J OURS P OUR D ATE(<date>)
qui prend en argument une date et retourne le nombre de jours entre cette date et un repre
arbitraire (le jour 1 de lan 1).
Une premire requte (tableau 35, en haut, p. 149) montre comment trouver la plus ancienne date de naissance et la plus rcente et comment obtenir le nombre de jours sparant
les deux :
R246

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

Calculer de nouvelles informations

MySQL

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La fonction TO_DAYS est lincarnation en MySQL de J OURS P OUR D ATE.


La seconde requte (tableau 35, en bas, p. 149) utilise un formatage des dates pour passer
de la reprsentation amricaine (AAAA-MM-JJ) sous laquelle est mmorise la date deux
reprsentations distinctes, mais plus franaises.
R246 p. 149
SELECT
MIN( jour_naissance ) AS Dbut exprience . ,
MAX( jour_naissance ) AS f i n exprience ,
TO_DAYS(MAX( jour_naissance ) )
TO_DAYS(MIN( jour_naissance ) ) AS nombre de jours
FROM bebes ;

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

La requte 46 quivaut la deuxime des requtes MySQL prcdentes (R247 p. 150).


Noter le choix ddExpressione pour lopration de la troisime colonne. On indique ainsi que la
colonne correspondante de la table rsultat est issue dun calcul dont les composants figurent
dans la premire ligne.
46

Oprateurs sur chanes


MySQL
Analyse de chanes :
longueur dune chane (LENGTH) ;
galit dune chane avec une chane cible (STRCMP) ;
localisation dune sous-chane au sein dune chane plus vaste (LOCATE).
Extraction dune sous-chane :
gauche (LEFT),
droite (RIGHT),
partir dun point donn et pour une longueur fixe (SUBSTRING).
Transformation des chanes fournies en argument :
inversion (REVERSE) ;
mise en majuscules (UPPER) ou en minuscules (LOWER) ;
remplacement dune sous-chane (REPLACE) ;
concatnation (CONCAT).
150

Calculer de nouvelles informations

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

moy. car. D CROISSANT)[<rsultat2 >]

Son quivalent MySQL est :

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 ;

Le modifieur DISTINCT permet le dcompte des valeurs distinctes de lidentifiant

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

Access conduit souvent dcoupler la production de rsultats grossiers, comme cette


moyenne chiffres dcimaux surabondants, et la prsentation lisse de ces rsultats.
Le premier volet relve des oprations classiques des SGBD et en particulier des fonctions et
oprateurs du dialecte de SQL employ, SLQ Server. Le second volet est dlgu aux tats. Un
tat est une prsentation affine dun rsultat brut. On utilise pour ce faire longlet de mme
nom dans la fentre de navigation dans la base de donnes.
Crons un tat destin obtenir une prsentation plus lisible et surtout simplement
limiter deux chiffres aprs la virgule la moyenne du nombre de caractres par fiche. La
151

Calculer de nouvelles informations

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

On peut oprer des regroupements au sein de ltat 51 .

152

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

51

On peut trier sur au maximum quatre colonnes 52 .


52

Il est possible de choisir un format de prsentation 53 , dterminer un style 54 , donner


un titre cet tat (de manire pouvoir le rutiliser volont) et choisir ou non de visualiser
un aperu 55 .
53

153

Calculer de nouvelles informations

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

Toujours dans longlet dtatse de la fentre de navigation dans la base, on entreprend de


modifier ltat quon vient de sauvegarder. On obtient une fentre similaire 57 .

154

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

57

On peut modifier les sur-titre et titres en cliquant dans la zone correspondante et en


effaant, ajoutant, etc. On voit le rsultat en 58 pour le sur-titre.
58

En se plaant sur la zone daffichage de la moyenne, on accde via le bouton droit 59 un


menu de configuration dPropritse, qui permet en loccurrence de choisir le format adquat
daffichage de la moyenne (ici trois chiffres aprs la virgule).
59

On sauvegarde ltat modifi 60 .


60

Cela permet de disposer par la suite de cet tat mis jour :

155

Calculer de nouvelles informations

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

Calculer de nouvelles informations

TABLEAU 36 P RMA : contextes droits de bb

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

R ESTRICTION(cat Parmi (Dt/Pron, Nc,V, Adj, Np,


Conj, Prp, Rel, Adv))[occurrences]
,

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

Calculer de nouvelles informations

TABLEAU 37 E SQUE : driv 6= base + -esque

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 :

SELECT derive , base


FROM esque
WHERE base NOT LIKE % %
AND base <> ?
AND CONCAT(LOWER( base ) , " esque " ) <> LOWER( derive )
ORDER BY RAND( )
;

Une partie des dcalages constats figure dans le tableau 37, p. 158. On met jour ainsi :

des erreurs de saisie : clochardesque sur clachard ;


des chutes de la voyelle finale : gigolesque sur gigolo ;
lajout de consonnes dappui : dahutesque sur dahu et canulardesque sur canular ;
le maintien du hiatus : guerilla-esque sur guerilla ;
des doublements de la consonne finale : epsilonnesque sur epsilon.

4. Faire face linconnu :

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

Calculer de nouvelles informations

TABLEAU 38 Prma : poids par jour et non-rponses


Jour

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

N ULL S I(<valeur examine>, <valeur remplacer par NULL>)


qui examine une valeur et retourne NULL si la valeur examine est gale la valeur remplacer
par NULL. Dans le cas contraire, N ULL S I renvoie la valeur examine.
R252
,

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

Calculer de nouvelles informations

SUM( IF ( poids = 0 , 1 , 0 ) ) AS nbre f i c h e s poids = 0 ,

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

Calculer de nouvelles informations

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 ;

On notera que les requtes :

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 :

ERROR 1054 (42S22) : Unknown column jour in having clause

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 ;

Une autre solution est :


SELECT SUM( IF ( jour = 1 , 1 , 0 ) )
FROM f i c h e s _ o r i g i n e l l e s ;

Access
On trouve la ralisation de la R253 p. 160 en 62 .
62

Son quivalent SQL Server figure en 63 .


63

En 64 le rsultat.
161

Calculer de nouvelles informations

TABLEAU 39 P RMA : nombre de types et doccurrences de lemmes


Types
1801

o.
32058

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

64

Linstanciation de la R254 p. 160 figure en 65


65

On trouve en 66 lquivalent SQL Server.

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

Solution de lexercice n 2 p. 127

Le rsultat figure au tableau 39 p. 162.

162

Calculer de nouvelles informations

TABLEAU 40 Prma : poids la naissance par sexe


Filles
nbre
57

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 >

La condition de restriction pourrait tre exprime plus prcisment de la manire suivante :


WHERE categorie REGEXP ^[ANRSDVCP];

cest--dire en spcifiant que la majuscule correspondant aux parties du discours attendues


doit figurer en dbut de catgorie. Le rsultat est bien sr le mme, puisquil ny a de majus
cule qu linitiale dans les valeurs de lattribut     .
Solution de lexercice n 3 p. 127 Le rsultat pour les filles figure au tableau 40 p. 163
en haut (en bas, modulo un changement de la condition de restriction, le rsultat pour les
garons). Il provient de la requte :
R256

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

Calculer de nouvelles informations

MySQL

SELECT COUNT( sexe ) AS nbre ,


MIN( poids_naissance ) AS poids min .
MAX( poids_naissance ) AS poids max.
FORMAT(AVG( poids_naissance ) , 2) AS
FORMAT(STD( poids_naissance ) , 2) AS
FROM bebes
WHERE sexe = F i l l e ;

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

En 71 la requte SQL Server engendre.


71

On pourrait galement, au lieu de rajouter une colonne dOpratione en cliquant sur le de


la barre de menu du haut, directement faire appel ces oprations dans len-tte de chaque
colonne, comme en 72 (SQL Server engendr en 73 ). Le rsultat sera le mme : 74 .
72

73

74

On remarquera que la requte SQL Server engendre en 71 et en 73 est la mme.


164

Calculer de nouvelles informations

La requte 75 provoque par contre une erreur : 76 .


75

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

Calculer de nouvelles informations

81

Solution de lexercice n 4 p. 127


R257

R ESTRICTION(personnage_s = PHEDRE)[vers]
,

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte abstraite est de la forme :

P AR GROUPE(
N OMBRE DE LIGNES ()
)[<rsultat1 >]

MySQL

SELECT COUNT( )
FROM vers
WHERE personnage_s = PHEDRE ;

Access

La solution 82 consiste oprer une restriction sur la colonne         : la ligne pour


tre retenue doit avoir pour cet attribut la valeur PHEDRE. On appelle alors explicitement
la fonction Compte sur la colonne       et on donne cet attribut calcul un titre plus
parlant ( gauche des deux points).
82

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

Calculer de nouvelles informations

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

Solution de lexercice n 5 p. 127

La requte abstraite est de la forme :

167

Calculer de nouvelles informations

TABLEAU 41 P HDRE : place dOenone et de Thse

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 :

SELECT COUNT( numero_vers ) ,


MIN( numero_vers ) ,
MAX( numero_vers )
FROM vers
WHERE personnage_s = OENONE ;

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

Calculer de nouvelles informations

SELECT Count ( Vers . vers ) AS [ Nbre vers ] ,


Min( Vers . numero_vers ) AS [1 er vers ] ,
Max( Vers . numero_vers ) AS [ dernier vers ]
FROM Vers
WHERE ( ( ( Vers . personnage_s )= "OENONE" ) ) ;

tandis que le second engendre un HAVING (dailleurs sans GROUP BY correspondant) :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SELECT Count ( Vers . vers ) AS [ Nbre vers ] ,


Min( Vers . numero_vers ) AS [1 er vers ] ,
Max( Vers . numero_vers ) AS [ dernier vers ]
FROM Vers
HAVING ( ( ( Vers . personnage_s )= "OENONE" ) ) ;

Solution de lexercice n 6 p. 127


R259

R ESTRICTION(
personnage_s R ESSEMBLANT
)[vers]
,

La requte abstraite est de la forme :

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 ;

Lexpression rgulire permet de chercher le nom du personnage nimporte quel endroit


au sein de lattribut         . On constate alors quOenone intervient dans 220 vers (seule
dans 202), tandis que Thse intervient dans 234 vers (seul dans 224). Le premier vers et le
dernier vers de ces deux personnages sont les mmes quon utilise ou non une expression
rgulire : Oenone comme Thse commencent et terminent leur prsence sur scne par un
vers plein.
On pourrait galement formuler la restriction en faisant appel des mcanismes plus
frustes :
. . . WHERE personnage_s LIKE

%OENONE% ;

169

Calculer de nouvelles informations

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

Calculer de nouvelles informations

TABLEAU 42 P RMA : accouchement et lieu de naissance


Accouchement
csarienne
voie basse
Naissance
locale
non locale

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

Solution de lexercice n 8 p. 139 La rpartition en effectifs et en pourcentage se trouve


dans le tableau 42 p. 171. Les requtes sont :
R261

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

Calculer de nouvelles informations

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

La formule de calcul du pourcentage pour chaque type daccouchement en 96 fait appel


[nbre], le nom donn lattribut calcul par dcompte du nombre de valeurs dans la colonne
id.
96

97

La requte SQL engendre est :

SELECT Bebes_princeps . accouchement ,


Count ( Bebes_princeps . id ) AS nbre ,
[ nbre]/121100 AS [%]
FROM Bebes_princeps
GROUP BY Bebes_princeps . accouchement ;

La requte MySQL quivalente :


SELECT accouchement ,
COUNT( ) AS nbre ,
nbre / 121 100 AS %
FROM bebes
GROUP BY accouchement ;

na pas le mme rsultat :


accouchement
csarienne
voie basse

nbre
54
67

%
0
0

Tout se passe comme si MySQL, la diffrence dAccess et de SQL Server, ne considrait


pas le nom donn dans la table-rsultat comme un nom dattribut comme les autres et ne
pouvait donc pas lutiliser dans des calculs.

172

Calculer de nouvelles informations

TABLEAU 43 P RMA : rpartition des fiches par jour


Jour
1
3
7
15

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Solution de lexercice n 9 p. 139


p. 173.
R263

R EGROUPER
,

fiches
327
287
225
178

%
32.15
28.22
22.12
17.50

Les rsultats de la requte R263 figurent dans le tableau 43

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

SELECT jour AS Jour ,


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 jour ;

Access
98

Solution de lexercice n 10 p. 139 Le tableau 44 p. 174 indique pour chaque jour le


nombre de bbs concerns par ltude et le pourcentage correspondant. Il rsulte de la requte R264 . chaque tape, certains bbs vont suffisamment mieux pour quitter le service
de ranimation nonatale voire lhpital. Dautres dcdent. Au jour 15, il ne reste plus que
60.33% de leffectif de dpart.

173

Calculer de nouvelles informations

TABLEAU 44 P RMA : nombre de bbs par jour


bbs J1
121

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

100 y ajoute le formatage du pourcentage, comme en tmoigne le rsultat 101 .


100

174

Calculer de nouvelles informations

101

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Solution de lexercice n 11 p. 139 Les tableaux 45 p. 176 et 46 p. 176 combinent pour


la sdation et la ventilation des bbs chaque fois les regroupements pour lensemble des
fiches, en haut, et, en bas, la rpartition des modalits observes (effectif et pourcentage),
en aval dun regroupement par jour. Labsence de sdation varie peu en proportion, sauf au
jour 7, o elle augmente. La ventilation diminue du fil du temps, surtout partir du jour 3.
Ce recul touche particulirement lintubation. Sont fournies les requtes R265 et R266 pour la
sdation. Les requtes pour la ventilation sont similaires.
R265

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

SUR (%)[<rsultat2 >]

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

Calculer de nouvelles informations

TABLEAU 45 P RMA : sdation globalement et par jour


Sdation
non reponse
canadou
hypnovel ou fentanyl
non

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

TABLEAU 46 P RMA : ventilation globalement et par jour


Ventilation
non reponse
sonde nasale
non
intub

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

SUM( IF ( sedation = non , 1 , 0 ) )


/ COUNT( ) 100 AS % ,
SUM( IF ( sedation = hypnovel ou fentanyl , 1 , 0 ) ) AS Hypno . Fent . ,
SUM( IF ( sedation = hypnovel ou fentanyl , 1 , 0 ) )
/ COUNT( ) 100 AS % ,
SUM( IF ( sedation = canadou , 1 , 0 ) )AS canadou ,
SUM( IF ( sedation = canadou , 1 , 0 ) )
/ COUNT( ) 100 AS %
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY jour ;
SELECT v e n t i l a t i o n AS V e n t i l a t i o n ,
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 v e n t i l a t i o n
ORDER BY % ;
SELECT
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
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
SUM( IF ( v e n t i l a t i o n

=
=
=
=
=
=
=

sonde nasale AND jour


sonde nasale AND jour
1 , 1 , 0 ) ) 100 AS % ,
sonde nasale AND jour
sonde nasale AND jour
3 , 1 , 0 ) ) 100 AS % ,
sonde nasale AND jour

= 1 , 1 , 0 ) ) AS J1 ,
= 1, 1, 0))
= 3 , 1 , 0 ) ) AS J3 ,
= 3, 1, 0))
= 7 , 1 , 0 ) ) AS J7 ,

176

Calculer de nouvelles informations

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

=
=
=
=
=
;

sonde nasale AND jour = 7 , 1 , 0 ) )


7 , 1 , 0 ) ) 100 AS % ,
sonde nasale AND jour = 15, 1 , 0 ) ) AS J15 ,
sonde nasale AND jour = 15, 1 , 0 ) )
15, 1 , 0 ) ) 100 AS %

Access
Lquivalent de la R265 p. 175 est :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

102

au tri prs par pourcentage croissant. Curieusement, quand on ajoute ce tri :


103

le nom     qui faisait rfrence au nombre de fiches du groupe courant est considr comme
un paramtre :
104

Lexamen de la requte SQL Server engendre :


SELECT f i c h e s _ o r i g i n e l l e s . sedation ,
Count ( f i c h e s _ o r i g i n e l l e s . id ) AS fiches ,
[ f i c h e s ]/1017100 AS [%]
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY f i c h e s _ o r i g i n e l l e s . sedation
ORDER BY [ f i c h e s ]/1017100;

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

Son rsultat figure en 106 .

177

Calculer de nouvelles informations

106

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte SQL Server engendre est la suivante :


SELECT f i c h e s _ o r i g i n e l l e s . jour ,
Count ( f i c h e s _ o r i g i n e l l e s . id ) AS nbre ,
Sum( I I f ( [ sedation ]= non , 1 , 0 ) ) AS non ,
[ non ] / [ nbre ]100 AS [%]
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY f i c h e s _ o r i g i n e l l e s . jour ;

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

Quand on examine la requte SQL Server engendre, on constate queffectivement, le calcul


du nombre de lignes du groupe courant a disparu :
SELECT f i c h e s _ o r i g i n e l l e s . jour ,
Sum( I I f ( [ sedation ]= non , 1 , 0 ) ) AS non ,
[ non ] / [ nbre ]100 AS [%]
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY f i c h e s _ o r i g i n e l l e s . jour ;

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

Calculer de nouvelles informations

Le rsultat figure en 110 .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

110

111 correspond la sauvegarde de la requte sous le nom

 

  

 

  .

111

Les tapes des quatre analyses croises (dont seuls les rsultats sont fournis pour les trois
dernires) sont les suivantes :

1. choix de la table/requte dentre (ici

 

  

 

  ) ;

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

Calculer de nouvelles informations

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

La requte est sauvegarde.

180

Calculer de nouvelles informations

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

En 118 , le croisement sexe et sdation.


118

En 119 , le croisement jour-sexe et sdation.


119

En 120 , le croisement jour-sexe et ventilation.


120

Solution de lexercice n 13 p. 140

181

Calculer de nouvelles informations

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

WHEN anciennete < 1 THEN < 1


WHEN anciennete > 5 THEN > 5
ELSE 15
END
AS Classe anciennet ,
COUNT( ) AS o .
FROM infirmieres_princep s
GROUP BY
CASE
WHEN anciennete < 1 THEN < 1
WHEN anciennete > 5 THEN > 5
ELSE 15
END ;

Le rsultat est le suivant :

Classe anciennet
1-5
<1
>5

o.
14
13
15

Le croisement entre service et classes danciennet sobtient par :

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

Calculer de nouvelles informations

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.
 

On commence par une requte oprant un regroupement de la table      sur lattribut



, conservant cet attribut et le nombre doccurrences de chaque groupe.


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

En 125 , un extrait de la table rsultante.

183

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

125

partir de longlet dTablese de la fentre de navigation dans la base de donnes, on peut



     .
modifier la structure de la table     
126

On trouve en 127 la structure de la table avant modification.


127

On ajoute un attribut   

 



, de type Texte.
128

On confirme la modification de la structure de la table.


184

Calculer de nouvelles informations

129

On cre alors une requte qui porte sur les attributs  



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

Lexcution de cette requte dclenche une demande de confirmation.


132

On agit de la mme manire pour les deux autres valeurs de   


un rsultat du type :

 



et on obtient
133

185

Calculer de nouvelles informations

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

137

On choisit enfin lattribut et le calcul lui appliquer pour lintersection    |      .


On compte ici le nombre didentifiants dinfirmires, donc le nombre dinfirmires qui rentre
dans la classe en question pour une valeur donne de    .
138


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

Calculer de nouvelles informations

Solution de lexercice n 15 p. 141 Les rsultats sont les suivants :


lemme

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

Leur correspondent les requtes suivantes :


R267

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

L IMIT (10)[<rsultat3 >]


R ESTRICTION(
categorie R ESSEMBLANT
)[occ_prema]

,
,

,
,

R EGROUPER

^[ANRSDVCP]

SUR (lemme)[<rsultat1 >]

P AR GROUPE(
lemme,
N OMBRE DE LIGNES () Titre o.
)[<rsultat2 >]
T RI

SUR (o.

D CROISSANT)[<rsultat3 >]

L IMIT (10)[<rsultat4 >]

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 47 Phdre : pourcentage daccents par position


Syllabe
1
2
3
4
5
6
7
8
9
10
11
12

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

. . . WHERE c a t e g o r i e REGEXP ^[ANRSDVCP] . . .

Access
141

142

Solution de lexercice n 16 p. 148 Le rsultat de la R269 figure au tableau 47 p. 189.


R269

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

Calculer de nouvelles informations

TABLEAU 48 P HDRE : proportion de vers partags par personnage


Aricie : vers
140

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

Calculer de nouvelles informations

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 % ;

Loprateur LIKE pourrait dailleurs tre remplac par REGEXP :

SELECT
...
FROM vers
WHERE personnage_s REGEXP ARICIE ;

Access
144 fournit une premire solution, dont le rsultat figure en 145 .
144

145

146 , apparemment identique 144 , en diffre cependant pour la formulation du calcul


dans la 3e colonne : [ Aricie] remplace [Aricie], une espace figure aprs le crochet ouvrant.
Dans ces conditions, pour Access, ce qui figure entre crochets nest pas le nom dune colonne

191

Calculer de nouvelles informations

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

En 149 se trouve le rsultat.


149

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

Calculer de nouvelles informations

150

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte SQL Server engendre est en effet de la forme :


SELECT
Sum( I I f ( [ personnage_s ] Like ARICIE , 1 , 0 ) ) AS A r i c i e ,
[ A r i c i e ] [ seule ] AS avec ,
[ avec ] / [ A r i c i e ]100 AS [%]
FROM Vers ;

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 ;

Solution de lexercice n 18 p. 148 Les rsultats figurent du tableau 49 au tableau 52, de


la p. 194 la p. 196.
Chacune des requtes est construite sur le mme modle :
R271

R ESTRICTION(
cat P ARMI (Adj, Nc, Np, V)
)[occurrences]
,

R EGROUPER SUR(occ_car)[<rsultat1 >]


AVEC(
N OMBRE DE VALEURS DISTINCTES(personnage) = 1
E T personnage = PHEDRE
E T N OMBRE DE LIGNES () > 1
)[<rsultat1 >]
P AR GROUPE(
personnage,
occ_car,
cat,
N OMBRE DE LIGNES () Titre o.
)[<rsultat2 >
T RI

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 49 P HDRE : mots (hors hapax) prononcs uniquement par Phdre

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 50 P HDRE : mots (hors hapax) prononcs uniquement par Hipollyte

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

TABLEAU 51 P HDRE : mots (hors hapax) prononcs uniquement par Aricie


personnage
ARICIE
ARICIE
ARICIE
ARICIE
ARICIE

occ_car
Prsents
adieu
songe
Partez
honorer

cat
Nc
Nc
Nc
V
V

o.
3
2
2
3
2

195

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 52 P HDRE : mots (hors hapax) prononcs uniquement par Thse


personnage
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE
THESEE

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

Solution de lexercice n 19 p. 148 Il suffit dajouter aux requtes prcdentes la contrainte


que la fin du mot soit en 12e syllabe (rsultat tableau 53 p. 197).

R272

R ESTRICTION(
cat P ARMI (Adj, Nc, Np, V)
E T fin_syl = 12
)[occurrences]
,

R EGROUPER SUR(occ_car)[<rsultat1 >]


AVEC(
N OMBRE DE VALEURS DISTINCTES(personnage) = 1
E T personnage = PHEDRE
E T N OMBRE DE LIGNES () > 1
)[<rsultat1 >]
P AR GROUPE(
personnage,
occ_car,
cat,
N OMBRE DE LIGNES () Titre o.
)[<rsultat2 >
T RI

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 53 P HDRE : mots la rime propres 1 personnage


personnage
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE
PHEDRE

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 ;

Solution de lexercice n 20 p. 148


R273

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 \? ;

dclenchent en effet un message derreur :


Got error repetition-operator operand invalid from regexp
dans la mesure o le point dinterrogation intervient normalement comme oprateur post-pos
de rptition optionnelle. Une double contre-oblique ou encore lutilisation dun ensemble de
caractres rduit au singleton ? signale lemploi littral du point dinterrogation :
197

Calculer de nouvelles informations

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

Solution de lexercice n 21 p. 148 On constate, au travers du tableau 54 p. 199, que la


requte :
R274

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 54 E SQUE : les auteurs de plus de 5 drivs en -esque

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

Calculer de nouvelles informations

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

Solution de lexercice n 22 p. 157


R275
,

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

Calculer de nouvelles informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 55 P HDRE : noms communs > 5 o. par personnage


Personnage
ARICIE
ARICIE
ARICIE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
HIPPOLYTE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE
OENONE

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

TUDE DE CAS 2 : PHDRE

1. Vers, syntaxe, drame : vues en tension


1.1.

Rpartition des fins de phrases par personnages et positions mtriques

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

SUR (personnage)[<rsultat1 >]

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

tude de cas 2 : Phdre

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SELECT personnage AS Personnage ,


COUNT( ) AS f i n de phrases ,
SUM( IF ( debut_syl = 6 , 1 , 0 ) ) AS 6 ,
SUM( IF ( debut_syl = 6 , 1 , 0 ) ) / COUNT( ) 100 AS % ,
SUM( IF ( debut_syl = 12, 1 , 0 ) ) AS 12 ,
SUM( IF ( debut_syl = 12, 1 , 0 ) ) / COUNT( ) 100 AS % ,
SUM( IF ( debut_syl NOT IN ( 6 , 12) , 1 , 0 ) ) AS autre ,
SUM( IF ( debut_syl NOT IN ( 6 , 12) , 1 , 0 ) )
/ COUNT( ) 100 AS %
FROM occurrences
WHERE cat = SepPhrase
GROUP BY personnage
ORDER BY f i n de phrases ;

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

tude de cas 2 : Phdre

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

Exercice n 1 Pour chaque personnage de Phdre, calculer le nombre de mots, de phrases,


de tirades, ainsi que le nombre de mots en moyenne par phrase et par tirade.

2. Une base pour articuler les points de vue


On se reportera au ch. XV 3 pour le dtail des types de donnes offerts par MySQL et
Access pour les attributs des tables.

3. Les vers
3.1.

Conventions phontiques du mtromtre

Les conventions phontiques de (Beaudouin, 2002) sont prsentes dans le tableau 56


p. 205.
MySQL
La structure de la table

figure au tableau 57 p. 205.

figure en 4 .

Access
La structure de la table

204

tude de cas 2 : Phdre

TABLEAU 56 P HDRE : conventions phontiques du mtromtre

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

TABLEAU 57 P HDRE : structure de la table


Field
acte
scene
numero_vers
personnage_s
partage_en
vers
vers_phonetique

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

tude de cas 2 : Phdre

TABLEAU 58 P HDRE : structure de la table       (MySQL)

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


La structure de la table       figure au tableau 58 p. 206.




Cette table comprend un attribut valeur auto-incrmente (cf.          dans la



colonne   ). Cest le moyen de donner automatiquement chacune des lignes dune table un
numro dordre arbitraire tel quune nouvelle ligne ait un numro dordre plus grand que tous
les numros dordre dj existants. Chaque nouvelle ligne ajoute comprenant un tel attribut
voit cet attribut prendre la valeur suivante de la dernire valeur donne automatiquement.
Access
La structure de la table      



figure en 5 .

206

tude de cas 2 : Phdre

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 59 P HDRE : structure de la table      


Field
numero_vers
personnage
numero_tirade
numero_phrase
occ_car
occ_phon
cat
type_liaison
liaison
debut_car
fin_car
debut_phon
fin_phon
debut_syl
fin_syl
syllabe_accentuee
numero_ligne

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      



figure au tableau 59 p. 207.

Un certain nombre de requtes complmentaires permettent de cerner le contenu de cette


table. La premire :
SELECT cat AS Catgorie ,
COUNT( ) AS o .
FROM occurrences
GROUP BY cat ;

dont lquivalent abstrait est :

207

tude de cas 2 : Phdre

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 ;

dont lquivalent abstrait est :


R278
,

,
,

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

L IMIT (10)[<rsultat4 >]

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

tude de cas 2 : Phdre

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 60 P HDRE : frquence des catgories de la table      


Catgorie
Adj
Adv
Conj
Dt/Pron
Espace
Nc
Np
Prp
Rel
SepGroupe
SepGuillemet
SepParentheseFermante
SepParentheseOuvrante
SepPhrase
SepPhraseOuGroupe
SepTiradeDansVers
V



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

tude de cas 2 : Phdre

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 61 P HDRE : 10 premiers Adj, Adv, Nc, Np, V

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

tude de cas 2 : Phdre

TABLEAU 62 P HDRE : 10 premiers Conj, Dt/Pron, Rel, Prp

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

SUR (personnage)[<rsultat1 >]

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

(nombre moy. mots / phrase)[<rsultat3 >

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

tude de cas 2 : Phdre

TABLEAU 63 P HDRE : personnages et nombre moyen de mots par phrase et tirade

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

nbre moy. mots / phrase


12.04
13.14
13.15
14.68
16.07
16.14
17.61
18.73

tirades
47
57
35
22
42
17
6
7

nbre moy. mots / tirade


37.66
73.28
56.34
53.36
71.57
89.24
52.83
40.14

COUNT( DISTINCT numero_phrase ) AS nbre moy. mots / phrase ,


COUNT( DISTINCT numero_tirade ) AS t i r a d e s ,
SUM( IF ( cat NOT REGEXP ^[ES] , 1 , 0 ) ) /
COUNT( DISTINCT numero_tirade ) AS nbre moy. mots / t i r a d e
FROM occurrences
WHERE personnage <> ENTRE_PERSONNAGES
GROUP BY personnage
ORDER BY nbre moy. mots / phrase ;

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

tude de cas 2 : Phdre

3. cat <> Espace E T cat P AS C OMME ^Sep.*


Les diffrences entre ces notations abstraites et celles qui sont fournies supra tiennent des
manires diffrentes dexprimer les motifs des recherches approximatives.

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

Solution de lexercice n 3 p. 208 Modulo le changement de la condition de restriction (le


remplacement de  par  ), cest lquivalent de la R278 p. 208. Si lon veut obtenir les 10
premiers rsultats, il faut en 11 mettre la valeur 10 dans la case permettant sous Access de
contrler le nombre ou le pourcentage de lignes produites (dans la barre de menu du haut)
ou bien utiliser le menu dProprits de la requtee que lon obtient avec le bouton droit sur la
sous-fentre du haut de formulation des requtes (cf. solution de lexercice suivant).
11

Cette manipulation faite, Access engendre la requte SQL Server :


213

tude de cas 2 : Phdre

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;

Solution de lexercice n 4 p. 209 La requte figure en 12 . Le regroupement est opr sur


la version minusculise de lattribut        (premire colonne). La restriction aux occurrences
de la catgorie vise est effectue par le paramtrage du critre (3e colonne) : la mise entre

crochets de d Catgorie ?e signale que les valeurs de lattribut   seront comparer la valeur
que fournira lutilisateur lorsque le message entre crochets sera affich 13 .
12


En 14 , le rsultat quand lutilisateur a fourni

13

comme valeur cible.


14

214

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE VI

RETOUR AUX BASES. . .

1. Une ligne de table = une entit unique


1.1.

Une ligne de table = une conjonction dassertions sur une mme


entit

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

Retour aux bases. . .

1.2.

Cls primaires, secondaires, trangres

Conventions typographiques Dans les ouvrages de prsentation des bases de donnes,


le nom de la cl primaire est souvent soulign dans les tables fournies en exemple. Nous
avons plutt recours au gras. Cest dailleurs galement la convention retenue par Access. Le
soulignement prsente linconvnient de couper les jambages des lettres. Il rduit la lisibilit
des chanes de caractres ainsi distingues.

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










Pour les tables       et          , on utilise comme cl primaire un numro dordre,



        . On pourrait pour la table   
   utiliser la combinaison, toujours unique, du
numro de vers et de la position de la syllabe mtrique dans le vers. Pour la table     

    , la combinaison     
 ,        et
     identifie galement une ligne unique
chaque fois. Cest donc galement une cl secondaire. Il en irait de mme des combinaisons

de       , de la colonne        avec une indication de localisation (
    ,      ,
etc.).


Les colonnes       des tables       et          sont des cls trangres : elles


permettent une jointure avec la colonne       de la table  .
Exercice n 1 Pour la syllabe il, de catgorie Dt/pron, fournir le nombre doccurrences
selon la position mtrique.

216

Retour aux bases. . .

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]

dont lincarnation MySQL est :

SELECT COUNT( ) AS Lignes ,


COUNT( DISTINCT contexte ) AS contextes d i s t i n c t s
FROM esque_princeps ;

montre que ce nest pas le cas :


Lignes
4383

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

La ralisation MySQL est :


SELECT contexte ,
COUNT( ) AS o .
FROM esque_princeps
GROUP BY contexte
HAVING COUNT( ) > 1 ;

217

Retour aux bases. . .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 64 Esque : contextes doublons

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

et son quivalent Access :


1

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

Retour aux bases. . .

<chane><entier><entier> <chane> <nombre dcimal><chane>


Cl primaire

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

F IGURE 4 P RMA : la terminologie relationnelle luvre

2. Une table = une relation


P RMA
Lordre de prsentation des lignes et des colonnes de la table      ne change pas
ltat du monde reprsent par cette table, les faits qui y sont nots. Il en va de mme pour
.
la table
Par contre, les fiches sont ordonnes dans le temps, pour un bb donn, do lattribut
  , et globalement, la datation est alors reconstituable via les dates de naissance des bbs.
Au sein dune fiche, les occurrences et les informations attenantes de la table         se

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

 

, lordre dans lequel sont fournies les attestations na pas dimportance.


219

Retour aux bases. . .

3. Les facettes dune entit

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

3.1.

Les types disponibles varient selon les SGBD

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.

Cacher la ralisation vs. rester conome

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

Retour aux bases. . .

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

On le constate, alors que le 2 suit directement le 1 quand il sagit de nombres, sinterposent


entre eux 10, 11. . . 19 quand il sagit de chanes de caractres. Il faut donc distinguer clairement lentier 41 et la chane de caractres "41". Bien que leur visualisation soit identique, il
sagit de deux objets diffrents, relevant doprations distinctes.

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

La table rsultat se trouve au tableau 67 p. 223.


221

Retour aux bases. . .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 65 P RMA : table

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

tri par identifiant (numrique)


anciennete
0.00
2.50
5.00
7.00
7.00
19.00
19.00
3.00
11.00
20.00
3.00
14.00
6.50
14.00
2.50
5.00
6.00
8.00
9.00
0.00
17.00
0.00
0.00
0.00
2.00
3.00
0.00
2.00
2.00
0.00
3.00
8.00
3.00
1.00
0.50
0.00
0.00
0.00
1.50
0.00
0.00
8.50

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

Retour aux bases. . .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 66 P RMA : table

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

tri par identifiant (caractres)


anciennete
0.00
11.00
20.00
3.00
14.00
6.50
14.00
2.50
5.00
2.50
6.00
8.00
9.00
0.00
17.00
5.00
0.00
0.00
0.00
2.00
3.00
7.00
0.00
2.00
2.00
0.00
3.00
8.00
7.00
3.00
1.00
0.50
0.00
0.00
19.00
0.00
1.50
19.00
0.00
3.00
0.00
8.50

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

TABLEAU 67 P HDRE : positions du pronom il


Position
1
2
3
4
5
7
9

o.
45
2
9
6
1
18
1

223

Retour aux bases. . .

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

SUR (personnage)[<rsultat3 >]

224

Retour aux bases. . .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 68 P HDRE : monstr occurrences par personnage


Personnage
ARICIE
HIPPOLYTE
PHEDRE
THERAMENE
THESEE

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

Retour aux bases. . .

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

La requte aboutissant au tableau 69 p. 225 est la suivante :


SELECT o . numero_vers ,
personnage ,
vers
FROM occurrences AS o ,
vers AS v
WHERE o . numero_vers = v . numero_vers
AND occ_car REGEXP [Mm] onstr
ORDER BY personnage ;

On peut dailleurs obtenir le mme rsultat directement partir de la table


jointure :

,

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

Solution de lexercice n 3 p. 220

226

Retour aux bases. . .

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

SELECT MAX(LENGTH( occ_phon ) ) AS Max. occ . phon . ,


MAX(LENGTH( occ_car ) ) AS Max. occ . car .
FROM occurrences ;

Access
Le rsultat de 5 figure en 6 .
5

La requte SQL Server engendre est :


SELECT Max( Len ( [ occ_phon ] ) ) AS [Max occ_phon ] ,
Max( Len ( [ occ_car ] ) ) AS [Max occ_car ]
FROM Occurrences ;

227

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE VII

METTRE EN RELATION LES INFORMATIONS

1. Combiner les informations : le produit relationnel


1.1.

Prparer les tables mettre en relation

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

     

et on les peuple via des projections ou restrictions sur

CREATE TABLE actes (


acte VARCHAR( 5 ) BINARY NOT NULL DEFAULT " " ,
PRIMARY KEY ( acte ) ) ;

228

Mettre en relation les informations

INSERT INTO actes


SELECT DISTINCT acte
FROM vers ;
CREATE TABLE personnages (
personnage VARCHAR(100) NOT NULL DEFAULT " " ,
PRIMARY KEY ( personnage ) ) ;

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

INSERT INTO personnages


SELECT DISTINCT personnage_s
FROM vers
WHERE partage_en = 1 ;

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 :



et non sur la table

,

INSERT INTO personnages


SELECT DISTINCT personnage
FROM occurrences
WHERE personnage <> 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

Le choix de longlet dRequtee 2 de la barre du haut permet de slectionner dRequte


Cration de tablee.

229

Mettre en relation les informations

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

On note en 5 lapparition effective de la table


de navigation dans la base.

     

dans le volet dTablese de la fentre

Lorsquon examine la structure de cette table (bouton dModifierede la fentre de navigation),


on constate que le nom de la colonne unique est         6 .
6

230

Mettre en relation les informations

Par souci de cohrence, on enlve le soulign et le s la fin 7 .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La modification doit tre confirme lorsquon ferme cette fentre 8 .


8

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

On procde de manire similaire en 11 pour obtenir une table  

12 .

231

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

11

12

1.2.

Obtenir le produit relationnel

' produit relationnel des tables  


R157 t. 1 p. 120

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


Le produit relationnel est une requte ordinaire 13 . Les deux tables    et       


sont ajoutes dans la fentre du haut. La fentre du bas montre que lon souhaite les attributs
de chacune des deux tables.

232

Mettre en relation les informations

13

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La feuille de donnes 14 donne un aperu des 40 lignes du rsultat.


14

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

Mettre en relation les informations

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

Le rsultat est identique 19 .


19

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

Combinaisons ralises       


R158 t. 1 p. 120

R ESTRICTION(partage_en = 1)[vers]
,

P ROJECTION(acte, personnage_s)[<rsultat1 >]

234

Mettre en relation les informations

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]

La table (c) contient 16 lignes (les 4 lignes de

    les 4 lignes de 

    ).

235

Mettre en relation les informations

TABLEAU 70 P RMA : produit relationnel

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

(c) = ventilations sedations


ventilation
sedation
intub
non
non reponse
non
sonde nasale
non
non
non
intub
hypnovel ou fentanyl
non reponse
hypnovel ou fentanyl
sonde nasale
hypnovel ou fentanyl
non
hypnovel ou fentanyl
intub
canadou
non reponse
canadou
sonde nasale
canadou
non
canadou
intub
non reponse
non reponse
non reponse
sonde nasale
non reponse
non
non reponse

Les 3 requtes qui suivent retournent respectivement le nombre doccurrences de chacune


 


des valeurs possibles des attributs     et     dans la table             , ainsi
que le nombre doccurrences de chacune des combinaisons ralises (11 sur les 16 potentielles) :
R288
,

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

Mettre en relation les informations

TABLEAU 71 P RMA : combinaisons ralises ventilation sdation


(a) R288 p. 236
ventilation
intub
non
non reponse
sonde nasale

(b) R289 p. 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

(c) R290 p. 236


ventilation
intub
intub
non
non
non
non
non reponse
sonde nasale
sonde nasale
sonde nasale
sonde nasale

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

Mettre en relation les informations

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

2. Combiner et restreindre : la jointure


2.1.

Jointures la demande (MySQL) vs. stables (Access)

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

Mettre en relation les informations

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

La R159 t. 1 p. 123 se formule de la manire suivante :


SELECT
FROM vers ,
occurrences
WHERE vers . numero_vers = occurrences . numero_vers ;

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 ;

La condition de rapprochement est introduite par ON et non par WHERE.


Lquivalent de la R161 t. 1 p. 123 indique explicitement lappel une jointure naturelle, o
la condition de rapprochement est lidentit de valeur entre la ou les colonne(s) de mme nom
dans les tables ainsi rapproches :
SELECT
FROM vers
NATURAL JOIN occurrences ;

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

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

26

Il fait apparatre une fentre spcifique 27 o formuler les conditions de rapprochement


permanentes entre tables. Dans cette fentre, comme dans ltablissement dune requte, on
choisit les tables rapprocher.
27


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

On trouve en 29 le rsultat de cette opration : les attributs       dans les tables



   et          ont le rle de cl trangre par rapport lattribut de mme nom dans
 . Les liens entre les tables manifestent ces rles. Noter quAccess ajoute sur ces
la table
liens la cardinalit des relations. une ligne de la table  correspondent n lignes des tables

     et          . Le signe de linfini symbolise cette correspondance multiple.
 

240

Mettre en relation les informations

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

Mettre en relation les informations

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

Matrialisation des jointures en mode feuille de donnes Lorsquon affiche en mode


feuille de donnes une table entretenant une jointure stable avec une autre, cette jointure
est rappele par un signe + en dbut de ligne. Cest ce quon observe en 34 pour la table
 . Cliquer sur ce signe + aboutit visualiser dans une sous-fentre la ou les ligne(s)
lies de lautre table.
34


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

Mettre en relation les informations

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



        

aurait 1 034 289

Produit[
signaletique_fiches,
fiches_normalisees]

243

Mettre en relation les informations

TABLEAU 72 P RMA : jointure     

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 .

Nous nous intressons en fait au sous-ensemble de ces lignes o le texte de             


correspond la signaltique remplie au mme moment par linfirmire. La condition de rap
prochement est lidentit entre la valeur de lattribut dans la table             et celle
de lattribut dans la table              . Ce sous-ensemble peut provenir dune jointure
avec cette condition de rapprochement :

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

Mettre en relation les informations

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

En 39 , la ralisation de la R292 p. 244 :


39

Son quivalent SQL Server est :


SELECT Signaletique_fiches_princeps . ,
Fiches_normalisees .
FROM Signaletique_fiches_princep s
INNER JOIN Fiches_normalisees
ON Signaletique_fiches_princeps . id = Fiches_normalisees . id ;

Exercice n 1 Grce la table cre et peuple pour lexercice 3, en utilisant galement la



table             , fournissez, par jour, les minima, maxima, moyennes pour les fiches
en termes doccurrences comme de types de lemmes.
Exercice n 2 Fournir pour chaque jour le nombre de fiches correspondant des filles et
des garons, ainsi que, dans un deuxime temps, les pourcentages qui en dcoulent.

245

Mettre en relation les informations

P HDRE
E SQUE

3. Combiner jointure et regroupement


' nombre de vers dont un personnage de Phdre est entirement ou partiellement le locuteur

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

SUR (personnage)[<rsultat1 >]

P AR GROUPE(
personnage,
N OMBRE DE VALEURS
bre vers
)
[<rsultat2 >]

DISTINCTES (numero_vers)

T ITRE n-

' nombre de vers par acte et par personnage dans Phdre


R164 t. 1 p. 128

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

Mettre en relation les informations

attribus ENTRE_PERSONNAGES et sont enlever des dcomptes, do la clause WHERE


dans la requte qui suit. Par ailleurs, comme, pour un vers donn, dans cette table, on compte
autant de numros de vers que doccurrences, on nen garde chaque fois quun exemplaire,
ce qui explique lappel DISTINCT (le mot-cl DISTINCT permet dobtenir des lignes toutes
diffrentes, mais aussi des valeurs distinctes pour une colonne donne) :
SELECT personnage ,
COUNT( DISTINCT numero_vers ) AS nbre v .
FROM occurrences
WHERE personnage <> ENTRE_PERSONNAGES
GROUP BY personnage ;

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 ;

Une autre formulation possible est :

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 ;

Une autre encore est :


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
AND personnage <> ENTRE_PERSONNAGES
GROUP BY personnage , acte

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

Mettre en relation les informations

TABLEAU 73 P HDRE : jointure et vers partags

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 ;

On note quil faut, dans cette requte, qualifier le nom dattribut


dclencher une erreur :





sous peine de

ERROR 1052 (23000) : Column numero_vers in field list is ambiguous


Pour chacune des lignes correspondant un vers donn, si ce vers est partag, on garde le
numro de vers. Lappel DISTINCT permet a posteriori de nen conserver quun exemplaire.
Si le vers nest pas partag, la marque NULL est renvoye par IF : elle disparat du dcompte
dans la mesure o COUNT, comme dautres oprateurs numriques sur les regroupements,
248

Mettre en relation les informations

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 % ;

Elle instancie la requte :

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

SUR (personnage)[<rsultat2 >]

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

Mettre en relation les informations

TABLEAU 74 P HDRE : vers partags par personnage

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

Rapprocher les vers en relation de rime


R165 t. 1 p. 130

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

Mettre en relation les informations

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

Lquivalent SQL Server de la requte interactive est fournie en 44 .


251

Mettre en relation les informations

44

Rapprocher les mots en relation de rime

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

Mettre en relation les informations

TABLEAU 75 P HDRE : paires de vers rimant par auto-jointure


n
1
3
5
7

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

CONCAT( " . . . " , SUBSTRING ( v1 . vers , LENGTH( v1 . vers ) 1 0 ) )


AS vers 1 ,

Sachant la longueur du vers via dLENGTH(v1.vers)e, on peut garder la sous-chane du vers


partir du 10e caractre avant la fin : la fonction SUBSTRING prend comme premier argument
la chane dont il faut retourner un fragment et comme deuxime le point de dpart dans la
chane. Le recours CONCAT permet dajouter des points de suspension avant la fin du vers.
On opre de la mme manire pour le 2e vers en relation de rime.
Access
R166 t. 1 p. 131

SELECT Occurrences . numero_vers AS n 1 ,


Occurrences_1 . numero_vers AS n 2 ,
Occurrences . occ_car AS mot1 ,
Occurrences_1 . occ_car AS mot2
FROM Occurrences ,
Occurrences AS Occurrences_1
WHERE ( ( ( Occurrences . numero_vers ) = [ Occurrences_1 . numero_vers] 1)
AND ( ( Occurrences . cat ) NOT LIKE " Sep "
AND ( Occurrences . cat ) <> " Espace " )
AND ( ( Occurrences_1 . cat ) NOT LIKE " Sep "
AND ( Occurrences_1 . cat ) <> " Espace " )
AND ( ( Occurrences . f i n _ s y l )=12)
AND ( ( Occurrences_1 . f i n _ s y l )=12)
AND ( ( [ Occurrences_1 . numero_vers ] MOD 2 ) = 0 ) ) ;

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 )

LIKE " [DCPRANV] "

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 )

NOT Like " [ES] " ) . . .

253

Mettre en relation les informations

' mots plus de 2 fois en relation de rime


R167 t. 1 p. 131

P ROJECTION AVEC DOUBLONS(


o1.occ_car T ITRE mot1
o2.occ_car T ITRE mot2)
[<rsultat2 R166 t. 1 p. 131>]
,

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 ;

On constate que la condition de rapprochement constitutive de la jointure apparat au


milieu des autres conditions de restriction de la clause WHERE.
Access
R167 t. 1 p. 131
SELECT Occurrences . occ_car AS mot1 ,
Occurrences_1 . occ_car AS mot2 ,
COUNT( ) AS o
FROM Occurrences ,
Occurrences AS Occurrences_1
WHERE ( ( ( Occurrences . numero_vers ) = [ Occurrences_1 . numero_vers] 1)
AND ( ( Occurrences . cat ) Not Like " [ES] " )
AND ( ( Occurrences_1 . cat ) NOT LIKE " [ES] " )
AND ( ( Occurrences . f i n _ s y l )=12)
AND ( ( Occurrences_1 . f i n _ s y l )=12)
AND ( ( [ Occurrences_1 . numero_vers ] MOD 2 ) = 0 ) )
GROUP BY Occurrences . occ_car , Occurrences_1 . occ_car
HAVING COUNT( ) > 1;

254

Mettre en relation les informations

Le rsultat de cette requte figure en 73 .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

45

4.2.

Semi-jointure

cho syllabe lhmistiche syllabe la rime, rime interne


R168 t. 1 p. 133

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

Mettre en relation les informations

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

Mettre en relation les informations

TABLEAU 76 P RMA : jointure de 4 tables et rsultat


BB
38

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

Mettre en relation les informations

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

F IGURE 5 P RMA : notion de jointure

258

...

Mettre en relation les informations

TABLEAU 77 P RMA : texte de dpart pour le bb 38


id
360

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

Mettre en relation les informations

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.

Exercice n 6 partir de la requte de lexercice prcdent, indiquez le nombre de fois o


yeux occupe la premire position dans le couple de vers rimant, le nombre de fois o il occupe
la deuxime position, le nombre de fois o un autre mot que yeux est en premire position
dans un couple de vers rimant et comprenant yeux et le nombre de fois o dans un tel couple,
un autre mot que yeux est en deuxime position.

cho hmistiche-rime
Exercice n 7

partir de la requte MySQL :

SELECT vers . numero_vers AS N ,


vers ,
p1 . voy AS voy . cho
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 ;

ou de son quivalent Access :

260

Mettre en relation les informations

TABLEAU 78: P HDRE : voyelles en cho hmistiche-rime (extrait)

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

5. Reprer les dcalages


P RMA
P HDRE


Les requtes pour crer la table                 s, la peupler et agir de mme pour




la table                sont les suivantes.
261

Mettre en relation les informations

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

INSERT INTO actes_scenes_possibles


SELECT
FROM actes , personnages ;
INSERT INTO a c t e s _ p e r s o n n a g e s_ ef fe ct i fs
SELECT DISTINCT acte , personnage_s
FROM vers
WHERE partage_en = 1 ;

La seconde requte utilise les deux tables engendres au 1.


Access
Le produit relationnel des deux tables engendres au 1 sobtient par :
50


Lquivalent SQL Server est :
SELECT actes . acte ,
personnages . personnage
FROM actes ,
personnages ;

On choisit alors dRequte | Requte cration de tablee 51 .


51

On fournit un nom de table 52 .

262

Mettre en relation les informations

52

Un avertissement est fourni : 53 .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

53

En 54 , un extrait de la table rsultat.


54


Lengendrement de la table actes_personnages_effectifs obit la mme dmarche :
55

La comparaison des deux tables est alors possible.


R169 t. 1 p. 134

J OINTURE NATURELLE[
actes_personnages_possibles,
actes_personnages_effectifs]

263

Mettre en relation les informations

R170 t. 1 p. 135

J OINTURE EXTERNE GAUCHE(


gauche.acte = droite.acte
ET gauche.personnage = droite.personnage
)
[actes_personnages_possibles A LIAS gauche,
actes_personnages_effectifs A LIAS droite]

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


La jointure entre les tables                  et                sopre en



faisant glisser les noms des attributs   et       dune table sur lautre. La relation (au
sens dAccess) temporaire rsultante est figure par les deux lignes qui relient les paires
dattributs.

264

Mettre en relation les informations

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

Mettre en relation les informations

59

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

60

Les lignes reliant les deux tables se transforment en flches :


61


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

Mettre en relation les informations

TABLEAU 79 P RMA : lemmes par jour : indications globales


Jour

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

6. Au del du modle relationnel


P RMA
P HDRE
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

Mettre en relation les informations

TABLEAU 80 P RMA : fiches et sexe des prmaturs par jour

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

SELECT jour AS Jour ,


COUNT( ) AS f i c h e s ,
SUM( types ) AS t o t . types ,
MIN( types ) AS min . types ,
MAX( types ) AS max. types ,
FORMAT(AVG( types ) , 2) AS moy. types ,
SUM( occurrences ) AS t o t . o . ,
MIN( occurrences ) AS Min . o . ,
MAX( occurrences ) AS max. o . ,
FORMAT(AVG( occurrences ) , 2) AS moy. o . ,
SUM( occurrences ) / SUM( types ) AS tok/typ
FROM fiche_types_occurrences_lemmes ,
signaletique_fiches
WHERE i d _ f i c h e = id
GROUP BY jour ;

Solution de lexercice n 2 p. 245


R298

,
,

Le tableau 80 p. 268 donne les rsultats des requtes.

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

Mettre en relation les informations

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

SELECT s i g n a l e t i q u e _ f i c h e s . jour AS Jour ,


SUM( IF ( sexe = F i l l e , 1 , 0 ) ) AS f i l l e s ,
SUM( IF ( sexe = F i l l e , 1 , 0 ) ) / COUNT( ) 100 as % ,
SUM( IF ( sexe = F i l l e , 0 , 1 ) ) AS garons
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 ;

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

Mettre en relation les informations

dune requte paramtre : lutilisateur se voit demander la valeur attribuer au paramtre



     .

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

Solution de lexercice n 3 p. 260 Le rsultat du tableau 81 p. 272 combine les informations



provenant de la table             (les attributs      et de la fiche) et celles issues
de la table         : les lemmes et leurs catgories. La requte snonce ainsi :

270

Mettre en relation les informations

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

Solution de lexercice n 4 p. 260 Lauto-jointure dune table avec elle-mme a permis de


rapprocher les vers qui riment ensemble dans Phdre (tableau 75, p. 253). On peut oprer
de la mme manire avec la table         et obtenir les paires de mots en relation de
rime (tableau 82, p. 273). Il faut dabord conserver seulement les vrais mots au sein des
occurrences, cest--dire les occurrences dont les catgories conviennent. En second lieu,
ne sont concerns que les mots en dernire position, qui sachvent donc en syllabe 12. La
troisime condition rappelle celle de lauto-jointure sur la table  : le numro du deuxime
vers doit tre pair et correspondre une unit de plus que celui du premier vers.

271

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 81 P RMA : infirmires et richesse lexicale

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

Mettre en relation les informations

TABLEAU 82 P HDRE : mots en relation de rime

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

Mettre en relation les informations

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

Solution de lexercice n 5 p. 260

. . . ET

( o1 . occ_car = yeux OU

Un ajout minime la requte prcdente :


o2 . occ_car = yeux ) ;

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

Mettre en relation les informations

TABLEAU 83 P HDRE : couples de rime avec yeux

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

Labsence de parenthses autour de la disjonction finale conduirait le SGBD chercher


yeux comme deuxime mot mis en relation avec tous les autres vers de la table, soit . . . un
rsultat de 1 497 149 lignes (la requte correcte en produit 17).
Access
On ajoute une condition sur la colonne correspondant lattribut        de la premire
table. La deuxime condition ne peut pas tre mis sur la mme ligne, mais cette fois-ci pour
lattribut        de la deuxime table : ce serait chercher les paires de vers o yeux rime
avec lui-mme, ce qui est exclu en versification classique. On peut tre tent de rajouter la
condition sur lattribut        de la deuxime table mais sur la ligne correspondant un OU
logique :

69

Le rsultat nest absolument pas celui qui est souhait :


70

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

Mettre en relation les informations

71

donne le rsultat souhait :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

72

Lquivalent SQL Server est :

SELECT Occurrences . numero_vers ,


Occurrences . occ_car ,
Occurrences_1 . occ_car
FROM Occurrences , Occurrences AS Occurrences_1
WHERE ( ( ( Occurrences . numero_vers ) = [ Occurrences_1 . numero_vers] 1)
AND ( ( Occurrences . cat ) Not Like " [ES] " )
AND ( ( Occurrences_1 . cat ) Not Like " [ES] " )
AND ( ( Occurrences . f i n _ s y l )=12)
AND ( ( Occurrences_1 . f i n _ s y l )=12)
And ( ( [ Occurrences_1 . numero_vers ] MOD 2 ) = 0 ) )
AND ( Occurrences . occ_car = yeux
OR Occurrences_1 . occ_car = yeux ) ;

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

Mettre en relation les informations

TABLEAU 84 P HDRE : dcompte des couples de rime avec yeux


v1 = yeux
5

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

Solution de lexercice n 6 p. 260 Le rsultat constitue le tableau 84 p. 277. La requte se


formule comme suit :

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

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 85 P HDRE : frquence des voyelles en cho hmistiche-rime


Voy. cho
ai
i
e
an
u
a
ou
o
wa
in
oe

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

Solution de lexercice n 7 p. 260


requte :
R2103

,
,

Le rsultat figure au tableau 85 p. 278. Il dcoule de la

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

SUR (p1.voy)[<rsultat2 >]

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

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

MySQL

SELECT p1 . voy AS Voy . cho ,


COUNT( ) AS o .
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
GROUP BY p1 . voy
ORDER BY o . DESC ;

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

Tri sur(fin phon1, fin phon2)[<rsultat3 >]


279

Mettre en relation les informations

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 86 P HDRE : rimes pas pour loreille

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

Mettre en relation les informations

74

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Elle a pour quivalent SQL Server :


SELECT Occurrences . numero_vers ,
Occurrences . occ_car ,
Occurrences_1 . occ_car ,
Occurrences . occ_phon ,
Occurrences_1 . occ_phon ,
Left ( StrReverse ( [ Occurrences . occ_phon ] ) , 1 ) AS FinPhon1 ,
Left ( StrReverse ( [ Occurrences_1 . occ_phon ] ) , 1 ) AS FinPhon2
FROM Occurrences ,
Occurrences AS Occurrences_1
WHERE ( ( ( Occurrences . numero_vers ) = [ Occurrences_1 . numero_vers] 1)
AND ( ( Left ( StrReverse ( [ Occurrences . occ_phon ] ) , 1 ) )
<>Left ( StrReverse ( [ Occurrences_1 . occ_phon ] ) , 1 ) )
AND ( ( Occurrences . cat ) Not Like [ES] )
AND ( ( Occurrences_1 . cat ) Not Like [ES] )
AND ( ( Occurrences . f i n _ s y l )=12)
AND ( ( Occurrences_1 . f i n _ s y l )=12)
AND ( ( [ Occurrences_1 . numero_vers ] Mod 2 ) = 0 ) ) ;

281

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE VIII

TUDE DE CAS 3 : LE SUFFIXE -ESQUE

1. Induire la grammaire du suffixe -esque


2. Formulaire initial
La structure en MySQL de la table    figure au tableau 87 p. 283. On se reportera au
ch. XV 3 pour le dtail des types de donnes offerts par MySQL et Access pour les attributs
des tables.

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

tude de cas 3 : le suffixe -esque

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 87 ESQUE : structure de la table


Field
numero_ligne
derive
cat_derive
sens_derive
variantes_derive
base
cat_base
sens_base
commentaire_base
mode_formation
reference_dans_dictionnaire
reference
contexte
auteur
reference_complement
jour
mois
annee
annee_complement
origine

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

' couples driv-catgorie ayant plus dune base


R175 t. 1 p. 150

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

tude de cas 3 : le suffixe -esque

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

tude de cas 3 : le suffixe -esque

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

tude de cas 3 : le suffixe -esque

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Dans le rsultat 7 , on voit ainsi quadamesque a 2 comme attribut      , ce qui


renvoie aux deux bases prsentes dans le rsultat 3 : Adamo et Adams (Douglas).
7

La requte 8 est une simple modification de la requte 6 . On ajoute une contrainte de


deuxime niveau. On ne garde que les regroupements pour lequel lattribut      soit
suprieur 1, ce qui ne garde effectivement que les drivs ayant des bases multiples, comme
on le constate en 9 .
8

La requte SQL Server sous-jacente la requte Access 8 est la suivante :


286

tude de cas 3 : le suffixe -esque

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SELECT R_Derive_Cat_Frequence_Hors_Hapax. derive ,


R_Derive_Cat_Frequence_Hors_Hapax. cat_derive ,
R_Derive_Cat_Frequence_Hors_Hapax. o ,
Count ( R_derive_cat_base . base ) AS [ nbre bases ]
FROM R_Derive_Cat_Frequence_Hors_Hapax
INNER JOIN R_derive_cat_base
ON ( R_Derive_Cat_Frequence_Hors_Hapax . cat_derive = R_derive_cat_base . cat_derive
)
AND ( R_Derive_Cat_Frequence_Hors_Hapax . derive = R_derive_cat_base . derive )
GROUP BY R_Derive_Cat_Frequence_Hors_Hapax . derive ,
R_Derive_Cat_Frequence_Hors_Hapax. cat_derive ,
R_Derive_Cat_Frequence_Hors_Hapax. o
HAVING ( ( ( Count ( R_derive_cat_base . base ) ) >1) ) ;


Exercice n 1 partir de la R175 t. 1 p. 150 et de la table      dont la cration et


lvolution sont dtailles au ch. XII, utilisez une requte enchsse pour obtenir, pour les
bases qui ont plusieurs drivs distincts, les drivs correspondants et leurs catgories.


Exercice n 2 En recourant une requte enchsse et la table      dont la cration


et lvolution sont dtailles au ch. XII, fournir les drivs, leurs catgories et leurs bases pour
les drivs qui ont plusieurs bases distinctes.

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

tude de cas 3 : le suffixe -esque

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 88 E SQUE : bases drivs multiples (extraits)

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

tude de cas 3 : le suffixe -esque

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

SUR (base_normalisee)[<rsultat2 >]

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

tude de cas 3 : le suffixe -esque

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 89 E SQUE : drivs bases multiples (extraits)

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

tude de cas 3 : le suffixe -esque

MySQL

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SELECT DISTINCT derive ,


derive_POS ,
base_normalisee
FROM esque_tmp
WHERE d e r i v e _ c a t _ d e r i v e IN
(SELECT d e r i v e _ c a t _ d e r i v e
FROM esque_tmp
GROUP BY d e r i v e _ c a t _ d e r i v e
HAVING COUNT( DISTINCT base_normalisee ) > 1)
ORDER BY derive , derive_POS ;

291

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE IX

MODLISATION

1. Le modle Entit/Association (E/A)


P RMA

En dcomposant le domaine sous-jacent P RMA en noncs lmentaires, on obtiendrait


par exemple :
1. Une infirmire rdige une fiche
2. Une fiche concerne un bb
3. Une fiche comporte des occurrences
4. . . .
Ces noncs mettent en vidence lexistence dau moins trois types dentits : les infirmires,
les fiches, les bbs. Chaque instance dune entit est distincte des autres du mme type.
Chaque type dentit doit donc tre dot dun attribut permettant de lidentifier. Pour les
infirmires et les bbs, ce pourrait tre le numro de scurit sociale, mais aussi lassociation
du nom, du prnom et de la date de naissance, ou encore, comme dans la base de donnes
P RMA, un identifiant unique arbitraire.
En ce qui concerne le nombre dentits mises en jeu par chaque association ou cardinalit,
une infirmire donne rdige au minimum 1 fiche et en rdige n au maximum, tandis quune
fiche est rdig par une infirmire donne et une seule. On parle dassociation un--plusieurs
ou un--n ( une infirmire, peuvent correspondre n fiches). De la mme manire, une fiche
porte sur un bb dtermin et un seul, mais par contre un bb correspond un minimum
dune fiche et un maximum de n fiches (thoriquement n 12 4 jours 3 fiches). Cest
encore une association un--plusieurs. Il en va de mme pour une fiche et les occurrences qui
la composent. Par contre, lassociation entre la signaltique dune fiche et un tat donn de
292

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

F IGURE 6 P RMA : modle Entit/Association

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

2. Un modle Entit/Association pour les mots en -esque


3. Relativit des schmas Entit/Association (E/A)
P RMA
Certaines entits ne prsentent pas assez dexistence autonome ou sont trop marginales
pour tre conserves en tant que telles : il vaut mieux les reprsenter sous forme dattributs.
293

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

SUR (o)[<rsultat3 >]

Il met en vidence le faible nombre de drivs pourvus dune telle information : 74 :


reference_dans_dictionnaire
DSA (sv), 1993
Bjrkman (sv)
DSA (sv caramboleur),1993
DSA (sv) 1993
DSA (sv rgion), 1993

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 ;

4. Dun schma E/A celui dune base de donnes


P RMA
P HDRE
E SQUE

5. Normalisations
6.

Modlisation et points de vue

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

- Si, rpondit srieusement le harponneur. On les classe en poissons qui se mangent et


poissons qui ne se mangent pas.
- Voil une distinction de gourmand, rpondit Conseil. Mais dites-moi si vous connaissez la
diffrence qui existe entre les poissons osseux et les poissons cartilagineux ?
- Peut-tre bien, Conseil.
- Et la subdivision de ces deux grandes classes ?
- Je ne men doute pas, rpondit le Canadien.

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.

Grain danalyse variable des donnes textuelles : du mot l


nonc

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

L IMIT (1)[<rsultat3 >]

Si lon trie par ordre dcroissant, on obtient le nombre maximal.

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

En 1 , la requte Access pour obtenir le nombre maximum de fiches par infirmire. On


voit que dans la barre de menu du haut, on a indiqu 1 comme le nombre de lignes quon
voulait voir figurer dans la feuille de donnes rsultante, ce que manifeste 2 . On aurait pu
galement formuler cette contrainte en utilisant le menu dParamtrese utilisable via un clic
droit sur la partie haute de la formulation de la requte.
1

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

CRER ET PEUPLER UNE BASE DE DONNES

On appelle schma dune base de donnes la dfinition de sa structure en termes de


tables, dattributs de ces tables (types de valeurs, caractre facultatif ou obligatoire, valeur
par dfaut), didentifiant primaire, etc. Cette ossature de la base de donnes est peu volumineuse, par opposition au contenu. Le schma de dpart de E SQUE comprend simplement
une seule table, dont la spcification en SQL occupe une vingtaine de lignes. Par contre, cette
table contient plus de 4 000 attestations avec les informations associes.

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.

1. Crer/modifier/supprimer une base de donnes


Une base de donnes doit avoir t pralablement cre comme un rceptacle vide pour
quon puisse y ajouter des tables. Modifier une base de donnes revient ajouter, modifier et
supprimer des tables, ainsi qu ajouter, modifier ou supprimer des entits dans les tables.
MySQL
La cration dune base, sous MySQL, relve dune commande du type :
CREATE DATABASE <nom> ;

299

Crer et peupler une base de donnes

Sous MySQL, la suppression dune base, via la commande :


DROP DATABASE <nom> ;

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

On obtient alors un cran daccueil :


2


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

Crer et peupler une base de donnes

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      

) sauvegard, la base correspondante est ouverte, vide :

301

Crer et peupler une base de donnes

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

Crer et peupler une base de donnes

10

Il faut confirmer ce choix :

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

Ouvrir la corbeille montre le fichier en instance de suppression dfinitive. Choisir dFichier


| Vider la corbeillee fait disparatre le fichier.
13

P RMA
P HDRE
E SQUE

2. Crer/modifier/supprimer une structure de table


Les oprations qui concernent le contenu dune table font lobjet du 3, p. 312.

303

Crer et peupler une base de donnes

2.1.

Crer une table

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 >

Certains attributs doivent obligatoirement tre renseigns, ce que manifeste la mention


NOT NULL. Cest obligatoirement le cas de lattribut ou de la combinaison dattributs qui

constitue lidentifiant unique ou cl primaire de la table. La mention


PRIMARY KEY(numero_ligne)

prcise cette fonction.


Access
Dans la fentre de navigation dans la base de donnes courante, longlet dTablese donne
accs au choix dCrer une table en mode cratione :

304

Crer et peupler une base de donnes

14

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

On obtient alors lcran de cration interactive de la structure dune table :


15

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

Crer et peupler une base de donnes

17

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La marque de ce choix est la petite cl qui sajoute gauche du nom de lattribut :


18

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

On choisit alors un nom plus appropri :


21

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

Exercice n 1 Donner la longueur maximale des attributs        et        de la table


         . Comparer avec la taille alloue ces attributs dans la dfinition de la table.
306

Crer et peupler une base de donnes

2.2.

Modifier une table

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

Crer et peupler une base de donnes

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

Crer et peupler une base de donnes

27

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

28

En 29 , la structure de la table aprs suppression.


29

P RMA

Exercice n 2 Ajouter la table             un attribut   


la classe de poids du bb en fonction du tableau fourni :



  destin mmoriser

Classes de poids
poids non fourni
poids < 750 g.
750 g. <= poids <= 1 000 g.
poids > 1 000 g.

Exercice n 3 Ajouter la table             un attribut   


moriser la classe de position du bb en fonction du tableau fourni :
position
Non fournie
plat ct
plat dos
plat ventre
proclive ct
proclive dorsale
proclive ventrale





  destin m-

classe_position
position non fournie
ct
dos
ventre
ct
dos
ventre

Exercice n 4 Crer une table                   pour associer chaque fiche le nombre


de types et doccurrences de lemmes. Peupler cette table avec les rsultats dune requte sur
la table         (veiller ne garder que les lemmes de vrais mots ).

309

Crer et peupler une base de donnes

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

Puisquon sait dsormais quune transcription phontique de syllabe ne dpasse jamais


11 caractres, il est possible de modifier la taille du champ   34 , selon la terminologie
dAccess.

310

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

34

Confirmation est demande 35 .


35


Un message davertissement 36 indique la troncation de la colonne, qui peut effectivement
faire perdre des informations.
36

2.3.

Supprimer une table

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

Crer et peupler une base de donnes

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

3. Ajouter/modifier/supprimer des entits


3.1.

Ajouter une entit

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

Linsertion seffectue par :


INSERT INTO <table>
( < l i s t e de noms d a t t r i b u t s >)
VALUES
( < l i s t e de valeurs correspondantes >) ;

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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Cantates de proximit Scnes et p o r t r a i t s de groupe , P .O. L . , 2005, Paris , p . 44


,
Descendant des cheveux blonds <tintinesques ># l e visage est long de sa croissance
inacheve qui f a t i g u e #et marqu du bleu c l a i r a n t des yeux . ,
Jacques Jouet ,
20050000 ) ;

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

En 39 , le rsultat de linsertion, avec la nouvelle valeur du numro dordre.

313

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

39

On trouve en 40 un extrait de la structure dune copie de la table   . On voit que


lattribut         est dfini comme NumroAuto et que les nouvelles valeurs quil prendra
sont de type Autoincrement. Il sagit dun attribut dont les lignes successives correspondent
la valeur dun compteur incrment chaque ajout. On constate dailleurs le dcalage entre
ce numro dordre, qui va de 1 4384, et qui correspond effectivement au nombre de lignes
de la table, et la dernire valeur de la colonne         , 4671. Cette dernire colonne
correspond limport sous Access dune table MySQL et nest pas de type NumroAuto, mais
de type Entier. Elle correspond aux numros dordre de la table sous MySQL et aux trous
mentionns supra.
40


3.2.

Modifier une entit

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 ;

La valeur attribue un attribut pour un ensemble dentits donn, ensemble dtermin


par la clause WHERE, peut rsulter dun calcul sur la valeur prcdente de cet attribut ou sur
celle dautres attributs.

314

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 90 E SQUE : catgories de dpart des drivs


cat_derive
NULL
?
A
a
adv
n
n?
nf
nfpl
nm
npl
v
vintr

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

Pourtant, la table examine prsente bien des drivs tiquets  :


43

Pour effectuer la modification souhaite, il faut modifier la requte pour quelle devienne
une requte Mise jour 44 .

315

Crer et peupler une base de donnes

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

Le dclenchement de la requte entrane une mise en garde 46 .


46

Lquivalent SQL Server est :


UPDATE esque_tmp
SET esque_tmp . cat_derive = " a "
WHERE ( ( ( esque_tmp . cat_derive )= " a " ) )

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

Crer et peupler une base de donnes

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


Exercice n 5 Une fois lattribut        ajout la table       


les valeurs de cet attribut en fonction de la valeur de la colonne    .


 

  , mettez jour

Exercice n 6 Une fois lattribut          ajout la table             , mettez



jour les valeurs de cet attribut en fonction de la valeur de la colonne     .

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.

 

et indiquer les cas

317

Crer et peupler une base de donnes

Exercice n 8

Ajouter les attestations suivantes :

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.

Supprimer une entit

MySQL
Supprimer une ou plusieurs entits sopre par la requte :
DELETE FROM <table>
[WHERE <condition >] ;

318

Crer et peupler une base de donnes

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

DELETE FROM esque


WHERE cat_derive = adv ;

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

La ligne passe alors en inverse vido 54 .


54

Appuyer sur la touche Del/Suppr ou passer par dEdition | Supprimere conduit une
demande de confirmation 55 .

319

Crer et peupler une base de donnes

55

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Une fois la confirmation faite, la ligne a dfinitivement disparu de la table 56 .


56

La seconde manire de supprimer des entres opre par requte.


Si lon commence par chercher les drivs tiquets comme 
rsultat 58

57 , on obtient comme
57

58

On cre donc une nouvelle requte, cherchant les drivs en 


| Requte Suppressione 59 .

et on slectionne dRequte

320

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

59

La sous-fentre de formulation de requte change dans la barre de menu du haut et par


lajout dune ligne dSupprimere 60 .
60

Le dclenchement de la requte dbute par une demande de confirmation 61 .


61

Licne dune requte Suppression est une croix en rouge suivie dun point dexclamation
62 .
62

4.

Sauvegarder une base ou une table

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

Crer et peupler une base de donnes

INSERT INTO infirmieres_princeps VALUES (41 ,26 ,3 , BEPC , 0.00 ,NULL) ;


INSERT INTO infirmieres_princeps VALUES (2 ,29 ,3 , BEPC , 2.50 , Jour ) ;
...
INSERT INTO infirmieres_princeps VALUES (22 ,31 ,3 , BAC , 9.00 , Jour ) ;
INSERT INTO infirmieres_princeps VALUES (73 ,29 ,3 , BAC , 1.50 , Jour ) ;

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

On se reportera au chapitre I 5 p. 24 pour le dtail de la cration de la structure de la


table             .
On note que la table est supprime avant dtre recre : la prsence de cette suppression
est optionnelle, elle doit tre choisie au moment de la sauvegarde (option adddroptable
ci-dessous). Suivent les instructions permettant de peupler la table en ajoutant autant de
lignes quil y en avait dans la table sauvegarde.
Sous Linux/Unix, linstruction de sauvegarde est la suivante :
mysqldump adddroptable u < u t i l i s a t e u r > p <base>

> < f i c h i e r de sauvegarde>

comme dans :
mysqldump adddroptable u habert p prema

> prema . sql

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 :

mysqldump adddroptable u < u t i l i s a t e u r > p <base> <$table$ >+ > < f i c h i e r de


sauvegarde>

comme dans :
mysqldump adddroptable u habert p prema

bebes > bebes . sql

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.

Rester efficace : les index

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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

ordonnes dune ou de plusieurs colonnes et les numros de lignes correspondantes dans la


table indexe (par exemple, tintinesque occupe les lignes 963, 1295 et 1934 de la table  
initiale). Un index des drivs vite davoir parcourir les 4 384 lignes de la table   . Le
tri pralable de lindex et les structures sous-jacentes donnent en effet accs des mthodes
daccs plus rapides que la lecture ligne ligne. Si le driv figure dans lindex, les numros
associs sont utiliss pour accder aux informations des lignes correspondantes. Dans le cas
contraire, la recherche a t plus rapide que celle dans la table complte, par dfinition non
trie. Il en rsulte nanmoins un lger surcot lors de lajout, de la modification ou de la
suppression de lignes dans la table, puisquil faut modifier en mme temps les index associs.
On associe une table autant dindex que ncessaires sa manipulation rapide. Malgr
le lger surcot la cration/destruction de lignes, il est souvent fructueux dindexer chaque
cl primaire et les cls trangres, puisque ce sont des ingrdients centraux des oprations de
jointure, les plus coteuses.
MySQL
On peut dclarer, lors de la cration dune table, que certains attributs ou combinaisons
dattributs doivent tre index(e)s en ajoutant la mention
INDEX(<colonne ou combinaison de colonnes>)
dans les options de la table. On peut galement ajouter a posteriori un index une table, en
particulier lorsquon pense que cette table ne va plus gure voluer mais quil faut optimiser
les requtes qui y font accs :

ALTER TABLE infirmieres_prin cep s


ADD INDEX ( id ) ;
ALTER TABLE infirmieres_prin cep s
ADD INDEX infirmieres_princeps_ndx ( id ) ;

Dans le second cas, lindex cr reoit en outre un nom.


La cration spare dun index sopre par :
CREATE [UNIQUE] INDEX <nom de l index>
ON <table > ( < colonne ou combinaison de colonnes >) ;

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

La destruction dun index seffectue via :


DROP INDEX <nom de l index> ;

Access


Quand on examine la structure de la table             et lattribut , qui sert de cl


primaire, on constate que cet attribut est index sans doublons et que NULL est interdit 63 .

323

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

63

En 64 , on voit ltat de dpart de lattribut   , non index et o NULL est permis.


64

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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

66

La fermeture de la fentre de modification de la structure de la table entrane une demande


de confirmation 67 .
67

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

Le rsultat est le suivant :

mot graph. max.


14

mot phon. max.


26

Les valeurs de lattribut        et de lattribut        occupent au maximum 14 et


26 caractres respectivement, alors que leur sont allous 100 caractres au maximum. La
requte correspondante est :
R2111

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

Crer et peupler une base de donnes

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

a pour quivalent SQL Server :


SELECT Max( Len ( [ occ_car ] ) ) AS [ Mot graph max ] ,
Max( Len ( [ occ_phon ] ) ) AS [ Mot phon max ]
FROM Occurrences ;

Solution de lexercice n 2 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 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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

71

On modifie ces deux choix 72 .


72


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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 91 E SQUE : drivations impropres


base
arabesque
burlesque
funambulesque
gigantesque
grotesque
mauresque
picaresque
pittoresque
putanesque
romanesque
romanesque
soldatesque
arabesque
picaresque
soldatesque
cuivresque
cartoon-esque

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

COUNT( DISTINCT lemme ) ,


COUNT( )
FROM occ_prema
WHERE c a t e g o r i e REGEXP [ANRSDVCP]
GROUP BY f i c h e ;

Access

Solution de lexercice n 7 p. 317 Le rsultat figure au tableau 91 p. 328. On constate


que les adjectifs en -esque donnent naissance des noms : arabesque donne une arabesque.
On peut se demander si les deux dernires lignes ne correspondent pas des erreurs,
linterversion des catgories entre la base et le driv et, pour soldatesque, lomission de la
catgorie de la base.
MySQL
SELECT base ,
cat_base ,
derive ,
cat_derive
FROM esque
WHERE derive = base ;

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

Crer et peupler une base de donnes

WHERE derive = LOWER( base )

73

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

74

Solution de lexercice n 5 p. 317


MySQL
On passe de 164 poids diffrents dans la table     



 

  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

Crer et peupler une base de donnes

WHEN
WHEN
WHEN
ELSE
END ;

poids =
poids >
poids >
750 g .

0 THEN poids non fourni


0 AND poids < 750 THEN poids < 750 g .
1000 THEN poids > 1000 g .
<= poids <= 1000 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

Le dclenchement de cette requte saccompagne de deux demandes de confirmation :


76

77

Il faut autant de requtes que de modifications effectuer.


Solution de lexercice n 6 p. 317
MySQL
On passe de 7 positions diffrentes dans la table     



 

  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

Crer et peupler une base de donnes

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 ;

On pourrait l aussi faire appel CASE.

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

Crer et peupler une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 92 E SQUE : catgories de dpart des bases

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

driv catgoris nf>

derive
barbesque

base
barbe

332

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La requte Mise jour est alors :

Crer et peupler une base de donnes

333
78

79

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE XI

PRATIQUES ET BONNES PRATIQUES

1. Prvenir les incohrences


2. Vrifier la justesse des donnes
P RMA
La requte suivante :
R2112
,

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

Pratiques et bonnes pratiques

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

Il y a 164 poids distincts, dont 9 occurrences de 0.


Cette requte a pour quivalent MySQL :

SELECT DISTINCT f i c h e s _ o r i g i n e l l e s . poids ,


Count ( f i c h e s _ o r i g i n e l l e s . id ) AS CompteDeid
FROM f i c h e s _ o r i g i n e l l e s
GROUP BY f i c h e s _ o r i g i n e l l e s . poids ;

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

permettent une telle vrification pour le lien           et        



table             . Cf. les solutions des exercices n 5 et 6, p. 317.





  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

Pratiques et bonnes pratiques

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.

 qui sont asso-

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]

P ROJECTION(numero_vers, vers)[<rsultat1 >]

MySQL
SELECT numero_vers , vers
FROM vers
WHERE vers REGEXP [ . ] [ az ] ;

La clause WHERE pourrait galement galement snoncer ainsi :


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

Pratiques et bonnes pratiques

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

En 4 un extrait des rsultats.


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

Pratiques et bonnes pratiques

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 ;

Dans le mme esprit, la requte :

R2115
,

R EGROUPER SUR(derive, cat_derive)[esque]


AVEC(Nombre de valeurs distinctes(base) > 1)
P AR GROUPE(
derive,
Nombre de lignes() T ITRE o.,
Nombre de valeurs distinctes(base) T ITRE nbre bases)
)[<rsultat1 >]

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

Pratiques et bonnes pratiques

TABLEAU 93 P HDRE : accents et personnages

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

TABLEAU 94 P HDRE : proportions des catgories chez les personnages


Personnage
ARICIE
HIPPOLYTE
ISMENE
OENONE
PANOPE
PHEDRE
THERAMENE
THESEE

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 95 P HDRE : vers ne commenant pas par une majuscule

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

Pratiques et bonnes pratiques

le passage de laccent circonflexe au point dexclamation en premire position entre crochets


pour indiquer le complmentaire dun ensemble de caractres. Le rsultat 6 ne comprend
cependant quun vers, celui qui commence par un guillemet. Pour Access, les majuscules
accentues sont comprises dans lensemble des majuscules, ce nest pas le cas pour MySQL.
5

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 :

CREATE TABLE bebe_jour_nombre_fiches


(SELECT id_bebe ,
jour ,
COUNT( ) AS nombre_fiches
FROM s i g n a l e t i q u e _ f i c h e s
GROUP BY id_bebe , jour ) ;

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

Pratiques et bonnes pratiques

CREATE TABLE bebe_jour_present


(SELECT id ,
1 AS jour ,
IF ( etat_J1 = ra , 1 , 0)
FROM bebes_princeps ) ;

AS present

Elle est ensuite complte pour les jours suivants :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

INSERT INTO bebe_jour_present


(SELECT id ,
3,
IF ( etat_J3 = ra , 1 , 0)
FROM bebes_princeps ) ;

en changeant chaque fois la valeur littrale de la deuxime colonne et le test de la troisime.


Une jointure externe permet disoler les 6 journes postules :
SELECT
FROM bebe_jour_present AS p
LEFT OUTER JOIN bebe_jour_nombre_fiches AS f
ON p . id = f . id_bebe
AND p . jour = f . jour
WHERE p . present = 1
AND f . id_bebe IS NULL ;

Le rsultat est le suivant :


id
40
55
64
118
59
122

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

On fournit alors le nom de la table crer : 9 .


342

Pratiques et bonnes pratiques

On est averti de lajout de lignes dans une nouvelle table : 10 .

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

Pratiques et bonnes pratiques

15

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

On doit ensuite choisir la table qui va tre complte : 16 .


16

Au moment du dclenchement de la requte, une demande de confirmation est faite : 17 .

17

Les requtes 18 et 19 sont une simple modification de la requte Ajout : on change


chaque fois la valeur littrale qui est ajoute pour lattribut    (respectivement 3, 7 et 15) et
 
 
 
lattribut qui sert de critre de restriction (respectivement    ,    et  
). Sont
ajoutes, pour le jour, 3 105 lignes, pour le jour 7, 85 et pour le jour 15, 73.
On note que la dmarche diffre, dessein, du traitement en MySQL. On insre dans la


table
uniquement des lignes pour les prsences. Lattribut     a toujours
      

pour valeur 1. La table
comporte au total 384 lignes.
      
18

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

Pratiques et bonnes pratiques

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

Solution de lexercice n 2 p. 336 On conserve les lemmes dont la catgorie commence


par V, cest--dire les seuls verbes. On limine les lemmes qui comprennent les verbes aller,
tre, etc. Enfin et surtout, on limine les lemmes qui se terminent par ir, re ou er. Pour cela,
on vrifie que les deux derniers caractres du lemme ne figurent pas dans cette liste. Si lon
examine au ralenti la manire dobtenir ce rsultat, on commence par inverser le lemme, on
garde les deux premires lettres du lemme invers (donc les deux dernires du lemme non
invers) et on rinverse ces lettres pour pouvoir les comparer aisment avec les terminaisons
vises.

345

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 96 P RMA : lemmes de verbes vrifier


lemme
attach
cest
changer dide
dialogue
donne limpression
donner envie
donner limpression
ennuie
entrer en contact
ficher la paix
il sagit de
il y a
perdre de le poids
se passer mal
se porter bien
se sentir en scurit
tirer la langue
tait

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

Le rsultat, au tableau 96 p. 346, fournit pour le lemme, la forme normalise, et le nombre


doccurrences de cette forme avec ce lemme. On trouve quelques verbes en plusieurs mots qui
nont pas t limins (changer dide, entrer en contact, etc.). Les lignes qui ne sont pas des
hapax correspondent gnralement des choix de lemmatisation intentionnels : le lemme de
cest est. . . cest, avec 179 o. Il en va de mme pour il sagit de ou il y a. Mais on isole par
ailleurs de vraies erreurs : attach, dialogue, ennuie, donne limpression et surtout tait avec
4 o.
MySQL
SELECT lemme,
forme_normalisee ,
COUNT( ) AS o .
FROM occ_prema
WHERE c a t e g o r i e REGEXP ^V.
AND REVERSE(SUBSTRING (REVERSE( lemme ) , 1 , 2 ) )

346

Pratiques et bonnes pratiques

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

Solution de lexercice n 3 p. 336 On trouve au tableau 97 p. 348 les formes normalises


ayant des lemmes distincts. Le tableau 98 p. 349 donne les formes normalises, leur partie
du discours, le lemme correspondant et la frquence de lassociation. La prsence de la partie
du discours (ici le premier caractre de la catgorie) met en vidence lambigut catgorielle
de certains mots : fait, nom et verbe ; calme, nom et adjectif ; continue, adjectif et verbe. Le
tableau met cependant en vidence des incohrences : + comme adverbe (R) ayant pour lemme
tantt ++ tantt plus ; donne limpression renvoy donner limpression mais aussi donne
limpression ; est arriv dont le lemme est tantt linfinitif actif tantt linfinitif passif. Il en va
de mme encore pour tait et veill.
MySQL
La dlimitation des formes normalises ayant plusieurs lemmes distincts dcoule de :

SELECT forme_normalisee
FROM occ_prema
GROUP BY forme_normalisee
HAVING COUNT( DISTINCT lemme ) > 1 ;

Pour obtenir les lemmes correspondants, deux dmarches sont possibles.


La premire passe par la cration dune table temporaire, la vole , pour mmoriser les
formes normalises en question :
CREATE TABLE formes_normalisees_a_plusieurs_lemmes_tmp
SELECT forme_normalisee
FROM occ_prema
GROUP BY forme_normalisee
HAVING COUNT( DISTINCT lemme ) > 1 ;

347

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 97 P RMA : formes normalises ayant des lemmes distincts

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 98 P RMA : lemmes distincts pour une mme forme

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

Pratiques et bonnes pratiques

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

La requte suivante 29 opre une jointure locale entre la table         et la requte


prcdente, sur la valeur de la colonne            (en faisant glisser le nom de lattribut
350

Pratiques et bonnes pratiques

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

Pratiques et bonnes pratiques

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 99 P HDRE : noms propres sans majuscules

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 100 P HDRE : liaison en fin de tirade


numero_vers
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252
1252

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
-

pour viter le bruit.


MySQL
Une premire requte simpose :

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 101 P HDRE : reprage liaisons malencontreuses (version 1)


numero_vers
151

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

suivant le mot avec liaison au sein du mme vers et marques ENTRE_PERSONNAGES.


Les 3 lignes de cette sorte du v. 1252 donnent effectivement naissance 3 lignes dans le
tableau 101 p. 355. La solution est simple : il suffit de garder un seul exemplaire de chaque
combinaison :

SELECT DISTINCT o1 . numero_vers , o1 . occ_car , vers , vers_phonetique


...

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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 102 P HDRE : reprage liaisons malencontreuses (version 2)

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

Quand je me meurs ! / Fuyez.


/ Je ne le puis quitter.

839

mourez

Vous mourez ? / Juste ciel !


quai-je fait aujourdhui ?

914

met

927

quitter

1252

plus

1493

Dieux

Madame ; et dans vos bras


met... / Arrtez, Thse,
Vous, mon fils, me quitter ? /
Je ne la cherchais pas :
Ils ne se verront plus. / Ils
saimeront toujours.
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
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

Pratiques et bonnes pratiques

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 103 P HDRE : reprage liaisons malencontreuses (version 3)

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

Pratiques et bonnes pratiques

relationnelles prendre en compte les phnomnes de squentialit, puisquil sagit de reprer


dans les lignes de la table          correspondant un mme vers celles qui comprennent
par un mot liaison et qui sont suivies par une marque de changement de personnage, malgr
linterposition despaces ou de ponctuation. Lauto-jointure est un palliatif dont on a vu les
limites.

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

RORGANISER UNE BASE DE DONNES

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.

1. Traquer et signaler les incohrences


Il sagit dune dmarche de longue haleine, non exempte de ttonnements et de dcisions
errones. On sappuie au maximum sur les oprations des SGBD pour cette chasse .
Lobjectif gnral est de prparer la transformation de la table unique de dpart   en
une vritable base de donnes relationnelle, en fonction de la modlisation Entit/Association
du ch. IX. Pour ce faire, il faut :

359

Rorganiser une base de donnes

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 :

ALTER TABLE esque_tmp


ADD COLUMN v e r i f _ b a s e VARCHAR(255)

DEFAULT " " ;

ALTER TABLE esque_tmp


ADD COLUMN v e r i f _ d e r i v e VARCHAR(255)
ALTER TABLE esque_tmp
ADD COLUMN v e r i f _ c o n t e x t e VARCHAR(255)

DEFAULT " " ;

DEFAULT " " ;

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.

1.1. Jeux de catgories pour les mots bases et les drivs


1.1.1. Jeux de dpart : problmes
Les requtes :

360

Rorganiser une base de donnes

SELECT cat_base AS Bases ,


COUNT( ) AS o
FROM esque
GROUP by cat_base ;
SELECT cat_derive AS Drivs ,
COUNT( ) AS o
FROM esque
GROUP by cat_derive ;

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.

1.1.2. Rorganisation des catgories


Drivs Pour les catgories des drivs, on propose de distinguer les trois nouveaux attributs
suivants :
1.


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

On ajoute donc les colonnes idoines la table

 



via les requtes suivantes :

ALTER TABLE esque_tmp


ADD COLUMN derive_POS varchar ( 1 0 ) NOT NULL DEFAULT " absente " ;
ALTER TABLE esque_tmp
ADD COLUMN derive_POS_douteuse INT NOT NULL DEFAULT 0 ;
ALTER TABLE esque_tmp
ADD COLUMN derive_POS_traits varchar ( 1 0 ) ;

361

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 104 E SQUE : catgories initiales de la table

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

Rorganiser une base de donnes

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 ]+ ;

La dernire requte revient prendre la premire lettre de lattribut  

via :

SUBSTRING(cat_derive, 1, 1)


et en faire la valeur de lattribut     On garde le reste de la chane    


partir
 
du 2me caractre jusquau 10me, pour en faire la valeur de lattribut        .
De telles crations par requtes de nouvelles valeurs pour de nouveaux attributs peuvent
aisment engendrer des erreurs, soit quun motif employ dans une condition de restriction se
revle trop restrictif ou au contraire trop laxiste, soit que la ou les modification(s) spcifie(s)
savre(nt) errone(s). Il est donc ncessaire de vrifier la correspondance entre les catgories
de dpart et les catgories rorganises. Cest lobjectif de la requte suivante :

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

 



ALTER TABLE esque_tmp


ADD COLUMN base_POS varchar ( 1 0 ) NOT NULL DEFAULT " absente " ;
ALTER TABLE esque_tmp
ADD COLUMN base_POS_douteuse INT NOT NULL DEFAULT 0 ;
ALTER TABLE esque_tmp

363

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 105 E SQUE : transformation de lattribut  


cat_derive
NULL
?
a
adv
n
n?
nf
nfpl
nm
npl
v
vintr

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

ADD COLUMN base_POS_traits varchar ( 1 0 ) ;


ALTER TABLE esque_tmp
ADD COLUMN base_locution INT NOT NULL DEFAULT 0 ;

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

Cette dernire requte revient enlever le  initial de  et  , puisquon recopie la va


leur de lattribut      partir de son deuxime caractre, aprs le  donc. Elle indique
galement que la base est une locution.
Lexamen des contextes demploi de certains cas problmatiques :
base
Gnole
SOCRATE
bouf(f)re
maboul
maboul
sauvage
simien
sit(-)com
tout-autour-du-monde
la fin

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

permet dautres mises jour :


364

Rorganiser une base de donnes

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 " ;

On peut alors effectuer les dernires mises jour :

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 ? " ;

On dcompose dans les requtes qui suivent la valeur de  


partie du discours que lon place chacun dans lattribut idoine.



entre les traits et la

UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = f

365

Rorganiser une base de donnes

WHERE cat_base = " nf " ;


UPDATE esque_tmp
SET base_POS = "n" ,
base_POS_traits = f
WHERE cat_base = " nf ? " ;

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 ;

le nombre total de combinaisons base/POS : 3 169, on peut obtenir la rpartition de ces


combinaisons selon les parties du discours (tableau 107 p. 367), via la requte :
SELECT base_POS AS Bases ,
COUNT( DISTINCT base ) AS o . ,
COUNT( DISTINCT base ) / 3169 100 AS %
FROM esque_tmp GROUP BY base_POS ;

On peut obtenir de la mme manire :


SELECT derive_POS AS Drivs ,
COUNT( DISTINCT derive ) AS o . ,
COUNT( DISTINCT derive ) / 3479 100 AS %
FROM esque_tmp

366

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 106 E SQUE : transformation de lattribut  

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

TABLEAU 107 E SQUE : rpartition des bases par partie du discours


Bases
?
a
absente
adv
interj
n
npr
onomat
sigle
v

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

Rorganiser une base de donnes

TABLEAU 108 E SQUE : rpartition des drivs par partie du discours


Drivs
?
a
absente
adv
n
v

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 ;

la rpartition des 3 479 combinaisons distinctes de driv/POS (tableau 108 p. 368).


On remarque que les dcomptes ne sont pas les mmes que ceux du tableau 104 p. 362.
On ne sintresse ici quaux types de bases ou de drivs (do lappel DISTINCT) et non
leurs occurrences. On constate la part crasante du nom dans les mots bases ( galit entre
noms propres et noms communs) et dautre part, ct de la domination sans partage de
ladjectif au sein des drivs, une petite proportion (2,24%) de drivs nominaux (du type une
arabesque, la soldatesque).

1.1.3. Signalement des changements de catgorie


On note dans lattribut
ge, par la requte :

lorsque la catgorie du driv a t effectivement chan-

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

qui produit un rsultat de la forme :


derive
grotesque
kaplanesque
ducciesque
fanfaronnesque
moresque
papillonnesque
computeresque
galarettesque
Carmividesque
Dr Quinnesque

cat_derive
nf
NULL
NULL
n?
nf
NULL
NULL
NULL
NULL
NULL

derive_POS
n
absente
absente
n
n
absente
absente
absente
absente
absente

La dmarche est similaire pour la catgorie des mots bases :


368

Rorganiser une base de donnes

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 ;

1.2. Discordances de catgorisation pour une base ou un driv spcifique

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

Rorganiser une base de donnes

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.


Une requte quivalente (o   est remplac par  et      par  


discordances catgorielles pour les drivs (tableau 111, p. 373).

) 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 , "" ) ) ;

dbouche sur une erreur :


ERROR 1093 (HY000) : You cant specify target table esque_tmp for update
in FROM clause
On procde alors en deux temps : 1) cration la vole dune table engrangeant les bases
catgories multiples ; 2) utilisation de cette table pour mettre jour en consquence la table

     :
CREATE TABLE base_a_categories_discordantes
(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 , "" ) ) ;
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
FROM base_a_categories_discordantes ) ;

370

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 109 E SQUE : bases ayant plusieurs catgories (version 1)

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

Rorganiser une base de donnes

TABLEAU 110 E SQUE : bases ayant plusieurs catgories (version 2)


Base
?
Amiga
BD
Bibi
Bouygues (Francis)
E.T.
Gnome
Mercredi
Molire
Ra Dada
baba cool
bidon
calembour + bourde
canon
chocolat
con
espagnol
faramineux ?
farfelu
faune
foutre
fratesco [it.]
furbesco [it.]
gaucho
glamour
gourou
grotesque
grottesco [it.]

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 111 E SQUE : drivs ayant plusieurs catgories

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

Rorganiser une base de donnes

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

CREATE TABLE derive_a_categories_discordantes


(SELECT DISTINCT e1 . derive
FROM esque_tmp AS e1 ,
esque_tmp AS e2
WHERE e1 . derive = e2 . derive
AND IFNULL ( e1 . cat_derive , "" )
<> IFNULL ( e2 . cat_derive , "" ) ) ;
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 , discordance c a t g o r i e )
WHERE derive IN
(SELECT FROM derive_a_categories_discordantes ) ;

1.3. Bases absentes ou douteuses


1.3.1. Constat
Dans 74 cas (tableau 112 p. 375), la base du driv et sa catgorie sont manquantes, ce
qui est signal par la marque NULL ou bien par la seule mention du point dinterrogation.
Dans dautres cas, au nombre de 190 (tableau 113 p. 376 pour un extrait), la base propose
est assortie dun doute, symbolis par un point dinterrogation.

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 112 E SQUE : bases manquantes (extrait)

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 113 E SQUE : bases douteuses (extrait)

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

Rorganiser une base de donnes

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

grandiloqueur ? reconstruit, et donn comme douteux, comme base de grandiloqueste).


Un autre problme, mineur, mais rel, est lindication de deux bases possibles dans lattribut
base, ce qui est marqu par la barre oblique ou par le mot ou. La requte :
SELECT DISTINCT base
FROM esque_tmp
WHERE base REGEXP /| [ ( ] ? ou ;

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

met en vidence le petit nombre des bases concernes.

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

          destine mmoriser la version normalise de la base. La normalisation porte


sur deux points :

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

Rorganiser une base de donnes

ALTER TABLE esque_tmp


ADD COLUMN base_normalisee VARCHAR(100) NOT NULL DEFAULT " base manquante" ;
ALTER TABLE esque_tmp
ADD COLUMN statut_base VARCHAR( 1 5 ) NOT NULL DEFAULT " sre " ;

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 ;

On notera que la condition de restriction :


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.
  

La modification qui vient dtre faite aboutit donner lattribut       la valeur  


 quand le point dinterrogation figure dans la base. Mais ce point dinterrogation peut
figurer tout seul aprs une base, comme dans cocotte ? ou bien entre parenthses aprs la
base, comme dans Twain (Shania) ( ?). Dans ce dernier cas, la base normalise comprend des
parenthses vides, effacer : Twain (Shania) (), comme le montre le tableau 115 p. 379. Cest
lobjet de la requte :


UPDATE esque_tmp
SET base_normalisee =
REPLACE( base_normalisee , " ( ) " , " " )
WHERE base_normalisee LIKE %()% ;

1.3.3. Signalement

378

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 115 E SQUE : bases normalises (extrait)

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

Rorganiser une base de donnes

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 ;

1.4. Plusieurs mots comme base


1.4.1. Constat
Il ne sagit pas ici des cas o la base postule est un mot en plusieurs mots , ce que


permet disoler lattribut         de la table       :
SELECT DISTINCT base ,
derive
FROM esque_tmp
WHERE base_locution = 1 ;

Cette requte met en vidence un petit nombre de bases et de drivs :


base
a giorno
la con
catimini (en-)
a giorno
la fin
tout-autour-du-monde

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 [ + ]

On obtient (tableau 116 p. 381) 38 couples base-driv.


1.4.2. Signalement
On marque les bases qui constituent peut-tre des mots-valises :
CREATE TABLE base_mot_valise
(SELECT DISTINCT base
FROM esque_tmp
WHERE base REGEXP [ + ] ) ;
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " motv a l i s e " )
WHERE base IN (SELECT FROM base_mot_valise ) ;

380

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 116 E SQUE : base = mot-valise

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

Rorganiser une base de donnes

1.5. Indication dune origine autre que le franais moderne


1.5.1. Constat
Quand la base nest pas un mot du franais moderne, une mention entre crochets dans la
base vient le prciser :
1. [angl.] ou [angl] anglais ;
2. [it.] italien ;
3. [a.f.] ancien franais ;

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

On commence par ajouter la table


comme valeur par dfaut (     ) :

 



un attribut textuel    



qui prend

ALTER TABLE esque_tmp


ADD COLUMN langue_base
VARCHAR( 1 0 ) NOT NULL DEFAULT " f r "
AFTER base_locution ;

On opre une modification complexe, en utilisant laiguillage CASE. On ajoute lattribut



  lindication que la base nest pas du franais moderne. On efface la chane reprsentant la langue de lattribut           . On change en consquence la valeur de        .


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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 117 E SQUE : origine de base autre que le franais moderne

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

Rorganiser une base de donnes

WHEN base_normalisee REGEXP \\[ a l l \\.\\] THEN REPLACE(


base_normalisee , " [ a l l . ] " , " " )
WHEN base_normalisee REGEXP \\[ esp . \ \ ] THEN REPLACE(
base_normalisee , " [ esp . ] " , " " )
END,
langue_base =
CASE
WHEN base REGEXP \\[ angl \\.\\] THEN " angl "
WHEN base \\[ i t \\.\\] THEN " i t "
WHEN base REGEXP \\[a\\. f \\.\\] THEN " af "
WHEN base REGEXP \\[ prov \\.\\] THEN " prov "
WHEN base REGEXP \\[ l a t \\.\\] THEN " l a t "
WHEN base REGEXP \\[ a l l \\.\\] THEN " a l l "
WHEN base REGEXP \\[ esp . \ \ ] THEN " esp "
END
WHERE base_normalisee REGEXP \ \ [ . + [ . ] \ \ ] ;

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  

Lexamen dun chantillon :

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 ;

met en vidence les changements oprs :


base
corsesca [it.]
thug [angl.]
levre [a.f.]
morisco [esp.]
pavone [it.]
background [angl.]
pittoresco [it.]
game [angl.]
settecento [it.]
graeciscus [lat.]

base_normalisee
corsesca
thug
levre
morisco
pavone
background
pittoresco
game
settecento
graeciscus

langue_base
it
angl
af
esp
it
angl
it
angl
it
lat

On peut alors examiner la place des langues dans les bases :


SELECT langue_base ,
COUNT( ) AS o .
FROM esque_tmp
GROUP BY langue_base
ORDER BY o . DESC ;

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 118 E SQUE : bases avec et sans sens associ


base_normalisee
Boingo (Oingo)
ballon
bombe
boulevard
cardinal
corsesca [it.]
mirliton
morisco [esp.]
nana
pavone [it.]
pion
todesco, tedesco [it.]
turlupin
zadjal

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

1.6. Sens associs aux bases


1.6.1. Constat
On opre pour les bases une vrification similaire celle pour les catgories, ceci prs
quon recourt aux attributs           et       plutt quaux attributs de dpart  

et      . Ces deux derniers, on le sait, sont peu fiables. La requte, dont le rsultat figure
au tableau 118 p. 385 est de la forme :

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 119 E SQUE : bases sens associ ou non

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

(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 ) ;
UPDATE esque_tmp
SET v e r i f _ b a s e =
CONCAT( verif_base , " sens ou non" )
WHERE CONCAT( base_normalisee , base_POS ) IN
(SELECT FROM base_a_sens_ou_non ) ;

La mise en vidence des dcalages possibles dcoule de la requte :


SELECT base ,
base_POS ,
sens_base ,
COUNT( ) AS o .
FROM esque_tmp
WHERE v e r i f _ b a s e REGEXP sens ou non
GROUP BY base , base_POS , sens_base ;

386

Rorganiser une base de donnes

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.

1.7. Commentaires associs aux bases


1.7.1. Constat

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Mme dmarche pour lassociation ou non de commentaire une base donne :


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 LENGTH( commentaire_base ) > 0)
AND LENGTH( commentaire_base ) = 0
GROUP BY base_normalisee , base_POS ;

Le tableau 120 p. 388 fournit les bases problmatiques sous cet angle.

1.7.2. Signalement

CREATE TABLE base_a_commentaire_ou_non


(SELECT CONCAT( base_normalisee , base_POS )
FROM esque_tmp
WHERE CONCAT( base_normalisee , base_POS ) IN
(SELECT CONCAT( base_normalisee , base_POS )
FROM esque_tmp WHERE LENGTH( commentaire_base ) > 0)
AND LENGTH( commentaire_base ) = 0 GROUP BY base_normalisee , base_POS ) ;

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

Les bases correspondantes figurent au tableau 121 p. 389.

1.8. Variantes de drivs


1.8.1. Constat
On prend en compte le fait que labsence de variantes est reprsente tantt par la marque
NULL tantt par la chane vide. Le rsultat de la requte suivante se trouve au tableau 122

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 120 E SQUE : bases avec et sans commentaire (extrait)

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 121 E SQUE : bases commentaire ou non (extrait)


derive
Cecil B Demillesque
Cecil B. de millesque

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.

"Forain, tapage, dsordre",


de Phineas Taylor Barnum,
directeur de cirque amricain
(1810-1891).
Allusion probable au baiser
de Laurent Blanc sur le crne
de Fabien Barthez, goal de
lquipe de France, lors du
Mondial 98.

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

Artin (Pietro Aretino dit l)


Aristophane
Aristophane
Artin (Pietro Aretino dit l)
ayatollah
ayatollah
bamboula
bamboula

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 122 E SQUE : drivs avec et sans variantes (extrait)


derive
abracadabresque
backgroundesque
bardesque
bondesque
borgiesque
boy-scoutesque
brandoesque
brouillonesque
canulardesque
canularesque
cauchemardesque
cauchemaresque
cendrillonesque
chateaubrianesque
churrigueresque
clipesque
clochemerlesque
cocteauesque
conesque
cornichonesque

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

(SELECT CONCAT( derive , cat_derive , base , base_POS )


FROM esque_tmp
WHERE variantes_d eri ve IS NOT NULL
AND variantes_de ri ve <> )
AND ( variantes_deri v e IS NULL
OR variantes_de ri ve = )
GROUP BY derive , cat_derive , base , base , base_POS ;

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

Rorganiser une base de donnes

1.9. Sens associs aux drivs


1.9.1. Constat
Si lon examine les sens du driv soldatesque, on obtient les rsultats suivants :
base
soldat
soldat
soldatesque

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

Rorganiser une base de donnes

TABLEAU 123 E SQUE : drivs avec et sans sens associ

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.

1.10. Mode de formation des drivs


1.10.1. Constat
Le tableau 125 p. 393 fournit le rsultat de la requte :
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 mode_formation IS NOT NULL)
AND mode_formation IS NULL
GROUP BY derive , cat_derive , base , base_POS ;

392

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 124 E SQUE : drivs avec et sans sens associ

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

TABLEAU 125 E SQUE : drivs avec et sans mode de formation


derive
soldatesque

cat_derive
a

base
soldat

base_POS
n

o.
2

393

Rorganiser une base de donnes

TABLEAU 126 E SQUE : drivs avec mode de formation ou non


derive
soldatesque
soldatesque

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 ?

1.11. Caractristiques gnrales des attestations


La table

 



compte 4 384 lignes.

2 292 nont pas dauteur (la marque NULL le signale) ;


362 nont pas de contexte ;
120 nont pas de rfrence ;

73 ont une valeur pour                ;

9 ont une valeur pour             ;
3 039 ont une valeur pour     ;

87 ont une valeur pour            .

1.12. Origine des attestations


La requte suivante permet dexaminer la rpartition des 3 039 valeurs diffrentes de lattribut     :
SELECT origine , COUNT( ) AS o .
FROM esque_tmp
GROUP BY o r i g i n e ;

Son rsultat figure au tableau 127 p. 395.

394

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 127 E SQUE : valeurs de lattribut origine

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

Rorganiser une base de donnes

TABLEAU 128 Esque : rfrences aux drivs dans des recueils


reference_dans_dictionnaire
DSA (sv), 1993
Bjrkman (sv)
DSA (sv rgion), 1993
DSA (sv caramboleur),1993
DSA (sv) 1993

o.
67
3
1
1
1

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

1.13. Rfrences aux drivs dans des recueils


1.13.1. Constat


Dans la table    , pour chaque ligne, figure la proprit                , le plus


souvent mise NULL, mais qui a pour fonction, semble-t-il, de noter les mentions de drivs
en -esque dans deux ouvrages de rfrence (si bien que le nom de lattribut nest pas adapt),
comme le montre la requte :
R2119

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

SUR (o)[<rsultat3 >]

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

Rorganiser une base de donnes

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

WHERE reference_dans_dictionnaire IS NOT NULL)


AND reference_dans_dictionnaire IS NULL
GROUP BY derive , cat_derive , base , base_POS ;

Le rsultat de la requte qui prcde se trouve au tableau 129 p. 397.


1.13.2. Signalement
CREATE TABLE derive_dans_dic_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 reference_dans_dictionnaire IS NOT NULL)
AND reference_dans_dictionnaire 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 , " d i c t i o n n a i r e ou non" )
WHERE CONCAT( derive , cat_derive , base , base_POS ) IN
(SELECT

397

Rorganiser une base de donnes

FROM derive_dans_dic_ou_non ) ;

Le tableau 130 p. 399 fournit les drivs correspondants.

1.14. Datation des contextes

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

1399 THEN 14e


1999 THEN 20e

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 130 E SQUE : drivs avec et sans rfrence dictionnairique


derive
auberginesque
auberginesque
bananiesque
bananiesque
berlusconesque
berlusconesque
bondesque
bondesque
braquemardesque
braquemardesque
cacophonesque
cacophonesque
camlonesque
camlonesque
casanovesque
casanovesque
chaplinesque
chaplinesque
connesque
connesque
gaguesque
gaguesque
hiroshimiesque
hiroshimiesque
jocondesque
jocondesque
kangouresque
kangouresque
mandolinesque
mandolinesque
muranesque
muranesque
mnageresque
mnageresque
niagaresque
niagaresque
olidesque
olidesque
panthonesque
panthonesque
patatesque
patatesque
plumesque
plumesque
pttesque
pttesque
rocambolesque
rocambolesque
rcamiesque
rcamiesque
tarzanesque
tarzanesque
tobogganesque
tobogganesque
ttonnesque
ttonnesque
vermotesque
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
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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 131 Esque : rpartition des contextes par anne ou sicle

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

TABLEAU 132 E SQUE : contextes datation boiteuse


jour
9
0
0
127
20
10

mois
8
0
0
10
3
15

annee
186
18
16
1999
2201
1999

400

Rorganiser une base de donnes

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

ALTER TABLE esque_tmp


ADD COLUMN datation DATE ;

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

CREATE TABLE contexte_a_datation_boiteuse


(SELECT numero_ligne
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 3 1 ) ) ;

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

1.15. Bilan des changements et problmes


Les trois requtes suivantes permettent de saisir lampleur des problmes rencontrs :
SELECT verif_base ,
COUNT( ) AS o .
FROM esque_tmp
GROUP BY v e r i f _ b a s e ;
SELECT v e r i f _ d e r i v e ,
COUNT( ) AS o .
FROM esque_tmp
GROUP BY v e r i f _ d e r i v e ;
SELECT v e r i f _ c o n t e x t e ,
COUNT( ) AS o .

401

Rorganiser une base de donnes

TABLEAU 133 E SQUE : changements et problmes (1/2)

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.

2. Prparer les corrections manuelles


2.1. Objectifs gnraux
Lobjectif est de reprendre les donnes de la table   pour prparer lclatement de
cette table en plusieurs tables, en fonction de la modlisation Entits/Associations qui a
t conduite au ch. IX. Les redondances entre lignes de la table actuelle doivent laisser place
des informations distribues entre plusieurs tables. L o les lignes charentonnesque et
charentonesque, drivs adjectivaux, provenant tous deux du nom propre Charenton, dans le
sens d/hpital psychiatrique dune ville du sud-est de Paris/ rptent les informations sur
402

Rorganiser une base de donnes

TABLEAU 134 E SQUE : changements et problmes (2/2)

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

Rorganiser une base de donnes

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 :

CREATE TABLE bases_tmp


(SELECT base_normalisee AS base ,
base_POS AS POS ,
base_POS_traits AS t r a i t s ,
base_POS_douteuse AS POS_douteuse ,
0 AS numero_sens ,
sens_base AS sens ,
commentaire_base AS commentaire ,
base_locution AS locution ,
langue_base AS langue ,
COUNT( ) AS nbre_attestations ,
base AS base_depart ,
cat_base AS cat_depart ,
verif_base
FROM esque_tmp
WHERE statut_base <> absente
GROUP BY base_normalisee , base_POS ) ;
ALTER TABLE bases_tmp
ADD COLUMN id_base INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD INDEX( id_base ) ;


La premire requte opre un regroupement de la table      sur les attributs      


  
et      , cest--dire sur la version nettoye tant de la forme-mme de la base
que de sa catgorie. Les attributs conservs sont la fois ceux qui rsultent du nettoyage (se
404

Rorganiser une base de donnes




rajoutent aux deux attributs qui viennent dtre cits          ,           ,  



et        ) et dautres conservs
      , avec comme valeur par dfaut 0,       


de la table    de dpart :       ,           , la forme de dpart (       ), la cat

gorie de dpart (      ). On pourrra ainsi examiner de manire fine si les transformations
effectues lont t juste escient. Lattribut     , quant lui, indique les rorganisations effectues et les problmes dcels. On note quon renomme les attributs pour rendre
les noms plus transparents et plus manipulables.
La deuxime requte ajoute un attribut auto-incrment,    : chaque base potentielle
se trouve dsormais dote dun identifiant numrique unique, qui sert de cl primaire.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

La structure de dpart de la table  

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

est donc la suivante.


Key
MUL

Default

Extra
auto_increment

base manquante
absente
YES
0
0
YES
YES
0
fr
0
YES
YES
YES


On modifie en parallle la table     , en lui ajoutant un attribut    . On met



jour la valeur de cet attribut en profitant dune jointure avec la table       : on donne

ce nouvel attribut la valeur quil a dans la table       quand il y a partage des valeurs
des attributs           et   dun ct et       de lautre. On donne donc un
couple (<base>, <partie du discours>) le mme identifiant dans les deux tables, ce qui permet

dtablir entre elles une jointure 1 n : une entre de la table       correspond 1 ou n

entres de la table     . On peut par ailleurs dtailler le nombre dentres associes aux
bases grce la requte :

SELECT nbre_attestations AS Nombre d\ a t t e s t a t i o n s par base ,


COUNT( ) AS o .
FROM bases_tmp
GROUP BY nbre_attestations ;

Si limmense majorit des bases na quune attestation, 2 bases en ont 10.


Nombre dattestations par base
1
2
3
4
5
6
7
8
10

o.
2449
435
152
63
28
11
7
1
2

405

Rorganiser une base de donnes

2.2. Exporter les donnes partir de MySQL en format dlimit




Pour chacune des deux tables       et     , on produit un fichier dlimit pour


limport sous Access. Le fichier est dlimit dune part par le caractre tabulation entre les
colonnes et, entre les lignes, par la suite de caractres \r\n, qui correspond au changement
de lignes sous Windows.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Le ch. XIII 2 dtaille la notion de fichier dlimit.


Lexport est ici effectu sous Linux et profite des changes possibles entre commandes. La
commande   suivie dune chane et suivie dun pipe, la barre verticale, permet denvoyer la
commande    la requte effectuer. Le rsultat de cette commande est renvoy par MySQL
sous la forme dune suite de caractres quil faut sauver dans un fichier, via la commande de
redirection quest le chevron fermant. On se voit demander le mot de passe daccs la base
de donnes correspondant lutilisateur indiqu.
Pour un attribut pouvant contenir la marque NULL, on exporte non pas cette marque qui
deviendrait la simple chane de caractres NULL dans le fichier de sortie, mais la chane vide
, qui sera remplace par la marque NULL par Access. Cest le rle de
IFNULL(<attribut>, <valeur remplaant la marque NULL>)

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

insrent par ailleurs un retour-chariot (\r) avant le caractre \n.


echo "SELECT id_base , base , POS, IFNULL ( t r a i t s , ) AS t r a i t s , POS_douteuse ,
numero_sens , IFNULL ( sens , ) AS sens , commentaire , locution , langue ,
nbre_attestations , base_depart , cat_depart , v e r i f _ b a s e FROM bases_tmp " |mysql u
habert p esque |sed e " s/./&~/" | t r ~ \r > bases_tmp . t x t

echo "SELECT numero_ligne AS numero_attestation , id_base , base_normalisee , base_POS


, IFNULL ( base_POS_traits , ) AS base_POS_traits , base_POS_douteuse ,
base_locution , langue_base , IFNULL ( sens_base , ) AS sens_base , IFNULL (
commentaire_base , ) AS commentaire_base , IFNULL ( base , ) AS base_depart ,
IFNULL ( cat_base , ) AS cat_base_depart , verif_base , statut_base , id_derive ,
derive , derive_POS , IFNULL ( derive_POS_traits , ) AS derive_POS_traits ,
derive_POS_douteuse , IFNULL ( sens_derive , ) AS sens_derive , IFNULL ( cat_derive
, ) AS cat_derive_depart , IFNULL ( variantes_derive , ) AS variantes_derive
, IFNULL ( mode_formation , ) AS mode_formation , v e r i f _ d e r i v e , IFNULL (
contexte , ) AS contexte , IFNULL ( reference , ) AS reference , IFNULL (
reference_dans_dictionnaire , ) AS reference_dans_dictionnaire , IFNULL ( auteur
, ) AS auteur , IFNULL ( reference_complement , ) AS reference_complement ,
IFNULL ( jour , ) AS jour , IFNULL ( mois , ) AS mois , IFNULL ( annee , ) AS
annee , IFNULL ( datation , ) AS datation , IFNULL ( annee_complement , ) AS
annee_complement , IFNULL ( origine , ) AS origine , v e r i f _ c o n t e x t e FROM
esque_tmp " |mysql u habert p esque |sed e " s/./&~/" | t r ~ \r >
esque_tmp . t x t

2.3. Importation dun fichier tabul sous Access


Limportation seffectue via dFichier | Donnes externes | Importere.

406

Rorganiser une base de donnes

 

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

Rorganiser une base de donnes

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

Par rapport 7 , on choisit dindexer sans doublons lattribut


fiant, de cl primaire.

  , qui servira didenti-

408

Rorganiser une base de donnes

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

Rorganiser une base de donnes

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


Rorganiser une base de donnes

Laffichage de la table                 permet ventuellement daller examiner les


lignes et les attributs qui ont t abms et de dcider des conclusions en tirer.
15

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 ;

Son rsultat est le suivant :


base
shtru

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

Rorganiser une base de donnes

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





(il sagit en fait

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

les drivs du mot-base B prennent comme    celui du mot A ;



le mot-base B est enlev de la table      .
Lorsquun mot-base A est sparer en A et B (il y a en fait deux mots-bases diffrentes) :
on cre un mot-base B, qui reoit automatiquement une valeur pour    ;
on examine tous les drivs de A et soit on leur laisse l    de A soit on leur donne
l    de B.
Il faut, dans un deuxime temps, assurer la mise en cohrence des informations associes
un mot-base
Si ce mot-base correspond une seule attestation, donc une seule ligne dans la table

   , on vrifie les informations correspondant au mot-base dans cette ligne. Dans le
cas contraire, on vrifie sil ne faut pas rassembler des informations prsentes dans plusieurs
lignes. Ce problme et son traitement sont dtaills pour les drivs.


 

3.1.2. Mmoriser les amendements

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

3.1.3. Marquage des lignes de         dont la base est changer




On tablit une jointure de type 1 n entre les tables        et     , sur lattribut




  . une ligne de la table       , cest--dire un mot base donn, correspondent

une ou plusieurs lignes de la table     , cest--dire une ou plusieurs attestations.

412

Rorganiser une base de donnes

18

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

On le voit en 19 , quand on ouvre en mode feuille de donnes la table       , une croix


sur la gauche de chaque ligne nous indique une jointure avec une autre table. Lorsquon
clique sur cette croix, on obtient la ou les ligne(s) correspondante(s) de lautre table.
19


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

Au dpart, il contient la mme valeur que lattribut


jour 22 .



21 , grce une requte Mise

413

Rorganiser une base de donnes

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

3.1.4. Correction et formulaires


Les formulaires sont sous Access le moyen privilgi dafficher et de changer les donnes
dune table, voire de deux tables lies. Un formulaire permet de runir en un cran des zones
de saisie, de les nommer, de les disposer volont, de les assortir de contrles, etc.
La fabrication de formulaires sophistiqus relve des manuels de lutilisateur dAccess. Elle
nest donc pas dtaille dans ces pages.
414

Rorganiser une base de donnes

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

Rorganiser une base de donnes

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

Rorganiser une base de donnes

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

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

34

3.1.6. Rechercher les doublons spars


Il est relativement ais de confronter les informations sur deux mots-bases quand ils se

suivent dans lordre de la table       , cest--dire par tri sur les attributs   et    .
Cest le cas par exemple avec sit com et sit(-)com. Dautres doublons sont disperss : Le Monde
et Monde (Le) ; SOCRATE et Socrate ; Led Zeppelin et Zeppelin (Led) ; legume et lgume.
Pour faciliter la recherche de ce cas de figure, on dveloppe une requte paramtre. Elle af
fiche tous les attributs de la table        et attend de lutilisateur un motif quelle confronte
avec la valeur de lattribut   .

35

Linterrogation correspond au dernier exemple fourni.


36

La rponse permet effectivement disoler un mot-base faire fusionner avec un autre. Si le


mot-base lgume navait pas exist dans la table, on se serait content de rectifier la graphie
fcheuse.
37

3.1.7. Contrler les corrections manuelles


La correction manuelle est fastidieuse et sujette aux erreurs. Il faut donc la contrler.

Ainsi, une autre requte conserve uniquement les lignes de la table        qui ont t
manuellement changes, cest--dire celles dans lesquelles soit lattribut          a pris la
418

Rorganiser une base de donnes

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

Une autre requte permet disoler rapidement les erreurs de ce type.

39

On constate que 9 erreurs de ce genre ont t commises.


40

On rectifie manuellement en ce sens   





3.1.8. Fusionner les attributs sens et commentaire


Dans la modlisation du ch. IX, on a dcid dune part de disposer dun attribut        
pour distinguer les bases homonymes jusqu la partie du discours compris et par ailleurs,

dun seul attribut        , destin accueillir aussi ce qui figure dans lattribut    de la
table    de dpart.


Lorsquon examine la valeur que prend lattribut    dans       quand il nquivaut


pas la marque NULL, en 41 et en 41 , on constate dune part que, sauf une exception

(turlupin), lattribut        na pas de valeur, dautre part, quune des bases est marque
419

Rorganiser une base de donnes

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

Rorganiser une base de donnes

45

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

3.1.9. Rattacher les attestations aux bases consolides


Une fois ces erreurs corriges ainsi que les autres incohrences dans la correction, on peut

profiter de cette version consolide des bases. La jointure qui liait les tables       


et     , sur lattribut    , nest plus valide, puisque certaines lignes de       
sont destines tre supprimes (70 sur les 3 148 initiales). Les renvois corrects figurent
dsormais dans lattribut       de la table Esque_tmp. Par un clic droit sur larte
matrialisant la jointure dans la fentre des relations (onglet dOutilse de la barre de menu du
haut, on peut supprimer la jointure obsolte.

On la remplace par une jointure d

46



 

vers

 .

47

On constate en examinant la table        que les drivs de Mai 68 relvent maintenant


dune seule base (lautre ayant une table vide pour les drivs associs).

421

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

48

3.2. Consolider les drivs


3.2.1. Cration dune table temporaire des drivs
On peut passer la consolidation des drivs, sur le modle de ce qui a t ralis pour les bases. Il sagit pour ce faire dobtenir une table      . La requte sous
jacente regroupe les lignes de la table      successivement sur    ,   ,  ,
 
et     . Les autres attributs concernant le driv sont rajouts :         ,





,         ,         ,          et    .

     
 ,     

49

50

On dclenche une requte Cration de table.


51

Aprs avoir fourni le nom de la table rsultante, on reoit lavertissement concernant le


nombre de lignes qui vont tre ajoutes dans la table cre la vole.
52

422

Rorganiser une base de donnes




On ajoute par ailleurs cette table dune part un attribut   , de type       ,



et on en fait la cl primaire, et dautre part un attribut        , de type Texte, destin
recueillir des informations parses.
Laperu de la table rsultat permet de se souvenir que lorsquun driv na pas de base, il
prend 0 comme valeur d    .

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

53

3.2.2. Modifications induites pour la table

    

On modifie paralllement la table       pour ajouter deux attributs   et   


Via longlet dTablese de la fentre de navigation dans la base de donnes, on choisit dModifiere
et on se positionne lendroit o lon souhaite ajouter une ligne, cest--dire un attribut, dans
la structure.

 

54

On suit le chemin dInsertion|Lignese de la barre de menu du haut.


55

La ligne est insre.


56

423

Rorganiser une base de donnes

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

Pour cela, on tablit une jointure temporaire entre les tables       et     ,


sur les attributs       ,  ,     . Cette jointure permet de crer une requte

Mise jour qui donne   et      dans la table       la valeur d  

dans la table      .
58

On est averti des modifications qui vont en rsulter.


59

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

3.2.3. Fusion de drivs et rattachements de lignes de

Rorganiser une base de donnes

    

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.

Louverture des lignes lies de la table

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

Lcran 65 correspond par contre deux bases distinctes.

425

Rorganiser une base de donnes

65

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

3.2.4. Retours en arrire


Lexamen des drivs met en vidence des incohrences rmanentes au niveau des bases,
malgr ltape de corrections manuelles. Le cas de figure est le suivant : deux drivs identiques pour le driv et sa partie du discours, ainsi que pour le mot-base, diffrent pour la
catgorie du mot-base, parce que, dans un cas, cette dernire est absente.
Il faut donc :


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.

On constate pour ladjectif twinesque une telle discordance :


66

Lexamen des bases Twin manifeste la discordance de catgorie. On marque la base sans
catgorie comme supprimer.
67

On rattache lattestation dpendant du driv rattach cette base supprimer au driv


de la base Twin npr. On indique que le driv rattach la base supprimer est galement
supprimer.
68

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

Rorganiser une base de donnes

427
69

70

71

72

73

74

Rorganiser une base de donnes

3.2.5. Fusion des attributs   et       


Sur le modle de ce qui a t fait pour les bases, les informations prsentes dans lattribut

sont ajouter celles prsentes dans lattribut        . On remarque cependant que
certains drivs sont marqus comme supprimer.


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

Le rsultat est conforme ce qui tait attendu.

428

Rorganiser une base de donnes

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

79

3.2.6. Rajout de lattribut     




 la table Derives_tmp
  

Dans la table     , on dispose de lattribut       , qui vaut trs gnralement




ou    , ce qui correspond un point dinterrogation dans la
  , mais peut valoir   
forme initiale du driv dans la table    .
Cet attribut a par mgarde t laiss de ct lors de la cration de la table 
faut donc ly rajouter.





. Il
80




Une requte Cration de table permet de faire la correspondance entre  


et  
quand cet attribut na pas pour valeur la chane sre, cest--dire quand la valeur
tait soit douteuse soit absente.
 
  

81

  

Une requte Mise jour a pour fonction de donner lattribut       de la table 


  

    la valeur de son homologue de la table qui vient dtre cre :   
   

.
   . Elle repose sur la jointure locale sur lattribut partag



429

Rorganiser une base de donnes

82

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Le dclenchement de la requte entrane un avertissement.


83

La valeur de lattribut

  
    

est effectivement mis jour.


84


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

Rorganiser une base de donnes

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   .

3.3.2. Attestations doublons

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

Rorganiser une base de donnes

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

Rorganiser une base de donnes

Lorsque deux attestations partagent le mme identifiant de driv, on se trouve en gnral


face une rptition indue, comme dans :

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

Rorganiser une base de donnes

? (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

Lattribut     est un attribut assez souvent non atomique, comme dans      


       . Sans doute faudrait-il remplacer cet attribut non atomique par une relation 1
n dune attestation vers les bases des donnes et usuels dans lesquels elle figure.
3.3.5. Rfrences


Lattribut                a deux fonctions seulement comme le montre le rsultat


dune requte utilisant des regroupements :
95

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

4. Consolidation de la base de donnes




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

ce qui aboutit dtruire 76 lignes :

434

Rorganiser une base de donnes

97

On modifie alors la structure de cette table pour laguer les colonnes qui ne sont pas




pertinentes :            


                 .


On opre de la mme manire avec une table 



 :

      

,

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

Il ne reste plus qu tablir les relations pertinentes entre tables :


100


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

Rorganiser une base de donnes

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

IMPORTER EXPORTER REMODELER

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&eacute ;b&eacute ;
tr&egrave ;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

Importer exporter remodeler

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

Importer exporter remodeler

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

2. Importer des fichiers dlimits


Rsultat de prs dun demi-sicle de saisies, corrections et transformations, la base textuelle Frantext rassemble prs de 4 000 textes complets, tiquets morpho-syntaxiquement
(mais non lemmatiss) pour plus de la moiti. Au total, prs de 220 millions de mots (prs de
130 millions de mots tiquets), un millier dauteurs. Cette base a au dpart t construite
pour permettre lcriture des 17 volumes du Trsor de la langue franaise ( TLF), dsormais
informatis : TLFI. La langue reprsente est surtout littraire (80% duvres littraires, 20%
duvres techniques), du 16e`me sicle au 20e`me .
La base Lexique, disponible en ligne, a t conue au dpart pour venir en appui des
expriences en psycholinguistique. Elle fournit ainsi des frquences des mots et des lemmes
partir de plusieurs corpus pour pouvoir examiner la corrlation entre ces frquences et des
tches de dcision lexicale : un sujet voit des chanes de caractres prsentes lcran et
il doit dcider le plus rapidement possible pour chaque chane si elle relve des mots ou si
elle ressortit aux non-mots (comme reveneure dans Il tait reveneure ; les slictueux toves /
Sur lallouinde gyraient et vriblaient du pome Jabberwocky dans De lautre ct du miroir).
Le temps de raction est enregistr chaque fois. On peut alors regarder la corrlation entre
les temps de raction et les frquences dont on dispose. Lhypothse est que plus un mot
est frquent, plus sa reconnaissance comme un mot est rapide, voire que les frquences
loral sont plus pertinentes que les frquences pour lcrit. Lexique comprend les frquences
fournies par lATILF sur une partie rcente de Frantext (19502000), soit 31 millions de mots,
ainsi que les frquences issues des sous-titres de 3 000 films ou pisodes de sries tlvises.
Le corpus de sous-titres a t rassembl pour donner une estimation de frquences loral,
tandis que Frantext visait lcrit. Lexique fournit 130 000 formes relevant de 55 000 lemmes.
Ressource libre, Lexique est dchargeable, assorti doutils de manipulation, mais galement
consultable en ligne.

  

On va utiliser un des lments de la base Lexique, le fichier      , pour confronter


les drivs prsents dans la table   avec les mots en -esque repertoris dans une base
textuelle volumineuse correspondant une priode rcente.

2.1. Format dlimit


  

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

Importer exporter remodeler

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

marquage du changement de ligne


\n
\r
\r\n

Word montre dailleurs cette marque et en mme temps linterprte, cest--dire


effectue ce que cette marque symbolise : un changement de ligne. En ralit, dans le fichier
correspondant, les caractres sont la queue-le-leu, les uns derrire les autres :
. . .alibabesque10.03\r\n alibert170.54\r\n alibi1203.82\r\n
alibis240.76\r\n alibise10.03\r\n aliboron20.06\r\n
alibour20.06\r\n alicante100.32\r\n alice31610.07\r\n
440

Importer exporter remodeler

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 :

CREATE TABLE FrantextLexique (


graphie VARCHAR(100) BINARY NOT NULL DEFAULT " " ,
frequence INT NOT NULL DEFAULT 0 ,
proportion DECIMAL( 4 , 2 ) NOT NULL DEFAULT 0 ,
PRIMARY KEY ( graphie ) ) ;

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 ;


On obtient un message sur le nombre de lignes lues (     ), de lignes cres (      )


et davertissements (       ) ventuels quand la ligne intgrer pose des problmes (incompatibilits de type, dbordements de taille). Dans le cas prsent, 104 avertissements ont
t mis, et 3 lignes problmatiques ont t laisses de ct (    ) :

    







  



    



 







441

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 135 E SQUE : intrus dans les mots en -esque de Frantext


graphie
aveclesquels
desquelles
desquellesles
desquels
desquelz
desqueyroux
englesqueville
esquerre
esquevin
lesqueles
lesquell
lesquelle
lesquelles
lesquels
lesquelss
lesquereux
romanesquerie
*esquerre
*esquevin
*lesquereux

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

2.3. lagage de la table des lemmes de Frantext


On peut dans un premier temps dtruire toutes les lignes qui ne sauraient tre des occurrences dun mot en -esque, cest--dire qui ne rpondent pas au motif   :

DELETE FROM FrantextLexique


WHERE graphie NOT REGEXP esque ;


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

Importer exporter remodeler

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

DELETE FROM FrantextLexique


WHERE graphie IN ( besque , esques , fiesque , fresque , fresques , kesque ,
nesque , perplesque , presque , quesques , vesque , vesque , lebesque ,
levesque , lvesque ) ;

2.4. Rapprochement avec la table  


La table    contenant des lemmes de drivs, et non des flexions, si lon veut mettre les
 
deux tables en relation via une jointure, il faut lemmatiser la table       . Cest le but
de la requte :
SELECT
CASE
WHEN graphie REGEXP esques$
THEN SUBSTRING ( graphie , 1 , LENGTH( graphie ) 1)
WHEN graphie LIKE % THEN REPLACE( graphie , , )
ELSE graphie
END AS lemme,
graphie ,
frequence ,
proportion
FROM FrantextLexique ;

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 136 E SQUE : lemmatisation des formes de Frantext


lemme
gracianesque
picaresque
churrigueresque
fallacesque
clownesque
grotesquement
goeringesque
tintamarresque
vaticanesque
simonesque
dantonesque
donquichottesque
chewinggumesque
arabesque
diablesque
hugolesque
zombiesque
demillesque
karabesque
zigantesque
babelesque

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

WHEN graphie LIKE % THEN REPLACE( graphie , , )


ELSE graphie
END) ;

2.5. Les mots en -esque au regard de Frantext


La mise en relation, par jointure entre les tables
(tableau 138 p. 446), seffectue par la requte :

 

et 



 





    

 

SELECT derive AS Driv ,


COUNT( ) AS c t x t e s ,
frequence AS f r q . ,
proportion AS prop .
FROM esque ,
lemmeFrantext_frequence_proportion
WHERE derive = lemme
GROUP BY derive
ORDER BY frequence DESC ;

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

Importer exporter remodeler

TABLEAU 137 E SQUE : table des lemmes de Frantext

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.

3. Echanger des donnes structures : XML


Les formats dlimits de type CSV prsentent linconvnient de reposer sur des conventions
implicites pour la structuration des donnes :
le jeu de caractres employ nest pas indiqu ;
le nom des colonnes nest pas forcment fourni ;

445

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 138 E SQUE : lemmes de Frantext prsents dans la table

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 139 E SQUE : lemmes de Frantext absents de la table


lemme
aubignesque
chevaleresquement
demillesque
fallacesque
fiesque
grotesquement
karabesque
latudesque
levesque
mahonesque
pittoresquement
prudhonesque
rafinesque
zigantesque

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.

3.1. Exporter partir dAccess


Lorsquon slectionne une table, ici              , dans longlet dTablese de la fentre
de navigation dans la table, avec le bouton droit, on peut choisir dexporter :
1

On choisit alors la fois le dossier et le nom de destination et le format cible, en loccurrence XML.

447

Importer exporter remodeler

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

Les crans 4 et 5 montrent le dbut et la fin la table    

  



au format XML.
4

En XML (Extensible Markup Language), un texte est fondamentalement considr comme


un ensemble dlments qui peuvent simbriquer, cest--dire comme un arbre. La figure 7
p. 449 correspond cette reprsentation. Chaque attribut constitue une bote dont le nom
est le nom de lattribut et qui contient la valeur associe. Cest le cas par exemple de et de
la valeur  en bas gauche. Les attributs sont regroups dans une bote              .
448

Importer exporter remodeler

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

Les botes              entrent elles-mmes dans une bote     . La figure 8 p. 449


manifeste lquivalence entre la reprsentation en botes et une reprsentation arborescente.
Les crans 4 et 5 donnent la manire de noter en XML une telle arborescence. Le marquage
du dbut dun sous-arbre seffectue par une balise ouvrante le nom du sous-arbre entre
chevrons et la fin par une balise fermante : le nom du sous-arbre aprs </ et avant le
chevron fermant. Ainsi lidentifiant de la premire infirmire constitue un sous-arbre , la
ligne 4, dlimit par <id> au dbut et </id> la fin. Les cinq sous-arbres correspondant la
premire infirmire sont regroups en un arbre de plus haut niveau              allant
de la ligne 3 la ligne 9, etc. La premire ligne indique que le document obit la version 1.0
du standard XML et quil utilise lencodage UTF-8 pour les caractres.
On reconstitue aisment la logique de transformation de la table en un arbre. Une cellule
devient un arbre de profondeur 1 ayant pour racine le nom de lattribut et pour feuille sa
valeur. Une ligne devient un arbre de profondeur 2 qui enchsse les arbres de profondeur 1
correspondant ses cellules. La table elle-mme est larbre de profondeur 3 qui regroupe les
arbres de profondeur 2 traduisant les lignes.
La reprsentation obtenue explicite la structure de la table. Elle ne repose pas sur des
conventions fragiles pour la dlimitation des attributs ou des lignes. Elle intgre les noms des
colonnes.
3.1.1. Modle de document
Le document XML correspondant lexport de la table    
modle de document, que voici :



   

 

 

 

 

  

 












   

 

 

  

     



fait rfrence un

   



 

 

449




 

 

 

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

 

  



  







 


    

 

      

  



  

  









 

 

 



  

 

 

 

   



 

 














 






 



 

 

 

 

 


    

 


    

  







 

  

  


  

   

  


  





 

   









 



   

 



 



    

 

 

    

 


 









  




 

   








   


 

   



    

 

 

 



 



 



 



 

 

    







 



 



 

 

 








 

 




















 

     


  

 



 

 

 

 

 



     



   

 

   

   


  









   





Importer exporter remodeler

450

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

 

 

Importer exporter remodeler

Ce modle donne les rgles de bonne formation du document              .xml. Il


y a plusieurs manires de fournir de telles rgles Ray (2001)(Fitzgerald, 2004). La plus ancienne consiste dfinir une DTD (Dfinition de type de document). Plus rcemment, ont t
introduits les schmas. Le modle ci-dessus est un schma, comme lindique la balise de la
deuxime ligne. partir du moment o un document XML est un arbre, les rgles formulent
une grammaire , cest--dire une manire la fois denchsser les lments (quel lment
peut dominer tel ou tel lment ?) et de les enchaner (quel lment peut suivre tel lment),
en indiquant ventuellement quun lment est optionnel ou au contraire quil est rptable.


Ainsi     est-il dfini comme une squence dlments de type             . Cette
squence peut tre vide, navoir aucune occurrence dlments              (cf.    
  
 ) ou en avoir un nombre indfini :             
. De la mme manire, un

lment              domine un lment , un lment  , un lment   , un l
ment    , un lment     
et un lment    . Sauf , qui est la cl primaire et
ce titre forcment prsent (cf.       
), tous les autres lments peuvent ne pas tre
prsents.
On pourrait reformuler cette grammaire ainsi :


   

  

  

  



  





 

 



o ltoile signifie 0 ou n occurrences de llment qui prcde et ? 1 ou n.

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.

3.2. Exporter partir de MySQL


Sous Phpmyadmin, on slectionne la table que lon souhaite exporter. On doit alors choisir
entre diffrents formats dexportation, dont des formats dlimits (CSV). On choisit XML.
6

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

Importer exporter remodeler

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

 




  

  

 

 

 








 


 

 


  



  




 

 









  

Importer exporter remodeler






   

  

  



 

 






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

3.3. Importer sous Access des donnes XML


Sous MySQL, on a export en XML avec deux versions distinctes de Phpmyadmin la table
signaletique_fiches, avec des jeux de caractres distincts : ISO-Latin1 et UTF-8, comme le




rappelent les noms choisis :                  et                .
La premire ligne de chaque fichier indique le jeu de caractres employ :
< ?xml version="1.0" encoding="iso-8859-1" ?>
et
< ?xml version="1.0" encoding="iso-8859-1" ?>
453

Un navigateur comme Firefox permet de visualiser     

Importer exporter remodeler



 

 

  .

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.

La visualisation toujours avec Firefox de


milaires.

10

   



 

  



donne des rsultats si-

454

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

11

Les caractres accentus sont l encore bien rendus.


12

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

Importer exporter remodeler

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

16

On constate en 17 que les caractres de


t correctement interprts.

   



 

 

  ,

en ISO-Latin1, ont
17

On opre de la mme manire pour                . Une fois limport effectu,


on constate quAccess a engendr un nom de table qui diffre du prcdent par lajout dun
numro dordre, pour viter les confusions.
18

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

Importer exporter remodeler

4. Remodeler des informations peu structures

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

4.1. Le dictionnaire lectronique DELA


Maurice Gross a impuls le dveloppement des lexiques-grammaires. La description fine
dun mot consiste, dans ce cadre, examiner son comportement pour le maximum de proprits syntaxiques pertinentes pour sa catgorie grammaticale (environ 400 pour les verbes).
Par exemple, pour un verbe : se passive-t-il ? accepte-t-il une construction en se (Il vend bien
ses livres vs. ses livres se vendent bien) ?, etc. La dmarche a t progressivement tendue
aux mots en plusieurs mots, ce qui a permis daboutir aux rpertoires les plus complets qui
existent pour le franais (mme si ces inventaires ne sauraient tre considrs comme termins). Elle prend en compte les constructions verbe support (il a froid et il fait un somme,
dans Dormeur), o le verbe apporte les indications de temps et daspect, tandis que la majeure
partie du smantisme provient de ladjectif ou du nom.
Les lexiques-grammaires des mots simples (680 000) et des mots en plusieurs mots (100 000)
sont incorpors deux logiciels : Intex/Nooj et Unitex, offrant ainsi des dictionnaires lexicosyntaxiques sans prcdents tant par leur couverture que par leur finesse danalyse.
Cest le dictionnaire DELA, disponible sous licence GPL dans le cadre du logiciel dtiquetagelemmatisation Unitex, qui est utilis dans cette section. Il comprend, dans la version mise
contribution ici, 792 260 entres, en autant de lignes. Cest un dictionnaire de formes et non
pas de lemmes. On trouve donc les singuliers et les pluriels des noms, les flexions des verbes,
etc. Le tableau 140 p. 459 fournit les lignes comprenant le motif .*prmatu.*. On note la
prsence de mots en plusieurs mots , comme enfant prmatur, vieillissement prmatur.
Les lignes se dcoupent en :

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

 



, destine accueillir les

458

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 140 P RMA : formes ressemblant .*prmatu.* dans le dictionnaire DELA

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

CREATE TABLE dela_tmp (


entree_depart VARCHAR(255) BINARY
) ;

Peupler cette table partir du fichier



 

 

seffectue par la commande :

LOAD DATA LOCAL INFILE


" /home/habert/delaf r public . dic "
INTO TABLE dela_tmp ;

4.3. lagage des entres du dictionnaire DELA


Aprs avoir examin les entres comprenant le motif .*esque.* et une espace (tableau 141
p. 460), via la requte :
SELECT
FROM dela_tmp
WHERE entree_depart REGEXP esque
AND entree_depart REGEXP ;

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

Importer exporter remodeler

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

Importer exporter remodeler

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

Les 179 entres restantes comprennent du bruit :


entree_depart
desquelles,duquel.PREPPRO+z1 :fp
desquels,duquel.PREPPRO+z1 :mp
fresque,.N+z1 :fs
fresques,fresque.N+z1 :fp
lesquelles,lequel.PRO+z1 :fp
lesquelles,lequel.DET+z1 :fp
lesquels,lequel.PRO+z1 :mp
lesquels,lequel.DET+z1 :mp
nesquehonite,.N :fs
nesquehonites,nesquehonite.N :fp
presqu,presque.ADV+z1
presque,.ADV+z1

Exercice n 1

Supprimer les entres en esque restantes qui correspondent du bruit.

4.4. Rapprochement avec la table  

On commence par ajouter les attributs qui correspondent ceux de la table


     :





ALTER TABLE dela_tmp


ADD COLUMN lemme VARCHAR( 6 0 ) BINARY NOT NULL ;

ALTER TABLE dela_tmp


ADD COLUMN c a t e g o r i e VARCHAR( 6 0 ) BINARY NOT NULL ;
ALTER TABLE dela_tmp
ADD COLUMN forme VARCHAR( 6 0 ) BINARY NOT NULL ;
ALTER TABLE dela_tmp
ADD COLUMN d i c t i o n n a i r e VARCHAR( 6 0 ) BINARY NOT NULL DEFAULT DELA ;

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 %,.% ;

Il sagit alors, pour ces entres, de donner aux attributs 




lattribut       qui prcde la virgule, via la requte :



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

Importer exporter remodeler

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

on donne lattribut    la sous-chane de lattribut       qui prcde la virgule et




lattribut    la sous-forme de lattribut       qui commence aprs la virgule et
sarrte avant le point, grce la requte :
UPDATE dela_tmp
SET
forme =
SUBSTRING ( entree_depart , 1 , LOCATE( " , " , entree_depart ) 1) ,
lemme =
SUBSTRING ( entree_depart , LOCATE( " , " , entree_depart ) + 1 , LOCATE( " . " ,
entree_depart ) LOCATE( " , " , entree_depart ) 1)
WHERE entree_depart NOT LIKE %,.% ;

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 :

SELECT SUBSTRING ( entree_depart , LOCATE( " . " , entree_depart ) + 1 , LENGTH( entree_depart


) LOCATE( " . " , entree_depart ) ) AS tiquette ,
COUNT( ) AS o .
FROM dela_tmp
GROUP BY SUBSTRING ( entree_depart , LOCATE( " . " , entree_depart ) + 1 , LENGTH(
entree_depart ) LOCATE( " . " , entree_depart ) ) ;

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 142 E SQUE : tiquettes des mots en esque dans le DELA

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

Importer exporter remodeler

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

TABLEAU 143 E SQUE : entres du DELA reformates pour la base

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

Importer exporter remodeler

CREATE TABLE lemmeDELA_categorie_nombreFormes


(SELECT lemme,
categorie ,
COUNT( ) AS formes
FROM dela_tmp
GROUP BY lemme, c a t e g o r i e ) ;

Les 167 formes en -esque du DELA donnent naissance 92 lignes dans la nouvelle table.

4.5. Les mots en -esque au regard du dictionnaire DELA

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 :

SELECT lemme AS Lemme ,


c a t e g o r i e AS POS ,
formes AS DELA
FROM lemmeDELA_categorie_nombreFormes
LEFT OUTER JOIN esque_tmp
ON derive = lemme
AND derive_POS = c a t e g o r i e
WHERE derive IS NULL
ORDER BY LOWER( lemme ) ;

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.

4.6. Convergences/divergences entre Frantext et DELA


Puisquon dispose de deux tables pour les mots en -esque de la base Lexique et pour ceux
du DELA, on peut rprer les 33 lemmes communs (tableau 146 p. 468) :
SELECT DISTINCT d .lemme
FROM lemmeDELA_categorie_nombreFormes AS d
NATURAL JOIN lemmeFrantext_frequence_proportion ;

On peut par ailleurs, l encore via des jointures externes, isoler les mots propres chacune
des tables (tableau 147 p. 469) :
R2120

465

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 144 E SQUE : mots du DELA prsents dans la table

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 145 E SQUE : mots du DELA absents de la table

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

SELECT DISTINCT d .lemme


FROM lemmeDELA_categorie_nombreFormes AS d
LEFT OUTER JOIN lemmeFrantext_frequence_proportion AS f
ON d . lemme = f . lemme
WHERE f . lemme IS NULL ;

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.

5. Remodeler des informations structures


Un document XML est un arbre. Un arbre organise les informations de manire simple,
puisque deux relations suffisent le dcrire : la relation de dominance (un noeud domine un
ou plusieurs autres noeuds et/ou des feuilles , cest--dire des noeuds sans descendance) et
la relation de prcdence (un noeud domin par un noeud donn prcde ou est prcd par
les autres enfants du noeud dominant). Il y a par ailleurs un chemin unique pour aller de
la racine de larbre lun de ses descendants. Luniformit de cette organisation offre la voie
des outils de transformation systmatique plus puissants que ceux qui ont t prsents
467

Importer exporter remodeler

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

la section prcdente qui se limitaient la rorganisation de chanes de caractres. On


peut en effet, tant donn un arbre, le manipuler comme un objet structur. Les remodelages
possibles prennent alors une autre ampleur.
XSLT constitue un langage de transformations des arbres que sont des documents XML.
Son nom (eXensible Stylesheet Language Transformations) peut donner le sentiment quil
sagit de pouvoir associer aux documents des styles, comme on le fait dans les traitements de
textes. XSLT permet en fait de remodeler en profondeur des arbres, comme nous allons le voir.
Nous nallons pas prsenter dans le dtail XSLT. On se reportera plutt (Amann & Rigaux,
2002) et (Mangano, 2003). Nous essayons de donner une ide des possibilits offertes par
ce langage.

5.1. Transformer des arbres


Lexport en XML de la table

  

donne naissance au document que voici :

<?xml version= " 1.0 " encoding= " utf 8" ?>
<BDL>

468

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 147 E SQUE : discordances Frantext (Lexique) et DELA

DELA pas Frantext


R2120 p. 465
lemme
More
aristophanesque
burlesquement
calembouresque
camlonesque
cannibalesque
feuilletonesque
feuilletonnesque
flandresque
gagesque
gigantesquement
grand-guignolesque
grotesques
hispano-moresque
humoresque
livresquement
madrigalesque
maure
mauresquement
michlangelesque
monalisesque
more
niagaresque
nirvanesque
prudhommesquement
pdantesquement
pruginesque
rocambolesquement
romanesquement
rouletabillesque
soldatesquement
somnambulesque
sultanesquement

Frantext pas DELA


R2121 p. 467
lemme
alibabesque
animalesque
aubignesque
aviationnesque
babelesque
barytonesque
bignolesque
botticellesque
boulardesque
cafardesque
canovesque
cassandresque
chewinggumesque
chichinesque
clochemerlesque
cornichonnesque
courtelinesque
crapaudesque
cyranesque
dantonesque
demillesque
diablesque
donquichottesque
fallacesque
fantmastesque
fiesque
footballesque
fourmillesque
gendarmesque
gionesque
giorgionesque
goeringesque
goyesque
gracianesque

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

Importer exporter remodeler

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

et engendre une cellule qui contient, en gras, lidenti-

470

Importer exporter remodeler




La rgle 4 sapplique un noeud  ou    ou         


ou
une cellule contenant ce que ce noeud domine dans larbre XML trait.


. Elle engendre

La dernire rgle fait la mme chose pour les lments  ou     


mais indique que
le texte de la cellule doit tre align droite, dans la mesure o il sagit de mettre en page des
nombres.
Ces rgles comportent des fragments de type
noter pour HTML les caractres accentus.



qui sont une des manires de

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 &#232;res</h1>
< table border= " 1 " >
<tr>
<td>< i > I d e n t i f i a n t </ i ></td>
<td>< i >&#226;ge</ i ></td>
<td>< i >ann&#233;es d &#233;tudes</i ></td >
<td ><i > d i p l &#244;me</i ></td >
<td ><i >anciennet &#233;</ i ></td >
<td ><i >classe d anciennet &#233;</ 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

Importer exporter remodeler

td

etudes|
anciennete

td
align=
"right"

age|
diplome|
classe_
anciennete

x3

caractres4

x4

caractres5

x5

id

td

carac
tres3

F IGURE 10 Table

  

: rgles XSLT de transformation en tableau HTML

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

Importer exporter remodeler

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

: transformation en tableau HTML via XSLT

<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

La figure 11 p. 473 est lquivalent graphique de ce fichier et facilite la comprhension de


la transformation de larbre XML de la figure 9 p. 468 via les rgles de la figure 10 p. 472. Un
encadr avec le nom de la rgle en haut gauche matrialise laction dune rgle donne.
Les navigateurs actuels peuvent effectuer la vole la transformation dun arbre XML
au moyen de rgles XSLT. Il suffit alors dajouter au fichier contenant le document XML, ici
  
 
  , une ligne indiquant au navigateur quil doit employer le fichier de rgles dont
le nom est fourni pour produire une page HTML visualisable et navigable. On constate en
20 quon ouvre un fichier XML, celui dont le dbut figure ci-dessous. Le rsultat, en 21
est le tableau HTML produit grce lapplication, par le navigateur, des rgles du fichier
           au fichier        . On remarque que lidentifiant a effectivement t
473

mis en gras (R4) et les nombres issus des colonnes

Importer exporter remodeler

et   



aligns droite (R5).

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

5.2. Contrler les transformations darbres


XSLT offre des moyens de contrler finement la transformation dun arbre XML donn. Les
rgles ci-dessous prcisent le traitement de certains noeuds du document        . Sans
entrer dans le dtail de la syntaxe de XSLT, indiquons simplement que la rgle l. 10 ayant

pour cible les lments de type    produit une cellule HTML ( ) dans tous les cas, mais
elle comprend une condition (l. 11-18) : la chane reprsentant le service de linfirmire est

en italiques quand il sagit de  (l. 15-18) et en gras quand il sagit de    (l. 12-14). De

manire similaire, l. 22, pour les lments de type          , la valeur    
    est

dans une taille de caractres plus petite (   
) que la taille normale des caractres


du document HTML produit, la valeur   
   en caractres plus gros (   
).
<?xml version= " 1.0 " encoding= " utf8 " ?>
<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " >

474

10

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

15

Importer exporter remodeler

<xsl:output method= " html " encoding= " utf8 " />
...
<xsl:template match= " age|diplome " >
<td><xsl:valueof select= " . " /></td>
</xsl:template >

<xsl:template match= " s e r v i c e " >


<xsl:choose>
<xsl:when test = " .= Jour " >
<td><b><xsl:valueof select= " . " /></b></td>
</xsl:when>
<xsl:otherwise>
<td>< i ><xsl:valueof select= " . " /></ i ></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template >

20

25

<xsl:template match= " classe_anciennete " >


<xsl:choose>
<xsl:when test = " .= moins de 1 an " >
<td><font s i z e = 1 ><xsl:valueof select= " . " /></font ></td>
</xsl:when>
<xsl:when test = " .= plus de 5 ans " >
<td><font s i z e = +1 ><xsl:valueof select= " . " /></font ></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:valueof select= " . " /></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template >
...
</xsl:stylesheet >


30

35

On attache au document XML

  

   

ces rgles :

<?xml version= " 1.0 " encoding= " utf 8" ?>
<?xmlstylesheet type= " application /xml " href= " TableInfirmieres3 . x s l " ?>

Lorsquon ouvre avec un navigateur ce fichier XML 22 , on obtient un tableau 23 qui


manifeste lapplication de ces rgles qui comportent des conditions.
22

475

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

23

Le fichier HTML engendr la vole est de la forme :


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


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

Importer exporter remodeler

<xsl:template match= " /BDL" >


<html>
<body>
<h1> I n f i r m i &#232;res</h1>
< table border= " 1 " >
<tr>
<td>< i > I d e n t i f i a n t </ i ></td>
<td>< i >&#226;ge</ i ></td>
<td>< i >ann&#233;es d &#233;tudes</i ></td >
<td>< i > d i p l &#244;me</i ></td >
<td>< i >anciennet &#233;</ i ></td >
<td>< i >classe d anciennet &#233;</ i ></td>
<td>< i > s e r v i c e </ i ></td>
</ t r >
<xsl:foreach select= " i n f i r m i e r e s " >
< x s l : s o r t select= " ./ s e r v i c e " datatype= " t e x t " order= " ascending " />
< x s l : s o r t select= " ./ anciennete " datatype= "number" order= " ascending " />
<tr>
<xsl:applytemplates/>
</ t r >
</xsl:foreach >
</ table >
</body>
</html>
</xsl:template >
...
</xsl:stylesheet >


30

On attache de la mme manire au fichier


          :

 

  

   

les rgles constituant le fichier

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

Importer exporter remodeler

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

Importer exporter remodeler

<a name= " bb3 " > . . . </a>

cre une ancre de nom

.

Par ailleurs, en HTML, un lment de type :


<a href= " Y " > . . . </a>

cre un lien hypertextuel (manifest souvent par un soulignement) vers le document . Ainsi :
<a href= " bebe_et_fiches.xml " > . . . </a>

cre-t-il un lien vers le document

 

     tandis que :

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

<a href= " bebe_et_fiches.xml#bb3 " > . . . </a>




installe un lien dont le point darrive est lancre


 dans le document

       .
Le caractre # spare le document cible de lancre, le point prcis darrive du lien dans ce
document cible.
Les quatre crans qui suivent montrent la navigation entre trois documents XML via
des rgles XSLT. Le premier cran est issu de lapplication des rgles        au fi

       , le second et le troisime de celle des rgles
        au fichier
chier              l, le quatrime de celle des rgles            au fichier  


 
       .

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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 148 P RMA : signaltique et fiches pour bbs 2 et 3


bebe
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3

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

 

  le rsultat de cette requte :

480

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Importer exporter remodeler

CREATE TABLE bebe_et_fiches


SELECT b . id AS bebe ,
f . id AS f i c h e ,
sexe ,
accouchement ,
lieu_naissance ,
poids_naissance ,
classe_poids_naissance ,
terme ,
terme_normalise ,
classe_terme ,
CRIB ,
classe_CRIB ,
b . jour ,
mois ,
annee ,
jour_experience ,
SM1,
classe_SM1 ,
SM3,
classe_SM3 ,
SM7,
classe_SM7 ,
SM15,
classe_SM15 ,
lieu_jour1 ,
lieu_jour3 ,
lieu_jour7 ,
lieu_jour15
FROM bebes AS b ,
s i g n a l e t i q u e _ f i c h e s AS f
WHERE b . id = id_bebe
ORDER BY b . id , f . id ;

On exporte en XML cette table dans le fichier

 

   :

<?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 >&gt ;= 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

Importer exporter remodeler

<classe_SM1>11 &l t ;= SM &l t ;=20</classe_SM1>


<SM3>11</SM3>
<classe_SM3>11 &l t ;= SM &l t ;=20</classe_SM3>
<SM7>6</SM7>
<classe_SM7>&l t ;= 10</classe_SM7>
<SM15>8</SM15>
<classe_SM15>&l t ;= 10</classe_SM15>
<lieu_jour1 >Centre H o s p i t a l i e r X</ lieu_jour1 >
<lieu_jour3 >Centre H o s p i t a l i e r X</ lieu_jour3 >
<lieu_jour7 >Centre H o s p i t a l i e r X</ lieu_jour7 >
<lieu_jour15>Centre H o s p i t a l i e r X</lieu_jour15>
</bebe_et_fiches>
<bebe_et_fiches>
<bebe>2</bebe>
< f i c h e >2</ 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 >&gt ;= 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>
<classe_SM1>11 &l t ;= SM &l t ;=20</classe_SM1>
<SM3>11</SM3>
<classe_SM3>11 &l t ;= SM &l t ;=20</classe_SM3>
<SM7>6</SM7>
<classe_SM7>&l t ;= 10</classe_SM7>
<SM15>8</SM15>
<classe_SM15>&l t ;= 10</classe_SM15>
<lieu_jour1 >Centre H o s p i t a l i e r X</ lieu_jour1 >
<lieu_jour3 >Centre H o s p i t a l i e r X</ lieu_jour3 >
<lieu_jour7 >Centre H o s p i t a l i e r X</ lieu_jour7 >
<lieu_jour15>Centre H o s p i t a l i e r X</lieu_jour15>
</bebe_et_fiches> . . .
</bdl>

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

Importer exporter remodeler

<xsl:stylesheet version= " 1.0 " xmlns:xsl= " h t t p : //www.w3. org/1999/XSL/Transform " > <
xsl:output method= " html " encoding= " utf8 " />

<xsl:template match= " /bdl " >


<html>
<body>
<h1 a l i g n = " center " >B&#233;b&#233;s</h1>
<xsl:foreach select= " bebe_et_fiches " >
<xsl:choose>
<xsl:when test= " not ( precedingsibl i ng :: be be _e t_ fi c hes /bebe=./bebe ) " >
<h2>
<xsl:element name= " a " >
< xsl:attribute name= "name" >
<xsl:text >b</xsl:text ><xsl:valueof select= " ./ bebe " />
</xsl:attribut e >
B&#233;b&#233; <xsl:valueof select= " ./ bebe " />
</xsl:element>
</h2>
Sexe <xsl:valueof select= " ./ sexe " /> , accouchement <xsl:valueof select= "
./ accouchement" /> , naissance <xsl:valueof select= " ./ lieu_naissance " /
> , poids <xsl:valueof select= " ./ poids_naissance " /> , classe <
xsl:valueof select= " ./ classe_poids_naissance " /> , terme <xsl:valueof
select= " ./ terme " /> , terme normalis&#233; <xsl:valueof select= " ./
terme_normalise " /> , classe <xsl:valueof select= " ./ classe_terme " /> ,
CRIB <xsl:valueof select= " ./CRIB" /> , classe <xsl:valueof select= " ./
classe_CRIB " /> , jour <xsl:valueof select= " ./ jour " /> <xsl:valueof
select= " ./ mois " /> <xsl:valueof select= " ./annee " /> , date <
xsl:valueof select= " ./ jour_experience " /> , SM1 <xsl:valueof select= "
./SM1" /> , classe <xsl:valueof select= " ./ classe_SM1 " /> , SM3 <
xsl:valueof select= " ./SM3" /> , classe <xsl:valueof select= " ./
classe_SM3 " /> , SM7 <xsl:valueof select= " ./SM7" /> , classe <
xsl:valueof select= " ./ classe_SM7 " /> , SM15 <xsl:valueof select= " ./
SM15" /> , classe <xsl:valueof select= " ./ classe_SM15 " /> , J1 <
xsl:valueof select= " ./ lieu_jour1 " /> , J3 <xsl:valueof select= " ./
lieu_jour3 " /> , J7 <xsl:valueof select= " ./ lieu_jour7 " /> , J15 <
xsl:valueof select= " ./ lieu_jour15 " />
<br/>
Fiches
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
<xsl:text > f i c h e s _ o r i g i n e l l e s 2 . xml# f </xsl:text ><xsl:valueof select
= " ./ f i c h e " />
</xsl:attribut e >
< xsl:text > </ xsl:text ><xsl:valueof select= " ./ f i c h e " />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
<xsl:text > f i c h e s _ o r i g i n e l l e s 2 . xml# f </xsl:text ><xsl:valueof select
= " ./ f i c h e " />
</xsl:attribut e >
< xsl:text > </ xsl:text ><xsl:valueof select= " ./ f i c h e " />
</xsl:element>
</xsl:otherwise>


22

27

32

37

483

42

Importer exporter remodeler

</xsl:choose>
</xsl:foreach >
</body>
</html>
</xsl:template >

</xsl:stylesheet >

Si lon engendre effectivement un fichier HTML au moyen de ces rgles, au lieu de se


reposer sur un navigateur pour quil leffectue la vole, on obtient (cf. cran 26 ) :

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 &gt ; 1 000 g . , terme 27.00 , terme normalis
&gt ;= 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

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

TABLEAU 149 P RMA : signaltique et fiches pour linfirmire 43


inf
43
43
43
43
43
43
43
43
43
43
43
43

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

Importer exporter remodeler

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

<xsl:template match= " /bdl " >


<html>
<body>
<h1 a l i g n = " center " > I n f i r m i &#232;res</h1>
<xsl:foreach select= " i n f i r m i e r e _ e t _ f i c h e s " >
<xsl:choose>
<xsl:when test= " not ( p r e c e d i n g s i b l i n g : : i n f i r m i e r e _ e t _ f i c h e s / i n f =./ i n f ) " >
<h2>
<xsl:element name= " a " >
< xsl:attribute name= "name" >
<xsl:text > i </xsl:text ><xsl:valueof select= " ./ i n f " />
</xsl:attribut e >
I n f i r m i &#232;re <xsl:valueof select= " ./ i n f " />
</xsl:element>
</h2>
&#226;ge <xsl:valueof select= " ./ age " /> &#233;tudes <xsl:valueof select=
" ./ etudes " /> d i p l &#244;me <xsl:valueof select= " ./ diplome " />
anciennet &#233; <xsl:valueof select= " ./ anciennete " /> s e r v i c e <
xsl:valueof select= " ./ s e r v i c e " />
<br/>
Fiches
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
<xsl:text > f i c h e s _ o r i g i n e l l e s 2 . xml# f </xsl:text ><xsl:valueof select
= " ./ f i c h e " />
</xsl:attribut e >
< xsl:text > </ xsl:text ><xsl:valueof select= " ./ f i c h e " />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
<xsl:text > f i c h e s _ o r i g i n e l l e s 2 . xml# f </xsl:text ><xsl:valueof select
= " ./ f i c h e " />
</xsl:attribut e >
< xsl:text >
</xsl:text > <xsl:valueof select= " ./ f i c h e " />
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:foreach >
</body>
</html>
</xsl:template >


20

25

30

35

40

486

Importer exporter remodeler

45
</xsl:stylesheet >

Le fichier HTML correspondant serait (cf. cran 29 ) :

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>

Pour les fiches originelles, la dmarche est plus simple. Lexport


la forme :



    

     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&#233;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

Importer exporter remodeler

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 " />

<xsl:template match= " / " >


<html>
<body>
<h1>Fiches</h1>
< table border= " 1 " >
<tr>
<td>< i >id </ i ></td>
<td>< i > t e x t e </ i ></td>
<td>< i >b&#233;b&#233;</ i ></td>
<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>
<td>< i >s&#233;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 &#232;re</ i ></td>
<td>< i > f r &#233;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>
<td>< i > r e l a t i o n m&#232;re b&#233;b&#233;</ i ></td>
<td>< i > f r &#233;quence v i s i t e s parents </ i ></td>
</ t r >
<xsl:applytemplates/>
</ table >
</body>
</html>
</xsl:template >


21

26

31

36

41

46

<xsl:template match= " f i c h e s _ o r i g i n e l l e s " >


<tr>
<xsl:applytemplates select= " id " />
<xsl:applytemplates select= " t e x t e " />
<xsl:applytemplates select= " id_bebe " />
<xsl:applytemplates select= " jour " />
<xsl:applytemplates select= " heure_saisie " />
<xsl:applytemplates select= " poids " />
<xsl:applytemplates select= " classe_poids " />
<xsl:applytemplates select= " position " />
<xsl:applytemplates select= " c l a s s e _ p o s i t i o n " />
<xsl:applytemplates select= " sedation " />
<xsl:applytemplates select= " v e n t i l a t i o n " />
<xsl:applytemplates select= " i d _ i n f i r m i e r e " />
<xsl:applytemplates select= " frequence_occupation " />

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 >

Importer exporter remodeler

select= " moral_infirmiere " />


select= " p r o n o s t i c _ i n f i r m i e r e " />
select= " 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 " />
select= " relation_mere_bebe " />
select= " frequence_visites_parents " />

<xsl:template match= " id " >


<td>
<xsl:element name= " a " >
<xsl:attribut e name= "name" >
< xsl:text > f </ xsl:text ><xsl:valueof select= " . " />
</xsl:attribut e >
<b><xsl:valueof select= " . " /></b>
</xsl:element>
</td>
</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

<xsl:template match= " id_bebe " >


<td>
<xsl:element name= " a " >
<xsl:attribut e name= " href " >
< xsl:text >bebe_et_fiches . xml#b</ xsl:text ><xsl:valueof select= " . " />
</xsl:attribut e >
bb<xsl:valueof select= " . " />
</xsl:element>
</td>
</xsl:template >

96

<xsl:template match= " classe_poids | position |c l a s s e _ p o s i t i o n|sedation | v e n t i l a t i o n |


frequence_occupation|moral_infirmiere|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 |relation_mere_bebe |frequence_visites_parents | t e x t e
">
<td><xsl:valueof select= " . " /></td>
</xsl:template >

86

101

<xsl:template match= " jour|heure_saisie|poids " >


<td a l i g n = " r i g h t " ><xsl:valueof select= " . " /></td>
</xsl:template >

489

Importer exporter remodeler

</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 &gt ; 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

12 entres sont supprimes via la requte :


490

Importer exporter remodeler

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

DELETE FROM dela_tmp


WHERE entree_depart REGEXP duquel
OR entree_depart REGEXP lequel
OR entree_depart REGEXP presque
OR entree_depart REGEXP fresque
OR entree_depart REGEXP nesquehonite ;

491

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE XIV
L

INSTALLATIONS ET MISES EN ROUTE

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

Installations et mises en route

3. la possibilit de programmer des applications qui interrogent une base de donnes et


produisent des pages HTML mettant en forme les informations extraites et qui ajoutent
et modifient les informations dune base via des formulaires HTML.

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.

1.1.1. Tlchargement dEasyPHP


On commence par tlcharger le logiciel lURL : http://www.easyphp.org, dont la page
daccueil est en 1 .

On choisit la version courante en 2 .


2

493

Installations et mises en route

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.

1.1.2. Installation dEasyPHP


Double cliquer sur licne du fichier tlcharg 4 dmarre linstallation. On choisit dabord
la langue dinstallation, ici le franais.
4

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

Installations et mises en route

On choisit lendroit o se trouvera la version installe : 6 . Lemplacement propos par


dfaut est dailleurs en gnral satisfaisant. Est dtermine la localisation, par dfaut dans le
menu Dmarrer, des raccourcis permettant de dmarrer aisment EasyPHP. Ces choix effectus et confirms, lutilitaire dinstallation dcompresse les composants du logiciel et les met
en place.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Lindication que linstallation est acheve est alors fournie : 7 .


7


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

Installations et mises en route

1.1.3. Utilisation dEasyPHP


Le dmarrage dEasyPHP indique que le serveur local Apache et MySQL sont lancs : 9
(les petits feux peuvent mettre quelques instants passer au vert).

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

Installations et mises en route

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.

partir de lcran 13 , on fournit un nom : 15 et on


15

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

Installations et mises en route

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

Le bouton dParcourire permet dexplorer les disques et dossiers et de choisir le fichier


souhait : 18 .

18

Il ne reste plus, en 19 , qu excuter les instructions contenues dans le fichier.


19

Un message de succs est mis : 20 .


20
On voit apparatre dans le bandeau de droite, sous le nom de la base courante,
nom de la table qui vient dtre cre : 21 .

 

, le

498

Installations et mises en route

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

21

En 22 , dans le bandeau de gauche, on peut revenir laccueil en cliquant sur la petite


maison gauche, ou en dessous, choisir la base de donnes sur laquelle on veut travailler.
Le bandeau de droite, via dBases de donnese permet aussi de choisir la base de donnes
utiliser.
22

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

 

au sein de la base du mme nom est illustr en 23 .


23

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

Installations et mises en route

25

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

En 26 , une requte un peu plus complexe, dont le rsultat figure en 27 .


26

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

1.2. Sous Linux


Unix/Linux constitue un environnement multi-utilisateurs. Chaque utilisateur possde
des droits spcifiques. Un utilisateur privilgi, le super-utilisateur, dnomm root, administre
le systme, cre les comptes des utilisateurs, attribue et modifie leurs droits, etc.
Le monde MySQL sorganise aussi en un super-utilisateur MySQL (ou administrateur base
de donnes) et des utilisateurs normaux . Le super-administrateur MySQL peut dailleurs
ne pas tre le super-utilisateur du systme Unix/Linux. Dans la suite, super-utilisateur sans
plus de prcisions renvoie super-utilisateur MySQL.
500

Installations et mises en route

1.2.1. Installation de MySQL


Linstallation dun nouveau logiciel, comme MySQL, doit donc tre effectue par le superutilisateur systme. Cest galement ce dernier qui dtermine qui est le super-utilisateur
MySQL et qui lui permet de choisir un mot de passe.
Deux bases sont cres automatiquement lors de linstallation de MySQL :


Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

1. une base de test, dnomme. . .  ;


2. une base nomme    qui comprend prcisment les informations ncessaires la
gestion de MySQL : cration et destruction de bases, ajout dutilisateurs et indications
de leurs droits, etc. On ne manipulera pas cette base.
Cest le super-utilisateur MySQL par contre qui cre les bases de donnes et qui attribue aux
utilisateurs les droits leur permettant daccder une base dtermine.
1.2.2. Crer une base de donnes
Pour crer une base de donnes, cest--dire un rceptacle vide au dpart, dans lequel
insrer des tables, etc., il faut dabord lancer MySQL en tant que super-utilisateur MySQL,
par une instruction du type :
mysql u <superutilisateur MySQL> p

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 ;

dont le rsultat est le listage des bases existantes, de la forme :


Database
...
mysql
phedre
prema
test
Lajout dune nouvelle base seffectue par la requte :
CREATE DATABASE <nom de l a nouvelle base> ;

par exemple :
CREATE DATABASE esque ;

Si lon rpte la requte de listage ci-dessus, on obtient maintenant un rsultat de la forme :


Database
...
esque
mysql
phedre
prema
test
501

Installations et mises en route

1.2.3. Ajouter des utilisateurs une base


Le super-utilisateur, une fois une base cre, ajoute des utilisateurs cette base par deux
requtes :
GRANT ALL PRIVILEGES ON <base >.
TO < u t i l i s a t e u r >@"%" IDENTIFIED BY <mot de passe>
WITH GRANT OPTION ;
GRANT ALL PRIVILEGES ON <base >.
TO < u t i l i s a t e u r >@" l o c a l h o s t " IDENTIFIED BY <mot de passe>
WITH GRANT OPTION ;

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.

1.3. Bases de donnes exemples


Leur installation suppose la ralisation des trois tapes prcdentes. MySQL doit tre install (ventuellement comme composant dEasyPHP), les bases de donnes doivent avoir t
cres, lutilisateur qui veut installer les bases-exemples doit avoir les droits sur ces trois
bases.
1.3.1. Installation sous EasyPHP
On se reportera la section prcdente p. 497 qui montre linstallation et lutilisation de la
base E SQUE.
1.3.2. Installation directement sous MySQL
On prendra lexemple de la cration et du peuplement de la base P HDRE partir des
donnes fournies dans larchive en ligne.

502

Installations et mises en route

Cration de la base de donnes et dun utilisateur Ladministrateur MySQL cre la base



et lutilisateur   . Il donne ce dernier les droits ncessaires (l. 12-16). La base


est vide au dpart comme le montre le rsultat de linstruction SHOW TABLES (l. 19-20).



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 .

mysql> create database phedre ;


Query OK, 1 row a f f e c t e d (0.15 sec )

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

mysql> show tables ;


Empty set (0.00 sec )

25

mysql> quit
Bye
harris :/home/habert#

10

Excution des instructions de cration des tables et de leur peuplement Le fichier


      dans larchive en ligne contient la fois les instructions CREATE TABLE permettant
de crer les trois tables de la base correspondante et les instructions INSERT permettant de

les peupler. Lutilisateur   se connecte alors la base    en excutant les instructions
de ce fichier (l. 1). Cette connexion se limite lexcution de ces instructions. La connexion
suivante montre que les tables ont t cres (l. 10-18) et quelles ont t peuples (l. 36-41).
habert@harris :~$ mysql u habert p phedre < /Bases/MySQL/Dumps/Phedre . sql
Enter password :
harris :/home/habert# mysql u habert p phedre
Enter password :
Reading table information f o r completion o f table and column names You can turn o f f
t h i s feature to get a quicker startup with A
Welcome to the MySQL monitor . Commands end with ; or \g . Your MySQL connection id
i s 9 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 .

mysql> show tables ;


++
| Tables_in_phedre |
++
| occurrences
|

503

15

Installations et mises en route

| 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

mysql> DESCRIBE vers ;


+++++++
| Field
| Type
| Null | Key | Default | Extra |
+++++++
| acte
| varchar ( 5 )
|
|
|
|
|
| scene
| varchar ( 5 )
|
|
|
|
|
| numero_vers
| int ( 1 1 )
|
| PRI | 1
|
|
| personnage_s
| varchar (255) |
|
|
|
|
| partage_en
| int ( 1 1 )
|
|
| 1
|
|
| vers
| varchar (200) |
| UNI |
|
|
| vers_phonetique | varchar (250) |
|
|
|
|
+++++++
7 rows in set (0.00 sec )

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 :~$

La premire tape consiste crer la structure des tables de la base :


habert@harris :~$ mysql u habert p phedre < /Bases/MySQL/Struct/Phedre_Structure . sql
Enter password :

Le fichier




     

dans larchive en ligne contient seulement les instructions

CREATE TABLE permettant de crer les trois tables de la base correspondante.

504

Installations et mises en route

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

mysql> show tables ;


++
| Tables_in_phedre |
++
| occurrences
|
| positions
|
| vers
|
++
3 rows in set (0.00 sec )

15

20

mysql> SELECT COUNT( ) FROM vers ;


++
| COUNT( ) |
++
|
0 |
++
1 row in set (0.00 sec )
mysql> LOAD DATA LOCAL INFILE " /Bases/CVS/Phedre/vers . tab " INTO TABLE vers LINES
TERMINATED BY \r\n ;

25

Query OK, 1655 rows a f f e c t e d , 2 warnings (0.11 sec )


30

35

Records : 1655

Deleted : 0

Skipped : 0

Warnings : 2

mysql> SELECT COUNT( ) FROM vers ;


++
| COUNT( ) |
++
|
1655 |
++
1 row in set (0.00 sec )

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

Installations et mises en route

2.2. Bases de donnes-exemples


2.2.1. Installation des bases en format Access
Il suffit de copier les 3 fichiers :




 








de larchive en ligne sur le disque dur dans un rpertoire appropri.

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

2.2.2. Reconstitution des bases de donnes partir du format dlimit


Pour les tables dune base de donnes, on utilise les versions dont les colonnes sont dlimites par des tabulations (\t) et les lignes par un retour-chariot (\r) suivi dun passage la
ligne (\n), suite qui dlimite conventionnellement les lignes sous Windows. Ces versions sont
disponibles dans le rpertoire CSV de larchive en ligne. La premire ligne de ces versions est
constitue des noms de colonnes de la tables.
La dmarche de reconstitution des tables dune base de donnes partir dun format
dlimit est dtaille au ch. XIII, 2, p. 439.

506

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C HAPITRE XV
L

MYSQL, ACCESS ET SQL SERVER

1. Terminologies compares

La terminologie choisie par Access ne facilite pas toujours la comprhension du modle


sous-jacent. Access appelle en effet relation une jointure persistante entre deux tables alors
que la notion de relation en algbre relationnelle correspond une table dont toutes les lignes
sont distinctes et qui constitue donc un ensemble. Par ailleurs, Access conserve des termes
provenant des origines des bases de donnes et de leur ralisation physique (Gardarin, 2005,
ch. III). Cest le cas denregistrement (record) qui renvoie la ralit physique de lcriture sur
disque dun ensemble structur dinformations lies entre elles. Cest le cas aussi de champ
(field), partie denregistrement consacre une de ses facettes.
Par cohrence avec lvolution des bases de donnes qui vise faire oublier autant
que faire se peut leur ralisation physique, nous nemployons donc pas une terminologie
qui rappelle cette dernire. Le tableau 150 p. 508 met en correspondance les diffrentes
terminologies et fournit en italiques les correspondants en anglais.

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

2. De la notation abstraite SQL, MySQL, Access et SQL


Server
Dans les pages qui suivent :
507

MySQL, Access et SQL Server

TABLEAU 150 Terminologies compares : informelle, relationnelle, Access. . .

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

degr, arit dune


relation

nombre
colonnes

de

identifiant
(unique),
cl
primaire primary
key

cl trangre foreign key


contrainte
rfrentielle
type, domaine

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.

2.1. Oprations sur les regroupements


C OMPTE(<valeurs dune colonne>)
SQL : COUNT(<valeurs dune colonne>)
Access : Compte(<valeurs dune colonne>)
S OMME(<valeurs dune colonne>)
SQL : SUM(<valeurs dune colonne>)
508

MySQL, Access et SQL Server

Access : Somme(<valeurs dune colonne>)

2.2. Slection de valeurs

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Comparaison : = > >= <= <> ou !=


P ARMI (<valeur1 >, . . ., <valeurn >)
SQL : IN(<valeur1 >, . . ., <valeurn >)
Access : id. mais le sparateur est le point-virgule et non la virgule.
Intervalle (les bornes sont incluses)
SQL : BETWEEN <valeur1 > AND <valeur2 >
Access : ENTRE <valeur1 > ET <valeur2 >

2.3. Oprateurs logiques (boolens)


ET
SQL : AND
Access : ET
OU
SQL : OR
Access : OU
PAS
SQL : NOT
Access : PAS
SI
MySQL : IF(<condition>, <valeur si condition remplie>, <valeur sinon>)
SQL Server : IIF(<condition>, <valeur si condition remplie>, <valeur sinon>)
Access : VraiFaux(<condition> ; <valeur si condition remplie> ; <valeur sinon>)

2.4. Traitement de la marque NULL


EST NULL
SQL : IS NULL
Access : EST NULL
EST PAS NULL
SQL : IS NOT NULL
Access : EST PAS NULL

2.5. Fonctions sur les chanes de caractres


Mise en minuscules
MySQL : LOWER(<chane>)
SQL Server : LCASE(<chane>)
Access : MINUSCULE(<chane>)
Longueur
MySQL : LENGTH(<chane>)
SQL Server : LEN(<chane>)
Access : NbCar(<chane>)
Extraction des k caractres gauche
MySQL : SUBSTRING(<chane>, 1, k)
SQL Server : LEFT(<chane>, k)
509

MySQL, Access et SQL Server

TABLEAU 151 Oprateurs dapproximation : MySQL vs. Access


MySQL
oprateur

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]
.*

[<car.1 >. . . <car.n >]

id. ou virgule sparatrice

[<car. dbut>-<car. fin>]

id.

[^<ensemble de car.>]

[ !<ensemble de car.>]

nombre doccurrences dun sous-motif


*
absent
+
absent
?
absent
ancrage dun motif

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

2.6. Oprateurs dapproximation sur les chanes de caractres


Le tableau 151 p. 510 rsume les oprateurs disponibles sous MySQL et sous Access.

2.7. Fonctions numriques


Choix du nombre de chiffres dcimaux
MySQL : FORMAT(<nombre dcimales>, <nombre de dcimales retenu>)
SQL Server : FORMATNUMBER(<nombre dcimales>, <nombre de dcimales retenu>)

2.8. Tris, limitation des rsultats


Slection des k premiers (%) rsultats
MySQL : LIMIT k (en toute fin de requte)
SQL Server : TOP k ou TOP k PERCENT juste aprs SELECT
Tri alatoire
MySQL : ORDER BY RAND()
SQL Server : ORDER BY RND()
510

MySQL, Access et SQL Server

3. Types dattributs disponibles


3.1. Valeurs textuelles
Une valeur textuelle peut comprendre uniquement des chiffres, mais dans ce cas-l, il
sagit de numros didentification ne permettant pas des calculs (comme un numro de scurit sociale ou un numro de tlphone).

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 ;

Tinytext / Tinyblob de 0 255 caractres (tiny = minuscule).

Pour les valeurs plus importantes, sont disponibles les types :

Text / Blob de 0 65 535 caractres.


Mediumtext / Mediumblob de 0 16 777 215 caractres ;
Longtext / Longblob de 0 4 294 967 295 caractres.
3.1.2. Access
Access dispose de deux types dattributs valeur textuelle :
Texte un attribut de type Texte a une longueur maximale de 255 caractres ;
Mmo Ce type est adapt aux textes longs , jusqu 64 000 caractres au plus (soit environ
8 000 mots ou 16 pages ordinaires ). On notera que certaines requtes sur du texte
sont moins aises voire impossibles avec des attributs de type Mmo.

3.2. Valeurs numriques


3.2.1. MySQL
Par dfaut les nombres sont positifs ou ngatifs. Le modifieur UNSIGNED (non sign) indique que la colonne correspondante ne peut contenir que des nombres positifs.
Pour les entiers (int pour integer), MySQL fournit les types suivants, par taille croissante
des nombres stocker :
Tinyint nombre compris entre -128 et 127 ou entre 0 et 255 sil nest pas sign ;
511

MySQL, Access et SQL Server

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. Valeurs temporelles


Pour des historiens, les valeurs disponibles peuvent se rvler insatisfaisantes (pour des
datations au tout dbut de notre re, par exemple) et il faut alors se rabattre sur dautres
types.
3.3.1. MySQL
Year anne au format AAAA (ex. : 2007) entre 1900 et 2155 ;
Time moment au format hh :mm :ss (ex. : 17 :15 :02 pour 17h 15 minutes et 2 secondes) ;
Date au format AAAA-MM-JJ (ex. : 2006-06-17 pour le 17 juin 2006), entre le 1er janvier
1000 et 31 dcembre 9999 dans le calendrier grgorien ;
Datetime au format AAAA-MM-JJ hh :mm :ss (ex. : 2006-06-17 17 :15 :02), entre le 1er janvier
1000 minuit et 31 dcembre 9999 23h59 et 59 s. dans le calendrier grgorien ;
Timestamp au format AAAAMMJJhhmmss (ex. : 20060617171502) entre le 1er janvier 1970
minuit et le 31 dcembre 2037, une seconde avant minuit. Cest un tampon temporel,
comme son nom lindique en anglais, qui sert en particulier dater les modifications
dune table. La modification dune ligne comprenant une colonne TIMESTAMP entrane
la mise jour de celle-ci la date et lheure de la modification qui vient dtre effectue.
512

MySQL, Access et SQL Server

3.3.2. Access
Date/Heure Le paramtrage dun attribut de ce type permet de prciser le mode daffichage.

3.4. Valeur auto-incrmente

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

Un attribut valeur auto-incrmente est le moyen de donner automatiquement chacune


des lignes dune table un numro dordre arbitraire tel quune nouvelle ligne ait un numro
dordre plus grand que tous les numros dordre dj existants. Chaque nouvelle ligne ajoute
comprenant un tel attribut voit cet attribut prendre la valeur suivante de la dernire valeur
donne automatiquement.
3.4.1. MySQL
Auto_increment Cette caractristique sapplique au plus une colonne de type entier dune
table. Il ny a donc pas de type auto_increment analogue au type NumroAuto dAccess
mais le moyen de transformer une seule colonne dune table pour qu chaque ajout
dune ligne, sa valeur soit incrmente automatiquement par rapport la dernire valeur
attribue.

3.4.2. Access
NumroAuto

3.5. Types propres MySQL


Enum(<valeur1 >,. . .,<valeurn >) permet de stocker une des valeurs appartenant une liste
prdfinie de chanes de caractres (de 1 255, voire 65 535 valeurs) ;
Set(<valeur1 >,. . .,<valeurn >) permet dindiquer 0, une ou plusieurs des valeurs spcifies.

3.6. Types propres Access


Assistant Liste de choix On peut faire en sorte quun attribut de ce type prenne ses valeurs
dans un menu droulant, dont les valeurs possibles sont celles dune autre table de la
base de donnes ou dune liste fournie explicitement. Quand un attribut peut prendre
un nombre limit et pr-dfini de valeurs, le choix de ce type diminue les risques derreur
de saisie et acclre lentre des informations.
Objet OLE Un attribut de ce type permet dincorporer ou de renvoyer un objet cr avec un
programme comme Microsoft Word ou Microsoft Excel, ou encore une image, du son
ou des donnes binaires.
Oui/Non Sert reprsenter les choix logiques (Oui/Non, ou vrai/faux) ;
Lien hypertexte De tels liens peuvent tre opratoires soit dans les formulaires de saisie soit
dans les tats (sorties).
Montaire Les nombres de ce type dattribut peuvent aller jusqu 15 chiffres avant le sparateur dcimal et 4 aprs. On peut choisir le symbole montaire adquat dans les sorties
(tats).

513

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

C ONCLUSION

1.

Angles morts conscients

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.

Donnes pas donnes

La gnralisation des bases de donnes aboutit la prsence dentrepts de donnes qui


ont pour corrolaire la fouille de donnes (data-mining), charge de reprer des rgularits significatives dans des ensembles arbitrairement volumineux de donnes plus ou moins structures.
Dans ces trois dnominations, le mot donnes semble avoir une connotation relativement
passive. Les donnes, en premire analyse, cest ce qui se donne, ce qui est l.
Au contraire, comme le rappelle F. Rastier, les donnes, cest ce quon se donne, cest--dire
ce que lon dgage explicitement du magma perceptuel et conceptuel qui nous entoure. Cest
le rsultat dune abstraction et dune modlisation pralables et continues.
Par ailleurs, les donnes ne sont jamais immdiatement propres . Les trois bases de
donnes utilises par louvrage, bien quelles soient le fruit chacun dun travail important de
collation et de mise au propre, ont t loccasion de constater la ncessit de vrifier la justesse
et la cohrence des donnes :
514

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.

Bases de donnes et schmas classificatoires

Penser, classer, vivre

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.

Les bases de donnes : un instrument pour classer

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.

Savoir ce qui peut se dire

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

Remerciements complts et crdits


Les exemples, les exercices et leurs solutions ont t mis au point et tests :
pour MySQL avec la version 4.1.11 sous Linux (Debian) ;
pour Access, avec la version 2003 sous Windows XP Professional, via lmulation de
Windows vmware.

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.

Les packages LATEX suivants ont t mis contribution :




     pour disposer de colonnes ou de lignes grises dans les tableaux ;



     (version 1.3) pour la mise en page des requtes SQL ;
    : pour obtenir un PDF navigable du tome 2 ;
  : pour les rfrences croises entre les deux tomes du livre.

Les figures ont t ralises avec Xfig.


Je remercie trs vivement celles et ceux qui mont fourni les trois bases de donnes qui
structurent lexpos et qui fournissent des exemples ralistes et riches :
E SQUE Marc Plnat et Nicole Sernat (ERSS universit de Toulouse-le-Mirail) ;
P HDRE Valrie Beaudouin (FT R&D) ;
P RMA une quipe de ranimation nonatale.
Le travail continu depuis plusieurs annes avec chacun(e) ma aid entrer dans les
trois mondes modliss par ces bases de donnes et entrevoir les questions pertinentes.
Mont galement apport de nouvelles pistes les projets en 2000 et 2001 du DEA de Sciences
cognitives de Paris-Sud sur P RMA et, luniversit Paris XNanterre, le mmoire de master 1
sur -esque de Sandra Petel (2005) ainsi que les mmoires de master 1 et de master 2 sur
P RMA de Sandie Morel (2004) et Roberte de la Taille (2006) respectivement.
Je remercie aussi les tudiant(e)s qui ont suivi depuis 20022003 les cours de matrise
et DESS (devenus respectivement master 1 et 2) que jai consacrs luniversit Paris X
aux bases de donnes et leur utilisation. Particulirement Anne Garcia-Fernandez pour
mavoir aid dans lun de ces cours et, pour le travail de cration dune base de donnes en
ligne dans le cadre dun projet de master professionnel : Christelle Ayache, Sgolne Baron,
Aurlie Cousseau, Marion Crapet, Brangre Decout, Sara El Ayarri, Virginie Heyd, Alexandra
Jacomin, Anne Kuhn, Delphine Lagarde, lise Lemaire, Claire Mierziak, Lise Pris et Delphine
Tribout. Deux collgues, Carole Tisset (IUFM de Versailles) et Dominique Fattier (universit
de Cergy-Pontoise), ont suivi lun de ces cours et y ont contribu en fournissant deux tudes
de cas : analyse de rdactions dlves, tude dun morphme de crole hatien.

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.

Bases de donnes : fondements


Larticle historique, qui fonde le modle relationnel est (Codd, 1970). Le modle EntitAssociation a t popularis par (Chen, 1976).

Bases de donnes : approfondissements et et mise en uvre


(Flory & Laforest, 2005) est centr sur la prsentation du modle relationnel. SQL est
introduit prcisment sous cet angle. Les mises en forme normale sont dtailles. Le modle
entit-relation galement.
(Larrousse, 2006), complmentaire de (Hainaut, 2002) ou de (Akoka & Comyn-Wattiau,
2001), se cantonne cependant la dmarche qui conduit de lanalyse du domaine dapplication une ralisation SQL via une modlisation entit-association. De nombreux exercices
corrigs compltent louvrage.

Recherche approximative et expressions rgulires


Les donnes en sciences humaines et sociales sont trs souvent textuelles. Il importe donc
de matriser parfaitement les mcanismes de recherche approximative, par expressions rgulires. (Fourmond, 2005) en fournit une prsentation prcise et complte et nanmoins
concise, tout en montrant la place des expressions rgulires dans les langages de programmation rcents comme Java et dans les langages tout faire que sont Perl, PHP, Python.
521

Orientations bibliographiques

Constitution et utilisation de corpus


La porte de (Baude, 2006) ne se limite pas aux corpus oraux, comme son titre pourrait
le laisser penser. Ce livre aborde en particulier les aspects juridiques de la constitution dun
corpus : consentement clair des locuteurs enregistrs, etc. Pour une mise en perspective
plus large, on se reportera (Habert et al., 1997) ou, mieux, (Kennedy, 1998).

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

SQL et dialectes SQL


Malgr la collection dans laquelle il figure (. . . pour les nuls), (Taylor, 2001) fournit une
introduction la fois large et prcise SQL. Il aborde des caractristiques avances comme
les requtes imbriques, la protection dune base de donnes et celle des donnes elles-mmes
(volet transactionnel). Il prsente la norme SQL 1999.
(Celko, 1999) se situe lautre extrmit du spectre. Mme sil correspond des versions
anciennes de la norme SQL (1989 et 1992), on y trouvera des dveloppements prcis sur des
sujets comme le statut et le traitement de NULL ou encore les diffrents types de jointures.
Louvrage indique galement comment reprsenter en SQL des structures de donnes qui a
priori ne sy prtent pas : les arbres et les graphes.
(Gennick, 2006) montre les oprateurs disponibles pour les versions SQL des SGBD trs
rpandus : Oracle, IBM DB2, mais aussi et surtout les deux dialectes utiliss dans louvrage,
MS (MicroSoft) SQL Server, sous-jacent Access, et MySQL.

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

Bases de donnes en ligne


Un des usages majeurs des bases de donnes est aujourdhui leur accs en ligne : rservation de places de transport ou de spectacle, commandes de livres, de films ou de disques,
etc. La base de donnes contient ltat des stocks, celui des commandes et des clients. On se
connecte une de ces bases par un formulaire internet. Par ce biais, on choisit ce que lon
souhaite commander et lon fournit ses coordonnes. Le formulaire est trait au fur et mesure par des programmes qui interrogent la base de donnes pour vrifier la disponibilit de
ce qui est command et qui en retour indiquent au client la suite donne sa commande. Les
outils de gestion collaborative comme les wikis ou les blogues reposent aussi sur des bases
de donnes et sur une interface de mise jour.
522

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

Importer, exporter, remodeler


(Ray, 2001) fournit une introduction lumineuse XML et aborde XSLT.(Fitzgerald, 2004),
523

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

I SRAEL M. (1997). Access 97. Aide-mmoire. Paris : Dunod.


K ENNEDY G. (1998). An introduction to corpus linguistics. Studies in language and linguistics.
London : Longman.
L ARROUSSE N. (2006). Cration de bases de donnes. Synthex. Paris : Pearson Education.
L ERDORF R. (2000). PHP prcis & concis. Paris : OReilly. Traduction de James Gurin.
M ANGANO S. (2003). XSLT en action. Paris : OReilly. Traduction dric Jacoboni et Alain
Ketterlin.
M ARAN R. (1999). Poche Visuel Access 2000. 3-D Visuel. Paris : First Interactive.

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.

N ASHE J. (2000). Access 2000. clic&zap. Paris : First Interactive.


N OCTON C. (2001). PHP 4 et MySQL en ligne. PC Poche. Paris : Micro Application.
P LNAT M. (1997). Analyse morpho-phonologique dun corpus dadjectifs drivs en -esque.
French Language Studies, (7), 163179.
R AY E. T. (2001). Introduction XML. Paris : OReilly. Traduction dAlain Ketterlin.
R EESE G. (2004). MySQL prcis & concis. Paris : OReilly. Traduction de Guillaume Merck.
R IGAUX P. (2001). Pratique de MySQL et PHP. Paris : OReilly.
R IVEREAU N. & P ICHOT A. (2002). MySQL. Rfrence. Paris : Micro Application.
S PONA H. (2001). Access 2002. PC Poche. Paris : Micro Application. Traduction de Hassina
Abbasbhay et Pierre Wolf.
T AYLOR A. G. (2001). SQL. Pour les nuls. Paris : First Interactive. traduction de Genevive
Vassaux et Denis Duplan.

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

SGBD voir Systme de gestion de bases de donnes


Tables multi-ensembles Tables contenant des doublons, des lignes identiques et qui ne
constituent donc pas des relations.

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

canal artriel (P RMA), 31


caractre
et glyphe, 438
gnrique : oprateur dapproximation,
100
littral vs. spcial, 95, 98
spcial, 98, 197, 336
chapper un , 95
d-spcialiser un , 95
prendre littralement un , 95
caractres (jeu de), 437
cardinalit
dune association, 292
cartonn (P RMA), 31
CASE, 138
casse
et oprateurs, 18
CEILING, 149
champ, 507, voir attribut
Access, 26
CHAR (MySQL), 25, 207, 511
cl trangre
convention graphique, 26
et suppression de colonne, 307
cl primaire, 304
convention graphique, 24
conventions typographiques, 216
et suppression de colonne, 307
clause dune requte, 63, 527
coconou (P RMA), 31
CONCAT, 150
COUNT, 149
et marque NULL, 49
couple, 228
CREATE
DATABASE, 299
INDEX, 323
TABLE, 24, 304
TABLE (MySQL), 25
cyanos (P RMA), 31

cart-type, 119, 527


CART-TYPE, 120
cho(graphie) crbrale (P RMA), 32
lment, voir XML
moticne, 438
en peau peau (P RMA), 32
enfant jaune (P RMA), 32
enregistrement, 507, voir n-uplet
entrocolite (P RMA), 32
ENTIER (Access), 512
ENTIER LONG (Access), 512
entit
ajouter, 312
modifier, 314
supprimer, 318
ENTRE, 75
ENUM (MySQL), 513
rythrosique (P RMA), 32
E SQUE
table attestations
modification, 307
table esque
structure (MySQL), 283
EST
NULL, 77
ET, 74, 76
ETF (P RMA), 32
eutrophique (P RMA), 32
expressions rgulires, 96
ancrage, 117
E XTRAC C HANE (Access), 35
extub (P RMA), 32

DCIMAL (Access), 512


dsaturation (P RMA), 31
dsature (P RMA), 31
DATE (MySQL), 25, 512
DATE/HEURE (Access), 513
DATETIME (MySQL), 512
DECIMAL (MySQL), 24, 25, 27, 207, 512
DEFAULT, 307
DESCRIBE (MySQL), 23, 24
Dextro (P RMA), 31
document

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

LCASE (SQL Server), 148


LEFT (SQL Server), 35, 150
LENGTH, 150
leucomalacie (P RMA), 32
LIEN HYPERTEXTE (Access), 513
LIKE, 94
et expressions rgulires, 96
oprateur dapproximation, 94
LOCATE, 150, 156
LONGBLOB (MySQL), 511
LONGTEXT (MySQL), 511
LOWER (MySQL), 148, 150, 157
lunettes de photothrapie (P RMA), 32
MMO (Access), 511
mningocle (P RMA), 32
mta-caractre, voir caractre spcial
mtromtre (P HDRE)
catgories, 207
conventions phontiques, 204
masquer
une colonne (Access), 243
MAX, 149
MAXIMUM, 120
MEDIUMBLOB (MySQL), 26, 27, 511
MEDIUMINT (MySQL), 512
MEDIUMTEXT (MySQL), 26, 511
MID (SQL Server), 35
MIN, 149
MINIMUM, 120
MINUSCULE (Access), 148
MOD (Access), 251
modalits
dune variable, 82
MONTAIRE (Access), 513
monde ferm (hypothse du), 217, 527
MOYENNE, 120
multi-ensembles, 507, 527, 528
NBCAR (Access), 151
nom
dsambiguser un de colonne, 244
nom qualifi, 48, 68, 239, 244, voir alias
NOMBRE DE LIGNES(), 118
NOMBRE DE VALEURS DISTINCTES
(Access) absence, 20
norme, 18
NOT
LIKE oprateur dapproximation, 94
NULL, 304, 307
REGEXP, 96
NULL, 313, 334
531

INDEX

NUMROAUTO (Access), 513

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

OBJET OLE (Access), 513


octet, 438
OCTET (Access), 512
oedmati (P RMA), 33
oedme (P RMA), 33
oprateurs
et casse, 18
OU, 77
OU, 76
OUI/NON (Access), 513
paire, 228
PAR GROUPE, voir GROUPE
PARMI, 75
partie du discours, 28, 30
PAS, 75
PCO2 (P RMA), 33
Perl, 438
P HDRE
table         
structure (MySQL), 207

table      
structure (MySQL), 206
table 
structure (MySQL), 205
photothrapie (P RMA), 33
polypnique (P RMA), 33
POS, 28, 30
pose dun KTC (P RMA), voir KTC
pose dun KTC (P RMA), 33
pouvoir expressif, 517, 528
P RMA
table     
exemples, 30
P RMA

table
structure (MySQL), 24
table           
structure (MySQL), 27
table             , 219
cration (Access), 26
cration (MySQL), 24
structure (MySQL), 25
table        
structure (MySQL), 27
PRIMARY KEY, 304
proclive (P RMA), 33
produit
cartsien, 228
relationnel, 228

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

SG (P RMA), 33, voir sonde gastrique


SGBD, 528
et informations squentielles, 40
SI, 135
silence, 358
SMALLINT (MySQL), 512
soins agressifs (P RMA), 33
SOMME (Access), 136
sonde gastrique (P RMA), 33
sous photo (P RMA), 33
SQL, 18
histoire et normalisation, 18
SQL Server (Access), 18
standard, 18
STD, 149
STRCMP, 150
SUBSTRING, 150
SUM, 149
SUM (SQL), 136
syndactylies (P RMA), 33

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

Nombre de requtes : 121


Nombre dexercices : 71
Nombre de captures dcran : 669

Beno t Habert Construire des bases de donn es (tome 2) - copyright Ophrys 2009

S-ar putea să vă placă și