Vous êtes sur la page 1sur 114

SQL Server 2000, Analysis Services et DTS

Cyril Gruau 4 mars 2004

Rsum e e Ce support de cours regroupe quelques notions concernant la limplmentation et le dveloppement e e de bases de donnes avec le langage SQL, une prsentation de la phase ETL, la construction et la e e consultation de cubes OLAP en langage MDX, ainsi quune introduction au data mining. Les logiciels retenus pour cette tude sont SQL Server 2000 (Microsoft), accompagn des Analysis Services et des e e DTS. Les notions abordes sont bien videmment utilisables avec dautres syst`mes. e e e

Mots-clef : base de donnes, requte, SQL, transaction, OLTP, ETL, DTS e e entrept de donnes, data warehouse, cube, MDX, OLAP, data mining o e

Complments apports ` ldition de fvrier 2003 : e e a e e les illustrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 un nouveau paragraphe sur les requtes multibases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 e un nouveau chapitre sur les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 un nouveau chapitre sur les tats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 e une r-organisation et une r-criture du chapitre sur le stockage des cubes . . . . . . . . . . . . . . . . . . . 68 e ee une r-criture compl`te du chapitre sur la phase ETL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ee e et quelques complments MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 e

Cyril.Gruau@ensmp.fr

` TABLE DES MATIERES

Table des mati`res e


Introduction 6

Le syst`me transactionnel e
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10
10 10 11 11 11 12 12 12 13 14 14 14 14 14 15 15 15 16 17 17 18 18 20 20 21 22 22 22 24 24 24 25 25 25 26 26 27 27 27 28

1 Syntaxe du langage SQL 1.1 Commentaires . . . . . . . . . . . . 1.2 Noms . . . . . . . . . . . . . . . . 1.3 Oprateurs . . . . . . . . . . . . . e 1.4 Variables . . . . . . . . . . . . . . 1.5 Structures . . . . . . . . . . . . . . 1.5.1 Blocs . . . . . . . . . . . . 1.5.2 Branchements conditionnels 1.5.3 Boucles conditionnelles . . . 2 Modes dexcution du code e 2.1 Excution immdiate . . . e e 2.2 Utilisation de script . . . 2.3 Excution par lots . . . . e 2.4 Transactions . . . . . . . 2.5 Dbogage . . . . . . . . . e SQL . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3 Mise en place dune base 3.1 Une base et son journal . . 3.2 Une table . . . . . . . . . . 3.3 Numrotation automatique e 3.4 Dnir les relations . . . . . e

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4 Slectionner les donnes e e 4.1 Slection simple . . . . . . . . . . . . . . . . . . . . e 4.2 Jointures internes . . . . . . . . . . . . . . . . . . . 4.3 Jointures externes . . . . . . . . . . . . . . . . . . 4.4 Union des slections . . . . . . . . . . . . . . . . . e 4.5 Sous-requtes . . . . . . . . . . . . . . . . . . . . . e 4.5.1 Sous-requte renvoyant une valeur . . . . . e 4.5.2 Sous-requte renvoyant une liste de valeurs e 4.5.3 Requtes correles . . . . . . . . . . . . . . e e 4.5.4 Requtes imbriques vs. jointures . . . . . . e e 4.5.5 Sous-requte renvoyant plusieurs colonnes . e 4.6 Requtes multibases . . . . . . . . . . . . . . . . . e 4.7 Quelques fonctions SQL . . . . . . . . . . . . . . . 4.7.1 Fonctions dagrgat . . . . . . . . . . . . . e 4.7.2 Oprateurs . . . . . . . . . . . . . . . . . . e 4.7.3 Fonctions sur les dates . . . . . . . . . . . . 4.7.4 Fonctions sur les cha nes de caract`res . . . e 4.7.5 Principales fonctions mathmatiques . . . . e 4.7.6 Fonctions utilisateur . . . . . . . . . . . . . 4.8 Conclusion . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

` TABLE DES MATIERES 5 Modier les donnes e 5.1 Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Mise-`-jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 6 Contraintes 6.1 Syntaxe . . . . . 6.2 CHECK . . . . . . 6.2.1 Syntaxe . 6.2.2 R`gle . . e 6.3 Valeur par dfaut e 6.4 Cl primaire . . . e 6.5 UNIQUE . . . . . . 6.6 Cl trang`re . . ee e 6.7 Conclusion . . .

3 28 28 29 30 31 31 32 32 33 34 35 35 35 36 37 37 37 39 39 40 41 41 41 42 44 44 45 46 46 46 47 47 48 48 49 49 49 50 50 50 51 51 51 52 52 52 52

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

7 Programmation vnementielle e e 7.1 Mise-`-jour et suppression en cascade a 7.2 Dclencheurs AFTER . . . . . . . . . . e 7.3 Dclencheurs INSTEAD OF . . . . . . . e 7.4 Complments . . . . . . . . . . . . . . e 7.5 Conclusion . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

8 Vues 8.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Intrts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee 8.3 Modication de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 9 Procdures stockes e e 9.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 Cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Verrous 10.1 Isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Verrouillage de niveau table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Connexions 11.1 Cration . . . . . . . . . . . . . . e 11.2 Rle . . . . . . . . . . . . . . . . o 11.2.1 Sur le serveur . . . . . . . 11.2.2 Dans une base de donnes e 11.3 Droits . . . . . . . . . . . . . . . 11.3.1 Sur les instructions . . . . 11.3.2 Sur les objets . . . . . . . 11.3.3 Cha dautorisation . . ne 12 Formulaires 12.1 Historique . . . . . . . . . . . 12.2 Lien avec la base de donnes e 12.3 Validation des donnes . . . . e 12.3.1 Intgrit de domaine . e e 12.3.2 Intgrit des entits . e e e

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

` TABLE DES MATIERES 12.3.3 Intgrit rfrentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e ee 12.3.4 Intgrit dentreprise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e 12.4 Ergonomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusion sur la partie transactionnelle

4 53 53 54 55

II

Le syst`me dcisionnel e e

57
59 59 60 61 62 62 62 62 63 63 65 65 66 67 67 68 68 68 70 72 72 73 73 73 74 74 75 75 76 77 77 77 82 83 83 83 85 86 86 87 87

13 Agrger les donnes e e 13.1 Groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 13.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Edition dtats e 14.1 Comparaison avec les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 Comparaison avec les requtes GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 14.3 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Structurer les donnes en cube e 15.1 Dnition dun cube . . . . . . e 15.2 Hirarchie . . . . . . . . . . . . e 15.2.1 Niveaux . . . . . . . . . 15.2.2 Membres . . . . . . . . 15.2.3 Hirarchies multiples . . e 15.3 Normalisation dun cube . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

16 Stockage des donnes e 16.1 Schma relationnel de lentrept . . . . . . e o 16.1.1 Schma en toile . . . . . . . . . . . e e 16.1.2 Schma en ocon . . . . . . . . . . . e 16.1.3 Parent-enfant . . . . . . . . . . . . . 16.1.4 Base dcisionnelle . . . . . . . . . . e 16.2 Modes de stockage . . . . . . . . . . . . . . 16.2.1 Multidimensional OLAP (MOLAP) 16.2.2 Relational OLAP (ROLAP) . . . . . 16.2.3 Hybrid OLAP (HOLAP) . . . . . . 16.3 Niveau dagrgation . . . . . . . . . . . . . e 17 Alimentation de lentrept o 17.1 Data Transformation Services 17.2 Base tampon . . . . . . . . . 17.3 Etapes ETL . . . . . . . . . . 17.3.1 Extraction . . . . . . . 17.3.2 Transformation . . . . 17.3.3 Chargement . . . . . . 17.3.4 Traitement . . . . . . 18 Interroger un cube 18.1 Requtes MDX . . . . e 18.1.1 Clause SELECT 18.1.2 Mesures . . . . 18.1.3 Clause WHERE . 18.1.4 Description des 18.1.5 MDX vs. SQL .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

(DTS) . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . . . axes . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

` TABLE DES MATIERES 18.2 Filtrage des donnes . . . . . . e 18.3 Disposition des rsultats . . . . e 18.3.1 Ordonner les axes . . . 18.3.2 Axes pluridimensionnels 18.4 Clause WITH . . . . . . . . . . . 18.4.1 Membres calculs . . . . e 18.4.2 Jeux nomms . . . . . . e 18.4.3 Cellules calcules . . . . e 18.4.4 Prcisions . . . . . . . . e 18.5 Clause CELL PROPERTIES . . . 18.6 Fonctions MDX . . . . . . . . . 18.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 88 90 90 90 91 91 93 94 94 94 95 96 96 96 97 97 98 98 98 99 100 100 101 102 103 103 103 103 104 106

19 Objets virtuels 19.1 Proprit de membre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee 19.2 Dimension virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3 Cube virtuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Exploration de donnes e 20.1 Mod`les . . . . . . . . . . . . . e 20.1.1 Clustering . . . . . . . . 20.1.2 Arbre de dcision . . . . e 20.2 Implmentation . . . . . . . . . e 20.2.1 Vocabulaire . . . . . . . 20.2.2 Prparation des donnes e e 20.2.3 Objets supplmentaires e 20.3 Prdiction . . . . . . . . . . . . e 20.3.1 Rseau de dpendances e e 20.3.2 Donnes prvisionnelles e e 20.4 Conclusion . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Conclusion sur la partie dcisionnelle e Table des gures

Rfrences ee 107 Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Pages web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Newsgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Index 109

INTRODUCTION

Introduction
Une base de donnes est un objet particuli`rement dicile ` dnir puisquil est abord en pratique e e a e e selon dirents points de vues : e pour un utilisateur, une base de donnes est un espace o` il peut enregistrer des informations, les e u retrouver et les faire traiter automatiquement par un ordinateur (on retrouve l`, ltymologie du a e mot informatique) ; pour un dveloppeur, une base de donnes est un ensemble de tables, de relations et de procdures e e e crites en SQL (Structured Query Language) ; e pour un administrateur informatique, une base de donnes est un ensemble de donnes ` sauvegarder e e a et scuriser. e Nous nous contentons ici du rle de dveloppeur, cela signie que nous occultons ladministration dune o e base de donnes (puisquil sagit dun autre mtier) mais que nous gardons en tte les proccupations des e e e e utilisateurs (dont ce nest pas le mtier de dvelopper des bases de donnes). e e e Dans une base de donnes personnelle (que lon manipule dans le logiciel Access de Microsoft par e exemple), on retrouve essentiellement un schma o` je suis lunique concepteur, dveloppeur, fournisseur e u e et analyste des donnes (cf. gure 1). e

Fig. 1 Base de donnes personnelle e

INTRODUCTION

Au contraire, dans un SGBD professionnel (de type SQL Server, Oracle, DB2 dIBM et bien dautres ) le schma est fondamentalement dirent : les donnes sont fournies par plusieurs utilisateurs (parfois des e e e milliers) ` travers de multiples petites transactions SQL. Ces donnes sont stockes dans une ou plusieurs a e e bases de production continuellement remises ` jour par ces transactions. Cette partie amont du schma a e constitue le syst`me transactionnel (cf. gure 2). Les donnes sont en gnral historises dans un entrept e e e e e o

quelques utilisateurs qui analysent les donnes requtes MDX

l'entrept de donnes (cubes) concepteurs, dveloppeurs, administrateurs grosses requtes SQL le systme dcisionel le systme transactionnel

les bases de donnes (tables) petites transactions SQL beaucoup d'utilisateurs qui fournissent les donnes

Fig. 2 Base de donnes professionnelle e de donnes dont llment constitutif nest plus la table mais le cube. Ceci gn`re de gros transferts entre e ee e e les deux syst`mes mais les informations utiles sont plus proches des quelques utilisateurs qui ont besoin e danalyser les donnes. Cette partie aval du schma constitue le syst`me dcisionnel. Lensemble est gr, e e e e ee dans lentreprise, par les concepteurs, les dveloppeurs et les administrateurs du service informatique. e

INTRODUCTION

Comme illustration nous pouvons prendre nimporte quelle entreprise qui fabrique et vend des produits (cf. gure 3). Les utilisateurs qui fournissent les donnes sont : les vendeurs, les interlocuteurs e

les managers du service commercial, du service marketing, du service logistique

cubes concernant : les ventes par vendeur et par trimestre, la production par produit et par anne l'quipe du service informatique

tables concernant : les articles, les fournisseurs, les clients, les ventes, les stocks

les vendeurs, les usines, les interlocuteurs auprs des fournisseurs

Fig. 3 Exemple de base de donnes professionnelle e aupr`s des fournisseurs et des usines. On voit bien quils peuvent tre nombreux. Les donnes seront e e e naturellement stockes dans des tables concernant : les articles, les fournisseurs, les clients, les ventes et e les stocks. Toutes ces informations seront regroupes sous forme de cubes concernant notamment : les e ventes par vendeur et par trimestre, la production par produit et par usine, etc. Dans cette entreprise, ces cubes sont susceptibles dintresser les managers du service commercial, du service marketing et du e service logistique. Le rle du service informatique tant dchafauder ce syst`me et de proposer des outils o e e e pour chaque mtier en relation avec les donnes. e e

INTRODUCTION

Physiquement, le rseau informatique concern par le traitement des donnes est organis autour dun e e e e ordinateur (ou un cluster dordinateurs) quip de SQL Server et accompagn dune baie de disques qui e e e ` stockent les donnes (cf. gure 4). A ce serveur sont connects autant de stations de travail clientes que e e

Fig. 4 Organisation physique du rseau base de donnes e e dutilisateurs, que ce soit les oprateurs en amont, les managers en aval ou le service informatique. De e plus en plus, ces utilisateurs passent par Internet, ce qui implique un nombre grandissant dinformations qui circulent entre le serveur web de lentreprise et le serveur base de donnes. e Dautres remarques sont ` noter concernant le logiciel prsent ici : a e e comme SQL Server a toujours quelque chose ` faire, il tourne en permanence sur le serveur ; cest a ce que lon appelle un service : on ne le dmarre pas comme un simple excutable et il continue de e e tourner quand on se dconnecte ; e on ne trouvera dans le logiciel SQL Server ni de formulaires ni dtats ; linterfaage graphique e c est laiss aux ordinateurs clients, comme par exemple les applications Visual Basic (dont Access), e les applications textes ou encore les pages web. Par ailleurs, ldition dtats est laisse ` dautres e e e a logiciels, comme par exemple Crystal Seagate.

10

Premi`re partie e

Le syst`me transactionnel e
En anglais on parle de syst`me OLTP (On Line Transaction Processing). Il sagit pour nous de concee voir et dvelopper la base de donnes relationnelle et les transactions qui permettent de modier les e e donnes. On propose de dcouvrir ici le langage Transact SQL qui est une version propre ` SQL Server e e a du langage SQL. Le langage SQL a t initialement conu dans les annes 1970 par la rme IBM. Il a t ensuite ee c e ee normalis (la norme actuelle, SQL-2, date de 1992) et est devenu le standard de tous les SGBDR. Ce e langage permet de masquer aux programmeurs les algorithmes de recherche des donnes dans des chiers e physiques eux-mme structurs de mani`re tr`s complexe et diremment selon les SGBDR. Transact e e e e e SQL prend certaines liberts par rapport ` la norme, mais la majeure partie de ce quon aborde ici est e a rutilisable avec un autre syst`me de gestion. e e Il se dcompose en quatre sous-langages qui soccupent de : e la dnition des donnes : cration des tables, des contraintes, etc. ; e e e la manipulation des donnes : slectionner, insrer, supprimer et modier ; e e e le contrle des donnes : intgrit, droits dacc`s, verrous et cryptage ; o e e e e la programmation : procdures stockes, fonctions, dclencheurs. e e e

Le lecteur ne trouvera rien ici concernant ladministration (sauvegarde, maintenance, ...), loptimisation (index, compilation, ...) ou linterfaage (ADO, SQL-DMO, ...) des bases de donnes. Pour cela il c e sera libre de consulter [7] ou [9]. Le lecteur est galement invit ` se rappeler les mthode de conception dun bon schma relationnel e ea e e (cf. [?] et les rfrences cite ` lintrieur) et ` se souvenir quil est essentiel de conna le mtier des ee e a e a tre e utilisateurs dune base de donnes avant de travailler dans celle-ci. e

Syntaxe du langage SQL


Comme tout nouveau langage commenons par apprendre la syntaxe de base. c

Tout dabord on peut mettre autant despaces 1 et de sauts de ligne que lon veut entre les mots du langage. Cependant, on respectera les r`gles suivantes : e une seule instruction par ligne ; la mme indentation 2 que dans le prsent document ; e e et des lignes pas trop longues (visibles enti`rement ` lcran). e a e

1.1

Commentaires

On peut insrer des commentaires de deux faons : e c sur une ligne, ` partir de deux tirets -- ; a dans un bloc dlimit par /* et par */. e e

1. dans ce cas espace est un nom fminin e 2. cest-`-dire quon respectera le mme alignement vertical ` laide de tabulations a e a

1 SYNTAXE DU LANGAGE SQL Exemple :


1 2 3 4 5 6

11

/* cette requete selectionne toutes les donnees de la table Exemple */ SELECT * FROM Exemple -- le * designe toutes les colonnes

Remarque : ne pas employer les caract`res accentus (y compris dans les commentaires) e e

1.2

Noms

Tous les noms dobjets (table, colonne, variable, etc.) doivent respecter les r`gles suivantes : e ne pas dpasser 128 caract`res parmi : les lettres (non accentues), les chires, @, $, #, - ; e e e commencer par une lettre ; ne pas contenir despace . Si un nom ne vrie pas les deux derni`res r`gles, il faut le dlimiter par des crochets [ et ] (si le e e e e nom utilise un crochet fermant, le doubler : [Bill [William]] Clinton]). Par ailleurs, on est pas oblig de respecter la casse (i.e. il ny a aucune dirence entre les majuscules et e e les minuscules). Mais on prendra lhabitude de laisser en majuscule les mots-cls du langage et seulement e les mots-cls du langage. e

1.3

Oprateurs e
Les oprateurs arithmtiques disponibles sont : +, -, *, / et % le reste par division enti`re ; e e e les oprateurs de comparaison logique sont : <, <=, =, >=, > et <> (dirent) ; e e les autres oprateurs logique sont : AND, OR et NOT ; e et pour la concatnation des cha e nes de caract`res on utilise +. e

Les niveaux de priorit entre ces oprateurs sont usuels, il sut donc de parenthser quand on a un e e e doute.

1.4

Variables

Les principaux types disponibles sont : INT DECIMAL(9,2) REAL CHAR(64) VARCHAR(64) DATETIME entier montant ` 9 chires (dcimaux) dont 2 apr`s la virgule a e e rel ottant cod sur 24 bits e e cha de caract`re de longueur xe 64 ne e cha de caract`re de longueur variable mais infrieure ou gale ` 64 ne e e e a date et/ou heure avec une prcision de 3.33 ms e

Remarques : dans un soucis dconomie despace, on peut utiliser pour les entiers les types SMALLINT, TINYINT e et mme BIT ; e les entiers de type INT peuvent aller jusqu` un peu plus de 2 milliards, au del` il faut utiliser le a a type BIGINT qui autorise des entiers jusqu` plus de 9000 milliards ; a le nombre maximal de dcimales est 28 ; e

1 SYNTAXE DU LANGAGE SQL

12

on peut choisir de stocker les rels ottants sur n bits avec le type FLOAT(n) (n infrieur ou gale e e e a ` 53) ; les cha nes de caract`res ne peuvent pas dpasser 8000 caract`res, au del`, il faut utiliser le type e e e a TEXT qui autorise plus de 2 milliards de caract`res ; e on peut dnir son propre type, exemple 3 4 : e
1

sp_addtype CodePostal, CHAR(5)

pour les conversions entre dirents type, il faut parfois employer linstruction CAST 5 (cf. laide en e ligne). Lorsque lon dni une variable, on adopte la convention de faire commencer son nom par @.Dclaration, e e aectation et achage :
1 2 3

DECLARE @tva DECIMAL(3,3) SET @tva = 0.186 PRINT @tva

1.5

Structures

SQL ore les structures usuelles de tout langage. 1.5.1 Blocs

On peut dlimiter un bloc de plusieurs instructions par BEGIN et par END. Cest la structure la plus e importante du langage, elle est utilise par toutes les autres structures, les transactions, les dclencheurs, e e les procdures stockes et les fonctions. e e 1.5.2 Branchements conditionnels

On peut parfois avoir besoin deectuer un branchement conditionnel, pour cela on dispose de la structure conditionnelle suivante : IF expression boolenne e ... ELSE ...

une instruction ou un bloc faculatif une instruction ou un bloc

Exemple tir de la base de donnes Northwind : on veut supprimer le client Frank e e


1 2 3 4 5 6 7 8

IF EXISTS(SELECT OrderID FROM Orders WHERE CustomerID = Frank) -- bref, sil existe des commandes pour le client Frank PRINT Impossible de supprimer le client Frank, car il fait lobjet de commandes ELSE BEGIN DELETE Customers WHERE CustomerID = Frank PRINT Client Frank supprime END

3. sp addtype est une procdure stocke, cf. 9 page 44 e e 4. on a aussi sp droptype pour supprimer un type cr par lutilisateur ee 5. ou CONVERT

1 SYNTAXE DU LANGAGE SQL

13

Remarque : les cha nes de caract`res sont dlimites par une quote et si la cha contient elle-mme e e e ne e une apostrophe , il sut de doubler la quote . Une erreur tr`s frquente consister ` utiliser plusieurs instructions sans les dlimiter par un bloc : e e a e
1 2 3 4 5

IF(@b <> 0) PRINT On peut diviser car b est non nul @a = @a / @b ELSE PRINT On ne peut pas diviser car b est nul

On dispose galement de la structure plus gnrale suivante : e e e CASE WHEN expression boolenne THEN e ... WHEN expression boolenne THEN e ... ... ELSE ... END

une instruction ou un bloc une instruction ou un bloc dautres WHEN ... THEN une instruction ou un bloc

Dans laquelle, les dirents cas sont valus successivement. e e e Exemple tir de la base de donnes Northwind : on veut savoir quel produit il faut rapprovisionner e e e
1 2 3 4 5 6 7 8 9 10 11 12

SELECT ProduitID, Etat du stock = CASE WHEN(Discontinued = 1) THEN Ne se fait plus WHEN((UnitsInStock - UnitsOnOrder) < ReOrderLevel) THEN Seuil de reapprivionnement atteint : passer commande WHEN(UnitsInStock < UnitsOnOrder) THEN Stock potentiellement negatif : passer commande ELSE En stock END FROM products

Exercice : une erreur sest glisse dans lexemple prcdent. e e e 1.5.3 Boucles conditionnelles

La seule faon deectuer une boucle est dutiliser la structure suivante : c WHILE expression boolenne e ...

une instruction ou un bloc

2 MODES DEXECUTION DU CODE SQL On ne dispose pas de boucle FOR pour la simple raison que les boucles WHILE susent :
1 2 3 4 5 6 7 8

14

DECLARE @i SET @i = 0 WHILE(@i < @n) BEGIN ... @i = @i + 1 END

Par ailleurs, pour parcourir toutes les lignes dune table, il sut bien souvent dutiliser linstruction SELECT. Les boucles sont donc inutiles en gnral. e e

Modes dexcution du code SQL e

Une fois quon a crit (sans erreur) son code, SQL tant un langage interprt, on peut dcider quand e e ee e et comment lexcuter. La premi`re tape consiste bien souvent ` prciser sur quelle base de donnes on e e e a e e compte travailler. Pour cela on dispose de linstruction USE. Exemple :
1

USE northwind

2.1

Excution immdiate e e

Dans lAnalyseur de requte, slectionner la partie du code ` excuter et taper sur F5, CTRL+E, ALT+X e e a e ou cliquer sur le bouton lecture.

2.2

Utilisation de script

On peut enregistrer le code SQL dans des chiers textes dextension .sql (il sagit-l` dune convention a que lon adopte) pour les excuter plus tard. Sous MS-DOS, on peut excuter un script truc.sql avec e e lutilitaire osql en tapant : osql -i truc.sql

2.3

Excution par lots e

Dans lutilitaire osql on peut galement taper les lignes une par une et taper GO pour lancer e lexcution. Les instructions entre deux GO successifs forment un lot. Si une erreur existe dans un lot, e aucune instruction ne sera rellement excute. Le lot passe donc soit en totalit, soit pas du tout. e e e e On peut crire les GO dans un script, mais on prfrera utiliser les transactions. e ee

2.4

Transactions

Une transaction est une suite dinstructions qui russissent ou qui chouent en totalit (pas de russite e e e e partielle). Si elle russit, les modications apportes ` la base sont permanentes, et la transaction est e e a inscrite au journal. Si une instruction choue, toute la transaction est annule et la base retrouve ltat e e e dans lequel elle tait avant la transaction. e Toutes les transactions gurent dans un chier que lon appelle le journal des transactions. Ce journal permet de restaurer la base de donnes en cas de panne sur le ou les chiers de donnes. Ces chiers de e e donnes sont videmment sauvegards rguli`rement, mais pour pouvoir restaurer compl`tement la base e e e e e e (en cas de plantage) il faut pouvoir refaire toutes les modications depuis la derni`re sauvegarde. Cest e

3 MISE EN PLACE DUNE BASE

15

le rle du journal des transactions de contenir toutes ces informations. Il est donc gnralement stock o e e e sur un autre disque. On dit quune transaction est ACID : Atomique, au sens o` on ne peut pas la diviser en une partie qui choue et une partie qui russit ; u e e Consistante, au sens o` une fois la transaction termine, la base est de nouveau dans un tat u e e cohrent ; e Isole, au sens o` une transaction consid`re que, pendant son excution, les donnes quelle manipule e u e e e ne sont pas modies par une autre transaction ; e et Durable, au sens o` les modications opres par la transaction sont enregistres de faon peru ee e c manente (et recouvrables en cas de reconstruction de la base). La syntaxe pour dlimiter une transaction est la suivante : e BEGIN TRAN ... COMMIT TRAN

une suite dinstructions

Cest une notion importante : si le transfert dune somme dargent est encapsul dans une transaction e qui regroupe le dbit du compte source et le crdit du compte destination, alors il ny aura pas de fuite e e dargent mme en cas derreur. e

2.5

Dbogage e

Il ny a pas dans SQL Server de dbogage ` proprement parler. Tout juste dispose-t-on dune e a vrication de la syntaxe des requtes SQL. Il faut donc se dbrouiller avec lachage des rsultats e e e e a e ` lcran.

Mise en place dune base

Toutes les oprations qui permettent de crer une base de donnes sont disponibles dans Enterprise e e e Manager sous forme de bo de dialogue et de boutons. Mais on peut galement les organiser dans un tes e code SQL.

3.1

Une base et son journal

Une base de donnes SQL Server contient au minimum : e un chier de donnes principal (dextension .mdf) o` sont stockes les donnes ; e u e e un journal des transactions (dextension .ldf) o` sont rpertories toutes les transactions. u e e Lorsque lon cr une base, il faut donc prciser le nom, lemplacement et la taille de ces deux chiers. ee e

3 MISE EN PLACE DUNE BASE Exemple : crons une base de donnes papeterie e e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

16

CREATE DATABASE papeterie ON PRIMARY ( NAME = papeterie_data, FILENAME = C:\Data\papeterie.mdf, SIZE = 60MB, MAXSIZE = 70MB, FILEGROWTH = 1MB ) LOG ON ( NAME = papeterie_log, FILENAME = D:\Log\papeterie.ldf, SIZE = 15MB, MAXSIZE = 20MB, FILEGROWTH = 1MB )

-- le nom de la base -- le fichier de donnees principal -----nom logique emplacement et nom du fichier taille de depart taille maximale increment

-- le journal

Pour modier une base de donnes existante, on utilise linstruction ALTER DATABASE. Par exemple : e
1 2

ALTER DATABASE papeterie MODIFY NAME cartoleria

Remarque : dautres modications sont possibles. Pour supprimer une base de donnes existante, il sut de taper : e
1

DROP DATABASE papeterie

3.2

Une table

Lors de la cration dune table dans une base de donnes existante, il faut prciser : e e e pour chaque colonne : son nom et son type de donnes ; e une cl primaire (qui permet didentier chaque ligne de faon unique). e c On peut ventuellement prciser pour chaque colonne si vide 6 est interdit et/ou une valeur par dfaut. e e e Exemple de cration dune table : e
1 2 3 4 5 6

CREATE TABLE clients ( clt_num CHAR(8) PRIMARY KEY, clt_nom VARCHAR(64) NOT NULL, clt_ca INT DEFAULT 0 )

-- cle primaire -- vide interdit -- valeur par defaut

6. NULL reprsente une absence dinformation e

3 MISE EN PLACE DUNE BASE Pour modier une table existante, on utilise linstruction ALTER TABLE. Exemples :
1 2 3 4 5 6 7 8

17

ALTER TABLE clients ADD clt_adr VARCHAR(255) ALTER TABLE clients DROP COLUMN clt_adr ALTER TABLE clients ALTER COLUMN clt_num INT

-- pour ajouter la colonne adresse

-- pour retirer la colonne adresse

-- pour reconvertir le type de donnees

Pour supprimer une table existante, il sut de taper :


1

DROP TABLE clients

3.3

Numrotation automatique e

Pour la cl primaire dune table, il est souvent prfrable de laisser SQL Server gnrer des valeurs e ee e e distinctes. On dispose pour cela de deux possibilits : e une valeur enti`re qui sincrmente automatiquement ; e e un identicateur unique universel (GUID), cest-`-dire un nombre cod sur 16 octets en logique a e polonaise inverse. Nous nous contentons de la premi`re alternative : e
1 2 3 4 5 6

CREATE TABLE clients ( clt_num INT PRIMARY KEY IDENTITY(4,2), -- les numeros des clients successifs seront 4, 6, 8, ... ... )

Remarque : lavantage davoir un incrment > 1 est de pouvoir ensuite insrer des numros parmi les e e e numros automatiques (ce qui reprsente un intrt limit, nous nous contentons donc bien souvent de e e ee e IDENTITY(1,1)). ` A titre dinformation, la seconde alternative semploie ainsi :
1 2

ALTER TABLE clients ALTER COLUMN clt_num UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID()

3.4

Dnir les relations e

La commande dun produit est forcment passe par un client. Donc la table commandes devra contee e nir une colonne pour savoir quel client est concern. Cette colonne cmd clt contiendra en fait la cl e e primaire du client concern. Il y a donc une relation entre cmd clt et la colonne clt num de la table e clients (cf. gure 5). Comme cmd clt va chercher ses valeurs dans une autre colonne, elle constitue ce que lon appelle une cl trang`re. ee e

4 SELECTIONNER LES DONNEES

18

Fig. 5 Relation entre deux tables La syntaxe pour crer la table commandes est alors : e
1 2 3 4 5 6 7

CREATE TABLE commandes ( cmd_num INT PRIMARY KEY IDENTITY(1,1), cmd_date DATETIME DEFAULT GETDATE(), -- GETDATE() retourne la date daujourdhui et lheure courante cmd_clt INT NOT NULL FOREIGN KEY REFERENCES clients(clt_num) )

Remarques : cmd clt et clt num doivent tre du mme type ; e e on pourrait se contenter de REFERENCES clients car clt num est cl primaire ; e cette relation introduit deux contraintes : lors dune nouvelle commande, le client devra dj` exister ; ea lors de la suppression dun client, il ne devra plus faire lobjet de commande.

Slectionner les donnes e e

On entre ici au cur du langage SQL puisque ce sont les requtes de slection qui rclament le plus e e e de conception de part du programmeur.

4.1

Slection simple e

Rappelons que la syntaxe pour eectuer une requte de slection est : e e SELECT colonnes FROM tables WHERE condition1 AND condition2 OR

Exemple : si on veut toutes les commandes du client Razibus


1 2 3 4

SELECT cmd_num, cmd_date FROM commandes, clients WHERE clt_nom = Razibus AND cmd_clt = clt_num

-- il faut rappeler la relation

4 SELECTIONNER LES DONNEES

19

Remarques : lordre na pas dimportance pour la relation (on aurait pu crire clt num = cmd clt ; e lordre na pas non plus dimportance entre les deux conditions de WHERE (on aurait pu mettre clt num = Razibus apr`s). e Dans les conditions WHERE (relies entre elles par OR ou AND) on peut utiliser e =, <> et tous les oprateurs de comparaison : e WHERE clt nom <> Razibus une plage de valeurs (bornes incluses) : WHERE clt ca BETWEEN 10000 AND 100000 une liste de valeurs : WHERE clt nom IN (Razibus, Fricotin, Mironton) un ltre : WHERE clt nom

LIKE R%

LIKE R zibus LIKE %[M-R] LIKE %[^FMR]% Remarque : on dispose videmment de e

-------

commenant par R c % remplace toute srie de caract`res e e (y compris vide) remplace un caract`re e finissant par M, N, O, P, Q ou R ne contenant ni F ni M ni R

NOT BETWEEN ... AND ... NOT IN ... NOT LIKE ...

Par ailleurs, on peut intituler les colonnes (si lintitul contient des espaces ou des accents, le dlimiter avec des crochets e e [ ]) : SELECT cmd num AS [numro de commande], cmd date AS date e trier les rsultats : e SELECT ... FROM ... WHERE ... ORDER BY cmd date DESC, cmd num ASC cest-`-dire par dates dcroissantes, puis (pour les commandes de la mme date) a e e par numro croissant e nacher que des rsultats distincts : e SELECT DISTINCT ... nacher que les premiers rsultats : e SELECT TOP 50 ... Mais malheureusement, on ne peut pas utiliser les alias dnis dans la clause SELECT dans les autres e clauses (WHERE et ORDER BY notamment).

4 SELECTIONNER LES DONNEES

20

4.2

Jointures internes

Quand on utilise deux tables ou plus, on eectue en ralit des jointures entre ces tables. Donc e e dsormais on crira plutt : e e o
1 2 3 4

SELECT cmd_num, cmd_date FROM commandes JOIN clients ON cmd_clt = clt_num WHERE clt_nom = Razibus

-- condition de jointure -- condition de selection

Remarques : ceci permet de bien sparer les conditions de jointure des conditions de slection ; e e une jointure est en quelque sorte un produit cartsien temporaire : la table (cmd num, cmd date, e clt nom) est provisoirement cre pour eectuer la slection ; ee e le moteur du SGBD se charge de trouver le moyen deectuer le moins doprations possible ; e une jointure nest pas seulement le rappel des relations entre deux tables, cest une vraie condition (qui peut utiliser <> et les autres oprateur de comparaison ` la place de = par exemple) et pas e a forcment entre une cl trang`re et sa rfrence ; e ee e ee on peut eectuer plusieurs jointures successives : FROM commandes JOIN clients ON cmd clt = clt num JOIN articles ON cmd art = art num pour une mme jointure, on peut utiliser plusieurs conditions de jointures (relies entre elles par e e AND ou OR). Pour tre tout ` fait rigoureux, il faut toujours prciser la table ` laquelle appartiennent les colonnes e a e a utilises (en utilisant des alias). On crira donc dsormais : e e e
1 2 3 4

SELECT a.cmd_num, FROM commandes AS JOIN clients AS b WHERE b.clt_nom =

a.cmd_date a ON a.cmd_clt = b.clt_num Razibus

Exercice : slectionner les clients ayant command le mme jour (le rsultat devra se prsenter sous e e e e e forme de deux colonnes : un client et un autre qui a command le mme jour). e e Solution : avec les alias, lauto-jointure devient possible
1 2 3 4 5 6

SELECT DISTINCT a.cmd_clt, b.cmd_clt FROM commandes AS a JOIN commandes AS b ON a.cmd_clt <> b.cmd_clt -- la condition de jointure est que les deux clients ne sont pas les memes WHERE a.cmd_date = b.cmd_date -- parmi tous les couples de clients distincts on ne garde que ceux-la

4.3

Jointures externes

Imaginons maintenant que lon dispose de la table clients plus qui contient les colonnes clt num, clt adresse, clt email, clt telephone et que lon veuille acher la liste compl`te des clients ainsi que e leur renseignements complmentaires sils existent. e

4 SELECTIONNER LES DONNEES La premi`re ide consiste ` eectuer la requte suivante : e e a e


1 2 3

21

SELECT a.clt_nom, b.clt_adresse, b.clt_email, b.clt_telephone FROM clients AS a JOIN clients_plus AS b ON a.clt_num = b.clt_num

Probl`me : ne sachent que les clients ayant des informations complmentaires. La solution consiste e e a ` rendre facultative la jointure avec la table de droite.
1 2 3 4

SELECT a.clt_nom, b.clt_adresse, b.clt_email, b.clt_telephone FROM clients AS a LEFT JOIN clients_plus AS b ON a.clt_num = b.clt_num -- jointure facultative gauche

Attention : si cest la table de droite qui est facultative, alors il sagit dune jointure externe gauche. Autre cas : on veut la liste des adresses lectroniques de la table clients plus mais parfois il ny a e aucun client de rattach. e
1 2 3 4

SELECT b.clt_email, a.clt_nom FROM clients AS a RIGHT JOIN clients_plus AS b ON a.clt_num = b.clt_num -- jointure facultative droite

Dernier cas : on veut la liste des clients dont on a soit le nom, soit le-mail.
1 2 3 4

SELECT a.clt_nom, b.clt_email FROM clients AS a FULL OUTER JOIN clients_plus AS b ON a.clt_num = b.clt_num -- jointure facultative dans les deux sens

4.4

Union des slections e

On peut regrouper les rsultats de plusieurs requtes de slection. e e e Exemple : ` supposer que les tables commandes2000 et comandes2001 existent, on peut visualiser les a commandes dun client au cours de ces deux annes ainsi : e
1 2 3 4 5 6 7 8 9 10 11

SELECT a.cmd_num, a.cmd_date FROM commandes2000 AS a JOIN clients AS b ON a.cmd_clt = b.clt_num WHERE b.clt_nom = Razibus UNION SELECT a.cmd_num, a.cmd_date FROM commandes2001 AS a JOIN clients AS b ON a.cmd_clt = b.clt_num WHERE b.clt_nom = Razibus

4 SELECTIONNER LES DONNEES

22

Remarques : lutilisation de loprateur UNION suppose que les colonnes slectionnes des les deux requtes sont e e e e du mme nombre, du mme type et dans le mme ordre (mais pas forcment les mmes) ; e e e e e les doublons sont supprims automatiquement (i.e. on ne retrouve pas deux fois la mme ligne) ` e e a moins dutiliser UNION ALL ; pour spcier les intituls de colonnes, prciser les alias AS dans la premi`re clause SELECT. e e e e Il est parfois possible de substituer un UNION par une jointure supplmentaire et plusieurs conditions e WHERE, mais cest plus facile dutiliser UNION. De plus, on peut parfois obtenir de meilleures performances en dcomposant une requte complexe en une srie de SELECT combins avec loprateur UNION. e e e e e

4.5

Sous-requtes e

Les conditions de slection de la clause WHERE peuvent utiliser le rsultat dune autre requte. e e e 4.5.1 Sous-requte renvoyant une valeur e

Lors que cette autre requte ne revoie quune valeur, on peut utiliser = et tous les autres oprateurs e e de comparaison logique 7 . Exemple : pour acher les commandes dun client on peut utiliser une sous-requte. e
1 2 3 4 5

SELECT cmd_num, cmd_date FROM commandes WHERE cmd_clt = ( SELECT clt_num FROM clients WHERE clt_nom = Razibus ) Sous-requte renvoyant une liste de valeurs e

4.5.2

Les sous-requtes qui renvoie une liste de valeurs peuvent tre naturellement utilis par loprateur IN. e e e e Exemple : on veut les commandes de tous les clients dont le nom commence par P.
1 2 3 4 5

SELECT cmd_num, cmd_date FROM commandes WHERE cmd_clt IN ( SELECT clt_num FROM clients WHERE clt_nom LIKE P% )

Le langage SQL ore dautres mot-cl pour ce type de sous-requte, dcouvrons-les par lexemple.Avec e e e la table articles qui comporte les colonnes art num, art nom, art prix et art couleur on veut successivement : les articles dont le prix est suprieur ` tous les articles blancs : e a
1 2 3 4 5

SELECT art_nom FROM articles WHERE art_prix > ALL ( SELECT art_prix FROM articles WHERE art_couleur = blanc )

7. mais aussi BETWEEN ... AND ...

4 SELECTIONNER LES DONNEES ceci est quivalent ` e a


1 2 3 4 5

23

SELECT art_nom FROM articles WHERE art_prix > ( SELECT MAX(art_prix) FROM articles WHERE art_couleur = blanc )

les articles dont le prix est suprieur ` lun des articles blancs : e a
1 2 3 4 5

SELECT art_nom FROM articles WHERE art_prix > ANY ( SELECT art_prix FROM articles WHERE art_couleur = blanc )

ceci est quivalent ` e a


1 2 3 4 5

SELECT art_nom FROM articles WHERE art_prix > ( SELECT MIN(prix) FROM articles WHERE art_couleur = blanc )

tous les articles mais seulement sil en existe un de blanc (pourquoi pas ?) :
1 2 3 4 5

SELECT art_nom FROM articles WHERE EXISTS ( SELECT art_num FROM articles WHERE art_couleur = blanc )

tous les articles mais seulement sil nen existe pas de blanc (pourquoi pas non plus ?) :
1 2 3 4 5

SELECT art_nom FROM articles WHERE NOT EXISTS ( SELECT art_num FROM articles WHERE art_couleur = blanc )

4 SELECTIONNER LES DONNEES 4.5.3 Requtes correles e e

24

Lorsquune sous-requte a besoin dinformation de la requte parent, on dit quelle est corrle. Il e e ee sut dutiliser des alias AS pour lui passer les informations. Exemple : quels sont les clients qui ont pass une commande dun montant suprieur ` 1 % de leur e e a chire daaire ?
1 2 3 4 5

SELECT clt_nom FROM clients AS a WHERE (clt_ca / 100) < ANY ( SELECT cmd_montant FROM commandes AS b WHERE b.cmd_clt = a.clt_num )

Remarques : lalias a est dni dans la requte appelante et est utilisable dans la sous-requte ; e e e La sous-requte sera excute autant de fois quil y a de clients. e e e

4.5.4

Requtes imbriques vs. jointures e e

Souvent une sous-requte peut tre remplace par une jointure : e e e


1 2 3 4

SELECT DISTINCT a.clt_nom FROM clients AS a JOIN commandes AS b ON b.cmd_clt = a.clt_num WHERE (a.clt_ca / 100) < b.cmd_montant

Lorsquon emploie les requtes imbriques, on prcise ` SQL Server comment eectuer la requte ; e e e a e cest une faon procdurale de voir les choses. Tandis que quand on utilise des jointures cest une forme c e relationnelle et SQL Server se charge de faire pour le mieux. Par contre, il ny a parfois pas dquivalence jointures ` une criture en sous-requtes. Mais quand e a e e on a un quivalent, il vaut mieux utiliser les jointures car la requte sera optimise par linterpr`te SQL. e e e e Ceci dit, lutilisation de sous-requte est plus lisible ... e 4.5.5 Sous-requte renvoyant plusieurs colonnes e

Une sous-requte renvoyant une ou plusieurs colonnes peut tre utilise comme table dans la clause e e e FROM. Cela peut servir par exemple ` ne slectionner que les plus gros clients : a e
1 2 3 4 5 6

SELECT a.clt_nom FROM ( SELECT TOP 10 * FROM clients ORDER BY clt_ca DESC ) AS a JOIN commandes AS b ON b.cmd_clt = a.clt_num WHERE (a.clt_ca / 100) < b.cmd_montant

Par contre, on ne peut pas utiliser ce type de sous-requte dans une clause WHERE (sauf avec EXISTS), e contrairement ` Oracle. a

4 SELECTIONNER LES DONNEES

25

4.6

Requtes multibases e

` A lorigine, SQL ne permet pas de faire de requtes qui portent sur les tables de plusieurs bases de e donnes et encore moins gres par dirents SGBDR. Transact-SQL ore un mcanisme de dnomination e ee e e e qui permet deectuer des jointures entre des tables issus de syst`mes htrog`nes. e ee e La syntaxe compl`te du nom dune table est : e [nom du serveur] . [nom de la base] . [nom du propritaire] . [nom de la table] e Le propritaire est gnralement dbo le database owner. e e e Cette syntaxe permet dcrire une jointure portant sur les tables des deux bases de donnes direntes e e e (sur le mme serveur) : e
1 2 3

SELECT a.cmd_num, b.art_nom FROM GestionCommerciale.dbo.commandes AS a JOIN GestionProductique.dbo.articles AS b ON a.cmd_art = b.art_num

Ou une jointure portant sur deux bases de donnes gres par des serveurs dirents : e ee e
1 2 3

SELECT a.clt_nom AS [clients communs] FROM ENTREPRISE1.GestionCommerciale.dbo.clients AS a JOIN ENTREPRISE2.GestionCommerciale.dbo.clients AS b ON a.clt_nom = b.clt_nom

Cependant, la requte tant eectue sur un serveur SQL Server (ENTREPRISE1 par exemple), il faut e e e que les autres serveurs utiliss (ENTREPRISE2 en loccurrence) soient dclars comme serveurs lis dans e e e e le serveur SQL Server. Remarque : ENTREPRISE2 nest pas forcment un serveur SQL Server, mais peut tre nimporte quel e e SGBD reconnu par DTS (cf. 17 page 75), ce qui permet dcrire des requtes sur des donnes htrog`nes e e e ee e (cf. [1]).

4.7

Quelques fonctions SQL

` A tout moment dans une requte SELECT on peut utiliser de nombreuses fonctions, ` commencer par e a la fonction suivante qui sav`re souvent tr`s utile : ISNULL qui permet de remplacer NULL par une autre e e valeur. Par exemple, pour remplacer une absence de chire daaire par un chire daaire nul :
1 2

SELECT clt_nom, ISNULL(clt_ca, 0) FROM clients Fonctions dagrgat e COUNT SUM AVG VAR STDEV MIN MAX dnombrement e moyenne variance cart-type e

4.7.1

4 SELECTIONNER LES DONNEES Exemple :


1 2 3 4 5 6 7

26

-- pour compter le nombre de client SELECT COUNT(clt_num) FROM clients -- pour connaitre le chiffre daffaire moyen des clients SELECT AVG(clt_ca) FROM clients

Remarque : toutes ces fonctions ignorent les valeurs NULL (surtout COUNT). 4.7.2 Oprateurs e

Cest-`-dire : +, -, *, /, % et le + de concatnation. Exemple : a e


1 2 3 4 5 6 7

-- pour afficher le chiffre daffaire mensuel moyen de chaque client SELECT clt_nom, clt_ca / 12 AS [ca mensuel] FROM clients -- pour concatener le nom et le prenom SELECT clt_nom + + clt_prenom AS [Identit] e FROM clients Fonctions sur les dates

4.7.3

Avec date de type DATETIME : DATEADD(year, 4, date) DATEADD(month, 4, date) DATEADD(week, 4, date) DATEADD(day, 4, date) DATEADD(hour, 4, date) DATEDIFF(minute, date debut, date fin) DATEDIFF(second, date debut, date fin) DATEPART(month, date) ajoute 4 ans ` date a

donne la dirence en minutes entre e date fin et date debut renvoie le numro du mois de date e

Remarque : DATEDIFF et DATEPART renvoient un entier. Reprenons lexemple de lauto-jointure. Si on veut vraiment slectionner les clients qui ont command e e le mme jour, il faut remplacer le test dgalit entre les dates par : e e e
1 2 3 4 5

SELECT DISTINCT a.cmd_clt, b.cmd_clt FROM commandes AS a JOIN commandes AS b ON a.cmd_clt <> b.cmd_clt WHERE DATEDIFF(day, a.cmd_date, b.cmd_date) = 0 -- sinon il sagit dune egalite a 3.33 ms pres

Remarque : la requte prcdente nest pas quivalente ` la suivante. e e e e a

4 SELECTIONNER LES DONNEES SELECT DISTINCT a.cmd_clt, b.cmd_clt FROM commandes AS a JOIN commandes AS b ON a.cmd_clt <> b.cmd_clt WHERE DATEDIFF(hour, a.cmd_date, b.cmd_date) BETWEEN -24 AND 24 /* dans ce cas les clients ont commande a moins de 24h dintervalle mais pas forcement le meme jour */ Fonctions sur les cha nes de caract`res e

27

1 2 3 4 5 6

4.7.4

Notamment : LEN (longueur), LOWER (convertit tout en minuscule), REPLACE, SUBSTRING et UPPER (tout en majuscule). 4.7.5 Principales fonctions mathmatiques e

` A savoir : ABS (valeur absolue), CEILING (partie enti`re +1), COS, EXP, FLOOR (partie enti`re), LOG e e (logarithme neperien), LOG10, PI, POWER, SIGN, SIN, SQRT, SQUARE et TAN. Par exemple, on peut crire la derni`re requte ainsi : e e e
1 2 3 4

SELECT DISTINCT a.cmd_clt, b.cmd_clt FROM commandes AS a JOIN commandes AS b ON a.cmd_clt <> b.cmd_clt WHERE ABS(DATEDIFF(hour, a.cmd_date, b.cmd_date)) <= 24 Fonctions utilisateur

4.7.6

On peut aussi dnir ses propres fonctions. Syntaxe : e CREATE FUNCTION ... (...) RETURNS ... AS BEGIN ... RETURN ... END (son nom) (ses param`tres) e (le type de la valeur de retour)

(la valeur de retour)

La rdaction de ces fonctions est la mme que celle des procdures stockes (cf. 9 page 44) : e e e e
1 2 3 4 5 6 7 8 9 10

CREATE FUNCTION EcartEnHeure ( @date1 DATETIME, @date2 DATETIME ) RETURNS INT AS BEGIN RETURN ABS(DATEDIFF(hour, @date1, @date2)) END

5 MODIFIER LES DONNEES Puis on peut lutiliser dans une requte : e


1 2 3 4 5 6

28

SELECT DISTINCT a.cmd_clt, b.cmd_clt FROM commandes AS a JOIN commandes AS b ON a.cmd_clt <> b.cmd_clt WHERE dbo.EcartEnHeure(a.cmd_date, b.cmd_date) <= 24 /* dans le cas dune fonction utilisateur il ne faut pas oublier le proprietaire */

Remarques : on peut mettre jusqu` 1024 param`tres ; a e on dispose de ALTER FUNCTION et de DROP FUNCTION.

4.8

Conclusion

On aboutit nalement ` la stratgie suivante pour laborer une requte de slection : a e e e e 1. dcomposer au maximum en plusieurs slection que lon pourra runir avec UNION ; e e e 2. dcomposer chaque slection complexe en requte et sous-requtes simples ; e e e e 3. et pour chaque requte et chaque sous-requte : e e (a) dterminer les tables en jeu pour remplir la clause FROM et les JOIN ncessaires ; e e (b) dterminer les colonnes ` acher pour remplir la clause SELECT ; e a (c) dterminer les conditions de slection pour remplir la clause WHERE ; e e (d) ajouter les ventuels ORDER BY, DISTINCT et TOP en dernier. e

Modier les donnes e

Certes, avant de slectionner les donnes il faut pouvoir en ajouter dans une base a priori vide. Mais e e avant dapprendre ` modier les donnes en SQL il faut savoir les slectionner. Cest pourquoi nous a e e nabordons que maintenant les requtes dinsertion, de suppression et de mise-`-jour. e a Il est sous-entendu ici que lon a les droits de modication ncessaires sur les tables concernes. Par e e ailleurs, il est conseill dinclure toutes les oprations de modications des donnes dans une transaction, e e e non seulement parce que ces oprations peuvent chouer partiellement, mais aussi an quelles gurent e e au journal.

5.1

Insertion

En SQL on ne peut insrer des lignes que dans une table ` la fois. On peut ajouter : e a des donnes compl`tes (on prcise alors toutes les colonnes) e e e Exemple :
1 2 3 4

BEGIN TRAN INSERT clients -- LA table VALUES (16, Razibus, 3000000) -- toutes les colonnes et dans lordre COMMIT TRAN

Remarque : on ne peut mettre quun VALUES par INSERT, mais plusieurs INSERT par transaction

5 MODIFIER LES DONNEES des donnes partielles (on ne prcise que certaines colonnes) e e Exemple :
1 2 3 4

29

BEGIN TRAN INSERT clients(clt_nom, clt_num) -- lordre na pas dimportance VALUES (Fricotin, 18) -- tant quil est le meme ici COMMIT TRAN

Remarques : il est obligatoire dinsrer des valeurs e compatibles avec le type de la colonne dans toutes les colonnes dclares NOT NULL et qui nont pas de valeur par dfaut e e e des donnes issues dune slection (on introduit plusieurs lignes ` la fois) e e a Exemple : supposons que lon dispose dune table clients importants qui nai que la colonne clt num
1 2 3 4 5 6

BEGIN TRAN INSERT clients_importants(clt_num) SELECT TOP 100 clt_num FROM clients ORDER BY clt_ca DESC COMMIT TRAN

dans une table temporaire (aucune cl primaire ni trang`re, donc aucune relation avec le schma e e e e relationnel) Exemple : si la table clients importants nexiste pas encore
1 2 3 4

SELECT TOP 100 clt_num INTO clients_importants FROM clients ORDER BY clt_ca DESC

Remarques : la table temporaire contient alors les mmes colonnes que le rsultat de la requte SELECT ; e e e on ne peut pas utiliser SELECT ... INTO dans une transaction ; ne pas oublier le DROP TABLE une fois quon a plus besoin de la table temporaire.

5.2

Suppression

` A nouveau, on ne peut supprimer des lignes que dans une table ` la fois. La syntaxe pour eectuer a une requte de suppression est : e DELETE table FROM tables WHERE conditions (la table dans laquelle on supprime) (les tables utilises dans la clause WHERE) e (les lignes ` supprimer) a

5 MODIFIER LES DONNEES Exemple : supprimer les petits clients


1 2 3 4 5

30

BEGIN TRAN DELETE clients FROM clients WHERE clt_ca < 1000 COMMIT TRAN

Autre exemple : supprimer tous les clients (vider la table, et non pas, supprimer la table)
1 2 3

BEGIN TRAN DELETE clients COMMIT TRAN

Remarques : il est tr`s dangereux doublier la clause WHERE dans un DELETE ; e ` cause de la cl trang`re dans la table commandes, on ne peut pas supprimer les clients qui ont a ee e des commandes.

5.3

Mise-`-jour a

Encore une fois, on ne peut changer les lignes que dune table ` la fois. La syntaxe pour eectuer une a requte de mise-`-jour est : e a UPDATE table SET colonne1 = ..., colonne2 = ... FROM tables WHERE conditions (la table dans laquelle met ` jour) a (les colonnes que lon met ` jour) a (les tables de la clause WHERE) (les lignes ` mettre ` jour) a a

Exemple : pour convertir tous les prix en euros


1 2 3 4

BEGIN TRAN UPDATE articles SET art_prix = art_prix / 6.55957 COMMIT TRAN

Remarques : on ne peut pas mettre ` jour une colonne IDENTITY ; a comme une division est moins coteuse quune multiplication, il est prfrable dinverser une bonne u ee fois pour toute le taux de conversion et de ne plus eectuer que des multiplications :
1 2 3 4 5 6

DECLARE @taux REAL SET @taux = 1.0 / 6.55957 BEGIN TRAN UPDATE articles SET art_prix = art_prix * taux COMMIT TRAN

6 CONTRAINTES

31

il faut se mer des mises-`-jour corrles, puisque la requte suivante ne fait pas se que lon pense : e a ee e
1 2 3 4 5 6

BEGIN TRAN UPDATE articles SET art_prix = art_prix * taux, art_prixTTC = art_prix * 1.196 /* malheureusement le art_prix utilise pour art_prixTTC nest pas celui qui vient detre mis-a-jour */ COMMIT TRAN

il faut la remplacer par :


1 2 3 4 5 6 7

BEGIN TRAN UPDATE articles SET art_prix = art_prix * taux UPDATE articles SET art_prixTTC = art_prix * 1.196 COMMIT TRAN

Contraintes

Les contraintes permettent de scuriser les donnes dune table. On en conna dj` : les cls primaire e e t e a e et trang`re, les valeurs par dfaut. Lobjet de cette section est dapprendre ` crer ces contraintes. e e e a e

6.1

Syntaxe

Pour dnir une contrainte sur une colonne dune table, on dispose de deux syntaxe : e au moment de la cration de la table e Exemple : positionnons-nous dans le cas dune mutuelle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

CREATE TABLE assures ( num INT PRIMARY KEY IDENTITY(1,1), numSS CHAR(15), titre VARCHAR(5), age INT, date_entree DATETIME, num_rue INT, rue VARCHAR(255), -- 256 est un multiple de 8 code_postal CHAR(5), ville VARCHAR(63) CONSTRAINT cst_num_rue -- nom de la contrainte CHECK(num_rue > 0) -- corps de la contrainte CONSTRAINT cst_code_postal CHECK(code_postal LIKE ([0-9][0-9][0-9][0-9][0-9])) )

6 CONTRAINTES apr`s la cration de la table : e e


1 2 3

32

ALTER TABLE assures ADD CONSTRAINT cst_numSS CHECK (numSS LIKE ([0-2][0-9]...))

Remarques : pour pouvoir ajouter une contrainte, les donnes existantes doivent vrier cette contrainte ; e e sur insertion ou mise-`-jour, les nouvelles donnes sont contrles (si une donne ne vrie pas une a e oe e e contrainte alors toute la transaction est annule) ; e on peut manipuler plusieurs contraintes dans un seul ALTER TABLE, il sut de les sparer par des e virgules ; on peut imposer plusieurs contraintes sur une mme colonne. e Pour retirer une contrainte :
1 2

ALTER TABLE assures DROP CONSTRAINT cst_code_postal

Pour modier une contrainte, il faut dabord la supprimer puis la crer de nouveau. e

6.2
6.2.1

CHECK
Syntaxe

La syntaxe dune contrainte de type vrication est : CHECK(clause WHERE sans le WHERE). e Exemples : on peut donc mettre plusieurs conditions
1 2 3

ALTER TABLE assures ADD CONSTRAINT cst_age CHECK(age >= 0 AND age < 150)

prciser une liste de choix desquels on ne peut pas sortir e


1 2 3

ALTER TABLE assures ADD CONSTRAINT cst_titre CHECK(titre IN (M., Mme, Melle, Dr., Pr., SAS, Me))

utiliser plusieurs colonnes


1 2 3

ALTER TABLE articles ADD CONSTRAINT cst_TTCsupHT CHECK(art_prixTTC > art_prix)

Remarques : par contre la clause CHECK ne peut pas contenir de sous-requte ; e la clause CHECK ne peut pas porter sur une colonne UNIQUEIDENTIFIER ou utilisant IDENTITY (cf. 3.3 page 17).

6 CONTRAINTES 6.2.2 R`gle e

33

Si plusieurs colonnes (ventuellement dans des tables direntes) utilisent la mme contrainte CHECK, e e e alors il est intressant de dnir une r`gle commune ` toutes ces colonnes. e e e a Exemple :
1 2

CREATE RULE AgeRule AS @age >= 0 AND @age < 150

Remarques : @age est une variable locale, son nom na pas dimportance ; apr`s AS on peut mettre la mme chose quapr`s CHECK. e e e On peut ensuite attacher une r`gle ` une colonne en utilisant la procdure stocke sp bindrule. e a e e Exemple :
1

sp_bindrule AgeRule, [assures.age]

Remarques : une colonne peut cumuler une r`gle et une contrainte CHECK ; e mais cest la contrainte CHECK qui est vrie en premier ; e e on dispose de la procdure sp unbindrule [assures.age], AgeRule et de DROP RULE AgeRule 8 . e Il est galement possible dattacher une r`gle ` un type de donnes, ce qui permet dviter de les e e a e e attacher ` toutes les colonnes de ce type. a Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

sp_addtype CodePostalType, CHAR(5) CREATE RULE CodePostalRule AS @cp LIKE([0-9][0-9][0-9][0-9][0-9]) sp_bindrule CodePostalRule, CodePostalType -- puis CREATE TABLE assures ( ... code_postal CodePostalType, ... )

8. qui ne fonctionne que si tous les sp unbindrule ont t eectus e e e

6 CONTRAINTES

34

6.3

Valeur par dfaut e

Pour prciser une valeur par dfaut on peut le faire simplement ` la cration de la table (cf. 3.2 page e e a e 16), ou les ajouter a posteriori en tant que contrainte. Exemple :
1 2 3

ALTER TABLE assures ADD CONSTRAINT def_date_entree DEFAULT GETDATE() FOR date_entree

On peut mettre apr`s DEFAULT : e une fonction niladique (i.e. sans argument) ; une constante ; ou NULL. On peut aussi crer des valeurs par dfaut partageables et lattacher ` une colonne ou ` un type de e e a a donnes. Exemple : e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

CREATE DEFAULT Hier AS DATEADD(day, -1, GETDATE()) sp_bindefault Hier, [assures.date_entree] -- ou sp_addtype DateEntree, DATETIME sp_bindefault Hier, DateEntree -- puis ALTER TABLE assures ALTER COLUMN date_entree DateEntree

Remarques : si la contrainte DEFAULT est dnie, alors une ventuelle valeur par dfaut partageable serait ignore ; e e e e on dispose de la procdure sp unbindefault et de DROP DEFAULT 9 . e Astuce : pour utiliser les valeurs par dfaut, les r`gles et les type de donnes personnels dans plusieurs e e e bases de donnes, il sut de les crer dans la base model car alors toute nouvelle base de donnes en e e e hritera. e

9. qui ne fonctionne que si tous les sp unbindefault ont t eectus e e e

6 CONTRAINTES

35

6.4

Cl primaire e

Les cls primaires sont aussi des contraintes et pour les ajouter a posteriori on peut utiliser la syntaxe : e CONSTRAINT nom de la contrainte PRIMARY KEY (colonne(s) concerne(s) par la cl primaire) e e Cette syntaxe est la indispensable pour dclarer une cl primaire composite (cest-`-dire portant sur e e a 10 ). plusieurs colonnes Exemple : dans une base de donne biblioth`que, un exemplaire dun livre est identi par son numro e e e e ISBN et son numro de copie. e
1 2 3

ALTER TABLE ouvrages ADD CONSTRAINT pk_ouvrages PRIMARY KEY (isbn, no_copie)

6.5

UNIQUE

On peut imposer ` une colonne (ou plusieurs colonnes) de prendre des valeurs uniques (cest-`-dire a a sans doublons) mme si ce nest pas une cl primaire. e e Exemples :
1 2 3

ALTER TABLE assures ADD CONSTRAINT un_numSS UNIQUE (numSS)

1 2 3

ALTER TABLE clients ADD CONSTRAINT un_nom_prenom UNIQUE (clt_nom, clt_prenom)

Remarque : la valeur NULL nest autorise quune seule fois dans une colonne UNIQUE. e

6.6

Cl trang`re ee e

Les cls trang`res sont aussi des contraintes, et ` nouveau, si on a oubli de les prciser d`s la e e e a e e e cration de la table, on peut les ajouter apr`s. Attention : on ne peut faire de cl trang`re que vers une e e ee e cl primaire ou vers une colonne UNIQUE. e Exemple : avec la table feuilles soin qui poss`de la colonne num assure qui doit prendre ses valeurs e dans la colonne num de la table assures
1 2 3

ALTER TABLE feuille_soin ADD CONSTRAINT fk_num_assure FOREIGN KEY (num_assure) REFERENCES Assures(num)

Cette syntaxe est ncessaire si la cl trang`re est composite. e ee e


10. il est conseill dviter les cls primaires composites ` chaque fois que cela est possible e e e a

6 CONTRAINTES

36

Exemple : dans une base biblioth`que un emprunt concerne un exemplaire dun livre, les numros e e ISBN et de copie doivent donc tre les mmes. e e
1 2 3

ALTER TABLE emprunts ADD CONSTRAINT fk_emprunts FOREIGN KEY (isbn, no_copie) REFERENCES ouvrages(isbn, no_copie)

6.7

Conclusion

On vient de rencontrer quelques outils qui nous permette de rendre les donnes plus cohrentes : e e les colonnes nacceptent quun ensemble de valeurs correctes, cest lintgrit de domaine (on spcie e e e pour a le type de donnes, les contraintes CHECK, les valeurs par dfaut et aussi NOT NULL) ; c e e les lignes doivent tre identiables de mani`re unique, cest lintgrit des entits (on utilise pour e e e e e c a les cls primaires et les contraintes UNIQUE) ; e on doit maintenir de bonnes relations entre les tables, cest lintgrit rfrentielle (cest tout le e e ee travail des cls trang`res). e e e

Fig. 6 Dirents types dintgrit e e e Exemples dintgrit rfrentielle : e e ee il est impossible de crer des factures qui ne sont relies ` aucun client ; e e a et ` linverse, il est impossible de supprimer un client ` qui il reste des factures (impayes). a a e Il reste malgr tout un quatri`me type dintgrit qui regroupe toutes les r`gles (parfois complexes) e e e e e propre ` la politique interne de lentreprise, cest lintgrit dentreprise. a e e Exemples de r`gle spciques ` une entreprise : e e a un client ne peut pas commander lorsquil doit dj` trop dargent ; ea un client qui commande rguli`rement bncie de rductions. e e e e e Pour implmenter ce genre de r`gle, on a besoin dune programmation plus labore que les contraintes. e e e e Cest lobjet de la section suivante.

7 PROGRAMMATION EVENEMENTIELLE

37

Programmation vnementielle e e

La premi`re chose ` savoir est que pour chaque table il existe en SQL trois vnements (ni plus ni e a e e moins). Ils sont soulevs respectivement par les instructions INSERT, DELETE et UPDATE (cf. 5 page 28). e Lobjet de cette section est dapprendre ` les utiliser. a

7.1

Mise-`-jour et suppression en cascade a

Exemple : si on veut dsormais que la suppression dun client entra automatiquement celle de ses e ne commandes, 11 il sut pour cela de prciser une option lors de la dnition de la contrainte cl trang`re e e ee e dans la table commandes.
1 2 3 4 5

ALTER TABLE commandes ADD CONSTRAINT fk_cmd_clt FOREIGN KEY (cmd_clt) REFERENCES clients ON DELETE CASCADE ON UPDATE CASCADE

Remarques : de cette faon, la relation entre les deux tables devient non bloquante en suppression et en mise-`c a jour ; il ny a pas ON INSERT CASCADE. Exercice : pourquoi ny a-t-il pas dinsertion en cascade ?

7.2

Dclencheurs AFTER e

Un dclencheur est une procdure attache ` un vnement, en anglais on dit TRIGGER. Ces procdures e e e a e e e se dclenchent automatiquement apr`s que lvnement concern a t soulev (donc bien souvent ` linsu e e e e e ee e a de lutilisateur) et ne peuvent tre appeles directement 12 . e e Exemple : la table articles contient une colonne qui prcise le nombre darticles en commande ; pour e mettre ` jour cette colonne lors dinsertion de nouvelles commandes on cre un dclencheur. a e e
1 2 3 4 5 6 7 8

CREATE TRIGGER commandes_insert -- le nom du declencheur ON commandes AFTER INSERT -- la table et levenement concernes AS -- la programmation du declencheur UPDATE articles SET nb_commande = nb_commande + cmd_qte FROM articles AS a JOIN inserted AS b ON (a.art_num = b.cmd_art) -- (si plusieurs instructions : utiliser un bloc BEGIN ... END)

Quelques mots sur les tables inserted et deleted : il sagit de tables temporaires cres et disponibles pendant lvnement ; ee e e leurs colonnes sont identiques ` celles de la table sur laquelle lvnement a t lev ; a e e ee e le dclencheur AFTER INSERT peut utiliser la table inserted qui contient toutes les lignes insres ; e ee le dclencheur AFTER DELETE peut utiliser la table deleted qui contient toutes les lignes supe primes ; e
11. ce nest pas tr`s conseill e e 12. en consquence de quoi la seule faon de les tester est de soulever lvnement par une requte approprie e c e e e e

7 PROGRAMMATION EVENEMENTIELLE

38

le dclencheur AFTER UPDATE peut utiliser les deux tables (ce qui est logique puisquune mise-`-jour e a consiste en une insertion et une suppression). Autre exemple avec cette fois-ci la table deleted :
1 2 3 4 5 6

CREATE TRIGGER commandes_delete ON commandes AFTER DELETE AS UPDATE articles SET nb_commande = nb_commande - cmd_qte FROM articles AS a JOIN deleted AS b ON (a.art_num = b.cmd_art)

Troisi`me exemple, sur mise-`-jour cette fois-ci : pour tre tout ` fait complet, il faut galement un e a e a e dclencheur qui ragisse si la colonne cmd qte est touche par une mise-`-jour. e e e a
1 2 3 4 5 6 7 8 9 10

CREATE TRIGGER commandes_update ON commandes AFTER UPDATE AS IF UPDATE(cmd_qte) -- si la colonne cmd_qte est touchee par la modification BEGIN UPDATE articles SET nb_commande = nb_commande - b.cmd_qte + c.cmd_qte FROM articles AS a JOIN deleted AS b ON (a.art_num = b.cmd_art) JOIN inserted AS c ON (a.art_num = c.cmd_art) END

Dernier exemple : on veut empcher la modication du numro ISBN dun ouvrage. e e


1 2 3 4 5 6 7 8 9 10

CREATE TRIGGER ouvrages_update ON ouvrages AFTER UPDATE AS IF UPDATE(isbn) BEGIN RAISERROR (Le numero ISBN ne peut pas etre modifie, 0, 1) -- 0 indique la gravite de lerreur et 1 letat (a oublier) ROLLBACK TRANSACTION -- on annulle la transaction qui a declenche levenement END

Remarques : les dclencheurs sont des transactions ; e il faut que lutilisateur qui tente dinsrer un emprunt, dispose des droits sur toutes les tables e impliques dans la programmation du dclencheur ; e e comme on vient de le voir, les dclencheurs sont notamment utiles pour : e implmenter des r`gles trop complexes pour les contraintes (ne serait que parce quune contrainte e e ne peut porter que sur une table) ; acher un message derreur personnalis et annuler la transaction appelante. e comme leur nom lindique, un dclencheur AFTER se produisent apr`s un vnement ; e e e e du coup, les contraintes sont vries avant le lancement des dclencheurs AFTER, ce qui a pour une e e e consquence fcheuse : les mises-`-jour en cascade ventuellement souleves par ces dclencheurs e a a e e e ne se font quapr`s vrication des contraintes ; e e avec SQL Server il ny a pas de dclencheurs BEFORE ; e

7 PROGRAMMATION EVENEMENTIELLE

39

par contre les dclencheurs INSTEAD OF (au lieu de) existent ; cest lobjet du paragraphe suivant. e Exercice : en quoi le cinqui`me point est-il fcheux ? e a

7.3

Dclencheurs INSTEAD OF e

On les utilise si on veut que leurs instructions se lancent ` la place de linsertion, de la suppression a ou de la mise-`-jour qui a soulev lvnement. Avec un dclencheur AFTER la modication des donnes a a e e e e e lieu puis le dclencheur est excut, tandis quavec un dclencheur INSTEAD OF le corps du dclencheur e e e e e se substitue ` la modication des donnes. a e Dun point de vue syntaxique, il sut de remplacer AFTER par INSTEAD OF. Exemple : on historise automatiquement les commandes insres dans une table historique commmandes. ee
1 2 3 4 5 6 7 8 9 10 11

CREATE TRIGGER commandes_insert2 ON commandes INSTEAD OF INSERT AS BEGIN INSERT commandes SELECT * FROM inserted -- cette ligne fais linsertion prevue INSERT historique_commmandes SELECT * FROM inserted END -- on aurait donc pu se contenter dun declencher AFTER -- avec seulement le 2e INSERT

Remarques : les tables provisoires inserted et deleted existent et sont remplies pour les dclencheurs INSTEAD e OF (heureusement) ; les dclencheurs INSTEAD OF ne se dclenchent pas eux-mmes (heureusement) ; e e e il ne peut y avoir quun dclencheur INSTEAD OF par vnement et par table (alors quil peut y e e e avoir plusieurs dclencheurs AFTER) ; e sil existe une cl trang`re avec une action en cascade (DELETE ou UPDATE) dans la table, alors on ee e ne peut pas crire le dclencheur INSTEAD OF correspondant, et inversement. e e Exercice : pourquoi ces trois derni`res r`gles existent-elles ? e e

7.4

Complments e

Toutes les instructions SQL ne sont pas autorises dans le code dun dclencheur ; on se limitera e e gnralement ` : INSERT, DELETE, UPDATE, RAISERROR et ROLLBACK TRANSACTION. e e a Pour modier un dclencheur on a : e
1 2

ALTER TRIGGER commandes_insert ... -- son nouveau code

Pour supprimer un dclencheur on a : e


1

DROP TRIGGER commandes_insert

7 PROGRAMMATION EVENEMENTIELLE Pour suspendre provisoirement un dclencheur (sans le supprimer) on a : e


1 2 3 4 5 6

40

ALTER TABLE commandes DISABLE TRIGGER commandes_insert ... -- dautres instruction puis ALTER TABLE commandes ENABLE TRIGGER commandes_insert

Remarque : on peut remplacer commandes insert par ALL ou commandes insert, commandes insert2. On peut crer un dclencheur pour deux ou trois vnements ` la fois. Exemple : e e e e a
1 2 3 4

CREATE TRIGGER ... ON ... AFTER INSERT, UPDATE AS ...

7.5

Conclusion

Faisons une synth`se sur le droulement dune transaction. Pour chaque instruction de la transaction e e on a : vrication des autorisations de lutilisateur e puis transfert des donnes ncessaires du disque dans la mmoire e e e puis remplissage des tables inserted et/ou deleted puis modications (prvues ou INSTEAD OF et/ou en cascade) des donnes dans la mmoire e e e puis vrication des contraintes e puis dclencheurs AFTER e (*)

(*) (*) (*)

(*) signie qu` ce stade la transaction peut-tre annule. a e e Lcriture des donnes sur le disque nintervient qu` la n de la transaction lorsque toutes ses inse e a tructions ont t valides. ee e

8 VUES

41

Vues

Une vue est une requte SELECT ` laquelle on donne un nom et dont on peut se servir comme sil e a sagissait dune table. Ca nest pas si surprenant puisque lon peut voir une requte SELECT comme une e fonction (au sens informatique du terme) qui retourne une table. Contrairement ` ce que lon pourrait a croire, les vues ne conservent pas une copie spare des donnes. e e e

8.1

Syntaxe

Exemple de dclaration dune vue : on dsire ne garder quune sous table de la table commandes tout e e en achant le nom du client et de larticle au lieu de leur numro. e
1 2 3 4 5 6 7

CREATE VIEW VueCommandes -- nom de la vue ([Nom du client], [Article command]) -- nom des colonnes (plus parlants) e AS SELECT b.clt_nom, c.art_nom FROM commandes AS a JOIN clients AS b ON a.cmd_clt = b.clt_num JOIN articles AS c ON a.cmd_art = c.art_num

Puis on peut lutiliser comme une table :


1 2 3

SELECT [Nom du client] FROM VueCommandes WHERE [Article command] = pinceau e

Remarques sur la cration des vues : e la requte SELECT de la vue ne doit ni contenir de clause ORDER BY ni faire rfrence ` un table e ee a temporaire (cf. 5.1 page 29) ni utiliser de sous-requte ; e il est conseill de tester au pralable la requte SELECT seule ; e e e on peut crer une vue ` partir dautres vues, mais pour des questions de performances il vaut mieux e a viter et en revenir aux tables sous-jacentes. e Pour modier une vue :
1 2 3 4

ALTER VIEW VueCommandes ( ... ) -- les colonnes AS ... -- nouvelle requete SELECT

Pour supprimer une vue :


1

DROP VIEW VueCommandes

8.2

Intrts e e

Dsormais les utilisateurs naccderont aux donnes quau travers des vues, seuls les dveloppeurs e e e e manipuleront directement les tables. Cest particuli`rement avantageux car : e on peut traduire les intituls des colonnes en direntes langues et de mani`re plus explicite que la e e e nomenclature adopte pour la base ; e cela simplie les requtes que les dveloppeurs vont crire pour les utilisateurs (le travail de joine e e ture est dj` fait dans la vue, les noms sont plus parlants et les colonnes utiles uniquement aux ea

8 VUES

42

dveloppeurs (clt num et art num par exemple) sont caches) ; e e cela simplie la scurisation des donnes (les donnes sensibles responsables de lintgrit de la e e e e e base sont masques et il sura de grer les autorisations dacc`s aux vues et non pas aux tables) ; e e e et surtout on peut changer la structure de la base (les tables) sans avoir ` modier la programmaa tion pour les utilisateurs (on changera ventuellement la programmation des vues mais pas celle e des requtes qui utilisent ces vues). e Illustration du dernier point : admettons que la table commandes soit scinde en deux tables commandes2001 e et commandes2002. Seules les requtes qui utilisent la table commandes doivent tre re-programmes. e e e
1 2 3 4 5 6 7 8 9 10 11 12

ALTER VIEW VueCommandes ([Nom du client], [Article command]) e AS SELECT b.clt_nom, c.art_nom FROM commandes2001 AS a JOIN clients AS b ON a.cmd_clt = b.clt_num JOIN article AS c ON a.cmd_art = c.art_num UNION SELECT b.clt_nom, c.art_nom FROM commandes2002 AS a JOIN clients AS b ON a.cmd_clt = b.clt_num JOIN article AS c ON a.cmd_art = c.art_num

Toutes les requtes qui utilisent les vues restent inchanges. e e


1 2 3

SELECT [Nom du client] FROM VueCommandes WHERE [Articles command] = pinceau e

Lorsquune base de donnes est dploye ` lchelle dune entreprise, le mcanisme des vues ore une e e e a e e interface entre limplmentation (les tables) et les utilisateurs qui permet au code SQL une plus grande e facilit de maintenance e

8.3

Modication de donnes e

Comme on vient de voir, la consultation des donnes ` travers une vue ne pose pas de probl`me. Le e a e probl`me essentiel avec les vues est la grande dicult de modier les donnes. En eet, plusieurs cas e e e pathologiques peuvent en eet se prsenter : e il se peut quune colonne dclare NOT NULL ne soit pas visible ` travers la vue e e a exemple : comment ajouter une commande avec la vue VueCommandes alors que : la colonne cmd num est cl primaire donc NOT NULL e les colonnes cmd clt et cmd art sont cls trang`res et NOT NULL e e e et ne gurent pas dans la vue ? et comment ajouter des donnes dans une vue mutli-tables ? e exemple : on voudrait par exemple ajouter automatiquement un nouveau client ` sa premi`re coma e mande.

8 VUES Malheureusement, la requte suivante nest pas autorise : e e


1 2 3 4

43

BEGIN TRAN INSERT VueCommandes VALUES(Fricotin, Stylo) COMMIT TRAN

La solution consiste ` employer un dclencheur INSTEAD OF. Exemple : a e


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

CREATE TRIGGER VueCommandes_insert ON VueCommandes INSTEAD OF INSERT AS BEGIN -- jinsere dabord les nouveaux clients dans la table clients INSERT clients(clt_nom) SELECT [Nom du client] FROM inserted WHERE [Nom du client] NOT IN (SELECT clt_nom FROM clients) -- jinsere ensuite les commandes elles-memes -- avec tous les renseignements necessaires INSERT commandes(cmd_date, cmd_clt, cmd_art) SELECT GETDATE(), b.clt_num, c.art_num FROM inserted AS a JOIN clients AS b ON a.[Nom du client] = b.clt_nom JOIN articles AS c ON a.[Article command] = c.art_nom e END

Avec ce dclencheur, la requte dinsertion prcdente fonctionne. e e e e Exercice : pourquoi na-t-on pas eu besoin de prciser ni clt num dans le premier INSERT ni cmd num e dans le deuxi`me ? e Remarques : GETDATE() renvoie la date daujourdhui ; on a fortement suppos dans ce dclencheur que les clients portaient un nom unique et que les e e articles aussi, cest pourquoi il vaut mieux respecter les conseils suivant lors de la cration dune e vue : sarranger pour ne jamais avoir de doublons dans la vue (a peut vouloir dire par exemple ajouter c une contrainte UNIQUE ` la colonne clt nom dans la table client ou inclure la cl primaire) ; a e toutes les colonnes NOT NULL que lon carte doivent pouvoir recevoir une valeur calcule (cest e e le cas de cmd date, cmd clt et cmd art) ou une valeur par dfaut (cest le cas de cmd num) 13 ; e le seul dclencheur disponible pour les vues est INSTEAD OF (et pas AFTER contrairement aux tables) ; e quand on ins`re dans une vue avec SQL Server, il faut malheureusement remplir toutes les colonnes e et on ne peut pas faire appel ` la valeur NULL. a

13. bref, cest dicile de cacher les cls primaires, les cls trang`res et plus gnralement toutes les colonnes NOT NULL car e e e e e e une vue dnormalise les donnes, ce qui reprsente un danger e e e

9 PROCEDURES STOCKEES Illustration de ce dernier point : on modie la prcdente vue, en lui ajoutant deux colonnes e e
1 2 3 4 5 6 7

44

ALTER VIEW VueCommandes ([Numro de commande], [Nom du client], [Article command], Date) e e AS SELECT a.cmd_num, b.clt_nom, c.art_nom, a.cmd_date FROM commandes AS a JOIN clients AS b ON a.cmd_clt = b.clt_num JOIN articles AS c ON a.cmd_art = c.art_num

on veut insrer dans cette vue (en utilisant le mme dclencheur) mais en laissant SQL Server calculer e e e le numro de commande et la date de commande : e
1 2 3 4 5

BEGIN TRAN INSERT VueCommandes VALUES(, Fricotin, Stylo, ) -- on est oblige demployer des valeurs bidons COMMIT TRAN

Procdures stockes e e

En pratique, les programmes qui utilisent les donnes dune base ne font pas directement appel aux e transactions, mais plutt ` des procdures auxquelles ils peuvent passer des arguments. o a e

9.1

Syntaxe

Le langage Transact-SQL permet de programmer ces procdures selon la syntaxe suivante : e CREATE PROC ... (...) AS DECLARE ... BEGIN ... END le nom de la procdure e les param`tres dentre et de sortie spars par des virgules e e e e les variables locales les instructions, les transactions

Remarques : on peut utiliser jusqu` 1024 param`tres ; a e la syntaxe dune procdure stocke est limite ` 128 Mo. e e e a Exemple : une requte paramtre e e e
1 2 3 4 5 6

CREATE PROC InfoDuClient (@numero INT) AS SELECT * FROM clients WHERE clt_num = @numero

-- ne pas oublier de preciser le type

9 PROCEDURES STOCKEES Autre exemple avec un param`tre de sortie : e


1 2 3 4 5

45

CREATE PROC NbClients (@resultat INT OUTPUT) AS SET @resultat = (SELECT COUNT(*) FROM clients) -- il sagit-la dune sous-requete

Dernier exemple avec un param`tre dentre muni dune valeur par dfaut : e e e
1 2 3 4 5 6 7

CREATE PROC FiltrerClients (@filtre VARCHAR(255) = %) AS SELECT * FROM clients WHERE clt_nom LIKE @filtre -- en labsence de parametre tous les clients seront affiches

Pour modier une procdure stocke : e e


1 2 3 4

ALTER PROC InfoDuClient (...) -- les parametres AS ... -- nouveau corps

Pour supprimer une procdure stocke : e e


1

DROP PROCEDURE InfoDuClient

9.2

Utilisation

On peut ensuite utiliser ces procdures stockes dans du code SQL avec linstruction EXEC. e e Exemple : pour avoir les informations relatives au client 12
1 2

EXEC InfoDuClient 12 -- 12 est la valeur du param`tre e

Remarques : on peut aussi utiliser des variables comme valeurs de param`tre (et pas seulement des constantes e comme dans lexemple) ; si la procdure a besoin dune liste de param`tres, il faut les sparer par des virgules ; e e e sil y a un param`tre de sortie, il faut en stocker la valeur de retour dans une variable. e Exemple :
1 2 3 4

DECLARE @NombreTotalDeClients INT EXEC NbClients @NombreTotalDeClients OUTPUT -- et apres, on peut utiliser le contenu de la variable @NombreTotalDeClients

10

VERROUS

46

9.3

Cryptage

Lorsque de la cration ou de la modication dun dclencheur, une vue, une fonction ou une procdure e e e stocke (bref, tout ce qui contient le code SQL destin aux utilisateurs), on peut prciser la clause WITH e e e ENCRYPTION qui permet de crypter le code de ces objets. Cela permet de protger la proprit intellece ee tuelle des dveloppeurs sous SQL Server. e Exemples :
1 2 3 4

CREATE VIEW VueCommandes(Client, Article) WITH ENCRYPTION AS ...

1 2 3 4 5

ALTER PROC InfoDuClient (@numero INT) WITH ENCRYPTION AS ...

10

Verrous

Comme les transactions sont traites en ligne sur un serveur multi-utilisateur, les acc`s concurrentiels e e aux donnes doivent tre grs. Pour empcher les autres utilisateurs de modier ou de lire des donnes e e ee e e faisant lobjet dune transaction qui nest pas encore termine, il faut verrouiller ces donnes. e e Rappelons que lors dune transaction : les donnes ncessaires sont lues sur le disque puis charges en mmoire centrale ; e e e e les oprations ont lieu dans la mmoire centrale ; e e

Fig. 7 Traitement des donnes dune transaction en mmoire e e une fois toutes les instructions valides, les nouvelles donnes sont crites sur le disque. e e e Si les donnes sur le disque sont modies pendant la transaction, celle-ci travaille avec des donnes e e e fausses. On a alors un probl`me de cohrence. e e

10.1

Isolation

Par dfaut, SQL Server ne garantit pas que les donnes utilises seront les mmes pendant toute la e e e e transaction. Pour lobliger ` rendre maximal le verrouillage des donnes il faut lui imposer de mettre en a e srie les transactions concurrentes. Pour cela on dipose de linstruction : e
1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

10

VERROUS

47

Le probl`me majeur de la mise en srie des transactions est quune transaction interminable bloque e e toutes les suivantes. Il est possible de prciser un dlai dattente maximal pour cause de verrouillage (par e e dfaut il ny en a pas). Pour cela on utilise linstruction : e
1 2 3

SET LOCK_TIMEOUT 180000 -- definit un delai dexpiration de 3 minutes (en millisecondes) -- au dela de ce delai, la transaction en attente est annulee

Remarques : ces instructions sont attaches ` la connexion qui les excute ; e a e ces instructions restent valables pour toutes les transactions qui suivent, jusqu` la dconnexion ou a e jusqu` nouvel ordre. a Le niveau disolation par dfaut est READ COMMITTED, il garantit seulement que les donnes sont e e cohrentes au moment de leur lecture (et pas pendant le reste de la transaction). Pour y revenir il sut e dcrire : e
1

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

10.2

Verrouillage de niveau table

Dans ce paragraphe on suppose que lon se trouve au niveau disolation READ COMMITTED. ` A chaque transaction on peut indiquer le type de verrouillage pour chaque table utilise par les inse tructions SELECT, INSERT, DELETE et UPDATE. Par dfaut, SQL Server verrouille les tables concernes. e e On peut obliger SQL Server ` laisser le verrou jusqu` la n de la transaction : a a
1 2 3 4

BEGIN TRAN UPDATE clients WITH(HOLDLOCK) SET ... COMMIT TRAN

On peut se contenter de verrouiller seulement les lignes concernes par la transaction : e


1 2 3 4

BEGIN TRAN UPDATE clients WITH(ROWLOCK) SET ... COMMIT TRAN

Lorsquune premi`re requte utilise WITH(ROWLOCK), on peut indiquer ` une deuxi`me dignorer les e e a e lignes verrouilles (an de ne pas bloquer la transaction) : e
1 2

SELECT AVG(clt_ca) FROM clients WITH(READPAST)

10.3

Conclusion

On veillera ` respecter les consignes suivantes pour les transactions : a elles doivent tre aussi courtes que possible an dviter les les dattente trop longues ; e e il ne faut pas les imbriquer (mme si cest possible, a ne sert ` rien) ; e c a ne surtout pas interagir avec lutilisateur pendant la transaction (mais avant).

11

CONNEXIONS

48

Il est souvent bon de suivre ces quelques conseils concernant les verrous : mettre en srie les transactions de toutes les connexions utilisateurs ; e laisser SQL Server grer la granularit des verrous : le laisser dcider sil faut verrouiller les e e e lignes dune table ou la table enti`re, cest-`-dire nutiliser ni WITH(ROWLOCK) ni WITH(PAGLOCK) ni e a WITH(TABLOCK) (dont on a pas parl ici dailleurs). e

11

Connexions

On a dj` plusieurs fois mentionn la ncessit dattribuer les bons droits aux utilisateurs de notre ea e e e a e base de donnes (cf. 5 page 28). Lobjectif de cette section est dapprendre ` grer ces utilisateurs, leurs e droits et de protger les dveloppeurs. e e

11.1

Cration e

IL existe deux faon dajouter un nouveau compte de connexion : c on peut le crer de toute pi`ce e e
1 2 3 4

sp_addlogin Paul, luaP, Northwind

-- le login -- le mot de passe -- la base par defaut

ou bien hriter dune connexion Windows e


1 2 3 4

sp_grantlogin STID/Henri -- STID etant le nom du domaine sp_defaultdb STID/Henri, Northwind

Il reste ensuite ` lui donner acc`s au serveur : a e


1

sp_grantdbaccess Paul

On dispose videmment des procdures : e e


1 2 3

sp_revokedbaccess Paul sp_droplogin Paul

11

CONNEXIONS

49

11.2

Rle o

Il est possible (et conseill) de regrouper les utilisateurs selon les autorisations quils ont, cest-`-dire e a de dnir des rles. e o 11.2.1 Sur le serveur

Il existe 8 rles sur serveur dans SQL Server dont : o nom du rle o sysadmin securityadmin dbcreator droits de ses membres tous les droits sur le syst`me et toutes les base e gestion des acc`s ` SQL Server e a cration de bases de donnes e e

Pour ajouter et radier un utilisateur ` lun de ces rles : a o


1 2 3

sp_addsrvrolemember Paul, dbcreator sp_dropsrvrolemember Paul, dbcreator

Un mme utilisateur peut cumuler plusieurs rles. e o 11.2.2 Dans une base de donnes e

Dans chaque base on dispose des rles suivants : o nom du rle o db owner db accessadmin db datareader db datawriter db ddladmin db securityadmin db public droits de ses membres tous les droits sur les objets de la base ajout dutilisateurs et de rles o lire le contenu des tables insertion, suppression et modication sur toutes les tables cration, modication, suppression dobjet e gestion des rles et des autorisations o a e ` dnir

Tous les utilisateurs appartiennent au rle public et peuvent appartenir ` dautres rles. o a o Pour ajouter un rle et un utilisateur ` ce rle : o a o
1 2 3

sp_addrole ServiceInformatique sp_addrolemember ServiceInformatique, Henri

On a aussi :
1 2 3 4

sp_droprolemember ServiceMarketing, Paul sp_droprole ServiceMarketing -- possible uniquement sil ne reste plus aucun membre dans ce role

11

CONNEXIONS

50

11.3

Droits

Dans ce paragraphe, on se place dans une base. 11.3.1 Sur les instructions

Exemple : pour autoriser les utilisateurs Paul et Henri ` crer des tables et des dclencheurs a e e
1 2

GRANT CREATE TABLE, CREATE TRIGGER TO Paul, Henri

Remarque : Paul et Henri doivent dj` possder un compte utilisateur sur SQL Server. ea e Autre exemple : pour empcher Paul de crer des vues e e
1 2

DENY CREATE VIEW TO Paul

Dernier exemple : pour lever les autorisations et les empchements de Paul e


1 2

REVOKE CREATE VIEW, CREATE TABLE TO Paul

Remarques : REVOKE annule le dernier GRANT ou DENY correspondant ; apr`s un REVOKE, SQL Server sen remet aux autorisations par dfaut du rle dont Paul est membre ; e e o on peut utiliser le mot-cl ALL pour dsigner toutes les instructions. e e 11.3.2 Sur les objets

Dans une base de donnes, pour chaque table, chaque colonne et chaque instruction on peut prciser e e les autorisations. Exemple : pour autoriser la slection sur la table clients e
1 2

GRANT SELECT ON clients TO Paul

Autre exemple : pour empcher les autres instructions e


1 2

DENY INSERT, UPDATE, DELETE ON clients TO Paul

Dernier exemple : pour autoriser la modication mais seulement du nom de client


1 2

GRANT UPDATE(clt_nom) ON clients TO Paul

Remarques : en gnral on a pas besoin de descendre jusqu` la colonne, il est prfrable de crer une vue et de e e a ee e donner les droits sur cette vue ;

12

FORMULAIRES

51

(important) il vaut mieux utiliser ALTER ... car les autorisations sur lobjet concern sont conserves, e e contrairement ` DROP ... suivi de CREATE ... a 11.3.3 Cha dautorisation ne

Sont habilits ` dlivrer des autorisations GRANT, DENY et REVOKE : e a e les membres du rle sysadmin dans toutes les bases ; o les membres du rle db owner sur les instructions et le objets de leur base ; o 14 dobjet(s) sur leur(s) objet(s). les propritaires e Pour habiliter un utilisateur ` dlivrer les autorisations dont il bncie, il sut dajouter la clause a e e e WITH GRANT OPTION. Exemple :
1 2 3 4 5 6 7 8

-- avec GRANT SELECT ON clients TO Paul WITH GRANT OPTION -- Paul peut desormais ecrire GRANT SELECT ON clients TO Henri

Conseil : pour viter tout probl`me de rupture de cha dautorisation avec les vues, il faut que le e e ne 15 soit propritaire des vues. dbo e

12

Formulaires

Un formulaire (informatique) est un outil de saisie dinformations (en petites quantits) ` lordinateur. e a Il sagit dune interface entre la base de donnes et les utilisateurs non spcialistes et/ou nayant pas e e dacc`s direct ` la base. e a

12.1

Historique

Lquivalent papier dun formulaire est, par exemple : une che de renseignements ou une facture. Pene dant longtemps, les formulaires informatiques taient en mode texte (cest-`-dire occupant lcran dun e a e terminal nachant que des caract`res). Il en reste encore beaucoup (en partie ` cause de leur robustesse). e a Aujourdhui, les formulaires sont programms en langage objet (Java ou Visual Basic par exemple), e ce qui leur permet dorir une interface graphique (compose de boutons, fentres et contrles). Les e e o formulaires graphiques reprennent lergonomie des formulaires textes, mais orent une plus grande libert e dans la disposition des champs ` renseigner. a

14. le propritaire est celui qui a cr lobjet e ee 15. le propritaire de la base e

12

FORMULAIRES

52

12.2

Lien avec la base de donnes e

Un formulaire qui permet de modier les donnes dune base est compos de : e e contrles indpendants (essentiellement, les tiquettes et les lments de dcoration) ; o e e ee e contrles dpendants (cest-`-dire lis aux colonnes de la base) ; o e a e contrles calculs (un montant total par exemple) qui informent lutilisateur et qui rsultent o e e doprations entre plusieurs donnes. e e Ce sont les contrles dpendants qui nous intressent ici. Si le syst`me transactionnel est bien conu, o e e e c les contrles dpendants nacc`dent aux donnes qu` travers des vues et le formulaire ne peut modier o e e e a les donnes de la base quen invoquant des procdures stockes. e e e Le lien tr`s fort qui uni un formulaire ` sa base de donnes, pose de gros probl`mes de maintenance e a e e (en cas de changement de SGBD, de schma relationnel ou de type de donnes par exemple) et de re e e utilisabilit. Les vues et les mod`les orients objets traduit du mme mod`le conceptuel que le schma e e e e e e relationnel sont des solutions. Mais, il faut souvent faire appel ` une couche suprieure pour faire le lien a e entre ces composants (cest le rle des environnements de dveloppement comme .NET et J2EE (Struts o e notamment)).

12.3

Validation des donnes e

Les formulaires doivent, au moins, obir aux mmes r`gles dintgrit que la base de donnes souse e e e e e jacente (an, notamment, de grer les erreurs de validation au niveau du formulaire). Le concepteur dun e formulaire ne doit donc pas se contenter dune zone de texte (qui permet la saisie au clavier dune cha ne de caract`res, dun entier, dun rel ou dune date et heure) pour chaque champ ` remplir. e e a 12.3.1 Intgrit de domaine e e

Le type de donnes dun contrle doit correspondre au type de donnes de la colonne sous-jacente. e o e Pour les donnes numriques (entier ou rel), le contrle potentiom`tre et toupie permettent leur saisie e e e o e a ` la souris (toutefois, il est bon de les accompagner dune zone de texte dans laquelle on peut saisir la valeur souhaite directement au clavier). Pour les donnes binaires (oui ou non), le contrle case ` cocher e e o a est tout indiqu. e Pour les dates, les outils de cration de formulaire ore souvent un contrle calendrier . En tout cas, e o le rsultat pour une date ou pour une heure est une zone de texte avec un format de contrle strict. e o Les contrles orent bien souvent des formats de contrle et des r`gles de validation qui permettent o o e de reproduire certaines contraintes CHECK. De plus, pour les contraintes CHECK IN, on dispose du contrle o bouton radio (ou groupe doptions) qui est utilisable lorsque la liste des choix disponibles est connue et restera inchange (ce qui est rare ; en gnral, les choix sont lists dans une colonne dune autre table). e e e e Un contrle peut galement recevoir une valeur par dfaut (cohrente avec la base) et la notion de o e e e champ obligatoire permet de traduire le caract`re vide autoris ou non. e e 12.3.2 Intgrit des entits e e e

Gnralement, il nest pas ncessaire de sen soucier dans les formulaires, car elle est assure par e e e e la numrotation automatique (et lintgrit rfrentielle lorsque la cl primaire est compose de cl(s) e e e ee e e e trang`re(s)). La seule opration ` mener dans le formulaire est de rendre le champ correspondant ` la e e e a a cl, insaisissable an que lutilisateur ne puisse le modier. e Cependant, les contraintes UNIQUE sont plus diciles ` traduire dans les formulaires. a

12

FORMULAIRES Intgrit rfrentielle e e ee

53

12.3.3

Le contrle liste droulante permet de choisir une valeur parmi une liste de valeurs contenues dans o e une autre colonne, ce qui convient parfaitement pour remplir une cl trang`re (issue dune association ee e de type 1 : n, le client dune facture par exemple). Il faut cependant spcier au contrle dinterdire ` e o a lutilisateur de sortir de la liste propose. Il est galement conseill de rendre les listes ergonomes, en e e e faisant drouler plusieurs colonnes si ncessaire (le numro du client car on en a besoin, accompagn de e e e e son nom pour le retrouver facilement, par exemple) et en triant la colonne la plus pertinente (le nom du client, en loccurrence). Pour les associations de type n : m, on peut utiliser les listes ` choix multiples (cela permet par a exemple, pour un lm, de slectionner les acteurs qui y participent parmi une liste dacteurs prdnie). e e e Avec la liste droulante, il faut que la ligne rfrence (le client, par exemple) par la cl trang`re e ee e e e e (dans la commande en cours de saisie) existe dj`. Malheureusement, un formulaire est souvent charg de ea e saisir ` la fois la ligne rfrence et les lignes qui la rfrence (la commande et ses lignes de commandes, a ee e ee par exemple). Pour cela, nous disposons du contrle sous-formulaire qui permet de saisir les lignes de commandes o une par une dans le mme formulaire qui permet la saisie dune commande. Le sous-formulaire doit tre e e conu sous la forme dune ligne de contrles sans intituls dans la zone Dtail (les intituls sont placs c o e e e e en en-tte, tandis que les totaux sont placs en pied de sous-formulaire). Il appara alors sous la forme e e tra dun tableau dans le formulaire et dans lequel il y aura autant de lignes que ncessaire. e Cette notion de sous-formulaire est tr`s utile dans un formulaire ddi ` la consultation des donnes. e e ea e On peut par exemple, acher synthtiquement toutes les commandes dun client en particulier. Mais l`, e a nous sortons du cadre des syst`mes transactionnels et entrons dans le dcisionnel (cf. le chapitre sur les e e tats page 62). e 12.3.4 Intgrit dentreprise e e

Elle est normalement assure par les dclencheurs dans la base de donnes. Cependant, il est parfois e e e ncessaire de la reproduire dans un formulaire (an de tenir compte de ces r`gles et de grer leurs violae e e tions au niveau du formulaire). Pour cela, nous disposons : des r`gles de validation au niveau des contrles (qui permettent dimplmenter des r`gles plus e o e e gnrales que les contraintes CHECK) ; e e de la programmation vnementielle (qui permet, par exemple, de dsactiver le sous-formulaire e e e concernant les enfants, si le nombre denfants saisi est 0) ; des contrles calculs (qui permettent dacher le montant dune facture en tenant compte de la o e remise oerte aux bons clients, par exemple).

12

FORMULAIRES

54

12.4

Ergonomie

Un formulaire ne doit pas dpasser la taille de lcran et la taille dune feuille sil est destin ` tre e e eae imprim. A partir de l`, on peut disposer les champs ` renseigner dans un ordre logique, retirer les champs e ` a a insaisissables des arrts de tabulation et sarranger pour que les tabulations entre les champs saisissables e suivent la mme logique. e Les contrles doivent tre susamment larges pour que lutilisateur puisse en lire le contenu. o e Il est galement bon de trier les listes droulantes et les listes ` choix multiples et ne pas hsiter ` lister e e a e a plusieurs colonnes en mme temps. e Les contrles sont des objets qui ragissent ` des vnements dont les principaux sont : o e a e e lentre dans le contrle (par le clavier ou la souris) ; e o la sortie du contrle ; o ou le changement de valeur du contrle. o ` A ces vnements, on peut associer les actions suivantes : e e recalculer un autre contrle (mettre ` jour une liste droulante par exemple) ; o a e activer ou dsactiver un autre contrle ; e o ou encore, acher un message derreur intelligible en cas de violation dune r`gle de validation des e donnes. e Les boutons sont des objets qui ragissent principalement ` lvnement clic et qui permettent, par e a e e exemple, denregistrer la saisie (en appelant les procdures stockes), dimprimer la che ou douvrir un e e autre formulaire (pour saisir un nouveau client, pendant quon tablit sa premi`re facture, par exemple). e e ` A ce propos, il ne faut pas exagrer la dcomposition de la saisie dune che en plusieurs formulaires e e simples (certains vont jusqu` une question par formulaire), car le passage des informations dun formua laire ` un autre est ardu. Il vaut mieux activer les contrles les uns apr`s les autres (au fur et ` mesure a o e a de la saisie). Finalement, lessentiel de la programmation en langage objet dans un formulaire, porte sur la gestion des vnements et la rcupration des donnes saisies dans les contrles an de les envoyer au SGBD. e e e e e o

CONCLUSION

55

Conclusion sur la partie transactionnelle


Nous venons de voir comment dvelopper des bases de donnes de production (cest-`-dire mise-`-jour e e a a continuellement par les utilisateurs). Ces bases de production constituent un syst`me client-serveur, o` le e u client eectue ses mise-`-jour ` travers des crans xes et o` le serveur g`re ces modications sous forme a a e u e de transactions programmes ` lavance. e a On retrouve toujours le mme schma (cf. gure 8) dans lequel : e e les utilisateurs munis de leurs connexions et de leurs autorisations utilisent des interfaces graphiques ; ces formulaires font appel ` des procdures stockes ; a e e qui mettent en jeu des transactions (et leurs verrous) ; ces transactions sappuient sur des vues (et leurs dclencheurs) ; e qui sont les seules ` accder vritablement aux tables (et leurs contraintes). a e e

Fig. 8 Schma du syst`me transactionnel e e

CONCLUSION

56

On peut facilement prendre comme illustration une opration bancaire ` un guichet automatique (cf. e a gure 9) : le client de la banque muni de sa carte et de son code utilise linterface graphique du distributeur de billets ; cette application dclenche sur le serveur de la banque la procdure de retrait dargent ; e e cette procdure fait au moins appel ` une transaction qui se charge de e a dbiter le compte (avec un verrouillage du compte pendant lopration) ; e e ajouter une ligne au relev de compte ; e on imagine que derri`re cette transaction se trouve une vue regroupant les donnes ncessaires ` e e e a lopration et un dclencheur permettant la modication des donnes ` travers cette vue ; e e e a donnes qui sont organises de mani`re sophistique dans la base de donnes de la banque qui e e e e e respecte avec la plus grande rigueur les dirents type dintgrit. e e e

un client muni de sa carte et de son code

l'interface graphique du distributeur

la procdure de retrait d'argent

la transaction pour dbiter et verrou sur le compte

donnes ncessaires l'opration

base de donnes de la banque

Fig. 9 Exemple de transaction

57

Deuxi`me partie e

Le syst`me dcisionnel e e
En anglais on parle de syst`me OLAP (On Line Analytical Processing). Il sagit ici de sintresser aux e e besoins des dcideurs, ` savoir, transformer les donnes en connaissances voire en prvisions, cest-`-dire e a e e a e e e en information.Prenons lexemple dune biblioth`que : lhistorique des emprunts reprsente les donnes, le nombre moyen demprunts dun membre au cours dune anne est de lordre de la connaissance, tandis e que la tendance ` la baisse ou ` laugmentation des inscriptions est une prvision. a a e Exemple de questions dcisionnelles : e quels sont les clients les plus protables ? quels sont les produits en perte de vitesse ? ` quel chire daaire sattendre pour lanne prochaine ? a e

Dirences avec le syst`me transactionnel e e


Contrairement au syst`me OLTP, ici, on a besoin deectuer des requtes purement consultatives e e et sur un grand nombre de donnes que lon doit regrouper. Dune part, ces requtes risquent de fortee e ment perturber le syst`me transactionnel (souvent dj` satur), dautre part, si elles sappuient sur le e ea e schma relationnel de la base de donnes, alors elles seront trop longues ` rpondre (` cause des jointures). e e a e a Par ailleurs, on ne stocke pas lhistorique des donnes dans une base de production : gnralement, la e e e tables clients contient les clients quon a et ne sencombre pas des clients quon a eu. Les informations contenues dans une base de production sont les plus ` jour possible (et cest normal). a Enn, les donnes ncessaires ` un processus dcisionnel peuvent se trouver rparties sur plusieurs e e a e e syst`mes OLTP, eux-mmes parfois grs par dirents SGBD (en raison dun manque de centralisation e e ee e des dveloppements dans lentreprise, ou ` la suite dune fusion de plusieurs services informatiques). e a Toutes ces raisons rendent inutilisables les tableaux de bord que lon peut mettre en place dans les bases de production et ont conduit ` llaboration du syst`me OLAP, plus sophistiqu. a e e e ` A noter que le march mondial de lOLAP est tr`s dirent du march OLTP. En eet, le march e e e e e OLAP en 2002 (comme en 2001) a t domin par Microsoft (Analysis Services) et Hyperion (Essbase), ee e avec Cognos (PowerPlay) et Business Objects derri`re. Oracle et IBM sont loin derri`re et en recul e e (source : [15]).

Entrepts et cubes o
Pour toutes ces raisons, la demarche OLAP consiste ` copier et historiser les donnes dans un entrept a e o de donnes (data warehouse) 16 . Pour des raisons qui sclairciront plus tard dans lexpos, ces donnes e e e e sont stockes sous forme de cubes plutt que dans des tables relies entre elles 17 . e o e Le premier exemple de cube que lon peut donner est le suivant (cf. gure 10) : un cube tridimensionnel o` horizontalement sont dtailles les annes, verticalement les produits et, dans la profondeur, u e e e ` les pays. A lintersection dune anne (2003), dun produit A et dun pays (France) on trouve une cellule e contenant le montant des ventes et le prix unitaire du produit A en 2003 en France.
16. un magasin de donnes (data mart) ne sintresse qu` un secteur de lentreprise, tandis que lentrept de donnes se e e a o e situe au niveau de lentreprise 17. cest l` toute la dirence entre les entrept de donnes et les infocentres avec lesquels les donnes sont eectivement a e o e e extraire des bases de production et consolides sur un autre serveur, mais pas organises en cubes e e

58

Fig. 10 Exemple de cube : le cube ventes Lentrept de donnes contient donc des informations dates et non volatiles. Il est aliment par o e e e des extractions priodiques portant ventuellement sur plusieurs sources de donnes pendant les plages e e e horaires peu occupes (la nuit). Ces donnes sont galement pr-agrges et structures de mani`re e e e e e e e e multidimensionnelle, ce qui permet de simplier et dacclrer considrablement les requtes. Les utilisaee e e teurs (dcideurs) et la machine peuvent alors vritablement interagir. e e Il faut tout de suite prendre conscience que pour bien construire un entrept de donnes dans une o e entreprise, il faut bien conna les mtiers utilisateurs (cest-`-dire le metier danalyste marketing sil tre e a sagit des donnes sur les ventes de produits par exemple). e

Plan de lexpos e
Il sagit pour nous de concevoir et de consulter les cubes avec Analysis Services et le langage MDX (MultiDimensional eXpression) qui est aux cubes ce que SQL est aux tables ... Mais avant, nous voquons deux lments dcisionnels complmentaires des cubes OLAP : les groupes e ee e e de donnes et les tats. e e On aborde galement la phase dextraction de donnes, les objets virtuels ainsi que deux algorithmes e e de data mining : la clusterisation ; et les arbres de dcisions. e De nouveau, nous laisserons de ct la construction dinterfaces graphiques de consultation et ladoe ministration (sauvegarde, optimisation, etc.) des entrepts. Le lecteur sera libre de consulter [8] sur ces o sujets.

13

AGREGER LES DONNEES

59

13

Agrger les donnes e e

Revenons un instant sur les requtes de slection dont nous navons pas totalement fait le tour au e e cours de la premi`re partie. e

13.1

Groupes

On peut grouper les lignes rsultant dune requte SQL et en proter pour eectuer des mesures sur e e ces groupes. Comptons par exemple le nombre de commandes et calculons le montant total par client :
1 2 3 4

SELECT cmd_clt, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM commandes GROUP BY cmd_clt

Dans le rsultat de cette requte, chaque ligne est un groupe : e e cmd clt 0001 0007 1122 3344 NbCommandes 3 8 1 12 Montant total 500.00 1234.56 32.60 788.54

Rappel : COUNT, SUM, AVG, VAR, STDEV, MIN et MAX sont des fonctions dagrgat. Elles retournent une e information par groupe (un agrgat). Elles ignorent la valeur NULL (donc COUNT(18 lignes dont 2 NULL) e renvoie 16) sauf COUNT(*). Si on veut que la valeur NULL joue un rle dans lagrgation, alors on peut o e toujours utiliser la fonction ISNULL (cf. 4.7 page 25). Pour exclure certaines lignes de la table avant groupement, on utilise la clause WHERE. Exemple, pour ne garder que les commandes des 6 derniers mois :
1 2 3 4 5

SELECT cmd_clt, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM commandes WHERE cmd_date >= DATEADD(MONTH, -6, GETDATE()) GROUP BY cmd_clt

Pour exclure certains groupes (donc apr`s groupement) on ne peut pas utiliser la clause WHERE mais e la clause HAVING. Exemple, pour nacher que les clients qui ont strictement plus de 5 commandes :
1 2 3 4 5

SELECT cmd_clt, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM Commandes GROUP BY cmd_clt HAVING COUNT(cmd_num) > 5

Le rsultat de cette requte est : e e cmd clt 0007 3344 NbCommandes 8 12 Montant total 1234.56 788.54

13

AGREGER LES DONNEES

60

Remarque : la rdaction une clause HAVING admet les mmes conditions que celle dune clause WHERE e e (cf. 4.1 page 19) et tout comme les clauses WHERE on ne peut malheureusement pas utiliser les alias dnis dans la clause SELECT. e

13.2

Complments e

On peut grouper selon plusieurs colonnes, et ` partir de plusieurs tables. Exemple, ajoutons un sousa groupe selon le pays dachat :
1 2 3 4 5

SELECT a.cmd_clt, b.btq_pays, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM commandes AS a JOIN boutiques AS b ON a.cmd_btq = b.btq_num GROUP BY a.cmd_clt, b.btq_pays

Dans le rsultat de cette requte on a une ligne par sous groupe : e e cmd clt 0001 0007 0007 1122 3344 3344 btq pays France France Italie Italie Italie France NbCommandes 3 4 4 1 6 6 Montant total 500.00 1000.00 234.56 32.60 394.27 394.27

Remarques : lordre des colonnes dans la clause GROUP BY na pas dimportance ; toutes les colonnes de la clause SELECT ne faisant pas lobjet dune fonction dagrgat doivent gurer e dans la clause GROUP BY et inversement ; la clause WHERE ne peut porter que sur des colonnes non agrges (dont celle de la clause GROUP e e BY), alors que la clause HAVING peut porter sur toutes les colonnes de la clause SELECT ; par contre, la clause WHERE peut accder aux colonnes non aches, tandis que la clause HAVING ne e e le peut pas. Pour ordonner les groupes et les sous-groupes (ce qui nest pas le cas par dfaut) il sut dutiliser la e clause ORDER BY :
1 2 3 4 5 6

SELECT a.cmd_clt, b.btq_pays, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM commandes AS a JOIN boutiques AS b ON a.cmd_btq = b.btq_num GROUP BY a.cmd_clt, b.btq_pays ORDER BY b.btq_pays, [Montant total]

Remarque : la clause ORDER BY sapplique apr`s groupement et peut sappuyer sur toutes les colonnes e de la clause SELECT. ` A noter enn qu` ce stade, une requte GROUP BY ne peut acher que les agrgats des sous-groupes a e e du niveau le plus bas. Si lon dsire acher les agrgats des sous-groupes des autres niveaux (sous-total e e et total, par exemple), on peut ajouter ` la clause GROUP BY, soit WITH ROLLUP soit WITH CUBE (cf. laide a en ligne pour une description de ces deux instructions).

13

AGREGER LES DONNEES

61

Exemple :
1 2 3 4 5

SELECT a.cmd_clt, b.btq_pays, COUNT(cmd_num) AS NbCommandes, SUM(cmd_montant) AS [Montant total] FROM commandes AS a JOIN boutiques AS b ON a.cmd_btq = b.btq_num GROUP BY a.cmd_clt, b.btq_pays WITH ROLLUP

Dans le rsultat de cette requte on a, non seulement une ligne par sous groupe (niveau 2), mais aussi e e une ligne par groupe (niveau 1) et une ligne de niveau 0 : cmd clt NULL 0001 0001 0007 0007 0007 1122 1122 3344 3344 3344 btq pays NULL NULL France NULL France Italie NULL Italie NULL Italie France NbCommandes 24 3 3 8 4 4 1 1 12 6 6 Montant total 2555.70 500.00 500.00 1234.56 1000.00 234.56 32.60 32.60 788.54 394.27 394.27

Remarque : avec WITH ROLLUP, lordre des colonnes dans la clause GROUP BY a de limportance.

13.3

Conclusion

On sait dsormais rdiger une requte de slection compl`te : e e e e e SELECT les colonnes ` acher (dans lordre) a FROM les tables et leurs conditions de jointure WHERE les conditions de slection avant groupement e GROUP BY les colonnes de groupement HAVING les conditions de slection sur les groupes e ORDER BY les colonnes ` trier (dans lordre) a Il est donc temps de complter la stratgie pour laborer une requte de slection : e e e e e 1. dcomposer au maximum en plusieurs slection que lon pourra runir avec UNION ; e e e 2. dcomposer chaque slection complexe en requte et sous-requtes simples ; e e e e 3. et pour chaque requte et chaque sous-requte : e e (a) dterminer les tables en jeu pour remplir la clause FROM et les JOIN ncessaires ; e e (b) dterminer les colonnes de groupement pour remplir la clause GROUP BY ; e (c) dterminer les colonnes ` acher pour remplir la clause SELECT ; e a (d) dterminer les conditions de slection avant groupement pour remplir la clause WHERE ; e e (e) dterminer les conditions de slection sur les groupes pour remplir la clause HAVING ; e e (f) ajouter les ventuels ORDER BY, DISTINCT et TOP en dernier. e

14 EDITION DETATS

62

14

Edition dtats e

Un tat est un document de synth`se, tabli automatiquement ` partir des donnes. Il peut tre e e e a e e soit purement informatif (un annuaire, par exemple) soit ` caract`re dcisionnel (les ventes de la veille a e e ventiles selon les secteurs et en comparaison avec la mme date lanne prcdente, par exemple). En e e e e e anglais, on parle de reporting. Les tats qui nous intressent ici sont ceux qui permettent danalyser les donnes (donc les tats ` e e e e a caract`re dcisionnel). Ils se prsentent gnralement sous la forme dun long tableau dagrgats dtaills e e e e e e e e en groupes et sous-groupes, mais on peut considrer que les graphiques dcisionnels sont aussi des tats e e e (on ne les aborde pas ici). Certains outils ddition dtats sont fournis avec un SGBD (Microsoft Access, par exemple) ou avec e e une plate-forme OLAP (cest le cas de Crystal Reports qui est ` la base de Crystal Decisions, rachet a e par Business Objects).

14.1

Comparaison avec les formulaires

Comme les formulaires, les tats sont composs de champs et autres contrles (essentiellement des e e o zones de texte). Ils sont galement destins soit ` tre imprims soit ` tre consults ` lcran (sous la e e ae e ae e a e forme dune page web, par exemple). Il faut donc veiller tout particuli`rement : e ` ce que ltat ne dpasse pas la largeur de lcran et/ou de la feuille ; a e e e ` ce que les champs soient susamment larges pour acher leur contenu ; a et ` ce que les interactions avec lutilisateur soient ergonomiques (sil y en a). a Un tat se prsente comme un formulaire muni dun sous-formulaire, lui-mme muni dun sous-souse e e formulaire, etc. Cependant, contrairement aux formulaires, les tats ne permettent pas ` lutilisateur de modier les e a donnes, mais ont simplement une fonction de consultation des informations. e

14.2

Comparaison avec les requtes GROUP BY e

Un tat eectue essentiellement le mme travail quune requte GROUP BY WITH ROLLUP, mais un tat e e e e est plus lisible car mieux organis et mieux prsent quun vulgaire rsultat de requte. e e e e e Les probl`mes des requtes GROUP BY WITH ROLLUP qui sont rsolus par les tats sont les suivants : e e e e les intituls des colonnes ne sont achs quune fois, mme si le rsultat stale sur plusieurs pages ; e e e e e on ne peut pas acher de renseignement complmentaire (non agrg) concernant les groupes (le e e e nom du client, par exemple), ` cause de la contrainte entre les clauses SELECT et GROUP BY ; a les agrgats des niveaux suprieurs ne sont pas mis en valeur ; e e les conditions de slection ne sont pas aches (on ne peut donc pas diuser le rsultat). e e e

14.3

Composition

Chaque sous-groupe de plus bas niveau occupe une ligne dans le document nal. Cest cette ligne qui est dcrite dans la zone Dtail. Les intituls des colonnes du Dtail sont prcises dans len-tte de e e e e e e e page (an dtre rpts automatiquement ` chaque changement de page). e e ee a Au dessus du Dtail viennent les en-ttes des niveaux de groupement successifs dans lesquels on e e place les informations relatives ` ces niveaux. a En dessous du Dtail viennent les pieds des niveaux de groupement successifs dans lesquels on place e gnralement les rsultats dagrgation voulus. e e e e

15

STRUCTURER LES DONNEES EN CUBE

63

Il reste : len-tte dtat pour son titre et ses conditions de slection (notamment la ou les dates, les clients e e e retenus, les articles concerns, etc.), il ne faut surtout pas oublier de les prciser, sans quoi le e e document na aucune valeur ; le pied de page pour la numrotation des pages (ce qui est important si le document est imprim e e et malencontreusement mlang) ; e e et le pied dtat pour les agrgats du niveau 0 (un total gnral par exemple). e e e e Exemple : Exemple dtat e le titre

pour les clients ayant plus de 5 commandes pour toutes les dates

les conditions de slection e (dans len-tte dtat) e e

Pays client n 0007 (Razibus) France Italie Total client n 3344 (Fricotin) France Italie Total Total gnral e e

NbCommandes

Montant

les intituls (en-tte de page) e e un en-tte de groupe e

4 4 8

1000.00 234.56 1234.56

une ligne par sous-groupe un pied de groupe

6 6 12 20 page 1

394.27 394.27 788.54 1923.10 le pied dtat e un pied de page

15

Structurer les donnes en cube e

On sent bien que la table est un objet bidimensionnel mal adapt ` lagrgation de donnes d`s que le ea e e e groupement porte sur deux colonnes ou plus. Ltat ore une premi`re solution, mais la feuille A4 (mme e e e oriente en paysage) est rapidement sature quand le nombre de niveau de groupement augmente et la e e navigation dans un tat de 200 pages est fastidieuse. e

15.1

Dnition dun cube e

On prfrerait donc un objet : ee qui aurait autant de dimensions quil y a de colonnes de groupement (clients et pays dans notre exemple prcdent) ; e e dont chaque dimension dtaillerait les valeurs possibles (France et Italie pour la dimension pays) ; e dans lequel, ` lintersection dune valeur dans chaque dimension (France et 0001 par exemple) on a trouverait une unique cellule ; une cellule qui contiendrait toutes les valeurs agrges pour ce sous-groupe (cest-`-dire les mesures e e a tel que le nombre de commandes et le montant total) ; et aussi les agrgats des ces valeurs pour les sous-groupes suprieurs. e e

15

STRUCTURER LES DONNEES EN CUBE

64

Cest cet objet que lon appelle cube. Par exemple, organisons, en cube, les donnes de la requte suivante : e e
1 2 3 4

SELECT a.cmd_clt, b.btq_pays, COUNT(cmd_num), SUM(cmd_montant) FROM commandes AS a JOIN boutiques AS b ON a.cmd_btq = b.btq_num GROUP BY a.cmd_clt, b.btq_pays WITH CUBE

Rsultat : e

Fig. 11 Cube bidimensionnel Remarque : le terme de cube ne prsupposant ni du nombre de dimensions ni de lgalit des longueurs e e e des dimensions (cf. gure 11). En MDX, pour crer ce cube il sut dcrire : e e
1 2 3 4 5 6 7

CREATE CUBE ClientsPays ( DIMENSION clients DIMENSION pays MEASURE NbCommandes FUNCTION COUNT MEASURE [Montant total] FUNCTION SUM )

Remarque : on dispose bien videmment de DROP CUBE et de ALTER CUBE 18 . e Mesures Les mesures sont gnralement additives (soit une somme, soit un dnombrement). e e e Il ne faut stocker dans le cube que les mesures primitives : le prix TTC peut tre calcul ` partir du prix hors taxe, ce nest donc pas la peine de le stocker ; e ea il en va de mme pour les prix en dollars ` partir des prix en euros ; e a
18. on laisse au lecteur le soin de se renseigner aupr`s de laide en ligne pour conna les possibilits de ALTER CUBE e tre e

15

STRUCTURER LES DONNEES EN CUBE dun montant ` partir dun prix unitaire et dune quantit ; a e etc.

65

Dans Analysis Services, les mesures non primitives peuvent tre calcules avec les membres calculs e e e (cf. 18.4.1 page 91). Ceci dit, si les r`gles de calcul des mesures non primitives sont compliques ou si elles changent souvent e e (cest le cas des conversions euro/dollar, par exemple), alors il vaut mieux stocker une mesure de plus.

15.2

Hirarchie e

Complexions progressivement la dnition dun cube. e 15.2.1 Niveaux

Avec la structure de cube, on peut dtailler chaque dimension en plusieurs niveaux. Par exemple, e une dimension gnrale geographie peut permettre des groupements selon un pays, une region ou une e e ville. On voit alors appara une hirarchie dans les dimensions que lon dpliera et pliera ` volont, tre e e a e selon nos besoins dagrgation. e On peut prendre comme illustration un cube ventes ` trois dimensions (cf. gure 12) : a une dimension geographie comprenant plusieurs pays qui se dcomposent chacun en plusieurs e rgions qui regroupent elles-mmes plusieurs villes dans lesquelles se situent les boutiques ; e e une dimension produits dans laquelle les articles sont regroups en gammes puis en marques ; e et une dimension temporelle dtaille en annes, mois et jours. e e e

Fig. 12 Cube ventes hirarchis e e

15

STRUCTURER LES DONNEES EN CUBE La syntaxe MDX pour dclarer ces dimensions hirarchises est e e e pour les dimensions standards :
1 2 3 4 5 6 7 8 9 10 11 12 13

66

DIMENSION geographie LEVEL tout TYPE ALL, LEVEL pays, LEVEL region, LEVEL ville

-- mettre ce niveau a chaque fois

-- on separe les niveaux par des virgules mais pas les dimensions DIMENSION produits LEVEL tout TYPE ALL, LEVEL marque, LEVEL gamme, LEVEL article

-- du plus agrege

-- au plus detaille

et pour la dimension temporelle :


1 2 3 4 5

DIMENSION temps LEVEL tout TYPE ALL, LEVEL annee TYPE YEAR, LEVEL mois TYPE MONTH, LEVEL jour TYPE DAY

Remarques : le niveau ALL un niveau formel qui regroupe tous les autres ; sil y a ambigu e sur le nom des niveaux, il sut de prciser la dimension concerne selon la t e e syntaxe : dimension.niveau (exemple : produits.articles) ; dans une dimension hirarchise, les donnes du niveau le plus bas sont issues des bases de produce e e tion ; mais le cube peut aussi stocker des donnes aux niveaux suprieurs (il sagit le plus souvent de e e donnes agrges, mais pas toujours). e e e Le niveau le plus bas dune dimension sappelle le grain de la dimension (le grain de la dimension geographie cest la ville). Toutes les dimensions et leur grain doivent tre choisis d`s le dbut et doit e e e rester inchangs pendant toute la dure de vie du cube. e e 15.2.2 Membres

Les direntes valeurs dun niveau sont appeles membres. Par exemple, les membres du niveau pays e e sont France, Italie, Allemagne et Espagne. Un membre de niveau suprieur regroupe des membres du e niveau immdiatement infrieur, ce sont ses enfants. Par exemple, les enfants du membre France sont e e PACA, Rhones-Alpes et Corse. Remarque : un membre dun niveau suprieur (une rgion) peut possder des donnes (son ensoleillee e e e ment, par exemple) et pas seulement des agrgats (montant total des ventes dans cette rgion). e e

15

STRUCTURER LES DONNEES EN CUBE Hirarchies multiples e

67

15.2.3

Certaines dimensions peuvent tre organises selon plusieurs hirarchies. e e e Cest classiquement le cas de la dimension temporelle qui peut non seulement tre organise en : e e jours, mois, trimestres et annes ; e mais aussi en jours et semaines ; ou encore en jours et saisons. Cela peut galement se produire pour nimporte quelle dimension (cf. la dimension produits sur la gure e 16). Analysis Services ne permet malheureusement pas ` une dimension de possder plusieurs hirarchies. a e e La technique pour les reprsenter malgr tout consiste alors simplement : e e soit ` introduire plusieurs dimensions (avec une hirarchie chacune), ce qui nest pas recommand ; a e e soit ` utiliser les proprits de membre (cf. 19.1 page 96) et les dimensions virtuelles. a ee

15.3

Normalisation dun cube

Le schma relationnel dun cube (cf. section suivante) na pas besoin de respecter la troisi`me forme e e normale (cf. [?]), ce qui permet dutiliser des schmas en toile. Par contre, quelques r`gles (tires de [4]) e e e e doivent tre respectes lors de la construction de chaque cube : e e R`gle 1 : dans un cube, deux membres appartenant ` deux dimensions direntes doivent tre e a e e indpendants . e Autrement dit, sil ny a quun vendeur par produit, il faut fusionner les dimensions produits et vendeurs. R`gle 2 : dans un cube, tous les faits doivent dpendent de toutes les dimensions. e e Autrement dit, les ventes (qui dpendent du produit, du jour, du client et de la ville) et les cots de e u dveloppement (qui ne dpendent que du produit) dnissent deux types de faits distincts (et conduisent e e e donc ` deux cubes distincts). a R`gle 3 : dans un cube, toutes les mesures doivent respecter le grain du cube. e Si la marge nest dnie que par rgion et par mois, tandis que le montant des ventes le sont par e e ville et par jour, alors il ne faut pas chercher ` les faire cohabiter par une division arithmtique mais les a e sparer dans deux cubes distincts. e R`gle 4 : la hirarchie dune dimension doit tre strictement arborescente. e e e Ce nest pas le cas dune dimension organisation dans laquelle : les agences sont regroupes administrativement en divisions ; e les agences sont regroupes gographiquement en tablissements, mme si elles appartiennent ` des e e e e a divisions direntes ; e les divisions sont regroupes en directions rgionales ; e e les tablissement sont galement regroups en directions rgionales. e e e e Il faut alors utiliser deux hirarchies pour cette dimension : e une dont les niveaux sont : agences, divisions et directions rgionales ; e et une autre dont les niveaux sont : agences, tablissement et directions rgionales . e e Lorsquun cube vrie ces quatres r`gles, on dit quil est en forme dimensionnelle normale. e e

16

STOCKAGE DES DONNEES

68

16

Stockage des donnes e

On sait que les donnes des syst`mes transactionnels sont stockes sous une forme purement relatione e e nelle. Cest dailleurs cette vision relationnelle que lon a remplace par une vision multidimensionnelle e dans cette partie. La question qui se pose maintenant est : comment stocker des cubes ayant de nombreuses dimensions, elles-mme ` plusieurs niveaux ? e a

16.1

Schma relationnel de lentrept e o

La premi`re ide est de stocker physiquement un objet multidimensionnel, cest-`-dire une hypermae e a trice avec plusieurs mesures par cellule et de stocker aussi les agrgats au bout de chaque ligne, chaque e colonne, etc. et pour tous les niveaux. Cest la meilleure approche du point de vue des performances de consultation (puisque tous les rsultats sont prsents), mais ce stockage est bien souvent trop gourmand e e en place mmoire. e Notre soucis est donc maintenant dconomiser de lespace. Or on conna dj` la faon la plus e t e a c conomique de stocker des donnes, cest lapproche relationnelle (dans laquelle on vite toute redone e e dance). Il se trouve justement que lon peut voir un cube sous forme de tables et de relations. 16.1.1 Schma en toile e e

Si au sein de lentrept, nous nous concentrons sur un cube, alors on peut modliser ses dimensions, o e leurs niveaux, leurs membres et les cellules sous la forme dun schma relationnel toil. e e e Table de dimension ` A chaque dimension on associe une table avec : une cl primaire non composite ; e et une colonne par niveau (pour y stocker les membres).

(a)

(b)

Fig. 13 Tables de dimension Par exemple, ` la dimension geographie on associe une table (cf. gure 13(a)) ayant pour cl primaire a e code geographie et comme autres colonnes : pays, region et ville.

16

STOCKAGE DES DONNEES

69

Etant donn que les donnes sont issues de plusieurs bases de donnes ayant chacune leur cls prie e e e maires, les cls primaires des tables de dimensions sont direntes car elles doivent assurer une unicit e e e plus gnrale. Ces cls de substitution (surrogate keys, par opposition aux cls naturelles utilises dans e e e e e les bases de production) servent ` identier un membre pendant tout sa dure de vie au sein de lentrept. a e o Dimension temporelle Les dimensions temporelles ne rentrent pas dans ce cadre puisque quon ne samuse pas ` dtailler les a e annes, les mois et les jours dans trois colonnes direntes, mais quon regroupe cette information dans e e une seule colonne de type DATETIME. Remarque : la dimension temporelle pose toujours un probl`me de conception notamment parce que e tous les acteurs dune entreprise ne fonctionnent ni avec le mme calendrier (civil, scal, scolaire, etc.) ni e avec la mme horloge (surtout si lentreprise est multinationale). e Table des faits Ensuite, chaque cellule du cube : est identie par ses coordonnes (i.e. son code geographie, son code produits et sa date) ; e e et contient ses mesures. Lensemble de ces informations (coordonnes et mesures relatives ` une cellule) constitue ce que lon e a appelle un fait. Si maintenant on stocke chaque fait sous la forme dune ligne dans une table, alors on obtient un schma relationnel toil par rapport ` cette table (autrement dit toutes les relations partent e e e a de cette table, cf. gure 14).

Fig. 14 Schma en toile dun cube ` 5 dimensions et 2 mesures e e a Dans lexemple du cube ventes, la table des faits naurait possder que deux cls trang`res : code e e e e

16

STOCKAGE DES DONNEES

70

geographie et code produit, une colonne pour la date ainsi que deux autres colonnes pour les mesures : NbCommandes et [Montant total]. Pour mettre en vidence le caract`re toil du schma relationnel, e e e e e nous ajoutons deux dimensions au cube ventes : une relative aux clients et une relative aux vendeurs. Remarque : la table des faits peut compter plusieurs millions de lignes et la taille des autres tables est ngligeable devant celle de la table des faits. e 16.1.2 Schma en ocon e

Dans le schma en toile (star scheme), il peut encore y avoir des redondances, pour deux types de e e raisons : nutiliser quune seule table pour dnir une dimension qui poss`de plusieurs niveaux est presque e e toujours en contradiction avec la troisi`me forme normale [?] (cf. gure 13(b)) ; on peut donc pousser e plus loin la dcomposition relationnelle (cf. gure 15) e

Fig. 15 Dcomposition de la table produits e par ailleurs, on peut parfois factoriser certaines donnes (une seule table geographie pour la e gographie des ventes et des clients, par exemple). e

16

STOCKAGE DES DONNEES

71

Comme la table des faits nest plus la seule ` toiler les relations autour delle, d`s lors quune dimenae e sion est base sur deux tables ou plus (cf. gure 16), on dit que le schma est en ocon (snowake scheme). e e

Fig. 16 Schma en ocon e Remarque : dans cet exemple, la dimension produits prsente trois hirarchies (une selon les types, e e une selon les paquetages et une selon les catgories). e Ce quil faut retenir de tout cela, cest que : une dimension sinscrit dans un schma en toile si elle nest dnie que sur une table du schma e e e e relationnel du cube (cest le cas de la dimension geographie) ; d`s quelle utilise plusieurs tables du schma relationnel, la dimension sinscrit dans un schma en e e e ocon (cest le cas des dimensions produits et clients). Quand certaines dimensions sont en toile et dautre en ocon, on dit que le schma du cube est en e e starake. Dans Analysis Services, on est donc amen ` spcier pour chaque dimension (non temporelle) : ea e si elle sinscrit dans un schma en toile ou en ocon ; e e la ou les tables concernes (elles doivent exister avant la cration du cube). e e Que choisir ? Le schma en toile est, certes, plus redondant que le schma en ocon mais : e e e la redondance nest pas un probl`me pour le dcisionnel, puisquil ny a que des requtes de slection ; e e e e lespace occup par les tables de dimension est ngligeable devant celui de la table des faits ; e e les requtes sont plus rapides sur un schma en toile ; e e e

16

STOCKAGE DES DONNEES lETL est plus simple avec un schma en toile. e e

72

Pour toutes ces raisons, le schma en ocon est peu recommand et doit se limiter ` : e e a la factorisation, comme celle de la table geographie ; la reprsentation de hirarchie multiple, comme celle de la dimension produits. e e Ce qui exclut la dcomposition ` outrance comme celle des catgories et sous-catgories. e a e e 16.1.3 Parent-enfant

Dhabitude, les niveaux dune relation sont de type ensembliste : dans la dimension geographie, un pays est un ensemble de rgions. e Prenons maintenant une hirarchie de dimension qui ait une signication familiale (cf. gure 17). e Par exemple une dimension personnes avec un niveau GrandsParents, un niveau parents et un niveau

Fig. 17 Hirarchie parent-enfant e enfants. Le schma relationnel du cube nest alors plus le mme, puisquil fait intervenir une autoe e jointure sur la table personnes (cf. gure 18).

Fig. 18 Auto-jointure dune table de dimension parent-enfant Cest ce que lon appelle une hirarchie parent-enfant. Elle est valable galement quand il y a une e e relation employ-employeur. e Remarque : dans le cas dune hirarchie parent-enfant, les niveaux suprieurs poss`dent des donnes e e e e propres (non agrges). Par exemple, le nom du directeur commercial nest pas issus de lagrgation des e e e noms de ses vendeurs... 16.1.4 Base dcisionnelle e

Un entrept de donnes peut contenir plusieurs cubes (le cube ventes que lon vient de voir, et le o e cube production, par exemple). Le schma relationnel de lentrept regroupe les schmas relationnels de e o e ses cubes. La base de donnes qui correspond ` ce schma relationnel global,sappelle la base dcisionnelle e a e e (par opposition aux bases de production). Elle doit tre construite avant lentrept lui-mme. Elle rsulte dun travail important de rtroe o e e e conception des bases de production et de normalisation ` lchelle de lentreprise. a e Certaines dimensions sont communes ` plusieurs cubes (la dimension produits est commune aux a cubes ventes et production, par exemple). Leurs tables ne sont videmment pas rptes dans le schma e e ee e

16

STOCKAGE DES DONNEES

73

relationnel de lentrept, mais utilises par plusieurs tables des faits. Cest pourquoi Analysis Services o e emploie le terme de dimensions partages. e Il en va de mme pour les mesures et toutes les autres colonnes utilises pour dnir le cube : elle e e e sont prsentes une bonne fois pour toutes dans ce schma relationnel global, puis utilises dans le schma e e e e relationnel de chaque cube. ` A linstar des bases de production, le schma relationnel de la base dcisionnelle doit tre conu dans e e e c une phase modlisation et doit coller aux besoins des utilisateurs. Par contre, cette modlisation OLAP e e di`re sensiblement des modlisations relationnelles classiques pour les syst`mes OLTP. Le schma relae e e e e e tionnel doit tre susamment bien conu d`s le dpart, car cest encore plus problmatique de modier e c e la base dcisionnelle quune base de production. e Rappelons que cette base dcisionnelle a pour but dhistoriser les donnes et est mise-`-jour, non e e a pas par de nombreuses transactions ACID (cf. 2.4 page 15), mais par des extractions priodiques des e syst`mes OLTP sous-jacents (avant quils ne soient purgs). e e Dans Analysis Services, cest cette base qui est la source de donnes ` connecter ` lentrept. Notons e a a o quAnalysis Services autorise plusieurs sources de donnes (et donc plusieurs bases dcisionnelles) pour e e un mme entrept. e o

16.2

Modes de stockage

Classiquement, il existe trois modes de stockage pour chaque partition dun cube. Sans entrer dans le dtail, les donnes dun cube peuvent tre partitionnes (selon les annes, gnralement). e e e e e e e Gnralement un cube prsente : e e e une partition pour lanne en cours ; e une partition pour lanne prcdente (ou les deux annes prcdentes) ; e e e e e e et une derni`re partition pour les autres annes. e e Remarque : les partitions correspondent ` un clatement de la table des faits. a e 16.2.1 Multidimensional OLAP (MOLAP)

En mode MOLAP, les donnes de la base dcisionnelle sont copies dans une structure (hypere e e )matricielle qui contient galement les agrgats. Analysis Services compresse alors les donnes et nalloue e e e 19 , ce qui limite la taille de stockage. aucun espace aux cellules vides Pourtant, ce type de stockage doit se limiter aux donnes les plus utilises (celle de lanne en cours, par e e e exemple) an que les rponses soient instantanes et que le volume de donnes MOLAP reste raisonnable. e e e 16.2.2 Relational OLAP (ROLAP)

En mode ROLAP, la partition est vide. Toutes les donnes restent dans la base dcisionnelle. Les e e requtes MDX sur ce cube font donc appel ` des requtes SQL impliquant des jointures. Cest le type de e a e stockage qui ore les temps de rponse les plus lents. Mais cest aussi le plus conome. e e Gnralement, les donnes qui remontent ` deux ans et plus (elles sont nombreuses et peu consultes) e e e a e sont stockes en ROLAP. e Remarque : les requtes sont plus rapides sur un schma en toile (mme redondant) que sur un e e e e schma en ocon (qui met en jeu davantage de jointures). e
19. cela est heureux car, gnralement, un cube OLAP est creux, cest-`-dire essentiellement constitu de cellules vides e e a e

16

STOCKAGE DES DONNEES Hybrid OLAP (HOLAP)

74

16.2.3

En mode HOLAP, seuls les agrgats des niveaux suprieurs sont stocks sous forme matricielle (cf. e e e e e gure 19) et les donnes bas niveaux restent dans la base dcisionnelle. Il sagit dune combinaison entre lapproche MOLAP et lapproche ROLAP. Seule les requtes MDX qui utilisent directement les donnes e e bas niveaux sont ralenties (drillthrough, par exemple).

Fig. 19 Cube rduit pour les agrgats des niveaux suprieurs e e e Ce type de stockage convient bien aux donnes de lanne prcdente (ou des deux annes prcdentes). e e e e e e e

16.3

Niveau dagrgation e

Quelque soit le mode de stockage choisi, les agrgats ne sont pas forcment tous calculs et stocks. e e e e Analysis Services peut dterminer quels agrgats stocker (en commenant par les niveaux les plus bas) e e c en fonction de deux crit`res : e la taille maximale alloue au cube (si on la conna autant la prciser) ; e t, e ou le gain de performance souhait : e gain en pourcentage = 100 Tmax T Tmax Tmin

o` Tmax est le temps dexcution dune requte si aucun agrgat nest stock, Tmin est le temps u e e e e dexcution de cette requte si tous les agrgats sont stockes et T est le temps dexcution avec le e e e e e gain souhait. e

17

ALIMENTATION DE LENTREPOT

75

17

Alimentation de lentrept o

Pour remplir un entrept de donnes, il faut : o e une tape dextraction (des donnes pertinentes des les bases de production) ; e e une tape de transformation (nettoyage, formattage, premi`res agrgations et reconnaissance des e e e membres) ; et une tape de chargement (des donnes propres dans la base dcisionnelle). e e e En anglais on parle de phase ETL pour Extraction, Transformation and Loading 20 . La frquence ` laquelle les phases ETL sont opres doit tre cohrente avec le grain de la dimension e a ee e e temporelle et doit permettre dhistoriser les donnes avant quelles ne soient purges des bases de proe e duction. Le remplissage initial des donnes ` la cration de lentrept est gnralement facile. Cest historiser e a e o e e priodiquement et automatiquement les donnes qui pose probl`me. e e e En eet, les sources de donnes sont gnralement multiples et gres par dirents syst`mes (goe e e ee e e e graphiquement rpartis dans dirents sites), ce qui rend la phase ETL bien souvent tr`s problmatique. e e e e Chaque situation rencontre est tr`s spcique et larchitecture ETL mise en place est souvent ddie ` e e e e e a lentreprise. Dailleurs le march des outils ETL (qui sont tr`s nombreux), est particuli`rement morcel. Il est e e e e malgr tout domin par Informatica (PowerMart/Center), Ascential (DataStage) et SAS (Warehouse e e Administrator). Suivent les fournisseurs de SGBD : Oracle (Warehouse Builder), IBM (DataWarehouse Manager) et Microsoft (DTS), au coude-`-coude avec Cognos et Hummingbird (parmi tant dautres). a

17.1

Data Transformation Services (DTS)

DTS est un outil fourni avec SQL Server. Il peut se connecter en lecture et en criture : e aux logiciels Microsoft, videmment : SQL Server, Access, Excel et Visual FoxPro ; e ` dautres SGBD : Corel Paradox, dBase, Oracle et mme IBM DB2 ; a e ` des chiers textes ou des chiers HTML. a DTS peut donc transfrer les donnes non seulement dune base SQL Server vers une base SQL Server, e e mais aussi dune base DB2 vers une base Oracle, par exemple. Cet outil permet non seulement de transfrer les donnes, les nettoyer, les transformer, les fusionner e e et/ou les sparer. On entend par transformation tout calcul numrique ou toute opration sur cha e e e nes de caract`res par exemple. Ces transformations peuvent tre programmes dans des scripts SQL, Visual e e e Basic, Java ou Perl et donc tre extrmement complexes. e e Une action DTS sappelle un lot. Un lot DTS peut tre excut rguli`rement et automatiquement e e e e e (en collaboration avec un autre service, SQL Server Agent, qui permet de planier les oprations sur SQL e Server). Un lot peut comporter plusieurs tches que lon peut encha a ner (sur succ`s ou sur chec de la tche e e a prcdente) et dont on peut dtecter et grer les erreurs. e e e e Pour nous, il sagit dutiliser DTS comme outil dextraction priodique de donnes depuis les bases de e e production vers la base dcisionnelle. Parmi les tches disponibles, nous intressent plus particuli`rement : e a e e les connexions aux donnes en lecture et en criture ; e e
20. lETL fait partie des logiciels qui permettent aux applications htrog`nes de communiquer entre elle (middleware) au e e e mme titre que lEAI (Enterprise Application Integration) qui permet de maintenir ` jour les donnes entre les applications e a e en temps rel e

17

ALIMENTATION DE LENTREPOT

76

lexcution de scripts paramtrs (essentiellement en SQL) ; e e e lexcution de sous-lots (ce qui permet de dcomposer le lot ETL tr`s complexe en lots extraction, e e e transformation, chargement et traitement, plus simples) ; le traitement des cubes. DTS ore galement la possibilit dutiliser des variables globales visibles par toutes les tches. Pour e e a lETL, deux variables globales sont indispensables : la date de dbut et la date de n qui dlimite la e e priode de temps ` laquelle lETL sapplique. Typiquement, la date de dbut est la date de n de la e a e prcdente excution du lot et la date de n est la date courante. e e e Pour un approfondissement de cet outil, le lecteur est invit ` consulter [1] et [16]. ea

17.2

Base tampon

Etant donn quelles ont lieu pendant les plages horaires peu occupes (la nuit), lETL des donnes e e e OLTP pour le syst`me OLAP entre en concurrence avec les sauvegardes des bases de production. Il faut e donc que cette phase perturbe le moins longtemps possible les syst`mes OLTP. Pour cela, il faut que : e lextraction prenne le moins de temps possible ; les transformations naient pas lieu en mme temps que lextraction et pas sur le mme serveur que e e les syst`mes OLTP ; e Bref, les donnes extraites doivent atterrir sur une autre base, appele base tampon (staging area). e e Une fois ltape dextraction termine, les transformations ncessaires. peuvent tre eectues trane e e e e quillement dans la base tampon. Il ne faut pas non plus que le syst`me OLAP ne soit perturb par la phase ETL (en particulier, par e e ltape de transformation). Autrement dit, cette base tampon ne doit pas tre la base dcisionnelle et e e e doit tre gre par un serveur ddi ` lETL (cf. gure 20). e ee e ea

Fig. 20 Les tapes du processus ETL e

17

ALIMENTATION DE LENTREPOT

77

17.3

Etapes ETL

Dtaillons maintenant les tapes de la gure 20. e e 17.3.1 Extraction

Pour que ltape dextraction dure le moins longtemps possible, il faut que : e la requte de slection ne comporte aucune jointure (il faut donc extraire les tables une par une) ; e e les donnes soient insres dans des tables temporaires (elles nont aucune contrainte, aucun dclencheur e ee e et aucun index). Par ailleurs, il est bon que dans les syst`mes OLTP, chaque table concerne par lextraction (clients, e e produits, etc.) soit munie dune colonne pour la date de cration et une autre pour la date de derni`re e e modication. Sans ces colonnes, on serait oblig dextraire toutes les lignes et il serait compliqu de e e dterminer (dans la base tampon) les lignes rellement modies depuis la derni`re extraction. Avec ces e e e e 21 . colonnes, lextraction peut tre incrmentale e e Dans tous les cas, le volume de donnes ` extraire est important. Il y a toujours un choix ` faire entre e a a extraire toutes les lignes dun coup (la mthode la plus rapide, mais comme cette transaction est non e atomique, la moindre erreur est fatale ` tout le processus) ou les extraire une par une (ce qui prend plus a de temps, mais permet de limiter leet dune erreur ponctuelle). Exemple dextraction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14

SELECT * INTO clients_temporaire1 FROM SERVEROLTP1.BaseProduction1.dbo.clients AS a WHERE a.derniere_modification BETWEEN @debut AND @fin SELECT * INTO clients_temporaire2 FROM SERVEROLTP2.BaseProduction2.dbo.clients AS a WHERE a.last_modification_date BETWEEN @debut AND @fin SELECT * INTO commandes_temporaire1 FROM SERVEROLTP1.BaseProduction1.dbo.commandes AS a WHERE a.date BETWEEN @debut AND @fin Transformation

17.3.2

Ce nest pas parce que les donnes proviennent de bases de production qui fonctionnent rigoureusement e bien, que ces donnes sont valides pour le syst`me dcisionnel. Il faut presque toujours les transformer. e e e Les transformations se font en deux temps : dabord, pendant le passage des donnes des tables temporaires aux tables tampon ; e ensuite, des modications sont apportes au sein des tables tampon en vue du chargement. e

21. notons que lextraction peut galement tre incrmentale si lon utilise les informations contenues dans le journal des e e e transactions

17

ALIMENTATION DE LENTREPOT Tables tampon

78

` A ce stade, la base tampon ne contient que des tables temporaires identiques aux tables source. Ltape de transformation consiste ` consolider ces donnes dans les vritables tables de la base tampon e a e e (cf. gure 21). ` A chaque table de la base dcisionnelle correspond une table tampon qui contient : e les colonnes de la table de dimension ou de faits correspondante ; les cls naturelles et les cls de substitution ; e e une colonne exists de type oui ou non qui dira si le membre existe dj` ou non ; ea Ces tables tampon sont dpourvues de contraintes, notamment toutes ces colonnes autorisent la valeur e vide.

Fig. 21 Tables temporaires et tables tampon Remarques : pour faciliter le passage des tables temporaires aux tables tampon, il convient de supprimer, au pralable, les index sur les tables tampon ; e comme les bases de production sont multiples, il peut y avoir plusieurs tables temporaires qui concerne les produits, par exemple ; donc linsertion dans la table tampon qui concerne les produits se fait en plusieurs fois ; la base tampon est totalement dpourvue de relation car on ne peut assurer ni lintgrit des entits e e e e ni lintgrit rfrentielle, puisque les donnes source ne sont pas encore consolides ; e e ee e e notons quil y a souvent un travail de jointure ` faire sur les tables temporaires pour insrer les a e donnes dans les tables tampon ; e

17

ALIMENTATION DE LENTREPOT

79

notons enn que si le grain des bases de production est plus n que celui de la base dcisionnelle, e les premi`res agrgations ncessaires peuvent tre eectues ` ce moment-l`. e e e e e a a Rparation, compltion, synchronisation et formattage e e Pendant que les donnes sont insres dans les tables tampon, on peut les uniformiser, cest-`-dire les e ee a rparer, les complter, les synchroniser et les formatter. e e Exemple de rparation des donnes : les codes postaux invalides peuvent tre corrigs en utilisant un e e e e annuaire des codes postaux. Exemple de compltion des donnes : dduire la rgion o` est domicili un propritaire ` partir du e e e e u e e a numro dimmatriculation de son vhicule. e e Rappelons que les bases de production nutilisent pas forcment la mme horloge. Il faut donc synchroe e niser toutes les dates contenues dans les tables temporaires pendant leur transfert dans les tables tampon. Par ailleurs, quand les donnes arrivent dans la base tampon, elles ne sont pas toutes au mme format e e et ne respectent pas forcment le format de la base dcisionnelle (gnralement, les contraintes sur les e e e e cha nes de caract`res ne sont pas les mmes dans toutes les bases et les codages de date sont htrog`nes). e e ee e Il faut donc uniformiser les formats avant le chargement, cest le formattage. Exemple dhtrognit : selon leur provenance, les noms de clients peuvent arriver sous la forme ee e e e de deux colonnes (nom et prenom) ou sous la forme dune colonne (nom + prenom, nom + initiale + prenom). Un autre exemple classique concerne les adresses : il y a quasiment autant de formats que de bases. Exemple dinsertion dans une table tampon ` partir dune table temporaire : a
1 2 3 4 5 6 7 8

INSERT clients_tampon (cle_naturelle, source, NomPrenom, ville, region, pays, date_creation) SELECT a.clt_num, SERVEROLTP1.BaseProduction1, -- pour la substitution a.nom + + a.prenom, -- formattage b.ville, b.region, a.pays, -- completion DATEADD(hour, -3, a.date_creation) -- synchronisation FROM clients_temporaire1 AS a JOIN CodesPostaux AS b ON (a.CodePostal = b.CodePostal)

Notons quun client peut tre insr en double dans sa table tampon, sil gure dans deux bases de e ee production. Les doublons sont grs par le paragraphe suivant. De plus, deux clients dirents mais qui ee e portent la mme cl naturelle, sont distinguables par leur source (et leurs attributs). e e Substitution des cls primaires e Une fois que les tables tampons sont remplies, on peut supprimer les tables temporaires et soccuper de lintgrit des donnes qui vont tre charges dans la base dcisionnelle. Pour rendre la substitution, la e e e e e e validation et le chargement le plus rapide possible, il convient de re-crer les index sur les tables tampons. e Rappelons que la base dcisionnelle nutilise pas les cls naturelles des bases de production car : e e un produit peut tre identi dans deux bases de production direntes avec des cls distinctes ; e e e e un numro de produit peut correspondre ` deux produits distincts dans deux bases de production e a direntes. e

17

ALIMENTATION DE LENTREPOT

80

Au contraire, pour identier les membres de mani`re unique, la base dcisionnelle utilise des cls de e e e substitution (surrogate keys). Au cours de ltape de transformation, il faut donc traduire (lookup) les cls naturelles en cls de e e e substitution et remplir la colonne exists. Si les bases de production ne sont pas pourvues dune colonne pour la date de cration et une colonne pour la date de derni`re modication, alors cette traduction ime e plique la recherche du membre correspondant (en fonction de leurs attributs dans la base dcisionnelle) e pour chaque ligne extraite. Non seulement cest tr`s coteux mais en plus, cela perturbe le syst`me OLAP. e u e Exemple de lookup pour les cls primaires de substitution : e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

-- recherche des membres deja presents UPDATE clients_tampon SET exists = 1, cle_substitution = b.cle FROM clients_tampon AS a JOIN SERVEROLAP.BaseDecisionnelle.dbo.clients_dimension AS b ON ( ISNULL(a.NomPrenom, ) = ISNULL(b.NomPrenom, ) AND ISNULL(a.pays, ) = ISNULL(b.pays, ) AND ISNULL(a.region, ) = ISNULL(b.region, ) AND ISNULL(a.ville, ) = ISNULL(b.ville, ) ) -- pays et region sont utiles pour distinguer les villes homonymes -- nouvelle cle pour les nouveaux membres UPDATE clients_tampon SET cle_substitution = NEWID() WHERE exists IS NULL

Notons que les clients insrs en double dans la table clients tampon, poss`dent dsormais une cl ee e e e de substitution unique (sauf les nouveaux membres) et que les clients distincts mais avec la mme cl e e primaire, poss`dent dsormais deux cls de substitution distinctes. e e e Drive dimensionnelle e Notons aussi, que si un client change de ville, il faut faire un choix entre : changer la ville de ce membre (et donc changer les agrgats de cette ville), ce qui nest pas recome mand ; e ou insrer un nouveau membre pour ce client et sa nouvelle ville (cest le cas dans lexemple e prcdent). e e On peut en venir ` introduire un numro de version ` chaque membre et une date de cration pour a e a e chaque version. La cl primaire de la table de dimension est alors compose de deux colonnes : la cl de e e e substitution et le numro de version. Ca nest pas la solution que nous avons retenue ici. e Substitution des cls trang`res e e e Il reste encore ` traiter lintgrit rfrentielle des donnes qui vont tre charges dans la base a e e ee e e e dcisionnelle. Pour cela, il faut recalculer les cls trang`res avec les cls de substitution an que les e e e e e relations de la base dcisionnelle soient vries lors du chargement (cf. gure 22). e e e

17

ALIMENTATION DE LENTREPOT

81

Fig. 22 Evolution des tables clients et commandes au cours du processus ETL Malheureusement, certaines cls trang`res peuvent tre introuvables. Dans toutes les tables de die e e e mension, il faut donc prvoir un membre 0 qui permet de traiter ces relations invalides 22 . Ce membre 0 e est cr une bonne fois pour toutes dans chaque table de dimension de la base dcisionnelle : ee e
1 2 3

-- sur le server OLAP et dans la base decisionnelle INSERT clients_dimension (cle, NomPrenom, pays, region, ville) VALUES (0, autre, autre, autre, autre)

22. la numrotation des membres valides doit donc commencer ` 1 e a

17

ALIMENTATION DE LENTREPOT Exemple de lookup pour les cls trang`res de substitution (dans la base tampon) : e e e
1 2 3 4 5 6 7 8 9 10 11 12 13 14

82

-- traitement des relations valides UPDATE commandes_tampon SET client_cle_substitution = b.cle_substitution FROM commandes_tampon AS a JOIN clients_tampon AS b ON ( a.cmd_clt = b.clt_num AND a.source = b.source ) -- traitement des relations invalides UPDATE commandes_tampon SET client_cle_substitution = 0 WHERE client_cle_substitution IS NULL

Remarque : la phase de substitution est plus simple pour un schma en toile que pour un schma en e e e ocon. Il faut en tenir compte lors de la conception de la base dcisionnelle. e 17.3.3 Chargement

Comme les donnes sont charges dans la base dcisionnelle qui est muni dun schma relationnel, il e e e e faut charger ses tables dans cet ordre : dabord les tables qui ne contiennent aucune cl trang`re ; ee e ensuite les tables qui ne contiennent que des cls trang`res vers des tables dj` charges ; e e e ea e etc. Ensuite, pour chaque table, le chargement de dcompose en deux requtes : e e une pour les nouveaux membres ou faits ; et une pour les membres ou faits modis. e Exemple de chargement dans une table de dimension :
1 2 3 4 5 6 7 8 9 10 11 12 13 14

-- chargement des nouveaux membres INSERT SERVEROLAP.BaseDecisionnelle.dbo.clients_dimension SELECT cle_substitution, NomPrenom, ville, region, pays, age, profession FROM clients_tampon WHERE exists IS NULL -- modification des anciens membres UPDATE SERVEROLAP.BaseDecisionnelle.dbo.clients_dimension SET age = a.age, profession = a.profession FROM clients_tampon AS a JOIN SERVEROLAP.BaseDecisionnelle.dbo.clients_dimension AS b ON (a.cle_substitution = b.cle) WHERE a.exists = 1

18

INTERROGER UN CUBE Exemple de chargement dans une table des faits :


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

83

-- chargement des nouveaux faits INSERT SERVEROLAP.BaseDecisionnelle.dbo.commandes_faits SELECT cle_substitution, client_cle_substitution, date FROM commandes_tampon WHERE exists IS NULL -- modification des anciens membres UPDATE SERVEROLAP.BaseDecisionnelle.dbo.commandes_faits SET client_cle_substitution = a.client_cle_substitution date = a.date FROM commandes_tampon AS a JOIN SERVEROLAP.BaseDecisionnelle.dbo.commandes_faits AS b ON (a.cle_substitution = b.cle) WHERE a.exists = 1 Traitement

17.3.4

Le traitement des cubes intervient juste derri`re la phase ETL proprement dite. Il dagit dune e opration enti`rement ralise par Analysis Services, mais il sagit dune tche que lon peut inclure e e e e a dans le mme lot DTS que lETL. e Hormis pour le remplissage initial de lentrept, le traitement des cubes doit tre incrmental. Pour o e e cela, il est conseill de partitionner le cube avec notamment une partition spare pour lanne en cours, e e e e an de ne pas traiter les autres annes (qui, normalement, ne sont pas touches par les modications). e e

18

Interroger un cube

Avant de dcouvrir comment consulter un cube, dnissons quelques opration de navigation dans e e e un cube : le dpliage (drilldown) qui consiste ` passer ` un niveau infrieur dans une dimension ; e a a e le pliage (drillup ou rollup) qui consiste ` passer ` un niveau suprieur dans une dimension ; a a e le tranchage ou dcoupage (slice) qui consiste ` ne garder quune tranche du cube (une tranche e a tant une coupe du cube selon un membre) ; e le cubage (dice) qui sintresse ` plusieurs tranches ` la fois ; e a a et la rotation qui consiste ` choisir les dimensions que lon veut en colonnes et en lignes. a Avec ces cinq oprations, on peut naviguer dans les donnes (i.e. pratiquer le data surng). Il faut e e y ajouter une sixi`me opration : le drillthrough (traduit maladroitement par extraction dans Analysis e e Services, le terme de dsagrgration tant prfrable) qui permet de retrouver les donnes qui ont permis e e e ee e de calculer un agrgat. e

18.1

Requtes MDX e

La syntaxe pour rdiger une requte MDX est la suivante : e e WITH certaines notations SELECT les colonnes, les lignes et les autres axes FROM le cube WHERE les dimensions tranches et leur tranche (au singulier) e CELL PROPERTIES les informations contextuelles voulues pour les cellules

18

INTERROGER UN CUBE

84

Le rsultat dune telle requte est un tableau multidimensionnel dont les cellules ne contiennent e e quune valeur (contrairement aux cubes) et dans lequel on peut naviguer avec les oprations dcrites e e prcdemment. e e Parmi les dimensions du cube initial, certaines servent daxes (un axe contient les membres issus dun dpliage et/ou dun cubage) pour le rsultat (clause SELECT) et dautres de tranchage (clause WHERE) e e mais pas les deux ` la fois. a Pour MDX, les mesures constituent une dimension, et peuvent donc faire lobjet dun axe ou dun tranchage. Achons par exemple, le montant des ventes, avec en colonne lanne 2002 et en ligne la rgion PACA : e e
1 2 3 4

SELECT {temps.annee.[2002]} ON COLUMNS, {geographie.region.PACA} ON ROWS FROM ventes WHERE (measures.montant)

Le rsultat de cette requte est le suivant : e e 2002 56986.12

PACA

Remarques : noublier ni les accolades dans la clause SELECT ni les parenth`ses dans la clause WHERE ; e rappel : d`s quun intitul contient une espace, un accent ou commence par un chire, il faut le e e dlimiter par des crochets ; e si lintitul utilise un crochet fermant ], employer les doubles crochets fermants : e [Bill [William]] Clinton] pour des raisons qui deviendront claires au 18.4.2 page 93, si lintitul contient une quote , alors e il faut la doubler : [ks Choice] la syntaxe compl`te des noms de membres dans un cube est : e dimension . niveau . membre sil ny a pas de confusion possible on peut omettre la dimension et/ou le niveau ; si dans un mme niveau plusieurs membres ont le mme nom, prciser autant de parents que e e e ncessaire pour les distinguer : e dimension . [anctre le plus ancien] ... [grand-p`re] . [p`re] . membre e e e

18

INTERROGER UN CUBE Clause SELECT

85

18.1.1

La clause SELECT ore plusieurs possibilits. On peut acher : e plusieurs colonnes et plusieurs lignes :
1 2 3 4

SELECT {temps.annee.[1998], temps.annee.[2002]} ON COLUMNS, {geographie.region.PACA, geographie.pays.France} ON ROWS FROM ventes WHERE (measures.montant)

Rsultat : 2 colonnes et 2 lignes e 1998 133419.96 1458311.45 2002 56986.12 248996.54

PACA France

tous les enfants dun membre :


1 2 3 4

SELECT temps.annee.[1998].CHILDREN ON COLUMNS, {geographie.region.PACA} ON ROWS FROM ventes WHERE (measures.montant)

Rsultat : autant de colonnes quil y a denfants e Janvier 19856.45 Fvrier e 11458.58 Mars 7589.47 Avril 8799.15 ... ... Octobre 11589.45 Novembre 10569.65 Dcembre e 38360.35

PACA

tous les membres dun niveau :


1 2 3 4

SELECT temps.annee.MEMBERS ON COLUMNS, {geographie.region.PACA} ON ROWS FROM ventes WHERE (measures.montant)

Rsultat : autant de colonnes quil y a de membres e 1998 133419.96 1999 121598.45 2000 104789.56 2001 89634.25 2002 56986.12

PACA

une plage de membres :


1 2 3 4

SELECT {temps.annee.[1998] : temps.annee.[2001]} ON COLUMNS, {geographie.region.PACA} ON ROWS FROM ventes WHERE (measures.montant)

Rsultat : autant de colonnes que dannes entre 1998 et 2001 (inclus) e e 1998 133419.96 1999 121598.45 2000 104789.56 2001 89634.25

PACA

18

INTERROGER UN CUBE

86

Remarques : il ny a pas de confusion possible entre MEMBERS et CHILDREN puisque lun sapplique ` un niveau, a lautre ` un membre : a dimension . niveau . MEMBERS dimension . niveau . membre . CHILDREN on peut aussi utiliser : dimension . MEMBERS (les membres de tous les niveaux de la dimension) dimension . CHILDREN (les membres du niveau le plus lev) e e avant dutiliser loprateur :, sassurer de lordre dans lequel sont stocks les membres. e e 18.1.2 Mesures

On peut acher plusieurs mesures ` la fois. Mais comme le rsultat dune requte nautorise quune a e e valeur par cellule, il faut aligner les mesures selon un axe :
1 2 3

SELECT temps.annee.MEMBERS ON COLUMNS, {measures.montant, measures.NbCommandes} ON ROWS FROM ventes

Rsultat : sur tous les articles et dans tous les pays e 1998 1133419.96 2569 1999 1121598.45 2107 2000 1104789.56 1568 2001 189634.25 1474 2002 156986.12 978

montant nb

Les mesures forment donc naturellement une dimension nomme measures dans chaque cube. On e prcise quelle mesure acher dans la clause WHERE quand on en veut quune (cest une tranche du cube). e Et on est oblig den prciser au moins une, sans quoi une mesure est choisie par dfaut. e e e 18.1.3 Clause WHERE

On peut eectuer plusieurs dcoupes sur le cube. Reprenons par exemple la requte prcdente : e e e e
1 2 3 4

SELECT temps.annee.MEMBERS ON COLUMNS, {measures.montant, measures.NbCommandes} ON ROWS FROM ventes WHERE (produits.marque.Channel, geographie.pays.Italie)

Rsultat : sur tous les articles de la marque Channel et pour lItalie seulement e 1998 419.96 69 1999 598.45 107 2000 789.56 68 2001 634.25 74 2002 986.12 78

montant nb

Remarques : une dimension ne peut appara quune fois dans la clause WHERE ; tre si on veut plusieurs tranches dans une dimension, il faut en faire un axe ; on ne peut utiliser dans la clause WHERE ni MEMBERS ni CHILDREN. Le grand danger relatif aux dcoupes de cube, est que certaines applications MDX nachent pas les e tranches alors que cest une information indispensable pour comprendre les valeurs des mesures.

18

INTERROGER UN CUBE Description des axes

87

18.1.4

Une requte MDX autorise jusqu` 127 axes, mais videmment on ne peut pas dpasser le nombre e a e e de dimensions du cube +1 (avec la dimension measures). Les cinq premiers axes sont : COLUMNS, ROWS, PAGES, SECTIONS et CHAPTERS. Au-del` il faut utiliser : AXIS(5), ..., AXIS(126). a Exemple a quatre dimensions : `
1 2 3 4 5

SELECT temps.annee.MEMBERS ON COLUMNS, geographie.pays.MEMBERS ON ROWS, produits.article.MEMBERS ON PAGES, {measures.montant, measures.NbCommandes} ON SECTIONS FROM ventes

On peut aussi crer un rsultat ayant un seul axe : e e


1 2 3

SELECT temps.annee.MEMBERS ON COLUMNS FROM ventes WHERE (measures.montant)

Rsultat : les intituls de colonne et une seule ligne de rsultats (pas dintitul de ligne) e e e e 1998 1133419.96 1999 1121598.45 2000 1104789.56 2001 189634.25 2002 156986.12

Ou mme nayant aucun axe : e


1 2 3

SELECT FROM ventes WHERE (measures.montant)

Rsultat : une cellule contenant le montant total des ventes de toutes les annes pour tous les produits e e et partout (cest un mauvais exemple) 3706428.34 18.1.5 MDX vs. SQL

Comme on vient de le voir, les requtes MDX ressemblent beaucoup aux requtes SQL de slection. e e e Ceci dit, notons quand mme des dirences fondamentales : e e la syntaxe des clauses SELECT et WHERE na rien ` voir ; a la clause FROM nadmet quun seul cube, en MDX ; les clauses SQL GROUP BY, HAVING et ORDER BY nexistent pas en MDX ; et il existe dautres clauses spciques ` MDX (WITH et CELL PROPERTIES). e a

18

INTERROGER UN CUBE

88

18.2

Filtrage des donnes e

Jusqu` maintenant, la clause SELECT na servi qu` slectionner les membres que lon peut dsigner. a a e e Si on veut faire intervenir un crit`re plus complexe, comme : ne garder que les membres dont une mesure e est dans une certaine plage, alors il faut utiliser la fonction MDX : FILTER(les membres ` lter, (le crit`re)) a e

Par exemple, pour nacher que les annes pour lesquelles on a vendu pour plus de 100000 : e
1 2 3

SELECT FILTER(temps.annee.MEMBERS, (measures.montant > 113000)) ON COLUMNS FROM ventes WHERE (measures.montant)

Rsultat : il ne reste que les annes concernes par le crit`re e e e e 1998 1133419.96 2001 189634.25 2002 156986.12

Remarques : la mesure dans la clause WHERE nest pas obligatoirement la mme que celle utilise dans le ltre ; e e le crit`re peut faire appel aux fonctions MDX (cf. aide en ligne). e Exemple : pour ne garder que les pays qui ont vendu plus que la France, lItalie et lAllemagne
1 2 3 4 5

SELECT FILTER(geographie.pays.MEMBERS, (measures.montant > MAX({France, Italie, Allemagne}, measures.montant) )) ON COLUMNS FROM ventes WHERE (measures.montant)

-- ici

Remarque : MDX ore toutes les fonctions dagrgat (mais avec deux arguments) ainsi que MEDIAN. e Si le crit`re ne porte pas directement sur les agrgats des membres ` ltrer mais sur des valeurs plus e e a nes, alors il faut faire appel ` la notion de tuple pour dcrire ces valeurs. Le tuple est la gnralisation a e e e de la notion de couple et de triplet, il correspond aux coordonnes des valeurs voulues dans le cube. e Exemple de tuple : le montant des ventes pour le mois de janvier 2002 se note par le couple : ([2002].janvier, measures.montant)

Autre exemple : le nombre de commandes du client Razibus en France et en 1999 se note par le quadruplet : (clients.Razibus, geographie.France, temps.[1999], measures.NbCommandes) Remarques : lordre a parfois de limportance dans un tuple ; les composantes dun tuple doivent tre issues de dimensions direntes. e e

18

INTERROGER UN CUBE

89

Avec cette notation, on peut par exemple ltrer les articles pour lesquels les ventes ont augment e entre janvier 2001 et janvier 2002 :
1 2 3 4 5

SELECT FILTER(produits.article.MEMBERS, (([2001].janvier, measures.montant) < ([2002].janvier, measures.montant)) ) ON COLUMNS FROM ventes WHERE (measures.NbCommandes) -- on nest pas oblige dafficher le montant

Remarque : les membres ` ltrer peuvent tre dnis en plusieurs fois. Par exemple, pour ltrer les a e e mois de 2001 et de 2002 pendant lesquels il a t vendu pour un montant suprieur ` 10 000 : ee e a
1 2 3

SELECT FILTER({[2001].CHILDREN, [2002].CHILDREN}, (measures.montant > 10000)) ON COLUMNS ...

Remarque : on peut acher les deux montants utiliss dans le ltre e


1 2 3 4 5 6

SELECT FILTER(produits.article.MEMBERS, (([2001].janvier, measures.montant) < ([2002].janvier, measures.montant)) ) ON COLUMNS, {([2001].janvier, measures.montant), ([2002].janvier, measures.montant)} ON ROWS FROM ventes

Complments e Sans utiliser la fonction FILTER, on peut liminer simplement les membres qui ne contiennent pas de e donnes : e SELECT NON EMPTY {...} ON COLUMNS Par ailleurs, on peut ne garder que les membres extremaux avec la fonction : TOPCOUNT(les membres ` ltrer, le nombre voulu, (la mesure pour tablir le classement)) a e Filtrons par exemple les 10 articles les plus vendus :
1 2 3

SELECT TOPCOUNT(article.MEMBERS, 10, (measures.NbCommandes)) ON COLUMNS ...

Remarques : l` aussi, on peut dcrire les membres ` ltrer en plusieurs fois (en utilisant des accolades) ; a e a l` aussi, on peut employer un tuple en troisi`me argument ; exemple : les 10 articles les plus vendus a e en 1998 :
1 2 3

SELECT TOPCOUNT(article.MEMBERS, 10, (measures.NbCommandes, [1998])) ON COLUMNS ...

on a videmment la fonction BOTTOMCOUNT (mme syntaxe) ; e e il existe aussi TOPSUM et TOPPERCENT (cf. laide en ligne).

18

INTERROGER UN CUBE

90

18.3

Disposition des rsultats e

On peut encore rendre les requtes MDX plus complexe lorsque lon chercher ` rorganiser les rsultats. e a e e 18.3.1 Ordonner les axes

Pour ordonner les membres dans un axe et selon une mesure (et non pas par ordre alphabtique), on e utilise dans la clause SELECT la fonction : ORDER(les membres ` trier, (la mesure selon laquelle trier), ASC ou DESC) a

Exemple, pour ordonner les annes de la plus lucrative ` la moins lucrative : e a


1 2

SELECT ORDER(annee.MEMBERS, (measures.montant), DESC) ON COLUMNS ...

Remarques : on peut faire appel aux tuples pour dsigner le crit`re de tri ; exemple, les annes de la plus lucrative e e e a ` la moins lucrative en France :
1 2

SELECT ORDER(annee.MEMBERS, (measures.montant, pays.France), DESC) ON COLUMNS ...

` nouveau, on peut dcrire les membres ` trier en plusieurs fois (en utilisant des accolades). Par a e a exemple, trions les mois de 2000 et de 2001 selon le montant des ventes de pinceaux :
1 2 3

SELECT ORDER({[2000].CHILDREN, [2001].CHILDREN}, (produits.pinceau, measures.montant), ASC) ON COLUMNS ...

Mais le probl`me avec ASC et DESC est que la hirarchie est respecte (dans notre exemple, les mois e e e de 2000 seront tris sparemment des mois de 2001). Pour ne pas tenir compte de la hirarchie, il sut e e e dutiliser BASC et BDESC. 18.3.2 Axes pluridimensionnels

On a parfois besoin que le rsultat ne comporte que deux axes (ne serait-ce que pour limprimer), e sans pour autant perdre la possibilit dutiliser 3 dimensions ou plus dans la clause SELECT. La solution e consiste ` reprsenter plusieurs dimensions par axe. Pour cela, on utilise les tuples. a e Exemple, prsentons ` la fois les annes et les pays en colonne : e a e
1 2 3

SELECT {(France,[2000]), (France,[2001]), (Italie,[2000]), (Italie,[2001])} ON COLUMNS ...

Rsultat : certains intituls sont multicolonnes e e France 2000 2001 Italie 2000 2001

18

INTERROGER UN CUBE

91

Remarques : dans ce cas, lordre ` lintrieur de chaque tuple a de limportance ; a e les tuples doivent tre homog`nes (cest-`-dire prsenter les mmes dimensions et dans le mme e e a e e e ordre). Si on veut ensuite dtaill chaque anne selon les produits A, B et C, on voit tout de suite que la clause e e e SELECT serait longue ` crire (12 triplets). Heureusement, on peut gnrer les tuples par produit cartsien : ae e e e
1 2 3 4 5 6 7

SELECT CROSSJOIN({France, Italie}, {[2000], [2001]}) ON COLUMNS ... -- donne la meme chose que precedemment SELECT CROSSJOIN(CROSSJOIN({France, Italie}, {[2000], [2001]}), {A, B, C}) ON COLUMNS ...

Rsultat : trois dimensions sur laxe des colonnes e France 2000 A B C A 2001 B C A 2000 B C A Italie 2001 B C

18.4

Clause WITH

Comme on la dj` vu, les requtes MDX prsentent une derni`re clause, la clause WITH qui ore la ea e e e possibilit de dnir certains objets avant le dbut du SELECT. e e e Les objets dnis dans une clause WITH ne sont visibles que dans la clause SELECT qui suit. Cest e pourquoi Analysis Services propose galement de les dnir dans lditeur de cube an quils soient utie e e lisables par toutes les requtes. e Comme la syntaxe est la mme, nous nous contentons ici dutiliser la clause WITH. e 18.4.1 Membres calculs e

Un membre calcul est un membre supplmentaire dont la dnition repose sur les membres dj` e e e ea prsents dans le cube. Il sagit dun calcul entre membres dont le rsultat peut tre utilis comme un e e e e membre ` part enti`re. a e Exemple : ` partir des membres juillet 2001 et juillet 2002, on peut dnir un membre calcul a e e qui reprsente la progression entre juillet 2001 et juillet 2002 ainsi : e
1 2 3 4 5 6

WITH MEMBER temps.[de juillet 2001 a juillet 2002] -- le nom complet AS temps.[2002].juillet - temps.[2001].juillet -- lexpression du calcul SELECT {temps.[2001].juillet, temps.[2002].juillet temps.[de juillet 2001 a juillet 2002]} ON COLUMNS FROM ventes WHERE (measures.montant)

18

INTERROGER UN CUBE

92

Rsultat : la troisi`me colonne prsente la progression du chire daaire entre juillet 2001 et juillet e e e 2002 juillet 2001 10186.12 juillet 2002 9486.78 de juillet 2001 a juillet 2002 -699.35

Jusquici on sest content dutiliser les mesures brutes (tel quelles sont stockes dans le cube). Si e e on veut acher des mesures plus complexes, il sut de dnir un membre calcul en fonction dautres e e mesures. Si, par exemple, on dispose des mesures montant et quantite alors on peut dnir le membre calcul e e prix unitaire :
1 2 3 4 5

WITH MEMBER measures.prix_unitaire -- le nom complet AS measures.montant / measures.quantite -- lexpression du calcul SELECT article.MEMBERS ON COLUMNS FROM ventes WHERE (measures.prix_unitaire)

Les membres calculs ne sont pas retourns par dfaut par la fonction MEMBERS, il faut utiliser la fonce e e tion ADDCALCULATEDMEMBERS. Si on veut voir appara le nouvelle mesure prix unitaire par exemple : tre
1 2 3 4 5

WITH MEMBER measures.prix_unitaire AS measures.montant / measures.nb SELECT ADDCALCULATEDMEMBERS(measures.MEMBERS) ON COLUMNS FROM ventes WHERE (temps.[2001])

Remarques : les valeurs des membres calculs ne sont pas stockes dans le cube, mais calcules ` la vole (ce qui e e e a e ralentit raisonnablement les requtes) ; e le membres calculs peuvent tre utiliss dans la clause WHERE (cest dailleurs la seule faon defe e e c fectuer une tranche qui concerne plusieurs membres de base du cube). Ordre de rsolution e Il est parfois ncessaire de prciser dans quel ordre les membres calculs doivent tre calculs. Cest e e e e e le cas notamment lorsque lon combine pourcentage et dirence. e Considrons lexemple suivant : e
1 2 3 4 5 6 7 8

WITH MEMBER temps.[de juillet 2001 a juillet 2002] AS temps.[2002].juillet - temps.[2001].juillet MEMBER measures.[profit (en pourcentage)] AS 100 * (measures.montant - measures.cout) / measures.cout SELECT {measures.montant, measures.cout, measures[profit (\%)]} ON COLUMNS, {temps.[2001].juillet, temps.[2002].juillet temps.[de juillet 2001 a juillet 2002]} ON ROWS FROM ventes

18

INTERROGER UN CUBE

93

Cette requte produit le rsultat suivant : la derni`re cellule ne contient pas forcment ce que lon veut e e e e montant 10186.12 9486.78 -699.35 cout 8451.00 7569.50 -881.5 prot (%) 20 25 -20

juillet 2001 juillet 2002 de juillet 2001 a juillet 2002

Pour obtenir la progression du prot en pourcentage il sut de prciser que le membre calcul [de e e juillet 2001 a juillet 2002] doit tre calcul apr`s le membre calcul [profit (%)] : e e e e
1 2 3 4 5 6 7 8 9 10

WITH MEMBER temps.[de juillet 2001 a juillet 2002] AS temps.[2002].juillet - temps.[2001].juillet, SOLVE_ORDER = 2 MEMBER measures.[profit (en pourcentage)] AS 100 * (measures.montant - measures.cout) / measures.cout, SOLVE_ORDER = 1 SELECT {measures.montant, measures.cout, measures[profit (\%)]} ON COLUMNS, {temps.[2001].juillet, temps.[2002].juillet temps.[de juillet 2001 a juillet 2002]} ON ROWS FROM ventes

Auquel cas nous obtenons bien le pourcentage recherch : e montant 10186.12 9486.78 -699.35 cout 8451.00 7569.50 -881.5 prot (%) 20 25 5

juillet 2001 juillet 2002 de juillet 2001 a juillet 2002

Mise en forme des membres calculs e Dautres options sont disponibles dans la clause MEMBER (cf. laide en ligne). Comme par exemple, une description du format numrique ` employer : e a
1 2 3 4

WITH MEMBER measures.prix_unitaire AS measures.montant / measures.quantite, FORMAT_STRING = #.## euros SELECT ... Jeux nomms e

18.4.2

Si un ensemble de membres est souvent utiliss dans des requtes MDX, il est intressant de le dnir e e e e une bonne fois pour toutes et de lui donner un nom. Cest ce que lon appelle un jeu (sous-entendu de membres) nomm. e Si, par exemple, les 10 articles les plus vendus reviennent souvent alors on peut dnir un jeu nomm e e ainsi :
1 2 3 4 5

WITH SET MeilleursArticles -- le nom AS TOPCOUNT(article.MEMBERS, 10, measures.quantite) -- lexpression SELECT MeilleursArticles ON COLUMNS FROM ventes WHERE (measures.nb)

18

INTERROGER UN CUBE

94

Dans la dnition dun jeu nomm, on peut utiliser les fonctions ensemblistes UNION, EXCEPT et e e INTERSECT. Exemple :
1 2 3 4 5 6 7 8 9 10 11

WITH SET MeilleursArticles AS TOPCOUNT(article.MEMBERS, 10, (measures.quantite)) SET ArticlesLesPlusCher AS TOPCOUNT(article.MEMBERS, 10, (measures.prix_unitaire)) SET MeilleursArticlesEtArticlesLesPlusCher AS UNION(MeilleursArticles, ArticlesLesPlusCher) SET MeilleursArticlesSaufLesPlusCher AS EXCEPT(MeilleursArticles, ArticlesLesPlusCher) SET MeilleursArticlesQuiSoientParmisLesPlusCher AS INTERSECT(MeilleursArticles, ArticlesLesPlusCher) SELECT ... Cellules calcules e

18.4.3

Il existe un troisi`me objet que lon peut dnir dans la clause WITH, il sagit des cellules calcules e e e (CELL CALCULATION). Mais cet objet est trop complexe pour entrer dans le cadre de ce document. Le lecteur est donc dirig vers laide en ligne et [12] pour dcouvrir cette notion. e e 18.4.4 Prcisions e

Si un intitul comporte une quote , alors elle doit tre double an de ne par interfrer avec la e e e e dlimitation de lexpression : e
1 2

WITH MEMBER article.[Tous les albums de ks Choice] AS SUM({[ks Choice - Cocoon Crash], [ks Choice - Paradise in me]})

Si on dsire introduire plusieurs notations dans la clause WITH, il sut de les juxtaposer (les virgules e sont rserves aux proprits des membres calculs) : e e ee e
1 2 3 4

WITH MEMBER ... AS ... MEMBER ... AS ... SET ... AS ... SELECT ...

18.5

Clause CELL PROPERTIES

Par ailleurs, on peut contrler les proprits de cellule que lon veut acher dans la fentre contextuelle o ee e (qui appara au clic droit sur une cellule) ` laide la derni`re clause des requtes MDX. Par exemple, t a e e pour nacher que lordinal et la valeur formatte : e
1 2 3 4

SELECT ... FROM ... WHERE ... CELL PROPERTIES CELL_ORDINAL, FORMATTED_VALUE

18

INTERROGER UN CUBE

95

18.6

Fonctions MDX

Dans ces requtes on peut ` tout moment utiliser une multitude dautres fonctions oertes par MDX e a ` (cf. laide en ligne et [12]). A commencer par la fonction : IIF(condition, si vrai, si faux ) Exemple : achons oui ou non en deuxi`me colonne selon que les articles se sont vendus moins de e 200 fois ou non :
1 2 3 4 5 6

WITH MEMBER measures.MauvaisArticle AS IIF(measures.quantite < 200, "oui", "non") SELECT {measures.quantite, measures.MauvaisArticle} ON COLUMNS, article.MEMBERS ON ROWS FROM ventes WHERE (temps.[2001])

MDX ore aussi la fonction ISEMPTY et qui permet de remplacer la valeur NULL par 0 (par exemple) :
1 2 3 4 5

WITH MEMBER measures.[quantite corrigee] AS IIF(ISEMPTY(measures.quantite), 0, measures.quantite) SELECT temps.[2003].CHILDREN ON COLUMNS, article.MEMBERS ON ROWS FROM ventes WHERE (measure.[quantite corrigee])

Remarque : dans la condition de la fonction IIF, on peut utiliser le mot-cl NOT. e Autre exemple, pour retrouver un anctre : slectionner la rgion dans laquelle se trouve la ville de Nice e e e
1 2

SELECT {ANCESTOR(Nice,region)} ON COLUMNS ...

Remarques : le premier argument doit tre un membre unique ; e le deuxi`me argument est soit le niveau auquel on monte, soit le nombre de niveaux ` monter. e a Exemple pour retrouver les descendants : slectionner les articles de la marque Channel e
1 2

SELECT DESCENDANTS(Channel, article) ON COLUMNS ...

Remarques : le premier argument doit tre un membre unique ; e le deuxi`me argument est soit le niveau auquel on descend, soit le nombre de niveaux ` descendre. e a Dernier exemple : pour dnir une colonne dagrgat qui comprend la France et lItalie par exemple e e
1 2 3 4 5

WITH MEMBER geographie.[France et Italie] AS AGGREGATE({France, Italie}) SELECT {France, Italie, [France et Italie]} ON COLUMNS, Measures.MEMBERS ON ROWS FROM ventes

La fonction AGGREGATE utilise alors la fonction dagrgation approprie ` chaque mesure. e e a

19

OBJETS VIRTUELS

96

18.7

Conclusion

On aboutit ` la stratgie suivante pour llaboration dune requte MDX : a e e e 1. remplir la clause FROM avec le cube sur lequel on travaille ; 2. dnir dans la clause WITH les membres calculs, les jeux nomms et les cellules calcules locaux ; e e e e 3. dterminer les tranches voulues pour remplir le tuple de la clause WHERE ; e 4. pour chaque axe de la clause SELECT (et dans lordre) : (a) dterminer les dimensions et les membres concerns ; e e (b) ltrer ventuellement ces membres avec FILTER, NON EMPTY et/ou TOPCOUNT ; e (c) ordonner ventuellement les membres restants avec ORDER : e (d) lister apr`s le mot-cl PROPERTIES les proprits de membres (cf. 19.1 page 96) que lon veut e e ee ajouter aux proprits de cellule. ee 5. lister dans la clause CELL PROPERTIES les proprits de cellule (cf. 18.5 page 94) que lon souhaite ee avoir ` disposition. a

19

Objets virtuels

Sont regroupes ici quelques notions importantes qui permettent une plus grande souplesse dans la e gestion des informations.

19.1

Proprit de membre e e

Une proprit de membre est une information relative ` un niveau, stocke dans la table de dimension ee a e concerne, mais qui ne participe pas ` la hirarchie. e a e Dans la dimension temps par exemple, linformation lundi, mardi, ..., dimanche relative au niveau jour est une proprit des membres 1, 2, ..., 31. Dans la table de dimension temps, cette donnes que ee e lon peut appeler JourDeLaSemaine est stocke dans une colonne supplmentaire contenant les valeurs e e 1, 2, ..., 7 (se mer car 1 ne correspond pas forcment au lundi). e e Autres exemples de proprits de membres : ee le coloris dun article ; la population dune ville. Il va sans dire que pour tre utilisables, ces proprits de membres doivent tre prsentes dans la base e ee e e dcisionnelle (et donc prvues ` lavance an que lETL puisse les alimenter). e e a An dacher une proprit de membre dans un requte MDX, il sut de la prciser dans la zone ee e e PROPERTIES de la clause SELECT. Exemple : on dsire acher la couleur et la taille des articles ainsi que le genre des clients : e
1 2 3 4 5 6 7

SELECT produits.article.MEMBERS PROPERTIES produits.article.couleur, produits.article.taille ON COLUMNS, clients.MEMBERS PROPERTIES clients.genre ON ROWS FROM ventes WHERE (measures.montant)

19

OBJETS VIRTUELS

97

Dans certaines applications MDX, ces informations ne sont pas disponibles directement sur le rsultat e de la requte. Il faut alors cliquer droit sur la cellule dsire an dobtenir les proprits de la cellule. e e e ee Mais par ailleurs, les proprits de membres permettent de rpartir les donnes en catgories au mme ee e e e e titre que les niveaux. Mais pour quelles soient utilises comme les niveaux il faut introduire la notion de e dimension virtuelle.

19.2

Dimension virtuelle

Jusqu` maintenant nous navons abord que les dimensions physiques dun cube. Une dimension a e virtuelle est une dimension purement logique, fonde sur une dimension physique, et dont les niveaux e sont choisis parmi toutes les colonnes ce cette dimension, y compris les colonnes proprits de membre. ee Lintroduction dune colonne virtuelle ne modie pas le stockage du cube. Cest simplement une nouvelle faon dorganiser les donnes. c e Par exemple, avec une dimension virtuelle semaine dont le seul niveau est JourDeLaSemaine, on peut comparer les ventes des lundis aux ventes des mardis (ce que lon ne pouvait pas faire avec la dimension physique temps sous-jacente). Remarques : on peut utiliser les dimensions virtuelles dans les requtes MDX (en tant quaxe ou dcoupage) ; e e les agrgats relatifs aux dimensions virtuelles ne sont pas stocks dans le cube mais calculs ` la e e e a vole ce qui induit un ralentissement des requtes y faisant appel. e e Exemple :
1 2 3

SELECT semaine.JourDeLaSemaine.MEMBERS ON COLUMNS FROM ventes WHERE (measures.montant)

19.3

Cube virtuel

Le cube virtuel est aux cubes, ce que la vue est aux tables, cest-`-dire : a soit un sous-cube ; soit une combinaison de plusieurs cubes (qui ont des dimensions communes) en un cube logique. Exemples de cubes virtuels : le cube MiniVentes qui ne garde que les dimensions temps et geographie et uniquement la mesure montant du cube physique ventes ; si on a les cubes physiques VentesEntreprise1 et VentesEntreprise2, on peut utiliser un cube virtuel pour les regrouper en un seul (mauvais exemple, car on on aurait plutt tendance ` fusionner o a les bases dcisionnelles et les cubes physiques dans ce cas) ; e les cubes sur les ventes, sur la production et sur lapprovisionnement peuvent tre physiquement e spars et rassembls dans un cube virtuel grce ` leurs dimensions communes (le temps et les e e e a a produits, par exemple). Remarques : les cubes virtuels ne contiennent que des dnitions, pas de donnes ; e e il faut pourtant les traiter, ce traitement consiste uniquement ` tablir les liens internes vers les ae dimensions et les mesures concernes et ventuellement ` dclencher le traitement des cubes souse e a e jacents ; de mme que la vue, le cube virtuel est un lment : e ee de scurit car il peut masquer aux utilisateurs les donnes qui ne le concernent pas ; e e e

20

EXPLORATION DE DONNEES

98

et de simplicit car il permet de masquer les donnes inutiles et de regrouper les donnes utiles e e e selon les utilisateurs ; une requte MDX peut porter sur un cube virtuel (clause FROM), cest dailleurs la seule faon e c dutiliser plusieurs cubes. Exemple : le cube utilis dans la requte donne en exemple pour introduire lordre de rsolution (cf. e e e e page) est vraisemblablement virtuel car les deux mesures montant et cout nont pas le mme grain (le e cot dun produit ne dpend pas du client qui lach`te). Elles appartiennent donc ` deux cubes physiques u e e a distincts (si lentrept est bien conu) qui ont pour dimensions communes temps et produits. o c

20

Exploration de donnes e

En anglais on parle de data mining. Cest lensemble des techniques qui permettent de construire des mod`les dun entrept de donnes historises (i.e. avec une dimension temps) an de dcrire et/ou de e o e e e prdire des tendances et les r`gles qui les rgissent. e e e Le march mondial du data mining est fortement domin par Enterprise Miner (SAS). Les autres e e produits disponibles sont : Clementine de SPSS, Knowledge Seeker de Angoss et Intelligent Miner de IBM. Oracle propose aussi des fonctionnalits de data mining depuis le rachat de Thinking Machines. e Il sagit simplement ici de dcouvrir les quelques fonctionnalits oertes par Analysis Services. e e

20.1

Mod`les e

Il existent de nombreux algorithmes de data mining (cf. [11]), Analysis Services en ore deux : lorganisation en clusters (groupage) ; et larborescence de dcision. e

20.1.1

Clustering

Avant toute chose, on appelle classication toute technique visant ` composer des classes dobjets a homog`nes (autrement dit pour nous : former des ensembles de donnes ayant des caractristiques come e e munes). Par exemple si on note sur un graphe les boissons favorites de direntes personnes classes selon leur e e a ge en abscisse et selon la boisson propose en ordonne, alors on pourra vraisemblablement regrouper e e les jeunes autour des sodas, les plus gs autour des vins et les autres autour des bi`res (cf. gure 23). a e e

Fig. 23 Exemple de classication

20

EXPLORATION DE DONNEES

99

Le clustering est une technique de classication utilisant une fonction distance pour sparer les e groupes. Exemple de distance : la distance euclidienne dans RM , avec M le nombre de caractristiques (ou e variables explicatives) m (pour nous, ces caractristiques sont des mesures ou proprits de membre) e ee utilises pour distinguer les groupes. La distance sparant deux objets i et j tant alors : e e e
1/2

d(i, j) =
m

m(j) m(i)

Exemple de groupage sappuyant sur une distance : la mthode des k-moyennes (ou mthode des e e centres mobiles). On veut classer N objets en K groupes (avec K N ), pour cela : choisir K objets initiaux appels centres des K-groupes (au hasard) ; e placer chacun des N objets dans le groupe dont le centre est le plus proche (utilisation de la distance d) ; recalculer le centre de chaque groupe (barycentrage) ; et itrer les deux tapes prcdentes jusqu` ce que plus aucun objet ne change de groupe. e e e e a Une fois que les groupes ont t tablis sur un chantillon reprsentatif, on est en mesure de mieux eee e e conna tout nouvel objet, grce ` son appartenance ` une classe homog`ne (dont on conna le comtre a a a e t portement), simplement en examinant ses caractristiques. e Exemple dutilisation : (commercial) grouper les clients an de cibler lenvoi dores promotionnelles ; (assurances) grouper les socitaires an de dterminer si un nouveau client est able. e e Remarques : un cluster solide est constitu dune population signicative (i.e. dont la tendance centrale est e fonci`rement dirente des autres, et dune dispersion faible) ; e e si la population dun cluster est trop faible, il est prfrable de le grouper avec un autre ; ee si le cluster est trop dispers, il est prfrable de le scinder et de relancer le processus sur les e ee sous-groupes ; certains cluster peuvent tre diciles ` expliquer. e a 20.1.2 Arbre de dcision e

Pour aller plus loin dans lexploration des donnes, on peut essayer de dterminer des r`gles de come e e portement. Exemple de r`gle : un client qui a achet un monospace est gnralement mari avec au moins deux e e e e e enfants. Le principe de fonctionnement dun arbre de dcision est le suivant : e pour expliquer une variable, le syst`me recherche le crit`re le plus pertinent et dcoupe la population e e e en sous-populations possdant la mme valeur pour ce crit`re (phase dexpansion) ; e e e un nud dans larbre est terminal (cest-`-dire une feuille) si sa population ne contient plus assez a dindividus pour tre subdivise ; e e les branches non pertinentes sont limines (phase dlagage) ; e e e le processus reprend avec les autres nuds jusqu` ce quil ne reste que des feuilles ou jusqu` a a puisement des crit`res. e e Exemple darbre : la variable ` expliquer est le fait dacheter un monospace. Le premier crit`re trouv a e e par le syst`me est le nombre denfants. Les branches ` 2 enfants et 3 enfant ou plus peuvent tre dtailles e a e e e selon un deuxi`me crit`re, ` savoir le fait dtre mari ou non. Les branches les plus pesantes sont alors e e a e e

20

EXPLORATION DE DONNEES

100

Fig. 24 Exemple darbre de dcision e pour les personnes maries. On peut alors conclure ` la r`gle ci-dessus. e a e Remarques : la construction dun arbre fait appel ` plusieurs notions statistiques : a 2 : au test du ` lindice de puret de Gini ; a e ` un fonction dentropie ; a les arbres sont gnralement bien apprcis car les r`gles trouves sont tr`s explicites et la visualie e e e e e e sation est intuitive ; mais lalgorithme est tr`s coteux. e u

20.2

Implmentation e

Intressons-nous maintenant ` limplmentation des ces algorithmes. Dune mani`re gnrale, il est e a e e e e tr`s dicile de savoir comment sont implmentes les choses dans SQL Server. Cette section se fonde sur e e e deux articles publis par le centre de recherche de Microsoft (cf. [2] et [5]). e 20.2.1 Vocabulaire

Les donnes ncessaires au data mining se prsentent sous la forme dune table ayant N lignes, M coe e e lonnes explicatives A1 , . . . , AM (crit`res, caractristiques) et une colonne ` expliquer B. B est forcment e e a e qualitative 23 , sinon il sagit dun probl`me de rgression. e e Analysis Services emploie le vocabulaire suivant : un cas est une des N lignes ; lentit prvue est la variable ` expliquer B ; e e a les attributs sont les variables explicatives A1 , . . . , AM ; et la table des cas est : A1 a1 a1 . . . A2 a2 a2 . . . ... B b1 b2 . . .

23. si B est continue, elle est discrtise en plusieurs intervalles e e

20

EXPLORATION DE DONNEES

101

En pratique pour nous, les colonnes A1 , . . . , AM sont soit des mesures, soit des proprits de membres ee contenues dans un cube (ventuellement virtuel). La table des cas est donc construite ` partir de la table e a des faits en jointure avec les tables de dimension concernes par les proprits de membres. e ee 20.2.2 Prparation des donnes e e

Les donnes de la table des cas sont trop volumineuses pour entrer en mmoire centrale. En ralit, e e e e un ensemble rduit de statistiques sur ces cas sut pour mener les algorithmes prcdents. Il sagit de la e e e table de comptage des co-occurrences (note CC) constitue de quatre colonnes : e e colonne A1 A1 A2 A2 . . . valeur a1 a1 a2 a2 . . . classe b1 b2 b1 b2 . . . nombre 20 38 44 12 . . .

Remarques : la table CC est beaucoup moins volumineuse ; les calculs seectuent ensuite uniquement ` partir de la table CC ; a il est possible de construire la table CC en ne lisant les donnes quune seule fois. e Pour calculer larbre de dcision, lorsque lattribut le plus pertinent est A2 , le calcul du poids de la e branche a2 utilisera les lignes de CC o` A2 = a2 . Ensuite, si lattribut suivant est A1 le poids de la u branche a1 dans la branche a2 utilisera les lignes de CC o` A2 = a2 et A1 = a1 . u Table des cas non pivote e Pour remplir la table CC, il est prfrable de ne pas partir directement de la table des cas, mais de ee mettre la table des cas sous la forme suivante (appele UnpivotedCases) : e ligne 1 1 2 2 . . . classe b1 b1 b2 b2 . . . colonne A1 A2 A1 A2 . . . valeur a1 a2 a1 a2 . . .

En eet, la table CC est alors le rsultat de la requte simple suivante : e e


1 2 3

SELECT colonne, valeur, classe, COUNT(*) FROM UnpivotedCases GROUP BY colonne, valeur, classe

20

EXPLORATION DE DONNEES Remarques : UnpivotedCases est calcule ` partir de la table des cas grce ` un nouvel oprateur : e a a a e
1

102

UnpivotedCases = Cases.UNPIVOT(valeur FOR colonne IN(A1, A2, ...))

la force de cet oprateur est que la cration de CC fait appel ` une seule lecture des donnes. e e a e Bref (cf. gure 25) : les calculs se font sur la table CC ; la table CC est calcule ` partir de la table des cas non pivote par une requte de dnombrement e a e e e simple ; la table des cas non pivote est issue de la table des cas grce ` loprateur UNPIVOT ; e a a e la table des cas est obtenue par jointure entre la table des faits et les tables de dimension.

Fig. 25 Prparation des donnes pour le data mining e e

20.2.3

Objets supplmentaires e

Le rsultat dun mod`le de mining dans un cube, constitue une nouvelle dimension de ce cube. Cette e e dimension est cre automatiquement et : ee pour le clustering, chaque cluster constitue un membre (un seul niveau) ; pour les decision trees, larbre correspond ` la hirarchie de cette dimension. a e Cette dimension est virtuelle. Les donnes relatives ` un mod`le de mining sont alors consultables ` e a e a travers un cube virtuel (cr automatiquement) regroupant le cube de dpart et cette nouvelle dimension. ee e Exemple :
1 2 3 4

SELECT produits.monospace.MEMBERS ON COLUMNS, mining_clients.[mari].CHILDREN ON ROWS e FROM ventes WHERE (measures.NbCommandes)

20

EXPLORATION DE DONNEES

103

20.3

Prdiction e

Les mod`les de mining prcdents permettent dextraire des tendances et des r`gles de nos donnes. e e e e e Il est intressant maintenant de se servir de ces connaissances pour prvoir les futures donnes. e e e 20.3.1 Rseau de dpendances e e

Cest un rseau dont les nuds sont les variables (explicatives ou ` expliquer) et dont les liens sont die a rigs de la variable qui prdit vers celle qui est prdite. Les liens sont dautant plus forts que la prdiction e e e e est able. Ce rseau permet de voir prcisment quels facteurs sont utiles ` la prdiction de tel facteur (en se e e e a e basant sur les donnes du mod`le). e e 20.3.2 Donnes prvisionnelles e e

Apr`s avoir cr un mod`le de mining, il est possible avec lutilitaire DTS (cf. 17 page 75) de remplir e ee e une nouvelle colonne B avec de nouvelles valeurs pour les colonnes A1 , . . . , AM (cf. gure 26). Il sagit

Fig. 26 Mcanisme de prdiction e e simplement dune tche que lon peut insrer dans un lot. a e

20.4

Conclusion

Le data mining fait appel ` de nombreux calculs de statistiques et permet denrichir la valeur des a donnes contenues dans lentrept. Dautres techniques (comme les rseaux neuronaux ou lanalyse de e o e panier) seront sans doutes fournies dans les prochaines versions du logiciel.

CONCLUSION

104

Conclusion sur la partie dcisionnelle e


On peut rsumer le syst`me dcisionnel ainsi (cf. gure 27) : e e e les bases de production gres en OLTP fournissent les donnes ; ee e lutilitaire DTS traite ces donnes pour alimenter les cubes OLAP (phase dextraction) ; e ces cubes sont l` pour organiser et agrger les donnes pour les requtes MDX et les mod`les de a e e e e mining (phase de stockage) ; des interfaces graphiques (que ce soit des requteurs comme Business Objects, des tableurs comme e Excel ou des SIAD pour Syst`me Interactif dAide ` la Dcision, ou en anglais, EIS pour Executive e a e Information System) permettent grce ` cela de slectionner et dexplorer les donnes (phase de a a e e consultation) ; les informations et les connaissances sont alors exploitables (phase de prsentation). e

Fig. 27 Schma du syst`me dcisionnel e e e Dans lentreprise les rles concernant le syst`me dcisionnel se rpartissent ainsi : o e e e les concepteurs de lentrept de donnes se charge de mettre en place le schma relationnel de la o e e base dcisionnelle, la structure des cubes et les mod`les de mining ; e e les dveloppeurs ont pour tche, la mise en place de la phase ETL (environ 50% du temps), la e a programmation des requtes MDX et des interfaces graphiques ; e enn, il reste aux dcideurs de sappuyer sur les rsultats pour prendre les bonnes dcisions. e e e

CONCLUSION

105

Schmatiquement, dans des entreprises comme Air France ou la SNCF (cf. gure 28) : e le syst`me (gigantesque) de billetterie constitue le syst`me transactionnel de production ; e e ces donnes alimentent le cube des rservations ; e e des consultations MDX permettent de conna la frquentation des lignes ; tre e tandis que des mod`les de mining permettent dtablir la tendance de cette frquentation ; e e e nalement le responsable commercial pourra dcider de la tarication optimale sur telle ligne ` tel e a moment et le responsable logistique pourra augmenter ou rduire le nombre de train ou davion, e etc.

Fig. 28 Exemple de problmatique dcisionnelle e e Notons que dautres utilisations du syst`me dcisionnel sont possibles : e e la simulation (qui permet de rpondre aux questions du type (( que se passerait-il si ... ? ))) ; e lemission dalertes automatiques (quand certains secteurs sont en perte de vitesse, par exemple) ; le contrle des bases de production (le syst`me dcisionnel peut dtecter certaines anomalies). o e e e

TABLE DES FIGURES

106

Table des gures


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Base de donnes personnelle . . . . . . . . . . . . . . . . e Base de donnes professionnelle . . . . . . . . . . . . . . e Exemple de base de donnes professionnelle . . . . . . . e Organisation physique du rseau base de donnes . . . . e e Relation entre deux tables . . . . . . . . . . . . . . . . . Dirents types dintgrit . . . . . . . . . . . . . . . . . e e e Traitement des donnes dune transaction en mmoire . e e Schma du syst`me transactionnel . . . . . . . . . . . . e e Exemple de transaction . . . . . . . . . . . . . . . . . . Exemple de cube : le cube ventes . . . . . . . . . . . . Cube bidimensionnel . . . . . . . . . . . . . . . . . . . . Cube ventes hirarchis . . . . . . . . . . . . . . . . . . e e Tables de dimension . . . . . . . . . . . . . . . . . . . . Schma en toile dun cube ` 5 dimensions et 2 mesures e e a Dcomposition de la table produits . . . . . . . . . . . e Schma en ocon . . . . . . . . . . . . . . . . . . . . . . e Hirarchie parent-enfant . . . . . . . . . . . . . . . . . . e Auto-jointure dune table de dimension parent-enfant . . Cube rduit pour les agrgats des niveaux suprieurs . . e e e Les tapes du processus ETL . . . . . . . . . . . . . . . e Tables temporaires et tables tampon . . . . . . . . . . . Evolution des tables clients et commandes au cours du Exemple de classication . . . . . . . . . . . . . . . . . . Exemple darbre de dcision . . . . . . . . . . . . . . . . e Prparation des donnes pour le data mining . . . . . . e e Mcanisme de prdiction . . . . . . . . . . . . . . . . . . e e Schma du syst`me dcisionnel . . . . . . . . . . . . . . e e e Exemple de problmatique dcisionnelle . . . . . . . . . e e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . processus ETL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 8 9 18 36 46 55 56 58 64 65 68 69 70 71 72 72 74 76 78 81 98 100 102 103 104 105

REFERENCES

107

Rfrences ee
Bibliographie
[1] Chaffin, Mark, Knight, Brian et Robinson, Todd. Professional SQL Server 2000 DTS. Wrox, 2000. Cet ouvrage volumineux ore de nombreuses solutions pour grer les transformations de donnes e e avec SQL Server. [2] Chaudhuri, Surajit, Fayyad, Usama et Bernhardt, Je. Scalable Classication over SQL Databases. Microsoft Research, Redmond, USA, 1998 Cet article dmontre la scalabilit de lalgorithme de classication de SQL Server. e e [3] Gardarin, Georges. Internet/Intranet et Bases de Donnes. Eyrolles, 1999 e Cet ouvrage thorique dnit proprement les notions relatives au syst`me dcisionnel et les e e e e dirences avec le syst`me transactionnel. e e [4] Gouarne, Jean-Marie. Le projet dcisionnel. Eyrolles, 1998 e Cet ouvrage dtaille la dmarche de conception dun syst`me dcisionnel. e e e e [5] Graefe, Goetz, Fayyad, Usama et Chaudhuri, Surajit. On the Ecient Gathering of Sucient Statistics for Classication from Large SQL Databases. Microsoft Corporation, Redmond, USA, 1998 Cet article prsente les statistiques caches derri`re le Data Mining de SQL Server ainsi que e e e loprateur UNPIVOT. e [6] Grin, Richard. Langage SQL. Universit de Nice Sophia-Antipolis, 1998 e Ce support de cours prsente la programmation SQL pour Oracle. e [7] Gunderloy, Mike et Jorden, Joseph L. Mastering SQL Server 2000. Sybex, 2000 Cet ouvrage volumineux constitue une rfrence sur lapprentissage de SQL Server 2000. ee [8] Gunderloy, Mike et Sneath, Tim. SQL Server Developers Guide to OLAP With Analysis Services. Sybex, 2001 Cet ouvrage constitue une rfrence sur la programmation OLAP avec SQL Server 2000. ee [9] Israel, Marc. SQL Server 2000. Eyrolles, 2001 Cet ouvrage volumineux et en franais permet dapprendre facilement ` utiliser SQL Server 2000. c a [10] Maree, Christian et Ledant, Guy. SQL 2 : initiation, programmation. Dunod, 1999 Cet ouvrage permet de dcouvrir la norme 92 du langage SQL. e [11] Nakache, Didier, Caulier Donneger, Anne, Rivelois Dugresson, Pascale, Dassonville, Philippe et Delebecq, Jean-Louis. Data warehouse et data mining. C.N.A.M. de Lille, 1998 Ce support de cours dtaille le monde du dcisionnel, y compris du data mining. e e [12] Spofford George. MDX Solutions. Wiley, 2001 Ce livre en anglais constitue une rfrence du langage MDX et ore de nombreuses solutions ee pratiques.

REFERENCES

108

Pages web
[13] www.gartner.com/reprints/informatica/106602.html Sur ce site en anglais, les outils ETL sont classs selon ltendue de leurs services et leur facilit e e e dutilisation. [14] www.informatica.com/news/awards/giga etl.pdf Dans ce document en anglais, on trouvera notamment la repartition du march ETL et une br`ve e e tude des dirents outils ETL. e e [15] www.olapreport.com Les principales informations sur les produits qui se partagent le march de lOLAP actuellement e sont regroupes sur ce site en anglais. e [16] sqldts.com Ce site en anglais propose des tutoriels, une FAQ et des liens pertinents concernant les DTS. [17] www.swynk.com/faq/sql/sqlserverfaq.asp On trouvera sur cette page en anglais une FAQ correcte concernant SQL Server.

Newsgroups
[18] comp.databases.ms-sqlserver Ce newsgroup anglophone rpond ecacement aux probl`mes poss par les utilisateurs de SQL e e e Server. [19] microsoft.public[.fr].sqlserver et microsoft.public.sqlserver.olap ` A noter enn lexistance de ces newsgroups maintenus par Microsoft.

INDEX

109

Index
Symboles
et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13, 84, 94 +, -, *, /, % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 -- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 /* ... */. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 <, <=, =, >=, >, <> . . . . . . . . . . . . . . . . . . . . . . . 11 ABS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ADDCALCULATEDMEMBERS . . . . . . . . . . . . . . . . . . . . . 92 ADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 AFTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 AGGREGATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ALTER COLUMN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 DATABASE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 FUNCTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 PROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 TRIGGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 intrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 ee ANCESTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 ANY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 90 AS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19, 20, 24 AVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 BASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 BDESC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 BEGIN ... END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 BEGIN TRAN ... COMMIT TRAN . . . . . . . . . . . . . . 15 BETWEEN ... AND . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 BIGINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 BOTTOMCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 CASCADE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 CASE WHEN ... ELSE ... END . . . . . . . . . . . . . . 13 CEILING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 CELL ORDINAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 CELL CALCULATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 PROPERTIES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 CHAPTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 CHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 CHECK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 CHILDREN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 COLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 COS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 COUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 CREATE CUBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 DATABASE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 FUNCTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 PROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 RULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 TRIGGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 CROSSJOIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 DATEADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 DATEDIFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 DATEPART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 DATETIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 DECIMAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 DECLARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16, 34 DELETE ... FROM ... WHERE . . . . . . . . . . . . . . . 29 DENY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 DESCENDANTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 DESC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 90 DIMENSION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 DISABLE TRIGGER . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 DROP COLUMN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 DATABASE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 FUNCTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 PROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 RULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 TRIGGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ENABLE TRIGGER. . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 EXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 EXEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 EXISTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 EXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 FILEGROWTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 FILENAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 FILTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 FLOAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 FLOOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 FOREIGN KEY ... REFERENCES. . . . . . . . . . .18, 35

INDEX FORMATTED VALUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 FORMAT STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 FULL OUTER JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 GETDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 GO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 GRANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 IDENTITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 IF ... ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 IIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 INSERT ... SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 INSTEAD OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 INTERSECT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94 INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 IN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ISEMPTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ISNULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 JOIN ... ON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 LEFT JOIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 LEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 LEVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 LOG10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 LOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 LOWER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 MAXSIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 MAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 88 MEASURE ... FUNCTION . . . . . . . . . . . . . . . . . . . . . 64 MEDIAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 MEMBERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 MODIFY NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 NON EMPTY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 95 NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 ON COLUMNS, ROWS, etc. . . . . . . . . . . . . . . . . . . 87 DELETE, UPDATE . . . . . . . . . . . . . . . . . . . . . . . . 37 PRIMARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 ORDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 60 OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 PAGES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 POWER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 PRIMARY KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16, 35

110 PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 PROPERTIES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 RAISERROR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 READ COMMITTED. . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 REPLACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 RETURNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 REVOKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 RIGHT JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ROLLBACK TRANSACTION . . . . . . . . . . . . . . . . . . . . . 38 ROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 SECTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 SELECT ... FROM ... WHERE . . . . . . . . . . . . . . . . . . . . . 18, 83 INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 SERIALIZABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 LOCK TIMEOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 TRANSACTION ISOLATION LEVEL . . . . . . . . . 46 SIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 SIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 SMALLINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 SOLVE ORDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 SQRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 SQUARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 STDEV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 SUBSTRING. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 SUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 TAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 TEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 TINYINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 TOPCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 TOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 PERCENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 SUM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 TYPE ALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 DAY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 MONTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 YEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 UNION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21, 94 ALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 UNIQUEIDENTIFIER . . . . . . . . . . . . . . . . . . . . . . . . . . 17 UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 UNPIVOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 UPDATE ... SET ... FROM ... WHERE . . . . . . 30 UPPER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 VARCHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 VAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

INDEX WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 WITH CELL CALCULATION . . . . . . . . . . . . . . . . . . . . . . 94 CUBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ENCRYPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 GRANT OPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 HOLDLOCK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 MEMBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 PAGLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 READPAST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 ROLLUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ROWLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 SET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 TABLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 [] et ]] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 84 %, , ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

111

C
calendrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52, 69 cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 cascade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 case ` cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 a casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57, 63 calcule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 e champ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52, 62 insaisissable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 obligatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 chargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75, 82 cl e trang`re. . . . . . . . . . . . . . . . . . . . . . . . .17, 35, 80 e e composite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 de substitution . . . . . . . . . . . . . . . . . . . . . . . . . . 69 naturelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69, 79 primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16, 35 classication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9, 99 clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 cohrence e faits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 grain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 commentaire SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 compltion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 e concatnation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 e condition de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 de slection . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 59 e slection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 e connaissance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 consistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 consolidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 contrle . . . . . . . . . . . . . . . . . . . . . . . . . 52, 54, 62, 105 o contrainte syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 vrication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 e conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 coordonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 e crochet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 84 fermant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 cubage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57, 64 creux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 virtuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

A
ACID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 administration . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 58 ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 agrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 62 e agrgation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 e premi`res . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 e alerte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 20 Analyseur de requte . . . . . . . . . . . . . . . . . . . . . . . . 14 e anctre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 e apostrophe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 arbre de dcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 e atomicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15, 77 e attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 auto-jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20, 72 autorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 axe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84, 87 pluridimensionnel. . . . . . . . . . . . . . . . . . . . . . . .90

B
base model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 dcisionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 e de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 e personnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 professionelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 de production . . . . . . . . . . . . . . . . . . . . . . . . . 7, 55 tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 bouton radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 branchement conditionnel . . . . . . . . . . . . . . . . . . . . 12

D
dbogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 e

INDEX dclencheur e AFTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 INSTEAD OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 dcoupage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 e dcoupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 e dpendance dimensionnelle . . . . . . . . . . . . . . . . . . 67 e dpliage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 e drive dimensionnelle . . . . . . . . . . . . . . . . . . . . . . . . 80 e dsagrgation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 e e dtail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53, 62 e data mart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 surng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 warehouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 dbo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 51 dice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 dpendance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 e drive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 e parent-enfant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 partage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 e temporelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 dot NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 35 drilldown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 drillthrough . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 drillup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 droit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28, 50 DTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 durabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 e

112 evnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37, 54 e expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 75, 77

F
fait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 cohrence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 e chier de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 e ltre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 fonction dagrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 59 e dnie par lutilisateur . . . . . . . . . . . . . . . . . . 27 e mathmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . 27 e MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 sur cha nes de caract`res. . . . . . . . . . . . . . . . .27 e sur date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 formattage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 forme dimensionnelle normale . . . . . . . . . . . . . . . . 67 formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 frquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 e

G
grain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 cohrence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 e grappe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 groupage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 groupe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 doptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

H
hirarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 90 e acyclique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 parent-enfant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 HOLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

E
EAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 EIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 elagage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 en-tte e dtat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 e de groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 de page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62 de sous-formulaire . . . . . . . . . . . . . . . . . . . . . . . 53 enfant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 85 entit prvue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 e e entrept o de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 57 e schma relationnel . . . . . . . . . . . . . . . . . . . . . . . 72 e ergonomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 espace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 etat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 ETL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

I
identicateur unique universel . . . . . . . . . . . . . . . 17 incrmental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77, 83 e indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 infocentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 intgrit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 e e dentreprise . . . . . . . . . . . . . . . . . . . . . . . . . . 36, 53 de domaine . . . . . . . . . . . . . . . . . . . . . . . . . . 36, 52 des entits . . . . . . . . . . . . . . . . . . . . . . . . . . . 36, 52 e rfrentielle . . . . . . . . . . . . . . . . . . . . . . 36, 53, 80 ee interface graphique . . . . . . . . . . . . . . . . 9, 10, 51, 58 intitul . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 53, 62, 84 e

INDEX isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15, 46

113

O
OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 OLTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 57 oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 e arihtmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 e logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ordonner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60, 90 osql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

J
J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 jeu nomm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 e jointure externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 successives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 journal des transactions . . . . . . . . . . . . . . . . . . 14, 15

L
liste a ` choix multiples . . . . . . . . . . . . . . . . . . . . . . . . 53 droulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 e lookup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 lot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14, 75

P
priode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 e param`tre e de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 par dfaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 e partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73, 83 pied dtat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 e de groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 de page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 de sous-formulaire . . . . . . . . . . . . . . . . . . . . . . . 53 plage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 planication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 pliage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 potentiom`tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 e prdiction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 e prvision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 e priorit des oprateurs . . . . . . . . . . . . . . . . . . . . . . . 11 e e procdure stocke . . . . . . . . . . . . . . . . . . . . . . . . 12, 44 e e sp addlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 sp addrolemember . . . . . . . . . . . . . . . . . . . . . . 49 sp addrole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 sp addsrvrolemember . . . . . . . . . . . . . . . . . . . 49 sp addtype. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 sp bindefault . . . . . . . . . . . . . . . . . . . . . . . . . . 34 sp bindrule . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 sp defaultdb . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 sp droplogin . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 sp droprolemember . . . . . . . . . . . . . . . . . . . . . 49 sp droprole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 sp dropsrvrolemember . . . . . . . . . . . . . . . . . . 49 sp grantdbaccess . . . . . . . . . . . . . . . . . . . . . . 48 sp grantlogin . . . . . . . . . . . . . . . . . . . . . . . . . . 48 sp revokedbaccess . . . . . . . . . . . . . . . . . . . . . 48 sp unbindefault. . . . . . . . . . . . . . . . . . . . . . . .34 sp unbindrule . . . . . . . . . . . . . . . . . . . . . . . . . . 33 produit cartsien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 e proprit ee de cellule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 de membre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 propritaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 e purge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

M
mthode e des k-moyennes . . . . . . . . . . . . . . . . . . . . . . . . . . 99 des centres mobiles . . . . . . . . . . . . . . . . . . . . . . 99 magasin de donnes. . . . . . . . . . . . . . . . . . . . . . . . . .57 e maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 march e data mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 ETL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 OLTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 membre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 85 calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 e extremal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 vide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 mesure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63, 64, 86 dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 mise-`-jour corrle . . . . . . . . . . . . . . . . . . . . . . . . . . 31 a ee mode texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 MOLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 multicolonne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90

N
niladique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 nom membre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67, 72 numrotation automatique . . . . . . . . . . . . . . . . . . . 17 e

INDEX

114 surrogate key . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69, 80 synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 syntaxe MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 syst`me e dcisionnel . . . . . . . . . . . . . . . . . . . . . . . 7, 57, 104 e transactionnel . . . . . . . . . . . . . . . . . . . . . 7, 55, 57

Q
quote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13, 84

R
rparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 e rseau e de dpendances. . . . . . . . . . . . . . . . . . . . . . . . .103 e informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 rtro-conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 e rle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 o r`gle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 e data mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 redondance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 requte e insertion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 mise-`-jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 a multibase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 multiserveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 slection . . . . . . . . . . . . . . . . . . . . . . . . . 18, 28, 61 e stratgie . . . . . . . . . . . . . . . . . . . . . . . 28, 61, 96 e suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 requteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 e ROLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 rollup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

T
table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16, 63 de comptage des co-occurrences . . . . . . . . 101 de dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 des cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 non pivote . . . . . . . . . . . . . . . . . . . . . . . . . . 101 e des faits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 inserted et deleted . . . . . . . . . . . . . . . . . . . . . . . 37 tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 temporaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 tableau de bord. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 tableur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 toupie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 traduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 tranchage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 tranche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Transact SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 transaction . . . . . . . . . . . . . . . . . . . . . . . 14, 28, 40, 47 transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 75, 77 tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 tuple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 type dni par lutilisateur . . . . . . . . . . . . . . . . 12, 33 e de variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

S
sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 schma e en toile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 e en ocon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 serveur li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 e service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 SGBD professionnel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 SIAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 snowake scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 sous-formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 sous-groupe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 sous-requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 e correle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 e SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 SQL-DMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 star scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 starake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 stating area. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76 stockage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 structure SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79, 80

U
union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

V
valeur par dfaut . . . . . . . . . . . . . . . . . . . . . . . . . . . 16, 34 e variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 verrouillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 vide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 visibilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 e vue dclencheur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 e intrts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ee syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Z
zone de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Vous aimerez peut-être aussi