Professional Documents
Culture Documents
VERSION 3.1
MANUEL DE L'LVE
Pierre Stockreiser
Septembre 2006
Je tiens remercier M. Sylvain PIREN, Professeur-Ingnieur au Lyce Technique d'Esch-s-Alzette, pour avoir essentiellement contribu la rdaction de la version initiale de ce cours. Un grand Merci M. Jean-Marie JANS, Professeur-Ingnieur au Lyce Technique Ecole de Commerce et Gestion, pour les nombreux conseils en matire de modlisation des donnes. Je remercie galement les personnes suivantes pour leur support respectivement leur influence pendant le travail de recherche et de rdaction. M. Christian LUCIUS, Professeur de Sciences au Lyce Technique Michel-Lucius M. Ren WEBER, Professeur-Ingnieur au Lyce Technique des Arts et Mtiers M. Jean-Marie OTTELE, Professeur-Ingnieur au Lyce Technique Ecole de Commerce et Gestion
P. Stockreiser
Prface
Ce document est un support pour les cours en informatique des classes de 13CG. La structure et le contenu des chapitres de ce document ont t synchroniss avec le contenu du programme tabli par la CNPI. Le cours met l'accent sur les concepts et techniques fondamentaux des bases de donnes relationnelles, ainsi que sur la conception et l'implmentation de systmes informatiques lmentaires de gestion. Le cours est subdivis en trois parties: PARTIE 1 : Modlisation d'un systme d'information PARTIE 2 : Exploitation des bases de donnes relationnelles PARTIE 3 : Protection des donnes (chapitres 1 4) (chapitres 5 9) (chapitre 10)
Ce cours n'est pas du tout un manuel d'utilisation de MS-Access, de Win'Design respectivement d'un autre logiciel. Le cours se limite aux concepts importants en relation avec le sujet. Symboles utiliss l'intrieur de cet ouvrage: Paragraphe important Exercice
8
8 9 10 11
2.
2.1 2.2 2.3
12
12 13 14
3.
3.1 3.2
15
15 17 19 19 20 21 23 24 24 25 29 32 35 36 39 47 47 47 48 50 55 55 57 57 57 58 59 59 60 60 61 62 63 65 65 65
3.3 Le modle conceptuel des donnes (MCD) 3.3.1 Dfinition 3.3.2 La notion de classe 3.3.3 La notion d'attribut 3.3.4 La notion d'identifiant 3.3.5 La notion d'association 3.3.5.1 Dfinition 3.3.5.2 Les multiplicits d'une association 3.3.5.3 Classe-association 3.3.6 Exemple "KaafKaaf" 3.3.7 Exemple "Gestion d'cole" 3.3.8 Lutilisation dune association ternaire 3.3.9 Exercices 3.3.10 Cas particuliers du MCD 3.3.10.1 Plusieurs associations diffrentes entre deux classes 3.3.10.2 Association rflexive et rle 3.3.10.3 Agrgation de composition 3.3.11 Exercices 3.4 Le modle logique des donnes (MLD) 3.4.1 Dfinition 3.4.2 Rgles de transformation du MCD au MLD 3.4.2.1 Transformation des classes 3.4.2.2 Transformation des associations binaires du type (x..*) (x..1) 3.4.2.3 Transformation des associations binaires du type (x..1) (x..1) 3.4.2.4 Transformation des associations binaires du type (x..*) (x..*) 3.4.2.5 Transformation des associations ternaires 3.4.2.6 Transformation de plusieurs associations entre 2 classes 3.4.2.7 Transformation des associations rflexives 3.4.2.8 Transformation de l'agrgation de composition 3.4.3 Exemple "KaafKaaf" 3.4.4 Exercices 3.5 Le modle physique des donnes (MPD) 3.5.1 Dfinition 3.5.2 Passage du MLD au MPD
4.
4.1 4.2
69
69 70
5.
5.1 5.2 5.3 5.4 5.5
72
72 74 76 78 80 84 84 86
5.6 L'approche Client/Serveur 5.6.1 La priode des ordinateurs du type "Mainframe" 5.6.2 L'approche Client/Serveur
6.
6.1 6.2 6.3 6.4 6.5
88
88 90 92 95 96
7.
7.1
98
98 100 100 101 104 106 107 110 112 113 114 117 118 120 120 123 125 139 140 140 143 146 149 149 152 156
7.4
La mthode QBE
166
7.5 Les contraintes d'intgrit 168 7.5.1 Dfinition 168 7.5.2 Les types de contraintes d'intgrit 168 7.5.2.1 La contrainte d'intgrit des tables (angl. Table Integrity Constraint) 168 7.5.2.2 La contrainte d'intgrit rfrentielle (angl. Referential Integrity Constraint)169 7.5.2.3 La contrainte d'intgrit gnrale (angl. General Integrity Constraint) 169 7.5.3 Exercices 170
8.
8.1 8.2 8.3
175
175 179 181
9.
9.1 9.2
183
183 189
10.
10.1
191
191 191 191 192 193 193 193 193 193 196 197 197 198 199 199 199 200 200 202 202 202
10.2 Les manipulations malveillantes 10.2.1 Dfinition 10.2.2 La protection contre les manipulations malveillantes 10.3 Les accs non autoriss 10.3.1 Dfinition 10.3.2 La protection contre les accs non autoriss 10.3.2.1 Mot de passe 10.3.2.2 Droits d'accs aux objets d'une BD 10.3.2.3 Scurisation du systme d'exploitation 10.4 Les incohrences et pertes de donnes accidentelles 10.4.1 Dfinition 10.4.2 La protection contre les incohrences et pertes de donnes accidentelles 10.4.2.1 Les pertes provoques par des erreurs humaines 10.4.2.2 Les pertes des donnes en mmoire interne (RAM) 10.4.2.3 Les pertes des donnes stockes sur disque dur 10.4.3 Les mesures de prvention contre la perte de donnes 10.4.3.1 La sauvegarde des donnes (angl. backup) 10.4.3.2 La rplication du disque dur (angl. mirroring) 10.4.3.3 Rplication du serveur (angl. Backup server) 10.4.3.4 Les systmes RAID-5
11.
11.1 11.2 11.3
Annexes
Bibliographie Sites sur Internet Index
203
204 206 207
Informatique 13CG
Pierre Stockreiser
Informatique 13CG
Pierre Stockreiser
Informatique 13CG
Dans ce chapitre nous allons dcouvrir une dmarche d'informatisation, qui nous permet de modliser un systme d'information et de le reprsenter l'aide d'un systme informatique. Le but de cette dmarche est de concevoir des systmes stables et optimiss en termes de performance, de fiabilit et de convivialit.
Pierre Stockreiser
Informatique 13CG
Systme d'information
Un systme d'information contient les donnes et les traitements ncessaires pour assimiler et stocker les informations entrantes et produire les informations sortantes. Dans les systmes d'information nous retrouvons gnralement les traitements suivants: Consultation des donnes; Ajout de donnes; Suppression de donnes; Modification de donnes.
Exemple: Le propritaire d'une vidothque reoit une livraison avec des nouvelles cassettes vido. Pour chaque cassette vido, il lit le titre, la langue ainsi que la dure et sauvegarde ces informations dans la base de donnes de la vidothque. Il a donc utilis un traitement d'ajout de donnes afin de transformer les informations entrantes (titre, langue, dure) en donnes.
Deux mots sont synonymes quand ils dsignent une mme chose.
Pierre Stockreiser
10
Informatique 13CG
Pierre Stockreiser
11
Informatique 13CG
2. Dmarche de modlisation des donnes 2.1 Le groupe d'tude (angl. Project group)
Un systme d'information qui n'est pas trop complexe et volumineux en terme d'informations, peut facilement tre informatis par une seule personne, qui ne doit pas ncessairement tre un informaticien. Il suffit d'tre un peu familiaris avec une mthode de modlisation, et de savoir manipuler un SGBD pour raliser une implmentation informatique, cohrente et fonctionnelle, d'un tel systme d'information. Ds que le systme d'information atteint une certaine envergure (par exemple: informatiser la gestion des sinistres d'une compagnie d'assurances), un groupe d'tude est gnralement cr. Ce groupe ne devra en aucun cas contenir seulement des informaticiens mais galement: Un ou plusieurs reprsentants des futurs utilisateurs du systme informatis (Par exemple: Un employ du service qui gre les sinistres) ; Un ou plusieurs reprsentants de chaque dpartement impliqu (Par exemple: Un employ du service des contrats ) ; Un reprsentant de la direction.
Gnralement, un responsable du groupe (angl. Project Manager) est nomm, afin de coordonner les travaux effectus par le groupe et de suivre le droulement partir de l'analyse jusqu' la mise en place du systme informatis.
Pierre Stockreiser
12
Informatique 13CG
2. Cration d'une srie de modles qui permettent de reprsenter tous les aspects importants
Pierre Stockreiser
13
Informatique 13CG
du
systme
d'information
actuel
(Rapports,
Pour les projets d'une certaine envergure s'ajoutent: L'interview avec les responsables des services impliqus; Pourvu que la tche d'analyse soit partage entre plusieurs membres du groupe d'tudes, il faut coordonner les actions et comparer les rsultats avec les autres membres. Pour les projets qui se basent sur un systme dj partiellement informatis s'ajoute: L'tude de l'application informatique existante.
Pierre Stockreiser
14
Informatique 13CG
2. Le niveau logique, qui se base sur le modle conceptuel des donnes, prend en considration l'implmentation du systme d'information par un SGBD. Ce niveau introduit la notion des tables logiques, et constitue donc le premier pas vers les tables des SGBD. Ce niveau est reprsent par le: Modle logique des donnes (MLD)
3. Le niveau physique, qui se base sur le modle logique des donnes, contient finalement les tables dfinies laide dun SGBD spcifique (p.ex. MS Access, MySQL, Oracle ). Ce niveau est reprsent par le: Modle physique des donnes (MPD)
Pierre Stockreiser
15
Informatique 13CG
Voici donc les 4 tapes ncessaires pour traduire un systme d'information naturel en une base de donnes:
Analyse
MCD
MLD
MPD
Pierre Stockreiser
16
Informatique 13CG
Marque
BMW Ford BMW ...
Modle
525i Orion 320i ...
Cylindre
2500 1800 2000 ...
Poids
1360 1080 1200 ... Un enregistrement
A laide dun exemple prcis, nous allons voir pourquoi il est important de bien rflchir sur le nombre de tables dune base de donnes et sur la structure de chaque table. Il sagit de crer une base de donnes pour une caisse de maladie. On veut stocker tous les employs-membres de la caisse avec leur socit-employeur. Afin de faciliter lexercice, nous allons uniquement stocker les informations suivantes pour chaque employ: le numro de lemploy le nom de lemploy le prnom de lemploy le numro de son entreprise le nom de son entreprise la localit o se trouve lentreprise
NoEmp
102 103 104 105 106 ...
Nom_Emp
Boesch Midd Witz Kuhl Super ...
Prnom_Emp
Emil Erny Evelyne Menn Jhemp ...
NoEntr
1 2 1 1 2 ...
Nom_Entr
Schaffgaer S. r.l. Gudjr Schaffgaer S. r.l. Schaffgaer S. r.l. Gudjr ...
Localit
Differdange Colmar Berg Differdange Differdange Colmar Berg ...
Pierre Stockreiser
17
Informatique 13CG
Nous voyons ici uniquement quelques enregistrements. Une caisse de maladie ayant des miliers de membres, et cette table possdant un enregistrement par membre, on peut bien simaginer la taille relle de la table. Or, bien que cette solution soit correcte dans le sens le plus large du terme, elle nous impose un certain nombre de problmes .
Exercice 1
Essayez de trouver en discussion quelques problmes qui peuvent se manifester lors du travail journalier avec cette table.
Exercice 2
Comment est-ce quon pourrait viter ces problmes sans toutefois perdre des informations ?
Pierre Stockreiser
18
Informatique 13CG
Classe
Attribut
Association
Pierre Stockreiser
19
Informatique 13CG
Dans la littrature on trouve galement la notion entit pour dsigner une classe.
Pierre Stockreiser
20
Informatique 13CG
Voici quelques exemples d'attributs: Pour une classe Client: Nom du client NoTl du client Pour une classe Salari: Nom du salari NoMatricule Salaire mensuel Pour une classe Contrat d'assurance: NoContrat Type d'assurance Montant assur
A l'intrieur des objets (des instanciations) d'une classe, les attributs prennent des valeurs Exemple: La classe Client est dfinie par les attributs suivants:
A l'intrieur de chaque objet, chaque attribut prend une valeur, qui est dans la plupart des cas une valeur numrique, une valeur sous forme de texte ou encore une date.
Pierre Stockreiser
21
Informatique 13CG
L'attribut Nom prend p.ex. les valeurs "Meier", "Muller" et "Weber" dans les 3 objets cidessus. A lintrieur de chaque objet, chaque attribut ne prend quune seule valeur au maximum. Le client 002 par exemple ne peut pas avoir 2 adresses.
Pierre Stockreiser
22
Informatique 13CG
Exercice
Indiquez graphiquement les classes qui reprsentent : 1. les passagers dune socit arienne. 2. les rsultats sportifs de lentranement dun coureur ; 3. les mdicaments dune pharmacie.
Pierre Stockreiser
23
Informatique 13CG
L'instanciation d'une association est reprsente par les instanciations des classes lies l'association. Voici quelques instanciations de l'association Ecrire.
Cette instanciation de l'association crire p.ex. nous dit que l'auteur Twain a crit le livre Tom Sawyer. Cette instanciation peut tre identifie par l'identifiant compos A002/L0031
Bien qu'une association n'ait pas d'identifiant propre, elle peut implicitement tre identifie par les identifiants des classes auxquelles elle est lie. Pour chaque instanciation dune association, lidentifiant doit tre unique.
Comme chaque livre est uniquement crit par un seul auteur, on peut galement identifier linstanciation de lassociation par le seul NoLivre L003.
Pierre Stockreiser
24
Informatique 13CG
Se lit: Une commande est passe au minimum par un et au maximum par un client
Les multiplicits concernant une classe sont inscrites l'extrmit oppose de l'association. Exemple 2:
Pierre Stockreiser
25
Informatique 13CG
De faon gnrale, on peut dire: La multiplicit minimale indique si un objet d'une classe peut exister sans participer l'association. Cette multiplicit est 0 ou 1. Multiplicit minimale = 0 : Un objet de la classe concerne peut exister sans participer l'association. Multiplicit minimale = 1 : Un objet de la classe participe au moins une fois l'association. La multiplicit maximale indique si un objet d'une classe peut participer plusieurs fois l'association. Cette multiplicit est 1 ou *, avec * reprsentant une valeur >1 mais non connue priori. Multiplicit maximale = 1 : Un objet de la classe participe au maximum une seule fois l'association. Multiplicit maximale = * : Un objet de la classe peut participer plusieurs fois l'association. Comme nous indiquons pour chaque classe relie une association les multiplicits sous la forme: <Multiplicit minimale> .. <Multiplicit maximale>, nous avons les possibilits suivantes: 0..1 1..1 0..* 1..* Forme abrge: 1 (utilise dans ce cours Forme abrge: * logiciel Win'Design 5.8.0)
En pratique, afin de dterminer les bonnes multiplicits, le concepteur doit se rfrer aux rsultats de l'analyse. Exemple 3: Pour les deux cas suivants, on peut affirmer qu'une commande est toujours passe par au minimum un client. Une commande est galement passe au maximum par un client. Une commande est donc toujours passe par un et un seul client. Un client passe au moins une commande et au maximum plusieurs (*) commandes. Cette modlisation ne tient pas compte des clients qui ne passent aucune commande. Un client est uniquement considr comme tel s'il passe au moins une commande.
Pierre Stockreiser
26
Informatique 13CG
Un client ne peut passer aucune commande et au maximum plusieurs (*) commandes. Cette modlisation tient compte des clients qui ne passent aucune commande.
Exemple 4:
On dit que Elve est une classe indpendante par rapport l'association effectuer (multiplicit minimale = 0) , tandis que Stage est une classe dpendante par rapport l'association effectuer (multiplicit minimale = 1). Un lve (= un objet de la classe Elve) peut donc trs bien exister dans la base de donnes sans qu'un stage ne lui soit associ, mais un stage ne peut jamais exister sans lve associ. La multiplicit minimale nous indique donc si une classe est indpendante ou dpendante par rapport une association.
Pierre Stockreiser
27
Informatique 13CG
On dit qu'une classe est indpendante par rapport une association lorsque sa multiplicit minimale vaut 0, et dpendante par rapport une association lorsque sa multiplicit minimale vaut 1. Exemple 5:
Si les multiplicits de deux classes lies l'aide d'une association ont la valeur 1 (1..1) des deux cts, on transforme les deux classes en une seule et on omet ainsi l'association.
Pierre Stockreiser
28
Informatique 13CG
3.3.5.3 Classe-association
Exemple:
Un objet resp. une instanciation de la classe TypeDiplme serait p.ex. le type de diplme Matrise en Informatique du niveau Bac+4.
Il s'agit maintenant d'tendre le modle ci-dessus de faon reprsenter galement l'anne depuis laquelle un tudiant possde un type de diplme. Proposez une solution!
Pierre Stockreiser
29
Informatique 13CG
Voici la solution propose pour reprsenter l'anne depuis laquelle un tudiant possde un type de diplme.
Classe-association
Une association avec un ou plusieurs attributs est reprsente l'aide d'une classe qu'on appelle classe-association. Cette classe-association contient le ou les attributs correspondants et elle est connecte au lien de l'association par une ligne en pointill. Par convention, la classe-association porte le mme nom que l'association concerne.
Attention Un ou plusieurs des attributs d'une classe-association peuvent mme devenir une partie de l'identifiant de l'association. Les attributs concerns sont nots de la mme faon que les identifiants des autres classes.
Rappel !!! Une association peut implicitement tre identifie par les identifiants des classes auxquelles elle est lie.
Exemple:
Comme un professeur peut avoir la mme classe pendant plusieurs annes (p.ex. Jos Weber 12CG2), l'identifiant implicite de l'association enseigner (NoMatricule_{id}/CodeClasse_{id}) n'est pas suffisant, puisquil ne garantit pas lunicit. On y ajoute Anne_{id}. L'association enseigner est ainsi identifie par la combinaison d'attributs NoMatricule_{id} / CodeClasse_{id} / Anne_{id}. Cette combinaison doit donc tre unique pour chaque instanciation de l'association.
Pierre Stockreiser
30
Informatique 13CG
Attention Une association multiplicits 1 (1..1) n'est jamais reprsente l'aide d'une classeassociation. Dans ce cas, les attributs en question migrent dans la classe concerne par les multiplicits 1 (1..1). Exemple: Cette modlisation n'est pas correcte !!!
Effectivement, chaque facture ne possde qu'une et une seule date d'mission, ce qui fait que l'attribut DateEmission doit migrer dans la classe Facture. Voici la modlisation correcte:
Pierre Stockreiser
31
Informatique 13CG
Luxusbuerg, le 31.08.2004 Client Nom: Prnom: Adresse: CodePostal: Localit: Weber Jos 23 rue Principale L-7654 Grevenmacher 50
Montant de la facture:
Crez un MCD, qui permet de modliser correctement le systme d'information ncessaire, sachant que: Un client peut bien sr recevoir plusieurs factures, mais il est uniquement considr comme tel partir du moment o il reoit sa premire facture. Une facture concerne un et un seul client.
Remarque: Bien que le numro du client n'apparaisse pas en tant que tel sur la facture, il est prfrable d'ajouter cet attribut artificiel la classe Client, et de le dfinir comme identifiant de cette classe. Cela nous empche de devoir dfinir un identifiant compos de trop d'attributs.
Pierre Stockreiser
32
Informatique 13CG
PARTIE 2
Il s'agit d'tendre le MCD de la partie 1. Le responsable de la facturation de la socit dsire rendre les factures plus informatives. Comme un client peut acheter plusieurs articles diffrents en mme temps, la facture devrait indiquer pour chaque article le numro, un libell, le prix unitaire, la quantit vendue et le prix total pour ce type d'article. Voici l'aspect que la facture devrait avoir: KaafKaaf S. r.l. 12 avenue Goss L-9876 Luxusbuerg Facture No. 12345
Luxusbuerg, le 31.08.2004 Client Nom: Prnom: Adresse: CodePostal: Localit: NoArticle 234 566 023 Weber Jos 23 rue Principale L-7654 Grevenmacher Libell Marteau Tournevis Pince tuyaux PrixUnitaire 12 6 20 Quantit 1 3 1 Prix payer 12 18 20 50
Proposez un nouveau MCD qui reflte ces modifications, en respectant que tous les articles disponibles sont stocks (p.ex. No=234 Libell=Marteau PU=12 ). Mme si un article n'est pas encore considr par une facture, il existe dans le systme d'information.
Pierre Stockreiser
33
Informatique 13CG
Remarques: La classe Facture ne contient plus l'attribut Montant. Il existe une rgle gnrale de conception qui dit: Aucun attribut qui peut tre calcul partir d'autres attributs existants dans le modle, ne devra tre reprsent dans le MCD. Pour la mme raison, on n'a pas besoin de modliser explicitement le prix payer pour l'achat d'une quantit d'articles donns. Le prix pour chaque article figurant sur la facture peut tre calcul partir du prix unitaire et de la quantit Nous retrouvons ici le cas d'une classe-association qui contient l'attribut Quantit. En fait, l'attribut Quantit n'est pas spcifique un article, mais l'achat de cet article l'aide d'une facture. Cette faon de modliser la situation est la plus facile, mais il existe une alternative. On peut introduire la classe abstraite LigneDeFacture, qui reprsente une ligne de dtail d'une facture, p.ex. celle pour le marteau.
Pierre Stockreiser
34
Informatique 13CG
PARTIE 2
Il s'agit maintenant de concevoir une extension au MCD prcdent qui permet de reprsenter la situation suivante: La direction de l'cole dsire galement saisir tous les professeurs dans le systme d'information. Un professeur est caractris par un code interne unique (p.ex. Jemp Muller aura le code JEMU), son nom et prnom et la matire qu'il enseigne. Nous supposons que chaque professeur enseigne une seule matire. Modlisez le fait que chaque classe est enseigne chaque anne par un ou plusieurs enseignants. Un enseignant peut bien sr donner des cours dans plusieurs classes, mais peut galement ne pas donner des cours pendant une ou plusieurs annes.
Pierre Stockreiser
35
Informatique 13CG
Exercice
Essayez de montrer les limites/dfauts dun MCD qui reprsente lnonc de lexemple prcdent en utilisant uniquement des associations binaires.
Solution de lexemple prcdent : Voici une solution avec une association ternaire
Pierre Stockreiser
36
Informatique 13CG
On peut lire/interprter ce modle de trois faons diffrentes: Chaque couple d'instanciations Professeur / Matire est associ au minimum 0 et au maximum plusieurs Classes ( Multiplicits 0..* du ct Classe). Chaque couple d'instanciations Matire / Classe est associ au minimum 0 et au maximum plusieurs Professeurs ( Multiplicits 0..* du ct Professeur). Chaque couple d'instanciations Classe / Professeur est associ au minimum 0 et au maximum plusieurs Matires ( Multiplicits 0..* du ct Matire)
Attention: Selon ce modle, plusieurs professeurs peuvent enseigner la mme matire dans une mme classe pendant une anne scolaire. Si on veut reprsenter le fait quune matire est enseigne dans une classe par au maximum un seul professeur, il suffit de changer les multiplicits du ct Professeur en 0..1 .
On peut dire que chaque instanciation de l'association enseigner associe un professeur une matire et une classe pour une anne donne. Ou encore, ce modle nous permet de montrer pour chaque anne scolaire quelle matire est enseigne dans quelle classe par quel professeur. L'identifiant de l'association enseigner est le quadruple CodeProf_{id} / CodeMatire_{id} / Nom_{id} / Anne_{id}. Il nest pas toujours facile de dterminer quand il faut utiliser une association ternaire. Gnralement, on peut affirmer que si plusieurs des classes lies une association ternaire possdent une multiplicit maximale de 1, la modlisation nest pas optimise dans le sens quil faudrait mieux dcomposer l'association ternaire, c..d. la reprsenter par 2 associations binaires.
Pierre Stockreiser
37
Informatique 13CG
Exemple : La direction dune chane dhtels dsire grer les sjours des clients dans les diffrents htels. Comme on peut effectivement dire "Un client effectue un sjour dans un htel" on est amen proposer la modlisation suivante.
On peut lire/interprter ce modle de trois faons diffrentes: Chaque couple d'instanciations Client / Htel est associ au minimum 0 et au maximum plusieurs Sjours ( Multiplicit 0..* du ct Sjour). (On considre techniquement chaque combinaison Client / Htel possible). Chaque couple d'instanciations Client / Sjour est associ au minimum 0 et au maximum un Htel ( Multiplicit 0..1 du ct Htel). Chaque couple d'instanciations Sjour / Htel est associ au minimum 0 et au maximum un Client ( Multiplicit 0..1 du ct Client).
Chaque instanciation de l'association effectuer associe donc un sjour un client et un htel. Or, cette modlisation porte une contrainte supplmentaire, puisque les multiplicits 0..1 nous indiquent que pour chaque instanciation de Sjour il ne peut exister qu'une et une seule instanciation de l'association. Donc chaque sjour est associ une et une seule fois une combinaison client/htel. Dans ce cas il vaut mieux dcomposer l'association ternaire en deux associations binaires:
Pierre Stockreiser
38
Informatique 13CG
3.3.9 Exercices
Exercice 1
Voici le rsultat simplifi d'une analyse faite auprs d'une compagnie d'assurance qui dsire informatiser la gestion des contrats auto. Un client peut assurer plusieurs voitures auprs de la compagnie. Chaque voiture est assure par un seul contrat. Un contrat assure une seule voiture. En ce qui concerne un client, la compagnie dsire connatre son nom, prnom, adresse complte, numro de tlphone ainsi qu'un numro de compte bancaire avec indication de la banque. Un client est considr comme tel partir de son premier contrat. Chaque contrat contient un numro de contrat unique, la prime annuelle payer, la date de paiement annuel, la marque de la voiture, le modle de la voiture, le numro d'immatriculation de la voiture, la valeur de la voiture et la date d'acquisition de la voiture. En ignorant la mthode de modlisation, on pourrait crer une BD avec une seule table ayant un champ pour chaque donne indique dans l'analyse. On aurait donc les donnes des clients et des contrats dans une seule table. Quels en seraient les inconvnients ?
Pierre Stockreiser
39
Informatique 13CG
Exercice 2
Le responsable d'un magasin de location de cassettes vido dsire informatiser le systme de gestion des locations. Voici les informations recueillies pendant l'analyse: Un membre est caractris par son numro membre, son nom, son prnom, son adresse ainsi que sa date de naissance. Ds que la carte de membre est paye (paiement unique), le membre est enregistr dans le systme et il peut dsormais louer des cassettes vido. Un film est caractris par un numro film, un titre, un code langue, un code genre et une dure. Le mme film peut tre disponible en plusieurs exemplaires. Il existe au minimum un exemplaire de chaque film. Un exemplaire est dtermin par un numro exemplaire ainsi que la date d'achat de l'exemplaire. Lors d'une location, un membre peut louer plusieurs films en mme temps. En principe, une location a une dure d'un jour, mais cette dure peut tre prolonge. Nous supposons qu'un membre rend tous les exemplaires lous en une seule fois. Crez le modle conceptuel des donnes
Pierre Stockreiser
40
Informatique 13CG
Exercice 3
Afin d'informatiser la gestion des sances du cinma Limelight, vous disposez des informations suivantes. Un film est enregistr dans le systme d'information ds que la (les) copie(s) sont arrives au cinma. A partir de ce moment, on commence directement programmer des sances pour le film en question. Comme le mme film n'est jamais montr dans deux sances parallles, on peut ignorer la gestion des copies. Un film est reprsent par un numro courant interne, qui lui est affect par le gestionnaire des sances. En plus, on s'intresse pour le titre, la langue et la dure du film. Lorsqu'un film apparat en plusieurs langues diffrentes, on cre dans le systme d'information simplement un enregistrement par langue. Chaque film est accompagn en gnral d'une fiche technique, qui renseigne en outre sur le systme son du film (p.ex. DOLBY, THX etc.). Cette information est importante, puisque les capacits en ce qui concerne la reproduction du son varient d'une salle l'autre. Une salle peut supporter plusieurs systmes diffrents, tandis qu'un film est tourn en utilisant un seul systme son. Un systme son est caractris par un code identificateur ainsi qu'un libell. Chaque systme son est au moins support par une salle et au moins utilis par un film. Le cinma dispose actuellement de 12 salles, avec 3 nouvelles salles en construction. Une salle est prise en compte dans le systme d'information, ds qu'elle accueille des sances. Une salle est caractrise par son numro, sa capacit ainsi que des informations concernant le support des diffrents systmes son. Le systme d'information doit permettre de vendre des tickets pour une sance donne, mme plusieurs jours en avance. La rservation des siges n'tant pas demande, il est toutefois ncessaire que le systme soit capable de prvenir un excs de la capacit d'une salle en ce qui concerne le nombre de tickets vendus. La gestion des prix pour les tickets se fait au niveau des sances, puisque le prix pour voir un mme film peut varier d'une sance une autre (p.ex. Tarif rduit les lundis 16h00). Une sance, qui se droule videmment dans une seule salle, est identifie par un numro courant. Crez le modle conceptuel des donnes
Pierre Stockreiser
41
Informatique 13CG
Exercice 4
Un club de vente de livres par correspondance propose ses membres l'achat d'un ou de plusieurs livres via des bons de commandes. Pour cela, des bons de commandes ainsi qu'un catalogue sont envoys tous les membres deux fois par an. Le responsable du club dsire informatiser la gestion des commandes de livres. Voici titre d'exemple un bon de commande:
Bicherwuerm S. r.l.
Commande de livres
Votre numro membre : 123578
Veuillez nous indiquer des changements ventuels de vos coordonnes personnelles.
Indiquez s.v.p. pour chaque livre le numro ISBN et le titre (voir catalogue).
Numro ISBN 1 2 3 4 5
Cher membre
Titre
Les livres commands vous seront envoys le plus vite possible. Une facture vous parviendra aprs livraison complte. Au moment o un membre renvoie un bon de commande, une nouvelle commande est cre dans le systme. Une commande est identifie par un numro de commande et caractrise en plus par une date de commande. Les livres disponibles de la commande sont envoys tout de suite au membre. Pour devenir membre du club, il suffit d'effectuer une fois une commande via des bons de commandes lgrement modifis (p.ex. pas de numro de membre), et d'indiquer les coordonnes personnelles. Tous les livres prsents dans le catalogue sont galement stocks dans le systme. Un livre est identifi par son numro ISBN et caractris en plus par un titre, un genre (p.ex. ROMAN, HISTOIRE, BIOGRAPHIE, TECHNIQUE ...), une langue (p.ex. ALL,
Pierre Stockreiser
42
Informatique 13CG
FRA ...), le nom de l'auteur, le prix de vente et le nombre d'exemplaires disponibles en stock. Une facture est identifie par un numro de facture et caractrise en plus par une date de facture. Afin de garantir qu'une facture n'est cre et envoye au membre qui a effectu la commande correspondante qu'au moment o tous les livres de la commande ont t livrs, le systme doit tre capable de vous informer quels livres de la commande ont dj t envoys au membre et quels livres n'ont pas encore t envoys au membre (p.ex. livre non disponible en stock au moment de la rception de la commande). A chaque commande est affecte un seul employ. Un employ est identifi par un code employ (p.ex. WEBJO = Weber Jos). Le responsable du club de vente veut galement savoir quel employ (Nom & Prnom) traite quelle commande. Nous supposons que chaque employ a dj trait des commandes. De temps en temps, le responsable de la facturation dsire avoir un relev des factures non encore payes.
Pierre Stockreiser
43
Informatique 13CG
Exercice 5
Le commandant de la brigade municipale des Sapeurs-Pompiers d'Esch-sur-Alzette se propose d'informatiser la gestion des diffrentes interventions. Etant responsable de l'administration de la brigade, vous tes en charge de crer une base de donnes pour stocker les informations relatives aux interventions. PARTIE 1 Voici le rsultat de l'analyse prliminaire mene auprs des responsables de la brigade (p.ex. le commandant, le sous-commandant ) Chaque intervention est identifie par un numro unique Une intervention est en plus caractrise par une date, une adresse et un type d'intervention (p.ex. Incendie, Accident, Inondation) Pour chaque intervention, on veut savoir quels sapeurs-pompiers y ont particip Un sapeur-pompier est caractris par un numro d'identification, son nom, son prnom, sa date de naissance ainsi qu'un grade (p.ex. sapeur, chef de section, sous-commandant, commandant)
PARTIE 2 Le commandant vous demande de reprsenter galement l'utilisation des vhicules de la brigade. Lors d'une intervention, les sapeurs-pompiers sont affects aux diffrents vhicules selon les circonstances. Jusqu' prsent, le commandant a rempli une fiche pour chaque intervention (Exemple: voir page suivante) Un vhicule est identifi par son numro d'immatriculation Un vhicule est en plus caractris par un type de vhicule (p.ex. Echelle, Transport ...), une marque, et le nombre de places disponibles
Pierre Stockreiser
44
Informatique 13CG
Sapeur
Jang van der Heck Camion double pompe Toto Alnasso Jemp Grisu Transport Ford Transit Emil Zweemil Kathrin Allburn Metti Paletti Jacques Guddebuer Hary Beau
Pierre Stockreiser
45
Informatique 13CG
Exercice 6
Il s'agit d'informatiser la gestion des sjours des patients d'un hpital, ainsi que la gestion des interventions effectues par les mdecins. Jusqu' prsent, cette gestion s'est effectue l'aide des fiches suivantes.
SEJOUR No Sjour: Date Arrive: Date Dpart: Frais charge du patient: No Chambre: Etage: Classe:
Nous supposons qu'un patient occupe la mme chambre pendant toute la dure de son sjour. A part des informations concernant les mdecins, qui se trouvent dj sur les fiches, on dsire stocker dans le systme d'information le numro de tlphone et la spcialit de chaque mdecin. Les interventions sont identifies par un code et caractrises en plus par une description. L'hpital dispose d'une liste d'interventions prdfinies. (p.ex. 0236 Tomographie du crne) Les donnes actuelles sont migres dans la nouvelle application informatique.
Pierre Stockreiser
46
Informatique 13CG
Une personne, qui habite dans une maison n'est pas toujours propritaire de cette maison, tandis que le propritaire d'une maison ne doit pas ncessairement habiter dans celle-ci. Il incombe donc de reprsenter le fait de possder une maison par une association spare et le fait d'habiter dans une maison par une association spare.
Une association rflexive, est une association, dont les deux extrmits sont lies une mme classe. La signification des extrmits d'une association rflexive doit tre clarifie par l'indication d'un rle. Nous avons donc:
Interprtation des rles: Une socit est la socit-mre d'au minimum 0 et d'au maximum plusieurs autres socits. Une socit est une socit-filiale d'au minimum 0 et d'au maximum plusieurs autres socits.
Pierre Stockreiser
47
Informatique 13CG
Cette modlisation permet de reprsenter le pourcentage du capital d'une socit-filiale qui est dtenu par la socit-mre. Exemple 2: Afin d'obtenir une licence pour piloter un avion de ligne, un pilote doit effectuer un certain nombre de brevets. Il existe une hirarchie prdfinie en ce qui concerne les brevets (structure arborescente). A chaque fois qu'un pilote a russi un brevet, il a la possibilit d'effectuer un certain nombre d'autres brevets, qui sont dpendants du brevet russi. Tous les brevets sont dpendants du brevet de base.
Contrairement au multiplicits, les rles concernant une classe ne sont pas inscrits l'extrmit oppose de l'association. L'exemple prcdent se lit donc: Un brevet suit au minimum 0 et au maximum 1 autre brevet. Un brevet prcde au minimum 0 et au maximum plusieurs autres brevets.
La classe Tche est compltement dpendante de la classe Projet. Une tche ne peut pas exister sans tre relie un et un seul projet.
Pierre Stockreiser
48
Informatique 13CG
L'exemple ci-dessus reprsente en plus de cette dpendance encore la notion de composition. En effet, un projet est compos de tches. La suppression d'un projet entrane la suppression de toutes les tches qui le composent. Dans ce cas on peut utiliser une agrgation de composition qui est reprsente en UML par un losange noirci du ct de la classe Projet.
Ainsi, une tche n'est plus identifie uniquement par un NoTche_{id} mais par une combinaison NoProjet_{id} / NoTche_{id}. Ou, pour le dire autrement, la numrotation des tches recommence 1 pour chaque nouveau projet. Le mme numro de tche est donc susceptible d'apparatre dans plusieurs projets. Toutefois, on peut affirmer qu'en relation un certain numro de projet, le numro de tche est unique. L'agrgation de composition reprsente le fait que les objets d'une classe (composite) sont composs d'objets d'une autre classe (composant). Les objets de la classe composante sont implicitement identifis par l'identifiant de cette mme classe et par l'identifiant de la classe composite.
Pierre Stockreiser
49
Informatique 13CG
3.3.11 Exercices
Exercice 1
Un club de tennis vous demande d'informatiser la gestion des rservations des diffrents terrains. A ces fins, vous disposez des informations suivantes. Le club dispose d'une liste de membres. Quiconque veut jouer sur un des terrains, doit devenir membre du club. Un membre est caractris par un numro interne au club, par son nom, prnom, adresse, code postal, localit, numro de tlphone ainsi qu'une indication s'il est un joueur licenci auprs de la fdration de tennis ou non. Pour chaque rservation, on dsire connatre l'identit des deux joueurs membres. Au cas o quatre joueurs rserveraient un terrain, uniquement deux joueurs sont enregistrs dans le systme. Le club dispose de plusieurs terrains, dont certains sont couverts. On distingue en plus le type du terrain selon la nature du sol (p.ex. Sable, Herbe etc.) Une rservation se fait pour une date prcise par tranches d'une heure.
Pierre Stockreiser
50
Informatique 13CG
Exercice 2
Une socit arienne utilise prsent les fiches suivantes pour la gestion des ressources. Vol No. : 98-8-798
Date Dpart Arrive
24/08/98 24/08/98
Heure
7h45 9h00
Code Aroport
FIN LHR
Nom Aroport
Findel Heathrow
Ville
Lux Lon
Pays
Lux UK
Avion
No
23
Marque
Boeing
Type
737-400
Porte (km)
3810
Capacit Passagers
147
Commandant
No
726
Nom
Weber
Prnom
Jos
Date de naissance
13/06/65
Brevet
PP-IFR/EP/DA
Co-pilote
No
813
Nom
Meier
Prnom
Emil
Date de naissance
23/04/73
Brevet
PP-IFR
Personnel de cabine
No
1072 1014 1103
Nom
Feller Pinto Weis
Prnom
Nathalie Tania Laurent
Sachant que la socit entretient dj une BD avec tous les employs et avions et qu'un pilote peut tre commandant d'un vol et co-pilote d'un autre vol, proposez un MCD, qui permet l'informatisation de la gestion des ressources. Crez le MCD correspondant.
Pierre Stockreiser
51
Informatique 13CG
Exercice 3
Un nouveau parc de vacances va prochainement ouvrir ses portes au Luxembourg. Dans ce parc, les visiteurs sont logs dans des bungalows. Vous tes charg de l'implmentation d'un systme informatis pour grer les rservations des bungalows. Aprs plusieurs runions avec les responsables de la gestion du parc, vous avez collectionn les informations suivantes. Le parc est subdivis en plusieurs zones, dont chacune contient environ 40 50 bungalows. Chaque zone dispose de ses propres magasins, restaurants, piscines etc. . Pour l'ouverture du parc, les zones suivantes sont prtes accueillir des visiteurs. Zone
Texas Chine Hawa Camelot Liliput
Situation
Nord Est Sud-est Sud Centre
Description
Imitation "Kloondike-City" avec Saloon, Sheriff Office . . . Chine traditionnelle avec temple, palais . . . Atmosphre tropicale avec palmiers, mer artificielle . . . Ambiance mdivale autour d'un magnifique chteau ... Zone comportant plein d'lments des contes bien connus
Les bungalows sont parfaitement intgrs dans l'atmosphre correspondante de leur zone. Chaque bungalow du parc appartient une des catgories suivantes, de faon indpendante sa situation (zone). Catgorie
A B C D E
Description
Bain ou douche / WC sp. / TV Bain et douche / WC sp. / TV / Terrasse Bain ou douche / WC sp. / TV Bain et douche / WC sp. / TV / Terrasse Bain et douche / WC sp. / TV / Terrasse
Afin de faciliter la gestion des bungalows, le responsable du service Comptabilit vous demande de prvoir uniquement des nombres avec 2 positions pour numroter les bungalows. Stockez galement la superficie de chaque bungalow dans le systme. Les clients peuvent effectuer des rservations. Une rservation concerne un seul bungalow. Suite une rservation, une fiche de rservation est immdiatement envoye au client. Deux semaines avant la date d'arrive au parc, une facture correspondante est envoye au client. Cette facture doit tre rgle avant l'arrive au parc. Le responsable de la facturation veut videmment garder trace des informations contenues sur les factures. Le responsable de la rception dsire voir dans le systme si une facture correspondant une rservation a dj t paye ou non.
Pierre Stockreiser
52
Informatique 13CG
Lors de la rservation d'un bungalow, le client a le choix entre les supplments suivants. Code supplment
01 02 03
Description
Literie Livraison domicile du petit djeuner Livraison domicile du quotidien
Wonderland S. r.l.
Parc de bungalows 3, am Boesch L-8899 Schlindermanderscheid G.D.Luxembourg Tl: (Lux)+345566 / Fax: (Lux)+345567
Fiche de rservation
Client Numro: 340 Nom: Weber Prnom: Jos Adresse: 23, rue Principale Code postal: L-8765 Localit: Grevenmacher Pays: Luxembourg No. Passeport: 87699 No. Tlphone: (Lux)+348845 Supplments Code supplment
01 03
Rservation No: 589 Date d'arrive: 03/09/98 Date de dpart: 07/09/98 Nombre de personnes: 4 Bungalow Zone: Liliput Numro: 19 Catgorie: Bain et douche / WC sp. / TV /
Terrasse
Capacit: 5
Description
Literie Livraison domicile du quotidien
Une facture vous sera envoye environ 2 semaines avant votre arrive au parc. Cette facture est rgler avant l'arrive au parc. Nous vous souhaitons un beau sjour au parc Wonderland. Si vous avez encore des questions, n'hsitez pas nous contacter.
Arsne Lupin
RESERVATION MANAGER
Pierre Stockreiser
53
Informatique 13CG
Une facture reprend exactement les mmes informations, avec en plus la date d'envoi de la facture et le prix total payer. Un client est uniquement considr comme tel partir de la premire fois qu'il effectue une rservation.
Pierre Stockreiser
54
Informatique 13CG
MCD
MLD
Exercice
En vous rfrant l'exemple prcdent, rpondez brivement aux questions suivantes. 1. Comment est-ce qu'on traduit une classe du MCD dans le MLD ?
Pierre Stockreiser
55
Informatique 13CG
2. Comment est-ce qu'on traduit un attribut d'une classe du MCD dans le MLD ?
3. Comment est-ce qu'on traduit un identifiant d'une classe du MCD dans le MLD ?
4. Comment est-ce qu'on traduit l'association crire avec ses multiplicits du MCD dans le MLD ?
5. Le MCD nous dit que chaque livre est uniquement crit par un seul auteur (multiplicit max.), tandis qu'un auteur peut crire plusieurs livres. Comment est-ce qu'on peut retrouver ces informations dans le MLD ?
Pierre Stockreiser
56
Informatique 13CG
L'attribut NOAUTEUR_{ID} qui est cl primaire de la table AUTEUR, devient cl trangre dans la table LIVRE.
1 2
x peut prendre les valeurs 0 ou 1 Bien que ce cas n'apparaisse que trs rarement, il est possible pour les multiplicits (x..*) - (0..1)
Pierre Stockreiser
57
Informatique 13CG
Le NOCOMMANDE_{ID}, qui est cl primaire de la table COMMANDE, devient cl trangre dans la table FACTURE. Association binaire (0..1)-(0..1) !!! Ne figure actuellement pas au programme de la classe 13CG On duplique la cl primaire d'une des tables dans l'autre. Lorsque l'association contient elle-mme des attributs (classe-association), ceux-ci deviennent galement attributs de la table dans laquelle a t ajoute la cl trangre. Exemple:
ou
Soit on migre la cl primaire de la table ENTREPRISE dans la table SALARIE, soit on fait l'inverse.
Pierre Stockreiser
58
Informatique 13CG
On cre une table CONCERNER, qui contient comme cl primaire une cl compose de NOCOMMANDE_{ID} et CODEARTICLE_{ID}. Elle contient galement l'attribut QUANTIT issu de l'association concerner. Exemple 2:
de
CODEPROF_{ID},
Pierre Stockreiser
59
Informatique 13CG
L'association habiter du type (x..*)-(x..1), est traduite par la migration de l'attribut ADRESSE_{ID} dans la table PERSONNE. L'association possder du type (x..*)-(x..*) est traduite par la cration d'une table supplmentaire du mme nom. Cette table contient comme cl primaire compose, les cls des deux tables relies PERSONNE et MAISON. On a donc simplement appliqu 2 fois de faon indpendante les rgles de transfert MCD MLD.
Exemple 1:
Comme il s'agit d'une association (x..*)-(x..*), une table supplmentaire DTENIR est cre. Cette table contient comme cl primaire compose, la cl des "deux" classes relies. Comme la mme classe est lie 2 fois l'association, on ne peut pas utiliser 2 fois le mme nom pour les cls migres. Ainsi, il convient d'intgrer les rles du MCD dans le nom des cls migres. Remarque pour les paresseux : On peut laisser de ct le rle dans le nom d'une des deux cls migres.
Pierre Stockreiser
60
Informatique 13CG
Exemple 2:
Comme il s'agit d'une association (x..*)-(x..1), nous devons dupliquer la cl primaire, tout en veillant ce que le mme nom ne soit pas utilis pour la cl primaire et la cl trangre. Attention: Soit un brevet Y qui suit un brevet X. Alors, dans Y, la valeur de NOBREVET_{ID}_SUIT est X. En fait, et ceci peut prter confusion, NOBREVET_{ID}_SUIT contient soit le numro du brevet prcdent soit rien.
Tout en respectant les rgles gnrales du passage MCD MLD, la cl primaire de la table PROJET migre comme cl trangre dans la table TCHE. L'agrgation de composition est reprsente par le fait que la table TCHE contient une cl primaire compose de NOTCHE_{ID} et NOPROJET_{ID}.
Pierre Stockreiser
61
Informatique 13CG
Pierre Stockreiser
62
Informatique 13CG
3.4.4 Exercices
Exercice 1
Transformez les MCD que vous avez raliss pour les exercices 1 6 du chapitre 3.3.9 et les exercices 1 3 du chapitre 3.3.11 en MLD.
Exercice 2
Transformez le MCD suivant en MLD en respectant toutes les rgles de passage MCD MLD.
Remarque: En ce qui concerne le rapport mdical, une conclusion mdicale pourrait par exemple tre "Infection" ou "Cancer de la gorge", tandis que la conclusion professionnelle qui s'en suit serait par exemple "Apte" ou "Inaptitude temporaire <x> jours". Les instanciations de cette classe reprsentent plutt des types de rapports mdicaux standardiss et non pas des rapports mdicaux prcis.
Pierre Stockreiser
63
Informatique 13CG
Exercice 3
Voici un MCD qui reprsente de faon simplifie la gestion d'une compagnie d'assurances. Transformez le MCD en MLD en respectant toutes les rgles de passage MCD MLD.
Un contrat couvre un seul risque. Ce risque peut tre une voiture ou une habitation.
Pierre Stockreiser
64
Informatique 13CG
Implmentation physique de chaque table du MLD dans le SGBD utilis. Pour chaque table, indiquer au SGBD quel(s) champ(s) constitue(nt) la cl primaire. Pour chaque table, indiquer au SGBD la (les) cl(s) trangre(s), et la (les) cl(s) primaire(s) correspondante(s).
Pour ce faire, la plupart des SGBD actuellement sur le march nous offrent 2 possibilits. Prenons titre d'exemple l'implmentation du modle logique suivant.
Pierre Stockreiser
65
Informatique 13CG
1. Utilisation d'une ou de plusieurs interfaces graphiques, qui nous aident dans la cration des tables physiques, dans la dfinition des cls primaires et dans la dfinition des relations. Exemple: Dfinition de la table des employs avec le champ idEmploy tant dfini comme cl primaire.
Remarquez que les noms des diffrents champs ont t modifis lors de l'implmentation du modle logique. Cette mesure dpend uniquement de la convention des noms utilise et n'affecte pas du tout le fonctionnement correcte de la BD.
Pierre Stockreiser
66
Informatique 13CG
2. Utilisation de commandes spciales, faisant partie d'un langage de dfinition de donnes (p.ex. SQL-DDL) Exemple: Implmentation du mme modle logique l'aide de commandes spcifiques
REM REM REM REM REM REM REM REM REM REM REM REM REM ----------------------------------------------------------------------------Gnration d'une base de donnes SQL Gnrique (SQL 2) (6/9/2004 17:03:24) ----------------------------------------------------------------------------Nom de la base : Entreprises Projet : Auteur : Pierre Stockreiser Date de dernire modification : 6/9/2004 17:03:13 --------------------------------------------------------------------------------------------------------------------------------------------------------TABLE : tblEntreprises -----------------------------------------------------------------------------
CREATE TABLE tblEntreprises ( idEntreprise INTEGER NOT NULL , fldNom CHAR (20) NOT NULL , fldAdresse CHAR (25) NOT NULL , fldCodePostal CHAR (7) NOT NULL , fldLocalit CHAR (20) NOT NULL , ); PRIMARY KEY (idEntreprise) CONSTRAINT PK_ENTREPRISE
REM ----------------------------------------------------------------------------REM INDEX DE LA TABLE tblEntreprises REM ----------------------------------------------------------------------------CREATE UNIQUE INDEX I_PK_ENTREPRISE ON tblEntreprises (idEntreprise ASC); REM ----------------------------------------------------------------------------REM TABLE : tblEmployes REM ----------------------------------------------------------------------------CREATE TABLE tblEmployes ( idEmploye INTEGER NOT NULL , fiEntreprise INTEGER NOT NULL , fldNom CHAR (32) NOT NULL , fldPrnom CHAR (32) NOT NULL , fldDateNaissance DATE NOT NULL , ); PRIMARY KEY (idEmploye) CONSTRAINT PK_EMPLOY
REM ----------------------------------------------------------------------------REM INDEX DE LA TABLE tblEmployes REM ----------------------------------------------------------------------------CREATE UNIQUE INDEX I_PK_EMPLOY ON tblEmployes (idEmploye ASC); CREATE INDEX I_FK_EMPLOYER ON tblEmployes (fiEntreprise ASC); REM ----------------------------------------------------------------------------REM CREATION DES REFERENCES DE TABLE REM ----------------------------------------------------------------------------ALTER TABLE tblEmployes ADD (FOREIGN KEY (fiEntreprise) REFERENCES tblEntreprises (idEntreprise) CONSTRAINT FK_EMPLOYER
Pierre Stockreiser
67
Informatique 13CG
ON UPDATE RESTRICT ON DELETE RESTRICT); REM ----------------------------------------------------------------------------REM FIN DE GENERATION REM -----------------------------------------------------------------------------
Que vous avez utilis l'une ou l'autre des 2 mthodes, le rsultat sera toujours un ensemble de tables physiques relies entre elles, dans lesquelles vous pouvez stocker des donnes.
Pierre Stockreiser
68
Informatique 13CG
Pierre Stockreiser
69
Informatique 13CG
4.2 Fonctionnalits
Bien que les diffrents outils de modlisation, actuellement disponibles sur le march, varient considrablement en termes de caractristiques et fonctionnalits, ils offrent cependant les fonctions de base suivantes. Reprsentation graphique des modles conceptuels et logiques avec les diffrents objets (p.ex. classes, associations, attributs, identifiants, tables, cls etc.). Vrification des rgles de construction des diffrents modles (p.ex. Une association ne peut pas tre lie deux classes via des multiplicits 1..1). Transformation automatique d'un MCD en MLD en respectant toutes les rgles de transformation. Gnration automatique d'une BD partir d'un MLD. Aprs avoir indiqu le SGBD cible (p.ex. Oracle, MS-Access, MySQL), le concepteur peut demander l'outil de crer la BD. Pour ce faire, il existe deux alternatives: l'outil de modlisation accde directement au SGBD cible afin de crer la BD en question; l'outil de modlisation gnre un script1, qui est la suite excut sur le SGBD afin de crer la BD. Gnration automatique de rapports imprims concernant l'tat actuel d'un travail de conception. Ces rapports contiennent en gnral la reprsentation graphique des modles, des listes avec tous les objets des diffrents modles et des explications supplmentaires concernant certains objets. Gestion des objets de conception (p.ex. classes, associations, attributs, identifiants, tables, cls etc.) dans un dictionnaire2. Pour des petits projets de conception, effectus par un seul concepteur sur un ordinateur, le dictionnaire est simplement un fichier stock localement. Toutefois, pour les grands projets, effectus par plusieurs concepteurs, certains outils de modlisation permettent la gestion d'un dictionnaire sur un serveur en rseau (voir chapitre 5.5). Dans ce cas, plusieurs concepteurs peuvent travailler en mme temps sur un modle, l'outil de modlisation veillant chaque moment que le modle reste cohrent. L'intgration de plusieurs modles en un seul modle, et la gestion des versions d'un objet ou d'un modle constituent d'autres caractristiques supportes par un tel systme. La plupart des outils de modlisation sont capables de crer un MLD et un MCD partir d'une BD existante. Ce procd, connu sous le nom de "Reversement d'une BD" (angl. Database Reverse Engineering), est souvent utilis la base d'un projet d'amlioration ou d'extension d'un systme d'information existant dj sous forme informatique.
1 2
plusieurs commandes dans un langage support par le SGBD cible. une sorte de rcipient logique pour les objets de conception.
Pierre Stockreiser
70
Informatique 13CG
Pierre Stockreiser
71
Informatique 13CG
Un systme de gestion de bases de donnes (SGBD) est un programme qui nous permet de crer, de modifier et d'exploiter des bases de donnes. Ce systme constitue donc notre interface pour accder aux donnes.
Un utilisateur utilise un SGBD pour accder aux donnes d'une base de donnes.
Pierre Stockreiser
72
Informatique 13CG
Par analogie: Un utilisateur utilise un tableur pour accder aux donnes d'une feuille de calcul, respectivement un traitement de texte pour accder au texte d'un document. Exercice Discutez les avantages et dsavantages d'une gestion de donnes informatises l'aide d'un SGBD, et comparez cette gestion la gestion non informatise.
Pierre Stockreiser
73
Informatique 13CG
Pierre Stockreiser
74
Informatique 13CG
Pendant les annes '80 et '90, beaucoup de SGBDR taient commercialiss pour les diffrentes plates-formes informatiques (Mainframe, Serveurs UNIX, Serveurs VMS, PC...). Citons quelques exemples de SGBDR populaires qui tournent actuellement sur PC: Personal ORACLE MS-ACCESS Filemaker PARADOX Aujourd'hui, les bases de donnes relationnelles se rjouissent d'une grande popularit. Surtout le domaine de la gestion des donnes l'intrieur des entreprises est entirement domin par ces systmes.
Pour la suite de ce cours, nous allons nous limiter l'tude des bases de donnes relationnelles. Nous entendons donc par chaque rfrence une base de donnes (BD), la notion de base de donnes relationnelle. Il est galement sous-entendu que les deux notions SGBD et SGBDR dnotent un systme de gestion de bases de donnes relationnelles dans le contexte de ce cours.
Pierre Stockreiser
75
Informatique 13CG
2. Les requtes constituent dans un certain sens des "questions" qu'on pose au SGBD. Le rsultat d'une requte est toujours un sous-ensemble d'une ou de plusieurs tables. Exemple: Le chef du personnel de l'entreprise SCHAFFGAER S. r.l. dsire connatre les noms, prnoms, adresses et localits des employs recruts en 1996. Il doit formuler une requte qui sera excute par le SGBD, et qui donnera comme rsultat une liste semblable la table des employs, mais contenant uniquement les employs qui vrifient le critre de slection de la requte, et pour chacun de ces employs seulement les informations demandes. Voici le rsultat de cette requte:
3. Les formulaires sont utiliss pour ajouter, modifier ou supprimer des donnes dans les tables. Bien que la plupart des SGBD nous permettent d'accder aux donnes directement dans les tables, les formulaires nous offrent certains avantages en ce qui concerne la facilit d'utilisation, mais galement la scurit des donnes. Exemple: La secrtaire du chef du personnel utilise un formulaire pour ajouter ou supprimer un employ de la BD. Ce formulaire lui permet galement de modifier les donnes d'un employ.
Pierre Stockreiser
76
Informatique 13CG
4. Souvent on veut imprimer des statistiques; concernant certaines donnes d'une BD. C'est ici qu'interviennent les rapports. Les rapports sont similaires aux formulaires, la diffrence prs, qu'ils sont uniquement destins tre imprims et qu'il n'y a pas de dialogue interactif avec l'utilisateur. Un rapport se base gnralement sur une ou plusieurs tables ou bien le rsultat d'une requte. Exemple: A la fin de chaque mois le chef du personnel reoit un rapport avec pour chaque dpartement, la liste des employs, leur salaire mensuel ainsi que le salaire mensuel total pay par dpartement.
Pierre Stockreiser
77
Informatique 13CG
Qu'est-ce qu'on entend par structure physique ? Le systme d'exploitation (p.ex. Linux, Windows2000, WindowsXP ), qui connat seulement la notion de fichier en ce qui concerne le stockage des donnes, ignore en principe le contenu de ces fichiers. Les fichiers constituent dans un certain sens la structure physique des donnes. Chaque programme cre des fichiers ayant un format spcifique ce programme. L'utilisateur peut reconnatre le format par l'extension derrire le nom du fichier. Par exemple: .doc .xls fichier MS-Word fichier MS-Excel
Qu'est-ce qu'on entend par structure logique ? Chaque programme offre galement l'utilisateur la possibilit de manipuler des composants, qui existent seulement dans le contexte de ce programme. Par exemple: Document Feuille de calcul Classeur Composant logique de MS-Word Composant logique de MS-Excel Composant logique de MS-Excel
Ces composants ou structures logiques sont uniquement visibles par le biais du programme correspondant. On vient de dfinir les composants standard d'un SGBD dans le chapitre prcdent: Les tables Les requtes Les formulaires Les rapports
Pierre Stockreiser
78
Informatique 13CG
Quelle est la relation entre une structure logique et sa structure physique correspondante ? Cette relation dpend du programme. MS-Word: MS-Excel: Chaque document (composant logique) correspond en principe un fichier .doc (structure physique). Chaque classeur (composant logique) correspond un fichier .xls (composant physique). Attention: Un classeur peut contenir plusieurs feuilles de calcul.
En ce qui concerne les SGBD, il existe deux variantes: 1. Chaque composant (table, formulaire ) d'une BD est stock dans un fichier spar. Une base de donnes constitue donc un ensemble de fichiers. Exemple: dBASE 2. Tous les composants d'une BD sont intgrs dans un seul fichier. Exemple: MS-Access Exercice Discutez les avantages et dsavantages des deux concepts d'implmentation possibles pour les composants d'une BD.
Pierre Stockreiser
79
Informatique 13CG
Poste de travail
Afin de pouvoir tre connect un rseau, un ordinateur doit disposer d'une carte rseau.
Extrait du livre "La Micro c'est simple", publi par IDG Books Worldwide, Inc. ISBN 2-87691-321-
Pierre Stockreiser
80
Informatique 13CG
La plupart des rseaux locaux contiennent des ordinateurs trs puissants en termes de vitesse d'excution et de capacit de stockage. Ces ordinateurs, encore appels serveurs ddis (angl. Server), ne sont gnralement pas utiliss comme poste de travail, mais ils doivent effectuer un certain nombre de tches varies.
Serveur ddi
On distingue plusieurs types de serveurs. Les serveurs de fichiers (angl. File Server) contiennent gnralement des fichiers appartenant aux diffrents utilisateurs du rseau. Par exemple, si vous utilisez un programme de traitement de texte sur un poste de travail, ce programme se trouve gnralement localement sur le poste. Cependant, le document sur lequel vous dsirez effectuer des modifications, stock sur le serveur, est charg dans la mmoire locale de votre poste de travail, afin que vous puissiez l'utiliser. Lors de chaque opration de sauvegarde (angl. Save/Save As), le fichier est effectivement sauvegard sur le serveur. Le serveur gre bien sr l'accs des utilisateurs, qui doivent gnralement s'identifier par un nom et un mot de passe, afin de garantir une certaine scurit des donnes.
Les serveurs d'impression (angl. Print Server) effectuent la gestion des imprimantes connectes au rseau. Lorsque le rseau comporte une multitude d'imprimantes diffrentes, un utilisateur sur son poste de travail peut slectionner une imprimante en fonction des caractristiques (p.ex. impression couleur/NB), des capacits (p.ex. nombre de pages imprimes par minute) et de l'emplacement physique (p.ex. imprimante au mme tage que le poste de travail). Lors de l'impression (angl. Print), le document imprimer est d'abord envoy dans une file d'attente (angl. Print Queue) qui se trouve sur le serveur d'impression. Le serveur d'impression contient gnralement une file d'attente par imprimante. Les documents d'une file d'attente sont envoys un aprs l'autre vers l'imprimante correspondante.
Pierre Stockreiser
81
Informatique 13CG
Les serveurs d'applications (angl. Application Server) contiennent des applications ou programmes destins l'utilisation en rseau. Un exemple populaire constituent les applications du type "Groupware", qui permettent aux utilisateurs du rseau d'changer des messages lectroniques (angl. E-Mail), d'entretenir un agenda lectronique commun et de travailler soi-disant en mme temps sur des document partags. Les serveurs de bases de donnes (angl. Database Server), appartenant galement cette catgorie, sont trs rpandues. Avant la priode o les PC devenaient populaires, les bases de donnes ainsi que les programmes pour les manipuler, se trouvaient sur des grands ordinateurs puissants du type "Mainframe". L'utilisateur tait connect au mainframe l'aide d'un terminal compos d'un clavier et d'un cran. Contrairement un PC, un terminal peut uniquement envoyer des caractres au mainframe et afficher les caractres, qui lui sont envoys par le mainframe. Avec l'arrive des PC, dont les fonctionnalits ne se limitent pas l'envoi et l'affichage de caractres, le rle des serveurs a considrablement chang. Actuellement, dans les environnements dits "Client/Serveur", les PC constituent des clients "intelligents", qui sont en parfaite communication avec les serveurs, dont le but principal est de "rpondre" aux questions qui leur sont poses par les clients. L'architecture Client/Serveur est explicite plus en dtail dans le chapitre 5.6 . Les rseaux informatiques ayant une certaine taille, en termes du nombre de postes et de serveurs, sont gnralement grs par un administrateur rseau, personne (ou groupe de personnes) en charge de la gestion, du contrle et de l'entretien du rseau. Lorsque la distance gographique couverte par un rseau augmente en connectant des utilisateurs situs par exemple dans des villes ou mme des pays diffrents, plusieurs rseaux locaux sont connects en un seul rseau tendu (angl. WAN = Wide Area Network), qui peut ainsi regrouper plusieurs milliers d'utilisateurs.
Rseau public
En utilisant de l'quipement rseau spcialis dans ce domaine, on peut connecter plusieurs rseaux locaux via un rseau public. Ce rseau public peut par exemple tre constitu du
Pierre Stockreiser
82
Informatique 13CG
rseau tlphonique public, d'un ensemble de lignes loues (lignes ddies), d'un rseau de cbles en fibres optiques, d'un rseau rapide de commutation de paquets ou mme d'une liaison par satellite. A titre d'exemple, on peut mentionner l'Internet, qui n'est rien d'autre qu'un gigantesque rseau tendu. Pour un utilisateur, le travail dans un rseau local ou tendu est tout fait transparent. Il peut par exemple accder des fichiers distants de la mme manire qu' des fichiers qui se trouvent sur son disque dur local.
Pierre Stockreiser
83
Informatique 13CG
Pierre Stockreiser
84
Informatique 13CG
Architecture "mainframe":
Avantages de l'architecture "mainframe": Les "mainframe" tant de grands ordinateurs trs puissants, les systmes atteignent de trs belles performances, d'autant plus qu'il n'y a pas de reprsentation graphique sur les terminaux.
Dsavantages de l'architecture "mainframe": Aucune capacit de calcul sur le terminal, donc impossible d'excuter des programmes sur le terminal. Le "mainframe" tant sous la seule gestion du service informatique, les utilisateurs peuvent uniquement accder aux BD via des formulaires etc. crs par les informaticiens. (Cette mesure s'avre parfois avantageuse ) Le rseau est assez charg, surtout lorsque le nombre de terminaux accrot. Les requtes, formulaires etc. sont fortement coupls au SGBD ce qui les rend pratiquement inutilisable lorsqu'une socit veut migrer vers un autre SGBD.
En fait, les informaticiens taient depuis longtemps la recherche de systmes ouverts. La finalit d'un systme ouvert consiste dans le fait que ses composants (ordinateurs, SGBD etc.)
Pierre Stockreiser
85
Informatique 13CG
sont changeables sans que tous les objets en utilisation (requtes, formulaires etc.) doivent tre compltement redfinis resp. reprogramms. Tous les lments d'un tel systme doivent donc supporter un maximum possible de standards. Un lment important de la philosophie des systmes ouverts est constitu par l'approche Client/Serveur.
1 2
par plate-forme, on entend l'ordinateur sur lequel est excut le SGBD plus facile utiliser 3 par exemple SQL (voir chapitre 7.2)
Pierre Stockreiser
86
Informatique 13CG
Architecture Client/Serveur:
Avantages de l'architecture Client/Serveur: Les utilisateurs deviennent des clients avec des postes de travail intelligents (PC), l'aide desquels ils peuvent connecter les applications bureautiques directement aux serveurs BD, afin de grer dans un environnement convivial les donnes de l'entreprise, sans tre dpendant des services d'un informaticien pour rsoudre le moindre problme. Les rseaux informatiques modernes permettent un accs transparent plusieurs serveurs BD, et ceci mme de faon simultane. Une partie de la capacit de travail est partage entre les serveurs et les clients, ce qui cre un certain quilibre. Une panne du serveur n'empche pas ncessairement tous les utilisateurs de travailler avec l'outil informatique. Certains travaux peuvent tre excuts sans connexion au serveur. L'architecture Client/Serveur, reposant sur les systmes ouvert, offre en plus l'avantage qu'il existe toute une panoplie de logiciels standard, ce qui cre un march multivendeur et une offre de produits quilibre.
Exemples de SGBD Client/Serveur: Ct serveur: Ct client: Oracle, Sybase, IBM-Informix, MS-SQL-Server, MySQL Paradox, Personal Oracle, MS-Access, Filemaker
Pierre Stockreiser
87
Informatique 13CG
. . . Voici la table ncessaire pour stocker les informations concernant ces employs dans une BD: Un champ de donnes
Table: tblEmploys
Nom Weber DaCosta Feller ... Prnom Jos Antonio Emil ... DateNaissance 22/08/1970 07/12/1974 28/03/1967 ... Salaire 2200 1750 2150 ... Service Comptabilit Informatique Expdition ... Un enregistrement
Proprits des tables: Les champs de donnes dfinissent les informations, qu'on veut stocker dans la table (p.ex. des informations concernant les employs d'une socit). Chaque enregistrement reprsente une occurrence1 de ce qu'on veut stocker ( p.ex. un employ). Chaque table possde un nom unique (p.ex. : tblEmploys). Chaque enregistrement correspond une ligne de la table. Chaque champ correspond une colonne de la table. Chaque champ peut reprsenter des donnes de nature diffrente (Nom, Salaire, Date de naissance ). Chaque champ peut reprsenter des donnes de type diffrent (Texte, Nombres, Dates ).
Correspond aux termes instanciation et objet utiliss dans le chapitre 3 (Modlisation de donnes).
Pierre Stockreiser
88
Informatique 13CG
Convention des noms: Il existe une convention concernant les noms des objets des BD. Gnralement, les noms des objets ne contiennent ni d'espaces, ni de caractres spciaux. En plus, chaque nom d'un objet est prcd par un prfixe bien dtermin pour chaque type d'objet. Cette convention fait partie d'une convention des noms gnrale pour les programmes tournant sous une interface graphique du type Windows. Les noms de tables sont prcds du prfixe tbl (angl.: table). Par exemple: tblLivres, tblEmploys
Une BD peut contenir une ou plusieurs tables, mais les tables sont gnralement la condition ncessaire pour la cration d'autres objets tels que les requtes, formulaires et rapports. Exercice Dterminez les champs ncessaires pour une table qui contiendra des donnes concernant : les lves d'une cole (nous ne considrons pas la gestion des classes); les livres d'une bibliothque (nous supposons qu'un livre est rdig par un seul auteur); les produits d'un supermarch.
Pierre Stockreiser
89
Informatique 13CG
Afin de pouvoir reprsenter des donnes de types diffrents, les SGBD offrent des types de donnes standard pour les champs de donnes. Voici les types de donnes connus par la plupart des SGBD: Type de donnes Date/Heure Valeur boolenne Texte Numrique Mmo Description Date et heure Seulement les 2 valeurs Oui/Non (Yes/No) sont possibles Chanes de caractres Nombres entiers ou dcimaux Documents (textes longs)
Consultez le manuel d'utilisation de votre SGBD pour trouver des informations plus dtailles concernant les types de donnes supports. Remarque: Les nombres qui ne sont pas utiliss lors de calculs numriques (p.ex. No.Tl) sont gnralement reprsents l'aide du type de donnes "Texte".
Convention des noms: Les noms des champs sont prcds du prfixe fld (angl.: field). Par exemple: fldMarque, fldModle
Pierre Stockreiser
90
Informatique 13CG
Exercice Rflchissez pour chaque champ des 3 tables, que vous avez dfini dans l'exercice du chapitre 6.1, sur le type de donnes appropri.
Lors de la cration d'une table, nous devons indiquer au SGBD, pour chaque champ: 1. Le nom du champ, qui doit tre unique dans la table 2. Le type de donnes du champ
Pierre Stockreiser
91
Informatique 13CG
6.3 Cl primaire
Dans la plupart des cas, on dsire pouvoir identifier de manire unique chaque enregistrement de la table. Ceci n'est pas possible pour notre table avec les taxis. Il se peut trs bien que le propritaire de la socit achte par exemple une deuxime BMW 320i , qui possde bien sr galement une cylindre de 2000 ccm et un poids de 1200 kg. Dans ce cas nous avons 2 enregistrements compltement identiques dans notre BD. Cela nous empche d'identifier clairement un des 2 enregistrements. Il nous faut donc un moyen, qui nous permet d'adresser sans ambigut chaque enregistrement dans la table une cl primaire ! La cl primaire, constitue d'un ou de plusieurs champs, nous permet d'identifier de manire unique chaque enregistrement d'une table. Examinons notre cas de la socit de taxis. Aucun des 4 champs seul, et aucune combinaison des 4 champs ne se prtent comme candidats pour devenir cl primaire, car aucun de ces champs ne contient des valeurs uniques un et un seul taxi. Supposons par exemple la marque et le modle comme cl primaire. Au cas o la socit achte une deuxime BMW 320i, on ne pourrait plus distinguer entre les deux voitures. Le ou les champs, qui forment la cl primaire doivent imprativement avoir des valeurs qui sont uniques pour toute la table1, et qui permettent donc d'identifier chaque enregistrement. Exemples: Le numro de matricule pour les assurs des caisses de maladie. Le numro client pour les clients d'une vidothque.
En ce qui concerne les taxis, nous avons deux possibilits: 1. Analyser s'il n'existe pas d'information concernant les taxis qui ne soit pas encore stocke dans la table et qui ferait une cl primaire valable. Une telle information serait par exemple le numro de chassis, unique pour chaque voiture. On pourrait donc ajouter un champ fldNochassis et dfinir ce champ comme cl primaire. Ceci a comme dsavantage que le numro de chassis d'une voiture est un numro assez long et compliqu, ce qui dfavorise une utilisation conviviale de la table. 2. On pourrait inventer un numro de taxi allant simplement de 1 jusqu'au nombre de taxis que la socit possde. Le premier taxi enregistr serait le numro TAXI=1, le deuxime le numro TAXI=2 etc. . Bien que ce numro n'ait aucune signification relle, cette mthode de cration de cls primaires artificielles est trs rpandue, et la plupart des SGBD offrent mme un type de donnes prdfini pour gnrer des valeurs uniques pour de telles cls primaires. Notre table aurait dans ce cas la structure suivante:
pour une cl primaire compose de plusieurs champs, la combinaison des valeurs doit tre unique
Pierre Stockreiser
92
Informatique 13CG
Cl primaire
idTaxi 1 2 3 ...
Convention des noms: Les noms des champs qui forment la cl primaire sont prcds du prfixe id (angl.: identifier). Par exemple: idTaxi, idEmploy
Exercice Dfinissez pour chacune des 3 tables, que vous avez dfini dans l'exercice du chapitre 6.1, une cl primaire parmi les champs existants, resp. crez un nouveau champ qui assumera le rle de cl primaire. Indiquez dans la grille suivante pour chaque table toutes les informations ncessaires.
Nom de la table:
Membre de la Nom du cl primaire champ (Cochez la case si OUI ) Type de donnes Description
Pierre Stockreiser
93
Informatique 13CG
Nom de la table:
Membre de la Nom du cl primaire champ (Cochez la case si OUI ) Type de donnes Description
Nom de la table:
Membre de la Nom du cl primaire champ (Cochez la case si OUI ) Type de donnes Description
Pierre Stockreiser
94
Informatique 13CG
La table tblEmploys contient certaines informations concernant les employs, mais pas le nom de la socit, qui emploie un employ en question. Les informations des socits se trouvent dans la table tblSocits. Cependant, dans la table tblEmploys se trouve le champ fiSocit, qui contient pour chaque employ le numro de la socit patron. On peut retrouver chaque numro de socit encore une fois dans le champ idSocit, qui constitue la cl primaire de tblSocits. Les deux tables sont donc logiquement lies via les champs fiSocit et idSocit. On dit que fiSocit est une cl trangre, qui fait rfrence la cl primaire idSocit de la table tblSocits.
Cl trangre Un champ qui, dans une table, fait rfrence la cl primaire d'une autre table est appel cl trangre (angl.: foreign key, foreign identifier). Ainsi sont dfinies les relations entre les tables.
Pierre Stockreiser
95
Informatique 13CG
6.5 Index
Une des utilisations frquentes des tables consiste dans la recherche et le tri des enregistrements. Lorsque les tables contiennent un grand nombre d'enregistrements, la recherche de certains enregistrements ainsi que le tri d'enregistrements ncessitent de plus en plus de temps. Les index sont des structures qui acclrent les tris et recherches dans les tables, ainsi que l'excution de certaines requtes (voir chapitre 7). Exemple: Reprenons notre exemple des employs d'une socit. Une recherche intressante serait par exemple: MONTRE-MOI TOUS LES EMPLOYES DU SERVICE INFORMATIQUE ! Il serait aussi intressant de trier les employs sur leur nom de famille. Au cas o la table contient beaucoup d'enregistrements, on devrait d'abord crer un index sur le champ fldNom, afin d'acclrer le tri. Crer par exemple un index sur le champ fldNom veut dire que le SGBD copie toutes les valeurs existantes du champ fldNom dans une liste spciale 2 colonnes. La deuxime colonne contient les noms tris en ordre alphabtique, et la premire contient une rfrence vers l'enregistrement correspondant de la table.
Il est vident que par la suite de la cration de cet index, toutes les recherches et les tris concernant le nom de l'employ sont acclres, puisque le SGBD consulte uniquement l'index pour retrouver le bon nom, pour ensuite utiliser la rfrence de l'index vers l'enregistrement correspondant de la table. Un index peut aussi comporter plusieurs champs comme par exemple fldService et fldNom. Proprits importantes des index: Un index est toujours li un ou plusieurs champs d'une table. Un index peut seulement contenir des champs ayant un des types de donnes Texte, Numrique ou Date/Heure. Un index est automatiquement mis jour par le SGBD lors d'un ajout, d'une modification ou d'une suppression d'enregistrements dans la table. Ceci est transparent pour l'utilisateur de la BD. Il existe deux types d'index: 1. Index avec doublons (Les valeurs doubles sont permises) 2. Index sans doublons (Les valeurs doubles ne sont pas permises)
Pierre Stockreiser
96
Informatique 13CG
Voici quelques rgles qui nous aident dterminer les champs d'une table qui ont besoin d'tre indexs: La puissance des index joue uniquement pour des tables qui contiennent beaucoup d'enregistrements (Consultez la documentation de votre SGBD afin d'avoir des prcisions). Un champ sur lequel on ne fait que rarement ou pas du tout de recherche ou de tri n'a pas besoin d'index. Les champs rfrencs frquemment dans les recherches et tris doivent par contre tre indexs. Pour les index multi-champs, il faut veiller ce que la combinaison des champs dans l'index corresponde exactement au critre de recherche. Un index sur nom&prnom n'acclre pas une recherche du type prnom=Jos & nom=Weber. Un index sans doublons sur un champ empche l'utilisateur d'entrer la mme valeur dans ce champ, dans deux enregistrements diffrents. Dfinir trop d'index sur une table ralentit en gnral les oprations d'ajout, de modification et de suppression, parce que le SGBD doit mettre jour la table et l'index. La cl primaire est toujours indexe l'aide d'un index sans doublons ! 1
Pour la plupart des SGBD, ceci est fait de faon automatique lors de la dfinition d'un ou de plusieurs champs comme cl primaire .
Pierre Stockreiser
97
Informatique 13CG
Le rsultat serait un sous-ensemble de la table avec seulement les enregistrements qui vrifient le critre de slection ( cylindre > 2000). Pour chacun de ces enregistrements, le SGBD affiche en plus seulement les champs explicitement demands ( fldMarque et fldModle). fldMarque BMW . fldModle 525i
Une requte simple produit donc comme rsultat un sous-ensemble des enregistrements d'une table. En plus, une requte nous permet d'afficher seulement certains champs pour les enregistrements appartenant ce sous-ensemble. On appelle ces requtes "Requtes de Slection", puisqu'il s'agit d'une slection de certains enregistrements. Il n'existe cependant pas seulement des requtes de slection, mais galement: Des requtes d'insertion insrer des enregistrements dans la table. p.ex. Insrer un nouveau taxi : 4, BMW, 325i, 2500, 1270. Des requtes de modification modifier des enregistrements dans la table. p.ex. Modifier la cylindre des Ford Orion de faon ce qu'elle devienne 2000. Des requtes de suppression supprimer des enregistrements de la table. p.ex. Supprimer toutes les BMW.
Pierre Stockreiser
98
Informatique 13CG
Les requtes possdent l'avantage de pouvoir manipuler facilement un grand nombre d'enregistrements sans que l'utilisateur ne doive s'occuper de slectionner enregistrement par enregistrement. Il lui suffit de spcifier des critres de slection pour la requte, ainsi que l'opration effectuer ( simple slection et affichage, insertion, modification ou suppression). Bien que les requtes de slection soient implmentes d'une manire plus ou moins cohrente travers les SGBD actuels, il existe des diffrences subtiles en ce qui concerne les requtes d'insertion, de modification ainsi que de suppression. En plus, l'insertion et la suppression se font souvent de manire plus facile directement dans la table. Il existe 4 types de requtes: 1. 2. 3. 4. Requtes de slection. Requtes d'insertion. Requtes de modification. Requtes de suppression.
Exercice Quel est en gnral le rsultat d'une requte: de slection : d'insertion : de modification : de suppression :
Pierre Stockreiser
99
Informatique 13CG
Pierre Stockreiser
100
Informatique 13CG
1. Requtes de slection.
SELECT <Nom d'un champ>, <Nom d'un champ>, ... FROM <Nom de la table> WHERE <Critres de slection>;
2. Requtes d'insertion.
INSERT INTO <Nom de la table> [(<Liste des champs>)] VALUES ( <Valeurs pour les champs> ); Attention: Lorsque vous n'indiquez pas la liste des champs derrire INSERT INTO , vous devez spcifier une valeur pour chaque champ de la table derrire VALUES . Les parenthses derrire VALUES sont obligatoires. La liste des champs, lorsqu'elle est indique, contient les noms des champs, spars par une virgule, et doit galement tre entoure de parenthses.
3. Requtes de modification.
UPDATE <Nom de la table> SET <Nom d'un champ>={valeur}, <Nom d'un champ>={valeur}, . . WHERE <Critres de slection>;
4. Requtes de suppression.
DELETE FROM <Nom de la table> WHERE <Critres de slection>;
Pierre Stockreiser
101
Informatique 13CG
Soit une table des employs d'une entreprise avec la structure suivante:
Voici le code SQL ncessaire pour effectuer quelques requtes lmentaires: 1. Afficher le prnom et le nom de tous les employs
SELECT fldPrnom, fldNom FROM tblEmploys;
25.3.1997
'Comptabilit',
'Portante',
'ITA',
Remarques: Les valeurs sont spares par des virgules. Les donnes du type TEXTE sont entoures d'apostrophes. Les dates sont entoures du caractre # et indiques dans le format amricain #Mois/Jour/Anne# Exemple: 20.4.98 #04/20/98# ou #4/20/98# ou #04/20/1998# ou #4/20/1998#
Quel est l'inconvnient de cette requte ? ______________________________________ Soit l'adaptation suivante de la requte:
SELECT DISTINCT fldNationalit FROM tblEmploys;
Pierre Stockreiser
102
Informatique 13CG
ou
SELECT * FROM tblEmploys;
Remarque: L'oprateur * permet d'afficher tous les champs dfinis dans la table.
Pierre Stockreiser
103
Informatique 13CG
Comparaison une valeur donne. Pour chaque enregistrement, la valeur d'un champ donn est compare une valeur fixe. Cette valeur fixe est gnralement une valeur numrique, une date ou un texte. Voici les oprateurs de comparaison: = > < >= <= <> "est gal" "strictement suprieur" "strictement infrieur" "suprieur ou gal" "infrieur ou gal" "est diffrent"
Remarque Les critres du type texte sont insensibles la casse des caractres. 2. Afficher le prnom, le nom et l'ge de tous les employs plus jeunes que 50 ans
SELECT fldPrnom, fldNom, fldAge FROM tblEmploys WHERE fldAge<50;
Quel problme se pose lorsqu'on excute cette mme requte encore une fois un an plus tard ?
Pierre Stockreiser
104
Informatique 13CG
Comment peut-on viter un tel problme ds le dpart, dj lors de la conception des tables ?
Remarque: Cette requte peut provoquer des rsultats imprvus au cas o plusieurs employs ont par exemple le mme nom. Pour tre certain de ne pas commettre d'erreur, il faudrait d'abord slectionner tous les employs qui s'appellent "Portante". Lorsque cette requte ne fournit qu'un seul enregistrement, vous pouvez excuter la requte comme indiqu en haut. Par contre lorsque vous remarquez que la table contient plusieurs employs au nom de "Portante", vrifiez les enregistrements, et retenez la valeur de la cl primaire (idEmploy) pour l'employ que vous dsirez modifier. Ensuite utilisez la valeur de idEmploy dans la partie WHERE de la commande UPDATE (.WHERE idEmploy=<valeur>). 4. Effacez tous les employs du service Informatique.
DELETE FROM tblEmploys WHERE fldService='Informatique';
5. Afficher le nom, le prnom et l'ge de tous les employs entrs en service partir du 1.1.1995
SELECT fldNom, fldPrnom, fldAge FROM tblEmploys WHERE fldEntreService>=#1/1/95#;
Les requtes paramtres Imaginez que de temps en temps on voudrait rexcuter cette requte avec une date d'entre en service diffrente. Au lieu de modifier chaque fois le critre de slection on peut dans la plupart des SGBD dfinir une requte paramtre, c..d. une requte qui ne contient pas directement une valeur (ici: date d'entre en service) comme critre de slection mais un paramtre. Ce paramtre est reprsent par un texte entour de crochets. Ainsi, la requte suivante provoque d'abord l'affichage d'une bote de dialogue:
SELECT fldNom, fldPrnom, fldAge FROM tblEmploys WHERE fldEntreService>=[Indiquez une date d'entre au service];
L'utilisateur de la requte indique ensuite une date dans la bote de dialogue et slectionne le bouton OK Finalement la requte est excute avec comme date la valeur entre par l'utilisateur. Une requte peut contenir plusieurs paramtres.
Pierre Stockreiser
105
Informatique 13CG
Parfois, on ne connat pas la valeur exacte laquelle on veut comparer la valeur d'un champ. Dans ce cas on peut utiliser un filtre. Un filtre est une expression qui peut contenir des lettres, des chiffres et en plus les 2 caractres spciaux (angl. Wildcards) suivants:
% reprsente n'importe quelle squence de 0 ou plusieurs caractres; _ reprsente un seul caractre quelconque.
Pour rechercher des personnes dont le nom est 'SCHMITZ' ou 'SCHMITT' ou 'SCHMIT' etc. on dfinit par exemple le filtre suivant : 'SCHMI%' Le filtre 'BL__' slectionne par exemple les valeurs 'BLEU' ou 'BLUE' mais pas 'BLANC'
Exemple: Exemple:
Les filtres sont utiliss ensemble avec le mot rserv LIKE. Voici la syntaxe: ... WHERE <Nom du champ> LIKE <Filtre>
Exemples: 1. Afficher le nom et le prnom des employs dont le prnom contient un trait d'union (p.ex. Jean-Jacques)
SELECT fldNom, fldPrnom FROM tblEmploys WHERE fldPrnom LIKE '%-%';
2. Afficher le nom, le prnom et l'ge des employs dont le nom commence par 'W', est compos de 5 lettres et se termine par 'R'
SELECT fldNom, fldPrnom, fldAge FROM tblEmploys WHERE fldNom LIKE 'W___R';
Remarque Pour les manipulations pratiques, il faut se rendre compte que certains SGBD utilisent des caractres spciaux diffrents pour reprsenter une squence de caractres respectivement un caractre quelconque. MS-Access par exemple utilise les caractres suivants: SQL Squence de 0 ou plusieurs caractres Un seul caractre quelconque MS-Access
% _
* ?
Pierre Stockreiser
106
Informatique 13CG
L'oprateur NOT inverse le rsultat d'une expression logique. 2. AND (Et logique)
L'oprateur AND nous permet de combiner plusieurs conditions dans une expression logique. L'expression logique retourne uniquement la valeur 'Vrai' lorsque toutes les conditions sont remplies. 3. OR (Ou logique)
L'oprateur OR nous permet de combiner plusieurs conditions dans une expression logique. L'expression logique retourne la valeur 'Vrai' lorsque au moins une des conditions est remplie. Priorit des oprateurs logiques Lorsqu'on combine plusieurs conditions par des oprateurs logiques, le rsultat final de l'expression logique dpend de l'ordre d'excution des diffrentes conditions. Cet ordre est dtermin par la priorit des oprateurs logiques. Voici l'ordre prdfini en SQL: 1. 2. 3. 4. Dterminer le rsultat logique ('Vrai','Faux') des comparaisons (=, <, > etc.) Effectuer les ngations (NOT) Effectuer les AND Effectuer les OR
Pour modifier cet ordre d'excution, nous pouvons utiliser des parenthses afin de grouper les diffrentes conditions logiques.
Exemples 1. Afficher le prnom et le nom de tous les employs qui ne travaillent pas dans le service "Marketing"
SELECT fldPrnom, fldNom FROM tblEmploys WHERE NOT fldService='Marketing';
Formulez une requte qui affiche exactement le mme rsultat, sans utiliser l'oprateur NOT.
SELECT fldPrnom, fldNom FROM tblEmploys WHERE fldService<>'Marketing';
Pierre Stockreiser
107
Informatique 13CG
2. Afficher le numro d'employ, le prnom et le nom de tous les employs dont le nom ne commence pas par la lettre 'W'
SELECT idEmploy, fldPrnom, fldNom FROM tblEmploys WHERE NOT fldNom LIKE 'W%';
3. Afficher le numro de l'employ, le prnom et le nom pour les employs du service Informatique qui ont moins de 30 ans.
SELECT idEmploy, fldPrnom, fldNom FROM tblEmploys WHERE fldService='Informatique' AND fldAge<30;
4. Afficher le prnom et le nom des employs fminins (code=F) qui ne travaillent pas au service marketing.
SELECT fldPrnom, fldNom FROM tblEmploys WHERE fldSexe='F' AND NOT fldService='Marketing';
ou
SELECT fldPrnom, fldNom FROM tblEmploys WHERE fldSexe='F' AND fldService<>'Marketing';
5. Afficher tous les champs pour les employs de nationalit luxembourgeoise (Code=LUX) ou portugaise (Code=PRT).
SELECT * FROM tblEmploys WHERE fldNationalit='LUX' OR fldNationalit='PRT';
6. L'employ Emil Meier est transfr du service Comptabilit dans le service Informatique. Refltez ce changement dans la table.
UPDATE tblEmploys SET fldService='Informatique' WHERE fldPrnom='Emil' AND fldNom='Meier';
Remarque: Cette requte peut provoquer des rsultats imprvus au cas o plusieurs employs ont par exemple le mme nom. Pour tre certain de ne pas commettre d'erreur, il faudrait d'abord slectionner tous les employs qui s'appellent Emil Meier. Lorsque cette requte ne fournit qu'un seul enregistrement, vous pouvez excuter la requte comme indiqu en haut. Par contre lorsque vous remarquez que la table contient plusieurs employs au nom de Emil Meier, vrifiez les enregistrements, et retenez la valeur de la cl primaire (idEmploy) pour l'employ que vous dsirez modifier. Ensuite utilisez la valeur de idEmploy dans la partie WHERE de la commande UPDATE (.WHERE idEmploy=<valeur>).
Pierre Stockreiser
108
Informatique 13CG
7. Affichez tous les champs pour les employs fminins de nationalit luxembourgeoise (Code='LUX') ou allemande (Code='ALL')
SELECT * FROM tblEmploys WHERE (fldNationalit='LUX' OR fldNationalit='ALL') AND fldSexe='F';
8. Afficher le numro, le nom et le prnom de tous les employs embauchs pendant le mois de juillet 1997.
SELECT idEmploy, fldNom, fldPrnom FROM tblEmploys WHERE fldEntreService >= #7/1/97# AND fldEntreService <=#7/31/97#;
ou
SELECT idEmploy, fldNom, fldPrnom FROM tblEmploys WHERE MONTH(fldEntreService)=7 AND YEAR(fldEntreService)=1997;
SQL met notre disposition certaines fonctions qui nous facilitent la gestion des dates: retourne la date actuelle retourne l'anne d'une date en format XXXX retourne le mois d'une date (1-12) retourne le jour d'une date (1-31) <date> peut tre: - une date entre manuellement - le nom d'un champ qui contient une date En plus, on peut calculer la diffrence entre deux dates l'aide de l'oprateur arithmtique - . Attention: Cette diffrence est exprime en jours.
DATE() YEAR(<date>) MONTH(<date>) DAY(<date>)
9. Afficher toutes les informations pour les employs masculins embauchs pendant les 15 derniers jours.
SELECT * FROM tblEmploys WHERE fldSexe='M' AND DATE()-fldEntreService<=15;
Pierre Stockreiser
109
Informatique 13CG
Gnralement, chaque champ dans une table possde une valeur bien dfinie. Il existe pourtant des situations spciales. La quantit en stock d'un nouveau produit par exemple peut tre 0, le prnom ne s'applique pas du tout pour un client du type "Socit" tandis que l'adresse d'un nouveau client peut tre encore inconnue lors de l'insertion des donnes du client dans une BD. Les SGBD nous offrent en gnral 3 valeurs pour ces types de situations: Le nombre 0 ; La chane de caractres vide ('') ; La valeur prdfinie NULL (Valeur indtermine, Champ vide). Il n'est pas toujours vident de dcider sur la bonne valeur. Voici quelques rflexions concernant les exemples noncs: Pour le stock d'un produit, qui est 0 au dbut, il est conseill d'insrer effectivement ds le dbut la valeur numrique 0. On a effectivement 0 produits dans le stock ce qui ne veut pas dire que la quantit en stock est indtermine. Pour le prnom d'un client du type "Socit" on utilise la chane vide (''). Le prnom d'une socit est dfinitivement non-existant. En ce qui concerne l'adresse d'un nouveau client, on insre la valeur NULL, ce qui veut dire que l'adresse est (pour le moment) indtermine. On est plus ou moins sr de connatre l'adresse un moment ultrieur. Lorsqu'un nouveau client n'a pas de fax, on peut affecter la chane vide au champ. Si par contre le client possde un numro de fax, mais pour une raison ou l'autre on l'ignore encore, on devrait plutt affecter la valeur NULL au champ. En gnral, on peut dire que la valeur NULL est uniquement affecte un champ en cas d'indtermination de la valeur du champ. Remarques: On peut insrer la valeur NULL de faon explicite, par exemple l'aide d'une requte d'insertion. La plupart des SGBD insrent automatiquement la valeur NULL pour chaque champ qui n'a pas de valeur explicite associe dans une requte d'insertion. L'oprateur IS NULL nous permet de tester de faon explicite si une valeur est indtermine pour un champ. L'oprateur IS NOT NULL permet de tester inversement le fait que la valeur est bien dtermine.
Pierre Stockreiser
110
Informatique 13CG
Exemple: 1. Vous devez ajouter un nouvel employ dans la BD. Voici les informations dont vous disposez: 24 Marcel Schrobiltgen LUX ? M ? <date actuelle>
Sachant que M.Schrobiltgen n'est pas du tout affect un service spcifique, puisqu'il est le rviseur interne de l'entreprise, formulez la requte d'insertion.
INSERT INTO tblEmploys VALUES (24, 'Marcel', 'Schrobiltgen', 'LUX', NULL, 'M', '', DATE());
ou
INSERT INTO tblEmploys (idEmploy, fldPrnom, fldNom, fldNationalit, fldSexe, fldService, fldEntreService) VALUES (24, 'Marcel', 'Schrobiltgen', 'LUX', 'M', '', DATE());
Attention: On ne connat pas encore l'ge de M.Schrobiltgen, puisqu'on a probablement oubli de le lui demander. Toutefois on est sr de le connatre plus tard, ce qui veut dire que pour l'instant son ge est indtermin ( valeur NULL pour le champ fldAge). En ce qui concerne le service, celui-ci n'est pas vraiment indtermin, puisqu'on sait trs bien que M.Schrobiltgen n'est pas du tout affect un service ( chane vide pour le champ fldService). Exercice Dans laquelle des requtes suivantes va apparatre M.Schrobiltgen ?
SELECT * FROM tblEmploys WHERE fldAge=0; SELECT * FROM tblEmploys WHERE fldAge IS NULL; SELECT * FROM tblEmploys WHERE fldService=''; SELECT * FROM tblEmploys WHERE fldService IS NULL; SELECT * FROM tblEmploys WHERE fldAge IS NOT NULL AND fldService=''; SELECT * FROM tblEmploys WHERE fldAge IS NOT NULL OR fldService='';
Pierre Stockreiser
111
Informatique 13CG
L'oprateur BETWEEN ... AND ... permet de dterminer si la valeur d'un champ donn appartient un intervalle bien dfini. L'intervalle est gnralement un intervalle numrique ou un intervalle du type Date.
Exemples 1. Afficher le numro d'employ, le nom et l'ge des employs gs entre 30 et 50 ans.
SELECT idEmploy, fldNom, fldAge FROM tblEmploys WHERE fldAge BETWEEN 30 AND 50;
Formulez une requte qui affiche exactement le mme rsultat, sans utiliser l'oprateur BETWEEN ... AND ....
SELECT idEmploy, fldNom, fldAge FROM tblEmploys WHERE fldAge>=30 AND fldAge<=50;
2. Afficher tous les champs pour les employs masculins gs entre 20 et 30 ans et les employs fminins gs entre 40 et 50 ans.
SELECT * FROM tblEmploys WHERE fldSexe='M' AND fldAge BETWEEN 20 AND 30 OR fldSexe='F' AND fldAge BETWEEN 40 AND 50;
Pierre Stockreiser
112
Informatique 13CG
L'oprateur IN (<Liste de valeurs>) permet de dterminer si la valeur d'un champ donn appartient une liste de valeurs prdfinies. De mme, l'oprateur NOT IN (<Liste de valeurs>) permet de dterminer si la valeur d'un champ donn n'appartient pas une liste de valeurs prdfinies. Les valeurs dans la liste des valeurs sont gnralement des valeurs numriques, des valeurs du type Texte ou des valeurs du type Date.
Exemples: 1. Afficher le numro d'employ, le nom, l'ge et le service des employs qui sont affects aux services 'Comptabilit', 'Informatique' et 'Vente'.
SELECT idEmploy, fldNom, fldAge, fldService FROM tblEmploys WHERE fldService IN ('Comptabilit','Informatique','Vente');
Formulez une requte qui affiche exactement le mme rsultat, sans utiliser l'oprateur IN.
SELECT idEmploy, fldNom, fldAge, fldService FROM tblEmploys WHERE fldService='Comptabilit' OR fldService='Informatique'OR fldService='Vente';
2. Afficher tous les champs pour les employs masculins, gs d'au moins 30 ans qui ne sont pas de nationalit luxembourgeoise (Code='LUX'), portugaise (Code='PRT'), allemande (Code='ALL') ou italienne (Code='ITA')
SELECT * FROM tblEmploys WHERE fldSexe='M' AND fldAge>=30 AND fldNationalit NOT IN ('LUX', 'PRT', 'ALL', 'ITA');
Pierre Stockreiser
113
Informatique 13CG
Par dfaut l'ordre de tri est ascendant (ASC), donc vous n'avez pas ncessairement besoin d'indiquer le mot ASC. Cependant, lorsque vous voulez trier les enregistrements en ordre descendant, le mot DESC est indispensable. Exemples: Soit la table suivante.
Exemple 1:
SELECT idLivre, fldTitre, fldAuteur, fldPrix FROM tblLivres ORDER BY fldPrix;
respectivement
SELECT idLivre, fldTitre, fldAuteur, fldPrix FROM tblLivres ORDER BY fldPrix ASC;
Pierre Stockreiser
114
Informatique 13CG
Exemple 2:
SELECT idLivre, fldTitre, fldAuteur, fldPrix FROM tblLivres ORDER BY fldPrix DESC;
On peut aussi trier sur plusieurs champs. Pour afficher tous les livres tris d'abord sur leur genre en ordre ascendant et pour chaque genre sur le prix en ordre descendant, on utilise la requte suivante: Exemple 3:
SELECT idLivre, fldTitre, fldAuteur, fldGenre, fldPrix FROM tblLivres ORDER BY fldGenre ASC, fldPrix DESC;
Pierre Stockreiser
115
Informatique 13CG
Nous remarquons que l'ordre de tri est bas sur l'ordre alphabtique pour les champs de type TEXTE et sur l'ordre numrique pour les champs de type NUMERIQUE. La plupart des SGBD sont galement capable de trier des valeurs de type DATE.
Exemple 4: Afficher le numro du livre, le titre, l'auteur et la langue de tous les romans. Triez la liste en ordre descendant sur la langue.
SELECT idLivre, fldTitre, fldAuteur, fldLangue FROM tblLivres WHERE fldGenre='Roman' ORDER BY fldLangue DESC;
Pierre Stockreiser
116
Informatique 13CG
Si le nom du champ valeur calcule contient des espaces, on doit l'entourer d'apostrophes. p.ex. ... AS 'Prix TTC'
Remarque: On peut utiliser un champ valeur calcule pour renommer l'en-tte d'un champ affich dans une requte. Exemple:
SELECT idLivre AS ISBN , fldTitre FROM tblLivres;
Remarque Un champ valeur calcule n'est pas confondre avec des calculs qui peuvent intervenir l'intrieur d'un critre de slection. Comme un critre de slection n'est rien d'autre qu'une expression, qui peut tre value soit la valeur logique VRAI, soit la valeur logique FAUX, la requte suivante est absolument correcte, mais ne dfinit pas de champ valeur calcule.
SELECT idLivre, fldTitre FROM tblLivres WHERE (fldPrix*fldEnStock) < 5000;
Pierre Stockreiser
117
Informatique 13CG
Cette requte nous retourne tous les livres dont il n'y a plus d'exemplaire en stock. Il se peut trs bien que l'utilisateur ne soit pas intress dans le dtail, mais veuille uniquement connatre le nombre de livres dont il n'y a plus d'exemplaires en stock. La requte correspondante est:
SELECT COUNT(*) FROM tblLivres WHERE fldEnStock=0;
Le rsultat de cette requte est une valeur unique indiquant combien de livres se trouvent dans la table avec le champ fldEnStock ayant la valeur 0. Les paramtres d'une fonction d'agrgation sont toujours entours de parenthses. Voici les fonctions d'agrgations les plus rpandues: COUNT (*) COUNT (Nom d'un champ) SUM (Nom d'un champ) AVG (Nom d'un champ) MAX (Nom d'un champ) MIN (Nom d'un champ) Dtermine le nombre d'enregistrements du rsultat de la requte. Tient compte de tous les enregistrements, y inclus ceux contenant des valeurs NULL Dtermine le nombre des enregistrements pour lesquels le champ indiqu ne contient pas la valeur NULL Calcule pour tous les enregistrements slectionns, la somme des valeurs du champ indiqu, pourvu que cette valeur soit diffrente de NULL. Calcule pour tous les enregistrements slectionns, la moyenne des valeurs du champ indiqu, pourvu que cette valeur soit diffrente de NULL. Dtermine pour tous les enregistrements slectionns, la plus grande des valeurs du champ indiqu, pourvu que cette valeur soit diffrente de NULL. Dtermine pour tous les enregistrements slectionns, la plus petite des valeurs du champ indiqu, pourvu que cette valeur soit diffrente de NULL.
Remarque: Il est conseill de renommer l'en-tte (AS ...) afin d'augmenter la lisibilit du rsultat affich. Exemples: 1. Affichez la moyenne des prix des livres allemands.
SELECT AVG(fldPrix) AS 'Moyenne des prix' FROM tblLivres WHERE fldLangue='ALL';
Pierre Stockreiser
118
Informatique 13CG
3.
4. Dterminez le prix du roman anglais le plus cher qui est actuellement disponible.
SELECT MAX(fldPrix) AS 'Prix du roman anglais le plus cher' FROM tblLivres WHERE fldGenre='Roman' AND fldLangue='ANG' AND fldEnStock>0;
Remarque: Les fonctions d'agrgation admettent comme paramtre galement: des expressions contenant plusieurs champs; l'option DISTINCT. Exemples: 1. Calculez la valeur actuelle du stock
SELECT SUM(fldPrix * fldEnStock) AS 'Valeur actuelle du stock' FROM tblLivres;
A faire : Exercice 1
Pierre Stockreiser
119
Informatique 13CG
Si on voulait connatre la quantit en stock par genre de livre, on aurait le rsultat suivant:
Pierre Stockreiser
120
Informatique 13CG
SQL nous offre une extension la requte de slection, qui nous permet de formuler exactement ce type de questions. La clause GROUP BY <Liste des champs de groupe> rpartit le rsultat d'une requte de slection en groupes. Gnralement, on applique une fonction d'agrgation aux membres de chaque groupe. Voici la requte qui nous donne le tableau prcdent:
SELECT fldGenre, SUM(fldEnStock) As 'En Stock' FROM tblLivres GROUP BY fldGenre;
La clause GROUP BY fldGenre cre des groupes selon les valeurs du champ fldGenre, c..d. les 3 groupes 'Histoire' , 'Roman' et 'Technique'. L'affichage des groupes se fait par dfaut de manire ascendante ( utiliser ORDER BY pour changer l'ordre). La partie SELECT fldGenre, SUM(fldEnStock) affiche pour chaque groupe une seule ligne, qui contient la valeur du champ de groupe fldGenre, ainsi que la somme des valeurs du champ fldEnStock. La partie ... AS 'En Stock' est uniquement utilise afin de renommer l'en-tte du champ calcul via la fonction d'agrgation SUM.
La clause GROUP BY La clause GROUP BY <Liste des champs de groupe> intervient sur le rsultat d'un SELECT. En fait, les enregistrements rsultant d'une requte de slection sont groups, de faon qu' l'intrieur de chaque groupe, les valeurs pour la liste des champs de groupe soient identiques. Gnralement, on applique une fonction d'agrgation un ou plusieurs champs, ne faisant pas partie de la liste des champs de groupe. Attention: La clause SELECT peut uniquement contenir des champs faisant partie de la liste des champs de groupe et des fonctions d'agrgation appliques un des autres champs. La requte de slection peut bien sr contenir des critres de slection (WHERE ...), qui liminent un certain nombre d'enregistrements dj avant la cration des groupes. On a la possibilit d'appliquer la clause ORDER BY au rsultat d'un GROUP BY Syntaxe:
SELECT <Liste des champs de groupe>,[COUNT/SUM...] FROM <Nom de la table> WHERE <Critres de slection> GROUP BY <Liste de champs de groupe> ORDER BY <Nom d'un champ>[ASC/DESC], <Nom d'un champ>[ASC/DESC], ;
Pierre Stockreiser
121
Informatique 13CG
Exemples: 1. Classez les genres de livres par ordre descendant et affichez pour chaque genre la moyenne du prix.
SELECT fldGenre, AVG(fldPrix) AS 'Moyenne du prix' FROM tblLivres GROUP BY fldGenre ORDER BY fldGenre DESC;
3. Affichez pour chaque genre, le nombre de livres, ainsi que la quantit d'exemplaires en stock.
SELECT fldGenre, COUNT(*) AS Titres, SUM(fldEnStock) AS Quantit FROM tblLivres GROUP BY fldGenre;
4. Regroupez les livres par genre et par langue et affichez pour chaque groupe la valeur en stock des livres. Triez le rsultat par ordre ascendant sur les langues, et l'intrieur d'une langue par ordre ascendant sur le genre.
SELECT fldGenre, fldlangue, SUM(fldPrix*fldEnStock) AS 'Valeur en stock' FROM tblLivres GROUP BY fldGenre, fldLangue ORDER BY fldLangue, fldGenre;
Remarque: Si pour un champ de groupe, les valeurs d'un ou de plusieurs enregistrements sont indtermines (NULL), alors ces enregistrements sont regroupes dans un groupe spar (Groupe 'NULL').
Pierre Stockreiser
122
Informatique 13CG
Lorsqu'on veut par exemple uniquement afficher les groupes pour lesquelles la quantit en stock est suprieure 10, on utilise la clause HAVING de la faon suivante:
SELECT fldGenre, SUM(fldEnStock) AS 'En Stock' FROM tblLivres GROUP BY fldGenre HAVING SUM(fldEnStock)>10;
Pierre Stockreiser
123
Informatique 13CG
La clause HAVING La clause HAVING <Critres de slection des groupes> est uniquement spcifie en relation avec un GROUP BY. Une fois les groupes crs, cette clause en limine certains, bass sur les critres de slection des groupes. Les critres de slection des groupes portent bien entendu sur la valeur d'une ou de plusieurs des fonctions d'agrgation calcules pour chaque groupe. Syntaxe:
SELECT <Liste des champs de groupe>,[COUNT/SUM...] FROM <Nom de la table> WHERE <Critres de slection> GROUP BY <Liste de champs de groupe> HAVING <Critres de slection des groupes> ORDER BY <Nom d'un champ>[ASC/DESC], <Nom d'un champ>[ASC/DESC], ;
Exemples: 1. Affichez pour chaque langue, le nombre de titres disponibles, ainsi que la quantit d'exemplaires en stock, en tenant uniquement compte des langues pour lesquelles la quantit d'exemplaires est suprieure 0.
SELECT fldLangue, COUNT(*) AS Titres, SUM(fldEnStock) AS Quantit FROM tblLivres GROUP BY fldLangue HAVING SUM(fldEnStock)>0;
3. Classez les auteurs par ordre descendant en fonction du nombre de titres. Tenez uniquement compte des titres franais et allemands, et des auteurs ayant au moins 3 titres disponibles.
SELECT fldAuteur, COUNT(*) AS Titres FROM tblLivres WHERE fldLangue IN ('FRA', 'ALL') GROUP BY fldAuteur HAVING COUNT(*)>=3 ORDER BY COUNT(*) DESC;
Pierre Stockreiser
124
Informatique 13CG
4. Crez les requtes suivantes en Access Onglet Queries / Bouton New / Design View & OK / Bouton Close / Icne Sauvegardez les requtes (Requte1, Requte2, etc.)
Pierre Stockreiser
125
Informatique 13CG
Pierre Stockreiser
126
Informatique 13CG
Requte 7
Requte 8
Requte 9
Affichez le numro de produit, le libell et la catgorie de tous les produits dont le nom de catgorie contient le mot 'alcool'.
Requte 10
Affichez le libell, la catgorie et le prix de tous les produits dont le nom de catgorie contient uniquement 4 lettres.
Requte 11
Affichez le libell et la quantit disponible de tous les produits l'exception des fromages.
Requte 12
Affichez toutes les informations pour les chocolats dont la quantit disponible est suprieure ou gale 10.
Pierre Stockreiser
127
Informatique 13CG
Requte 13
Affichez le libell et le prix des produits plus chers que 25 qui ne sont pas des cafs.
Requte 14
Affichez le numro de produit, le libell et la catgorie pour les fromages et les boissons sans alcool.
Requte 15
Affichez le libell, la catgorie et le prix pour les produits moins chers que 25 qui appartiennent aux catgories 'Chocolat' ou 'Fromage'.
Requte 16
Crez une requte qui vrifie la prsence d'une valeur NULL pour le prix !
Pierre Stockreiser
128
Informatique 13CG
Requte 17
Affichez le numro, le libell et le prix pour tous les produits dont le prix varie entre 12 et 25.
Requte 18
Affichez toutes les informations pour les produits des catgories 'Caf', 'Boisson sans alcool', 'Fromage' et 'Chocolat'.
Requte 19
Affichez le numro, le libell et la quantit disponible de tous les produits. Triez la liste par ordre ascendant sur la quantit disponible.
Requte 20
Affichez le libell et le prix des produits qui sont disponibles au moins 100 fois. Triez la liste par ordre descendant sur le prix.
Requte 21
Affichez une liste avec le libell, la catgorie et le prix de tous les produits l'exception des fromages. Triez la liste par ordre alphabtique sur la catgorie et pour chaque catgorie par ordre dcroissant (descendant) sur le prix.
Pierre Stockreiser
129
Informatique 13CG
Requte 22
Affichez le numro, le libell et la valeur en stock de tous les cafs et boissons sans alcool. La valeur en stock d'un produit s'obtient par la multiplication de la quantit disponible avec le prix.
Requte 23
Affichez la moyenne des prix pour les produits moins chers que 25.
Requte 24
Requte 25
Requte 26
Calculez la valeur actuelle en stock pour tous les produits l'exception des chocolats.
Pierre Stockreiser
130
Informatique 13CG
Trouvez le code SQL pour les requtes suivantes: 1. Affichez le numro, le titre, l'auteur et la quantit en stock pour tous les romans. 2. Affichez tous les champs des romans allemands. Effectuez un classement par ordre ascendant sur le numro du livre. 3. Affichez les diffrentes langues dans lesquelles sont rdigs les livres de la librairie. 4. Affichez le numro du livre "Windows 95" de "Pierre Godefroid" en version franaise. 5. Supposons que ce numro soit 38285, augmentez de 10 units la quantit en stock de ce livre. 6. Insrez le nouveau livre suivant: 34000 MS-Access 2.0 Ken Getz ANG Technique 23 2
7. Insrez le nouveau livre suivant: 34001 MS-Access 97 Ken Getz ANG Technique
Quelle est la valeur des champs fldPrix et fldEnStock pour cet enregistrement ? 8. Tous les livres des genres Technique et Histoire subissent une hausse de prix de 10%. Reprsentez cette situation dans votre table. 9. Comptez le nombre de livres dont il reste moins de N exemplaires en stock. La valeur N est indiquer par l'utilisateur de la requte. 10. Supprimez tous les romans anglais.
Pierre Stockreiser
131
Informatique 13CG
11. Affichez le numro, le titre et l'auteur pour tous les livres dont la valeur en stock est suprieure 10000. La valeur en stock est le prix d'un livre multipli par la quantit en stock pour ce livre. 12. Ajoutez 15% au prix pour tous les livres techniques dont le titre contient le mot 'Windows 98'. 13. Affichez toutes les informations pour les romans franais (Code='FRA') et les romans allemands (Code='ALL'). Utilisez uniquement des oprateurs logiques et des oprateurs de comparaison. Formulez une requte alternative qui fournit le mme rsultat. 14. Indiquez 2 requtes diffrentes pour afficher le numro du livre pour tous les livres anglais (Code='ANG') actuellement en stock, dont le prix varie entre 15 et 25. 15. Affichez une liste qui contient toutes les langues dont il existe au moins un roman plus cher que 8. 16. Affichez le prix moyen des romans anglais
Pierre Stockreiser
132
Informatique 13CG
Trouvez le code SQL pour les requtes suivantes: 1. Affichez le nom, prnom, adresse, code postal et localit pour tous les clients habitant Walferdange. 2. Insrez le client suivant dans la table: 6 2021 Heinen Ettelbruck Edmond 217070 217071 M 12, Am Gaard 12/01/1954 NO
Indiquez la requte correcte pour ajouter ce client lorsque vous ignorez le numro de fax Indiquez la requte correcte pour ajouter ce client lorsque vous savez que le client ne possde pas de fax. 3. Affichez la liste de toutes les localits prsentes dans la table des clients. 4. Tous les clients habitant Ettelbruck, dans la Cit Patton, auront le nouveau code postal 8897. Remarque: Utilisez un filtre pour retrouver les adresses correctes.
Pierre Stockreiser
133
Informatique 13CG
5. Nous voulons faire le mnage dans notre BD. En fait, il y a un certain nombre de clients dont l'adresse, le code postal, la localit, le numro de tlphone et le numro de fax sont indtermins. Ces enregistrements sont sans aucune valeur commerciale pour nous. Formulez une requte qui garde uniquement les clients pour lesquels on connat: soit le numro de tlphone; soit le numro de fax; soit l'adresse complte (fldAdresse, fldCP, fldLocalit). Tous les autres clients sont effacs de la BD. 6. Comptez le nombre de clients masculins ns partir du 1.1.1978. 7. Affichez le numro client, le nom, le prnom, l'adresse, le code postal et la localit pour les bons clients fminins, l'exception de ceux habitant Luxembourg, Esch-s-Alzette et Ettelbruck. 8. Affichez le nombre de clients par localit. En vous basant sur les donnes de la table, indiquez le rsultat de la requte dans la grille.
9. Affichez par sexe, le nombre de clients ns aprs le 31/12/1969. En vous basant sur les donnes de la table, indiquez le rsultat de la requte dans la grille.
10. Affichez le numro client, le nom, le prnom, le sexe et la date de naissance pour les clients habitant Luxembourg. Triez le rsultat par ordre descendant sur le sexe et l'intrieur, par ordre ascendant sur la date de naissance. Le premier enregistrement du rsultat affiche donc les informations de la femme la plus jeune parmi les clients de Luxembourg. Est-ce que cette affirmation est correcte ?
11. Affichez le numro client, le nom, le prnom et le code bon client pour tous les clients fminins habitant Diekirch ou Mersch. En ce qui concerne le code bon client, affichez l'en-tte 'Code spcial' au lieu d'afficher le nom du champ.
Pierre Stockreiser
134
Informatique 13CG
12. Affichez pour chaque localit le nombre de bons clients ainsi que le nombre des autres clients. Triez la liste par ordre ascendant sur les localits, en affichant pour chaque localit d'abord le nombre de bons clients. 13. Dterminez la date de naissance du client le plus vieux habitant dans une ville qui est indiquer par l'utilisateur de la requte. 14. Afficher le numro, le nom et le prnom des clients ayant au moins 18 ans la date actuelle. Nous supposons: 1 anne = 365 jours
Pierre Stockreiser
135
Informatique 13CG
Exprimez les requtes suivantes en langage SQL: 1. Affichez toutes les informations pour les concerts qui ne sont pas Luxembourg et dont le nombre de places est au moins 1000. 2. Affichez l'artiste et la date des concerts qui se sont tenus Luxembourg pendant la deuxime moiti de l'anne 2005. 3. Affichez le nombre de concerts par type de lieu. Triez la liste de faon dcroissante sur le nombre de concerts. En vous basant sur les donnes de la table, indiquez le rsultat de la requte dans la grille.
Pierre Stockreiser
136
Informatique 13CG
5. Affichez l'artiste, la date, la localit et le prix des concerts qui ont lieu dans un hall sportif ou un club partir du 1/8/2005. Triez cette liste par ordre ascendant sur les types des lieux et l'intrieur d'un type par ordre descendant sur le prix. 6. Quel est le prix moyen pour un concert au mois X de l'anne Y ? On ne tiendra pas compte des ftes sous tente. Crez une requte paramtre. 7. Classez les localits par ordre descendant sur le montant des recettes des concerts pour l'anne 2005 (Recette d'un concert=Tickets vendus*Prix d'un ticket). Ignorez les localits pour lesquelles il n'y a pas encore de recettes. 8. Comptez le nombre de localits dans lesquelles a eu lieu un concert pendant les mois de juillet et aot 2005. 9. Effacez tous les concerts qui ont eu lieu avant le 1/8/2005. 10. Affichez le nom de l'artiste, la date, la localit ainsi que le nombre de places encore disponibles pour les concerts qui auront lieu au mois de juillet 2005. 11. Un client achte 2 tickets pour le prochain concert de la "Kelly Family". Affichez d'abord une liste avec tous les concerts prvus pour cet artiste. Nous supposons que cette requte donne comme rsultat un seul concert avec le numro 103 comme valeur de la cl primaire. Vous allez utiliser ce numro pour modifier ensuite la table de faon ce qu'elle reflte la vente des 2 tickets pour le concert correspondant. Quel problme constatez-vous en ce qui concerne les valeurs des champs fldPlaces et fldTicketsVendus pour l'enregistrement 103 (voir exemples d'enregistrements) ?
12. Affichez la liste des localits, l'exception de Luxembourg, dans lesquelles ont eu lieu au moins 2 concerts pendant la deuxime moiti de l'anne 2005. Indiquez pour chaque localit le nombre de concerts. En vous basant sur l'ensemble de donnes dans l'nonc, indiquez le rsultat de la requte dans la grille.
13. Le concert numro 108 (voir exemples d'enregistrements) aura lieu au club "Den Atelier" Luxembourg la date et l'heure prvues initialement. Les tickets dj vendus gardent
Pierre Stockreiser
137
Informatique 13CG
leur validit et le prix d'un nouveau ticket ne change pas. Effectuez les modifications correspondantes dans la table.
Pierre Stockreiser
138
Informatique 13CG
Pierre Stockreiser
139
Informatique 13CG
7.3.1 La jointure
7.3.1.1 Exemple d'introduction
Voici deux tables qui reprsentent une gestion (trs simplifie) des comptes d'une banque:
tblComptes idCompte 101 106 112 125 20000 48000 9000 5000 fldValeur 3 2 3 1 fiClient
tblClients idClient 1 2 3 Pegaso Weber Muller fldNom Emilio Jos Ketty fldPrnom
En principe, la prsence d'une relation (cl trangre/cl primaire) entre deux tables est une condition ncessaire pour effectuer une jointure sur les tables.
Une question possible serait: Affichez pour tous les comptes, le numro de compte, la valeur actuelle, ainsi que le nom du client correspondant. Voici la requte ncessaire pour rpondre notre question
SELECT tblcomptes.idCompte, tblComptes.fldValeur, tblClients.fldNom FROM tblComptes, tblClients WHERE tblComptes.fiClient=tblClients.idClient;
Pierre Stockreiser
140
Informatique 13CG
La clause FROM contient les deux tables impliques dans la jointure. La clause WHERE contient ce qu'on appelle la condition de jointure. Dans notre exemple, la condition de jointure demande l'galit des valeurs pour les champs fiClient et idClient. La clause SELECT contient les noms des champs afficher.
Voici le rsultat correspondant idCompte 101 106 112 125 fldValeur 20000 48000 9000 5000 fldNom Muller Weber Muller Pegaso
Cette requte reprsente donc une jointure entre les tables tblComptes et tblClients. Remarquez pour l'instant que nous avons prfix chaque nom d'un champ par le nom de la table correspondante. Au moment o une requte porte sur plusieurs tables, on doit soit s'assurer que le nom de chaque champ est unique pour l'ensemble des tables, soit adopter la notation <Nom de la table>.<Nom du champ>. Puisque les noms des champs impliqus dans notre exemple sont tous diffrents, nous pouvons donc faciliter l'criture de la requte:
SELECT idCompte, fldValeur, fldNom FROM tblComptes, tblClients WHERE fiClient=idClient;
Afin de comprendre le fonctionnement d'une jointure, et surtout celui de la condition de jointure, il est intressant d'examiner en dtail comment SQL procde l'excution d'une jointure. Pour cela, nous allons nous baser sur l'exemple prcdent. SQL excute la requte en plusieurs tapes: 1. Comme la clause FROM contient 2 tables, SQL cre d'abord le produit cartsien des deux tables. Pour le produit cartsien, SQL associe chaque enregistrement de la premire table, tous les enregistrements de la deuxime table. Les enregistrements du produit cartsien contiennent donc les champs de la premire table suivis des champs de la deuxime table. Si la premire table contient N enregistrements et la deuxime table M enregistrements, alors le produit cartsien des deux tables est compos de N*M enregistrements.
Pierre Stockreiser
141
Informatique 13CG
Produit cartsien des tables tblComptes et tblClients: idCompte 101 101 101 106 106 106 112 112 112 125 125 125 fldValeur 20000 20000 20000 48000 48000 48000 9000 9000 9000 5000 5000 5000 fiClient 3 3 3 2 2 2 3 3 3 1 1 1 idClient 1 2 3 1 2 3 1 2 3 1 2 3 fldNom Pegaso Weber Muller Pegaso Weber Muller Pegaso Weber Muller Pegaso Weber Muller fldPrnom Emilio Jos Ketty Emilio Jos Ketty Emilio Jos Ketty Emilio Jos Ketty
tblComptes tblClients 2. Le produit cartsien contient un bon nombre d'enregistrements, qui ne donnent pas de sens logique. idCompte 101 101 101 106 106 106 112 112 112 125 125 125 fldValeur 20000 20000 20000 48000 48000 48000 9000 9000 9000 5000 5000 5000 fiClient 3 3 3 2 2 2 3 3 3 1 1 1 idClient 1 2 3 1 2 3 1 2 3 1 2 3 fldNom Pegaso Weber Muller Pegaso Weber Muller Pegaso Weber Muller Pegaso Weber Muller fldprnom Emilio Jos Ketty Emilio Jos Ketty Emilio Jos Ketty Emilio Jos Ketty
En fait, pour tous les enregistrements non marqus, fiClient ne correspond pas idClient. Pour ces enregistrements, on associe donc un compte un client qui n'est pas le propritaire de ce compte. C'est ici qu'intervient la condition de jointure, qui limine du produit cartsien les enregistrements ne donnant pas de sens logique dans le contexte de la requte. Aprs avoir ralis le produit cartsien, SQL limine tous les enregistrements qui ne correspondent pas la condition de jointure de la clause WHERE, donc tous les enregistrements pour lesquels l'expression logique fiClient=idClient n'est pas vraie. Voici le rsultat de l'application de la condition de jointure: idCompte 101 106 112 125 fldValeur 20000 48000 9000 5000 fiClient 3 2 3 1 idClient 3 2 3 1 fldNom Muller Weber Muller Pegaso fldprnom Ketty Jos Ketty Emilio
Pierre Stockreiser
142
Informatique 13CG
3. Finalement SQL affiche uniquement les champs indiqus dans la clause SELECT. idCompte 101 106 112 125 fldValeur 20000 48000 9000 5000 fldNom Muller Weber Muller Pegaso
La condition de jointure spcifie gnralement, mais pas ncessairement, une galit entre une cl trangre d'une table et la cl primaire d'une table correspondante.
Remarque: La requte
SELECT tblcomptes.idCompte, tblComptes.fldValeur, tblClients.fldNom FROM tblComptes, tblClients WHERE tblComptes.fiClient=tblClients.idClient;
peut encore s'crire d'une faon plus lisible en utilisant des alias pour les noms des tables. Exemple:
SELECT Co.idCompte, Co.fldValeur, Cl.fldNom FROM tblComptes Co, tblClients Cl WHERE Co.fiClient=Cl.idClient;
Il suffit d'indiquer les alias derrire les noms des tables dans la partie FROM, afin de les utiliser dans l'ensemble de la requte. Lorsque vous dfinissez des alias dans la clause FROM, vous ne pouvez plus utiliser les noms des tables dans la requte. Au cas o les noms des champs seraient tout fait diffrents pour les deux tables, de faon ce qu'il n'y ait aucune ambigut, on peut compltement laisser de ct les noms des tables resp. les alias. Exemple:
SELECT idCompte, fldValeur, fldNom FROM tblComptes, tblClients WHERE fiClient=idClient;
Au cas o il existerait uniquement une ambigut pour un certain nombre de champs, il suffit de prfixer ceux-ci par un alias ou par le nom de la table correspondante.
Pierre Stockreiser
143
Informatique 13CG
Remarque: La clause WHERE peut bien entendu dfinir des critres de slection en combinaison avec la condition de jointure. Exemple: Affichez pour les comptes ayant une valeur actuelle >= 10000, le numro de compte, la valeur actuelle, ainsi que le nom du client correspondant.
SELECT idCompte, fldValeur, fldNom FROM tblComptes, tblClients WHERE fiClient=idClient AND fldValeur>=10000;
Aprs avoir cr le produit cartsien, SQL limine les enregistrements qui ne vrifient pas la condition de jointure (fiClient=idClient) et ceux qui ne vrifient pas le critre de slection (fldValeur>=10000). Pour les enregistrements qui restent, SQL effectue l'affichage des champs demands.
Remarque: Une jointure peut mettre en relation plus que 2 tables. Exemples: Soient les 3 tables suivantes:
tblComptes idCompte 101 106 112 125 12 24 12 30 fiAgence fldValeur 20000 48000 9000 5000 fiClient 3 2 3 1
Pierre Stockreiser
144
Informatique 13CG
tblClients idClient 1 2 3 fldNom Pegaso Weber Muller fldPrnom Emilio Jos Ketty fldAdresse 25, rue de la Gare 66a, Cit Paerchen 102, av G.Diederich fldCP 2278 1234 6690 fldLocalit Diekirch Schifflange Luxembourg
tblAgences idAgence 12 24 30 fldAdresse 15, bvd Royal 67, rue de l'Alzette 2, Grand Rue fldCP 5377 8765 6678 fldLocalit Luxembourg Esch-s-Alzette Ettelbruck
1. Affichez pour tous les comptes, le numro de compte, la valeur actuelle, le nom du client ainsi que sa localit et la localit de l'agence. Renommez les en-ttes de faon ce qu'il n'y ait pas de confusion entre les donnes du client et celles de l'agence.
SELECT idCompte, fldValeur, fldNom, Cl.fldLocalit AS 'Localit Client', A.fldLocalit AS 'Localit Agence' FROM tblAgences A, tblClients Cl, tblComptes WHERE idAgence=fiAgence AND idClient=fiClient;
Comme la jointure contient 3 tables, nous avons 2 conditions de jointure. En gnral, on a: Nombre de conditions de jointure = Nombre de tables dans la jointure 1
2. Affichez le numro de compte, le nom et prnom du client ainsi que le numro d'agence pour les comptes dont l'agence se trouve dans la mme localit o habite le client correspondant.
SELECT idCompte, fldNom, fldPrnom, idAgence FROM tblAgences A, tblClients Cl, tblComptes WHERE idAgence=fiAgence AND idClient=fiClient AND A.fldLocalit=Cl.fldLocalit;
Pierre Stockreiser
145
Informatique 13CG
Afficher le numro de compte, et la valeur pour les comptes ayant une valeur suprieure celle du compte 112
SELECT Co1.idCompte, Co1.fldValeur FROM tblComptes Co1, tblComptes Co2 WHERE Co2.idCompte=112 AND Co1.fldValeur>Co2.fldValeur;
Cette requte nous semble trange premire vue. Nous allons analyser les tapes d'excution de la requte. 1. Produit cartsien
Co1.idCompte Co1.fiAgence 101 106 112 125 101 106 112 125 101 106 112 125 101 106 112 125 12 24 12 30 12 24 12 30 12 24 12 30 12 24 12 30 Co1.fldValeur 20000 48000 9000 5000 20000 48000 9000 5000 20000 48000 9000 5000 20000 48000 9000 5000 Co1.fiClient Co2.idCompte Co2.fiAgence Co2.fldValeur Co2.fiClient 3 2 3 1 3 2 3 1 3 2 3 1 3 2 3 1 101 101 101 101 106 106 106 106 112 112 112 112 125 125 125 125 12 12 12 12 24 24 24 24 12 12 12 12 30 30 30 30 20000 20000 20000 20000 48000 48000 48000 48000 9000 9000 9000 9000 5000 5000 5000 5000 3 3 3 3 2 2 2 2 3 3 3 3 1 1 1 1
Pierre Stockreiser
146
Informatique 13CG
2. Slection des enregistrements Il s'agit ici de la partie la plus dlicate, puisque nous ne retrouvons plus une condition de jointure classique du type galit - cl primaire/cl trangre. La slection se fait en deux tapes. Comme nous voulons afficher tous les comptes ayant une valeur suprieure celle du compte 112, nous allons uniquement garder les enregistrements pour lesquels un compte est associ au compte 112, c..d. les enregistrements pour lesquels le critre de slection Co2.idCompte=112 s'applique.
Co1.idCompte Co1.fiAgence 101 106 112 125 101 106 112 125 101 106 112 125 101 106 112 125 12 24 12 30 12 24 12 30 12 24 12 30 12 24 12 30 Co1.fldValeur 20000 48000 9000 5000 20000 48000 9000 5000 20000 48000 9000 5000 20000 48000 9000 5000 Co1.fiClient Co2.idCompte Co2.fiAgence Co2.fldValeur Co2.fiClient 3 2 3 1 3 2 3 1 3 2 3 1 3 2 3 1 101 101 101 101 106 106 106 106 112 112 112 112 125 125 125 125 12 12 12 12 24 24 24 24 12 12 12 12 30 30 30 30 20000 20000 20000 20000 48000 48000 48000 48000 9000 9000 9000 9000 5000 5000 5000 5000 3 3 3 3 2 2 2 2 3 3 3 3 1 1 1 1
Co1.fiClient Co2.idCompte Co2.fiAgence Co2.fldValeur Co2.fiClient 3 2 3 1 112 112 112 112 12 12 12 12 9000 9000 9000 9000 3 3 3 3
Ce tableau associe donc chaque compte (inclus le compte 112 mme) au compte 112. Il suffit maintenant de slectionner les comptes qui ont une valeur suprieure celle du compte 112. Ceci est fait l'aide de la condition de jointure Co1.fldValeur>Co2.fldValeur Pour cet exemple, la condition de jointure ne se dfinit donc pas sur la cl trangre/cl primaire.
Pierre Stockreiser
147
Informatique 13CG
Co1.fiClient Co2.idCompte Co2.fiAgence Co2.fldValeur Co2.fiClient 3 2 3 1 112 112 112 112 12 12 12 12 9000 9000 9000 9000 3 3 3 3
3. Affichage des champs spcifis La dernire tape consiste dans l'affichage des champs indiqus dans la clause SELECT
Co1.idCompte 101 106 Co1.fldValeur 20000 48000
Avec l'auto-jointure, nous avons tudi un cas qui nous a montr que nous n'avons pas toujours une condition de jointure classique avec une galit entre cl trangre et cl primaire d'une table associe. Une condition de jointure ne doit pas ncessairement impliquer une cl trangre/cl primaire Bien qu'une condition de jointure soit gnralement dfinie l'aide de l'oprateur d'galit (=) , elle peut galement tre spcifie l'aide des oprateurs suivants: <> < > <= >= BETWEEN ... AND IN LIKE Dans ce cas, on parle d'une jointure par non galit. Ces conditions de jointure sont surtout employes en relation avec une auto-jointure. Voici un autre exemple d'une auto-jointure: Affichez les numros des comptes ayant une agence diffrente de celle du compte numro 101.
SELECT CO1.idCompte FROM tblComptes CO1, tblComptes CO2 WHERE CO2.idCompte=101 AND CO1.fiAgence<>CO2.fiAgence;
A faire : Exercice 4
Pierre Stockreiser
148
Informatique 13CG
tblComptes idCompte 101 106 112 125 12 24 12 30 fiAgence fldValeur 20000 48000 9000 5000 fiClient 3 2 3 1
tblClients idClient 1 2 3 fldNom Pegaso Weber Muller fldPrnom Emilio Jos Ketty fldAdresse 25, rue de la Gare 66a, Cit Paerchen 102, av G.Diederich fldCP 2278 1234 6690 fldLocalit Diekirch Schifflange Luxembourg
Pierre Stockreiser
149
Informatique 13CG
retourne le nom et prnom du client qui est le propritaire du compte numro 106. Analysons le fonctionnement de cette requte: Le requte imbrique:
SELECT fiClient FROM tblComptes WHERE idCompte=106;
Cette requte retourne finalement le nom et prnom du client correspondant, c..d. 'Weber' 'Jos'
La requte imbrique doit renvoyer au maximum une seule valeur. Si tel n'est pas le cas, SQL ne pourra pas excuter la requte de niveau suprieur, et gnre un message d'erreur. Dans la clause WHERE de la requte de niveau suprieur, le rsultat de la requte imbrique doit obligatoirement tre compar un champ de type de donnes compatible avec la valeur retourne. Utilisez un des oprateurs =, <>, <, >, <=, >=. Comme la requte imbrique doit retourner une seule valeur, on utilise souvent des fonctions d'agrgation dans la clause SELECT de la requte imbrique. On peut avoir plusieurs niveaux d'imbrication de requtes. Une requte imbrique peut donc dj se baser sur le rsultat d'une autre requte imbrique Une requte imbrique peut galement tre utilise dans une clause HAVING.
Pierre Stockreiser
150
Informatique 13CG
Exemples: Reprenons les 3 tables tblComptes, tblClients et tblAgences 1. Affichez le numro du(des) compte(s) avec la plus grande valeur.
SELECT idCompte FROM tblComptes WHERE fldValeur=(SELECT MAX(fldValeur) FROM tblComptes);
Remarque: Dans une requte imbrique, vous n'avez pas besoin d'utiliser des alias lorsque la mme table est utilise plusieurs fois.
2. Affichez les numros des comptes et la valeur actuelle pour les comptes dont la valeur est suprieure la moyenne des valeurs.
SELECT idCompte, fldValeur FROM tblComptes WHERE fldValeur > (SELECT AVG(fldValeur) FROM tblComptes);
3. Affichez le nom, le prnom, l'adresse, le code postal et la localit du client, qui possde le compte avec la plus petite valeur. Nous supposons qu'il existe uniquement un seul compte avec la plus petite valeur.
SELECT fldNom, fldPrnom, fldAdresse, fldCP, fldLocalit FROM tblClients WHERE idClient=(SELECT fiClient FROM tblComptes WHERE fldValeur=(SELECT MIN(fldValeur) FROM tblComptes));
4. Pour effectuer des statistiques, on vous demande la requte suivante. Affichez le numro de compte et la valeur actuelle pour les comptes dont la valeur est plus petite que la moyenne des valeurs pour les comptes dont les clients habitent au Luxembourg, mais plus grande que la moyenne des valeurs pour les comptes dont les clients habitent Diekirch ou Ettelbruck.
SELECT idCompte, fldValeur FROM tblComptes WHERE fldValeur< (SELECT AVG(fldValeur) FROM tblComptes, tblClients WHERE fiClient=idClient AND fldLocalit='Luxembourg') AND fldValeur> (SELECT AVG(fldValeur) FROM tblComptes, tblClients WHERE fiClient=idClient AND fldLocalit IN ('Diekirch','Ettelbruck'));
Remarque: Comme cet exemple nous le montre, on peut avoir plusieurs requtes imbriques dans une seule clause WHERE.
Pierre Stockreiser
151
Informatique 13CG
5. Affichez le numro, le nom et l'avoir total en banque des clients dont l'avoir total est infrieur l'avoir moyen de tous les comptes.
SELECT idClient, fldNom, SUM(fldValeur) AS 'Avoir total' FROM tblComptes, tblClients WHERE fiClient=idClient GROUP BY idClient, fldNom HAVING SUM(fldValeur) < (SELECT AVG(fldValeur) FROM tblComptes);
tblComptes idCompte 101 106 112 125 12 24 12 30 fiAgence fldValeur 20000 48000 9000 5000 fiClient 3 2 3 1
tblClients idClient 1 2 3 fldNom Pegaso Weber Muller fldPrnom Emilio Jos Ketty fldAdresse 25, rue de la Gare 66a, Cit Paerchen 102, av G.Diederich fldCP 2278 1234 6690 fldLocalit Diekirch Schifflange Luxembourg
Pierre Stockreiser
152
Informatique 13CG
tblAgences idAgence 12 24 30 fldAdresse 15, bvd Royal 67, rue de l'Alzette 2, Grand Rue fldCP 5377 8765 6678 fldLocalit Luxembourg Esch-s-Alzette Ettelbruck
La requte
SELECT idCompte, fldValeur FROM tblComptes WHERE fiClient IN (SELECT idClient FROM tblClients WHERE fldLocalit='Luxembourg' OR fldLocalit='Diekirch');
retourne le numro de compte et la valeur actuelle pour les comptes dont le client habite Luxembourg ou Diekirch Analysons le fonctionnement de cette requte: Le requte imbrique:
SELECT idClient FROM tblClients WHERE fldLocalit='Luxembourg' OR fldLocalit='Diekirch';
retourne tous les numros de clients habitant Luxembourg ou Diekirch. Cette requte retourne donc l'ensemble de valeurs [1, 3]. On peut donc traduire la requte de niveau suprieur en
SELECT idCompte, fldValeur FROM tblComptes WHERE fiClient IN (1, 3);
Cette requte retourne finalement le numro de compte et la valeur des comptes correspondants. idCompte 101 112 125 fldValeur 20000 9000 5000
Pierre Stockreiser
153
Informatique 13CG
La requte imbrique renvoie un ensemble de n valeurs. Cet ensemble peut bien sr tre vide (n=0) ou tre compos d'une seule valeur (n=1). Dans la clause WHERE (ou HAVING) de la requte de niveau suprieur, le champ pour lequel on vrifie l'appartenance l'ensemble de valeurs retourn par la sous-requte, doit avoir un type de donnes compatible avec les valeurs de l'ensemble. Utilisez l'oprateur IN. Parfois, il est convenable d'utiliser l'option DISTINCT dans la clause SELECT de la sousrequte, afin d'viter des doublons dans l'ensemble rsultat. Toutefois, ceci est uniquement une mesure d'optimisation des requtes imbriques. On peut avoir plusieurs niveaux d'imbrication de requtes. Une requte imbrique peut donc dj se baser sur le rsultat d'une autre requte imbrique
Exemples: Reprenons les 3 tables tblComptes, tblClients et tblAgences 1. Affichez les numros des comptes qui sont grs par une agence situe Luxembourg.
SELECT idCompte FROM tblComptes WHERE fiAgence IN (SELECT idAgence FROM tblAgences WHERE fldLocalit='Luxembourg');
2. Affichez le nom et le prnom de tous les clients ayant un compte gr par une agence situe Luxembourg ou Esch-s-Alzette.
SELECT fldNom, fldPrnom FROM tblClients WHERE idClient IN (SELECT fiClient FROM tblComptes WHERE fiAgence IN (SELECT idAgence FROM tblAgences WHERE fldLocalit IN ('Luxembourg', 'Esch-s-Alzette')));
Remarque: A l'intrieur d'une requte imbrique, on peut faire rfrence un champ d'une table dfinie dans la requte de niveau suprieur. Dans ce cas on parle d'une requte imbrique corrle. Une valeur retourne par ce type de requte dpend donc d'un champ qui reoit ses valeurs partir d'une requte de niveau suprieur. !!! Les requtes imbriques corrles ne figurent actuellement pas au programme de la classe 13CG !!!
Pierre Stockreiser
154
Informatique 13CG
Exemple: Affichez le nom et le prnom des clients ayant au moins un compte avec une valeur de 9000 .
SELECT fldNom, fldPrnom FROM tblClients C WHERE 9000 IN (SELECT fldValeur FROM tblComptes WHERE fiClient=C.idClient);
L'ensemble de valeurs retourn du SELECT imbriqu dpend de la valeur de C.idClient. SQL excute cette requte de la faon suivante: C.idClient est substitu par sa valeur pour le premier enregistrement de la table tblClients. C.idClient prend donc la valeur 1. La requte imbrique
SELECT fldValeur FROM tblComptes WHERE fiClient=1;
est excute avec comme rsultat l'ensemble [5000]. La requte de niveau suprieur ne retourne donc aucun rsultat C.idClient est maintenant substitu par sa valeur pour le deuxime enregistrement de la table tblClients. C.idClient prend donc la valeur 2. La requte imbrique
SELECT fldValeur FROM tblComptes WHERE fiClient=2;
retourne l'ensemble [48000] La requte de niveau suprieur ne retourne donc aucun rsultat C.idClient est ensuite substitu par sa valeur pour le troisime enregistrement de la table tblClients. C.idClient prend donc la valeur 3. La requte imbrique
SELECT fldValeur FROM tblComptes WHERE fiClient=3;
retourne l'ensemble [20000 , 9000] La requte de niveau suprieur retourne le rsultat 'Muller' 'Ketty' puisque effectivement le troisime enregistrement de la table tblClients contient une valeur de idClient (3) , qui produit dans la requte imbrique un ensemble contenant la valeur 9000. Formulez cette requte sans utiliser le principe de la requte corrle A faire : Exercice 5 Rptition gnrale en SQL : Exercice 6 et Exercice 7
Pierre Stockreiser
155
Informatique 13CG
Remarques: Comme certains noms de champs sont identiques pour les tables tblAgents et tblClients, vous devez veiller employer les noms des tables resp. des alias aux bons endroits dans les requtes. Le champ fldAgentgnral est du type boolen (valeurs VRAI/FAUX resp. YES/NO)
Pierre Stockreiser
156
Informatique 13CG
Utilisez le mcanisme des jointures afin de rpondre aux questions suivantes. 1. Affichez pour les contrats qui ne couvrent pas l'Italie comme pays de destination, le numro du contrat et le nom de l'agent. En vous basant sur les donnes des tables, indiquez le rsultat de la requte dans la grille.
2. Affichez le numro de contrat, les dates de dbut et de fin du contrat ainsi que le nom, prnom, adresse, code postal et localit du client pour tous les contrats qui couvrent au moins une partie de la priode entre le 14 juillet et le 20 juillet 2005 et dont le pays de destination tait l'Italie. Utilisez des alias partout dans la requte. 3. Dterminez la plus grande prime parmi celles o le pays de destination est la Belgique et l'agent n'est pas un agent gnral. 4. Affichez le numro de contrat, la prime, le nom et prnom du client ainsi que le nom et prnom de l'agent pour tous les contrats o l'agent a le mme nom que le client. 5. Affichez toutes les informations concernant les clients ayant un agent qui habite Capellen. Eliminez un effet indsirable qui peut se produire cause du fait qu'un client peut avoir conclu plusieurs contrats avec le mme agent. 6. Affichez pour chaque client, le numro de client, son nom, le nom de son agent et la somme des primes de tous les contrats qu'il a conclu avec cet agent. Au cas o un client a conclu des contrats avec plusieurs agents diffrents, vous devez afficher un groupe pour chaque agent. En vous basant sur les donnes des tables, indiquez le rsultat de la requte dans la grille.
7. En vous basant sur les donnes de l'nonc, expliquez pour la requte suivante, les tapes d'excution, en prcisant chaque fois les rsultats intermdiaires.
SELECT idContrat, fldPrime, fldNom FROM tblContrats, tblAgents WHERE fiAgent=idAgent AND fldAgentGnral=No;
Pierre Stockreiser
157
Informatique 13CG
8. Elaborez une liste qui affiche pour chaque agent son nom ainsi que le nombre de contrats par pays de destination. En vous basant sur les donnes des tables, indiquez le rsultat de la requte dans la grille.
9. Indiquez le nom, le prnom, l'adresse, le code postal et la localit des clients ayant conclu un contrat qui a une prime strictement infrieure celle du contrat numro 1003. 10. Classez les agents par ordre descendant sur le nombre de contrats qu'ils ont conclus. En tenant uniquement compte des agents qui ont conclu au moins 2 contrats, affichez pour chaque agent, son numro, son nom et prnom ainsi que le nombre de contrats qu'il a conclu. 11. Affichez le nom et prnom des agents ayant conclu un contrat avec un client, qui a encore conclu un contrat avec au moins un autre agent. 12. Affichez le nom et prnom de tous les agents ayant conclu un contrat avec un client habitant dans la mme localit que le client numro 11.
Pierre Stockreiser
158
Informatique 13CG
Utilisez le mcanisme des requtes imbriques afin de rpondre aux questions suivantes. 1. Affichez le libell et le prix unitaire de l'article (des articles) qui est le plus cher. 2. Affichez le numro de l'article ainsi que le libell pour les articles moins cher que le prix moyen de tous les articles. 3. Affichez le numro et la date de toutes les factures dont le client habite Luxembourg. 4. Affichez le nom et le prnom des clients qui habitent Luxembourg et qui sont concerns par une facture etablie au cours du mois d'aot 1998. 5. Affichez le numro de facture, la date de facture ainsi que le nom et prnom du client pour toutes les factures ayant un montant total plus grand que le prix de l'article le plus cher. 6. Affichez le numro et le libell des articles qui sont plus cher que le prix moyen de tous les articles, et pour lesquels il existe une ou plusieurs factures avec une quantit >1. 7. Affichez le nom, le prnom, l'adresse, le code postal et la localit de tous les clients ayant dj achet un article plus cher que 300 . Exprimez la mme requte sans utiliser les requtes imbriques
Pierre Stockreiser
159
Informatique 13CG
8. Affichez le nom, le prnom, l'adresse, le code postal et la localit de tous les clients ayant uniquement achet des articles plus chers que 300 . Proposez une solution alternative en vous servant du mcanisme de la requte imbrique corrle. 9. Affichez le nom, le prnom, l'adresse, le code postal et la localit de tous les clients ayant dj achet pour une somme > 30 par facture. Utilisez au maximum possible les requtes imbriques. 10. Affichez le nom et le prnom de tous les clients ayant une facture, qui concerne un seul article. La facture ne doit donc ni concerner plusieurs articles diffrents ni avoir une quantit >1 pour un seul article.
Pierre Stockreiser
160
Informatique 13CG
Exercice 6: Bibliothque
Une bibliothque utilise la BD suivante.
Remarques: Un auteur peut rdiger plusieurs livres et un livre peut tre rdig par plusieurs auteurs. La bibliothque peut disposer de plusieurs exemplaires du mme livre. Un prt concerne un seul exemplaire d'un livre. Le champ fldDateRetour de la table tblPrts reste indtermin (NULL) tant que l'exemplaire emprunt n'a pas t retourn la bibliothque.
Formulez en SQL les requtes suivantes: 1. Affichez le numro, le titre et le genre de tous les livres allemands (Code=ALL). Classez la liste par ordre alphabtique sur le genre (p.ex. 'Roman' avant 'Technique') et l'intrieur d'un genre par ordre ascendant sur les numros. 2. Affichez une liste trie par ordre alphabtique de tous les genres de livres disponibles. 3. Affichez une liste de toutes les localits o habite un membre dont l'adresse contient l'abrviation 'bd' , indiquant que le membre habite sur un boulevard.
Pierre Stockreiser
161
Informatique 13CG
4. Affichez toutes les informations de la table tblAuteurs concernant les auteurs ayant une des nationalits suivantes. Nationalit (Pays d'origine) Allemagne Angleterre France Autriche Italie Suisse Russie Code ALL ANG FRA AUT ITA SUI RUS
5. Effacez tous les membres n'ayant pas encore effectu un prt. 6. Affichez le nom, le prnom, l'adresse, le code postal et la localit de tous les membres habitant Luxembourg ou Esch-s-Alzette, n'ayant pas encore retourn un exemplaire emprunt. 7. Affichez pour chaque livre le titre, le genre, la langue et le nombre d'exemplaires disponibles (emprunt ou non). Triez la liste par ordre alphabtique sur la langue, sur le genre et finalement sur le titre. Le champ indiquant le nombre d'exemplaires disponibles doit avoir l'en-tte 'Exemplaires disponibles'. 8. Affichez le nom et le prnom des auteurs ayant crit un livre franais dont le titre contient le mot 'passage', et dont la bibliothque possde au moins 3 exemplaires. 9. Affichez tous les livres (Titre et genre) de l'auteur 'Alexandre Dumas'. Triez la liste par ordre alphabtique sur le titre. 10. Affichez le nom, le prnom et le nombre de prts effectus, pour tous les membres qui habitent Esch-s-Alzette ou Luxembourg, ayant dj effectu au moins 2 prts. Triez la liste par ordre alphabtique sur le nom. 11. Affichez le numro, le nom et le prnom des membres dont le prt avec la plus grande dure a dur moins longtemps que la dure moyenne d'un prt. Ignorez les prts pour lesquels l'exemplaire emprunt n'a pas encore t retourn la bibliothque. 12. Crez une liste qui affiche pour chaque exemplaire actuellement emprunt (pas encore retourn), le numro du prt, le numro, le nom et le prnom du membre ayant emprunt le livre ainsi que le titre et le genre du livre en question. Triez la liste par ordre alphabtique sur le nom et le prnom du membre. 13. Quels sont les auteurs (Nom et prnom) ayant dj crit un livre ensemble avec l'auteur 'Margaret Gibson' ? 14. Quels sont les auteurs (Nom et prnom) n'ayant pas encore crit un livre ensemble avec l'auteur 'Margaret Gibson' ?
Pierre Stockreiser
162
Informatique 13CG
Remarques: Une classe est reprsente par un code interne (idClasse) , un nom de classe (fldNomClasse) tel que '13CG2' ou '11CM1' , un niveau (fldNiveau) tel que 10 pour la classe '10GE2' ou 13 pour '13CG1' , et un champ indiquant le cycle (fldCycle) avec les valeurs possibles 'Infrieur', 'Moyen' et 'Suprieur'. Nous supposons qu'un lve ne change pas de classe pendant l'anne scolaire. Les champs fiElve et fldAnne forment donc la cl primaire de la table tblFrquenter. Cependant, un lve peut frquenter la mme classe pendant plusieurs annes conscutives (redoublants). De mme nous supposons qu'une matire est enseigne pendant une anne par un seul prof dans une classe. Les champs fiMatire, fiClasse et fldAnne forment donc la cl primaire de la table tblEnseigner. Toutefois, un prof peut enseigner la mme matire pendant plusieurs annes dans une mme classe ou la mme matire pendant une anne dans plusieurs classes. Les champs fldAnne des tables tblfrquenter et tblEnseigner font rfrence des annes scolaires. On y retrouve des valeurs telles que '97/98' ou '95/96'. La BD ne contient pas uniquement la situation de l'anne scolaire actuelle, mais galement celle des annes prcdentes.
Pierre Stockreiser
163
Informatique 13CG
Formulez en SQL les requtes suivantes: 1. Affichez pour l'anne scolaire '97/98' , le nom de chaque classe ainsi que le nombre d'lves. 2. Affichez par anne scolaire et par niveau le nombre d'lves. Triez la liste par ordre ascendant sur l'anne scolaire et par ordre ascendant sur le niveau. 3. Affichez le nom et le prnom de tous les profs ayant enseign une matire dans une classe de 13me pendant les 5 dernires annes scolaires ( partir de l'anne scolaire '97/98'). Triez la liste par ordre alphabtique sur le nom du prof. 4. Dressez une liste avec le nom, le prnom, l'adresse, le code postal, et la localit pour tous les lves qui ont frquent la classe '08TH1' pendant l'anne scolaire '96/97'. La liste doit tre trie par ordre alphabtique sur le nom des lves. Utilisez au maximum possible le mcanisme des requtes imbriques. 5. Crez une liste, qui montre pour l'anne scolaire '97/98', pour chaque classe, les matires enseignes avec les noms et prnoms des profs correspondants. Triez la liste par ordre alphabtique sur les noms des classes et l'intrieur d'une classe par ordre alphabtique sur les matires. Utilisez uniquement des jointures en dfinissant des alias pour toutes les tables impliques. 6. Crez une liste des profs (nom & prnom) qui est trie par ordre descendant sur le nombre de cours enseigns pendant les 3 dernires annes scolaires ( partir de l'anne scolaire '97/98'). La notion de cours est dfinie par le fait d'enseigner une matire dans une classe. 7. Affichez le nom et le prnom des profs qui enseignent au moins une matire dans une classe pendant l'anne scolaire '97/98'. Formulez la mme requte en utilisant le mcanisme de la requte imbrique corrle. 8. Affichez le nom, le prnom, l'adresse, le code postal et la localit de tous les lves ayant frquent pendant l'anne scolaire 96/97 une classe du cycle infrieur. Utilisez au maximum les requtes imbriques. 9. Affichez le nom, le prnom et la dnomination de la classe actuelle des lves qui sont actuellement (Anne '97/98') des redoublants. Attention: Un lve est actuellement un redoublant s'il a frquent l'anne scolaire passe une classe de mme niveau, mais pas ncessairement la mme classe. 10. Sachant qu'une classe ne devrait avoir un effectif suprieur 21 lves, le directeur vous demande d'tablir une liste avec les noms des classes du cycle infrieur, qui pourraient encore accepter des nouveaux lves pendant l'anne scolaire '97/98'. Utilisez uniquement des requtes imbriques. Formulez la mme requte en utilisant uniquement des jointures. Formulez la mme requte en utilisant le mcanisme de la requte corrle. 11. Affichez le nom et le prnom, ainsi que le nom, le niveau et le cycle de leur classe actuelle (anne = '97/98') de tous les lves qui n'ont jamais redoubl une classe dans notre lyce.
Pierre Stockreiser
164
Informatique 13CG
12. Affichez parmi tous les profs, qui ont dj enseign la mme matire que le prof numro 10001, ceux n'ayant pas encore enseign la mme matire au mme niveau que le prof numro 10001 pendant les annes scolaires '96/97' et '97/98'.
Pierre Stockreiser
165
Informatique 13CG
Pierre Stockreiser
166
Informatique 13CG
SELECT idLivre, fldTitre, fldAuteur, fldLangue FROM tblLivres WHERE fldGenre="Roman" ORDER BY fldLangue DESC;
Les SGBD actuels offrent de plus en plus des possibilits QBE avances telles que l'utilisation des fonctions d'agrgation, l'implmentation des requtes d'insertion, de modification et de suppression etc. . Rfrez-vous la documentation de votre SGBD pour voir comment QBE est implment et quelles sont les fonctionnalits et les limites. Il est cependant important de savoir que les requtes QBE sont toujours excutes via SQL, parce qu'un SGBD ne comprend pas vraiment QBE. QBE n'est qu'une interface graphique couple un interprteur, qui transforme les indications de l'cran QBE en SQL. La partie du SGBD, qui excute la requte (appele le moteur SQL), utilise le code SQL gnr par l'interprteur de la mme faon que celui entr directement par l'utilisateur. Nous avons l'architecture suivante:
Pierre Stockreiser
167
Informatique 13CG
Afin de mieux pouvoir regrouper les diffrents scnarios qui peuvent se poser nous distinguons gnralement 3 types de contraintes d'intgrit.
Pierre Stockreiser
168
Informatique 13CG
III. Affectation d'une valeur par dfaut aux cls trangres concernes par une opration du type C ou D. IV. Affectation d'une valeur indtermine (NULL) aux cls trangres concernes par une opration du type C ou D. En pratique, les mthodes 1 et 2 sont utilises dans la majorit des cas. Pour cette raison nous allons ignorer les mthodes 3 et 4 dans les exercices en classe de 13CG.
Pierre Stockreiser
169
Informatique 13CG
2. Un champ peut avoir un domaine de valeurs prdfini (une plage de valeurs possibles) et/ou une valeur par dfaut. Exemples: Une note d'un devoir en classe doit tre entre 0 et 60 Le prix d'une facture ne doit pas tre un nombre ngatif. La date d'une commande doit automatiquement tre la date actuelle moins que l'utilisateur n'entre une autre date. 3. La valeur d'un champ peut limiter les valeurs possibles pour un autre champ d'une table/d'une BD. Exemple: La valeur du champ fldDatePaiement est suprieure ou gale la valeur du champ fldDateFacture pour une table tblFactures. Mthodes pour vrifier cette contrainte d'intgrit dans un SGBD En principe, tout SGBD moderne devrait offrir des moyens pour spcifier les proprits dun champ de table, en tenant compte des contraintes ci-dessus.
Code L-XXXX
Pierre Stockreiser
170
Informatique 13CG
e) Quelle(s) contrainte(s) est(sont) concerne(s) lors de l'ajout d'un enregistrement dans la table tblConcerne ? Par quel moyen est-ce que le SGBD peut vrifier le domaine de valeurs du champ fldQuantit?
f) Quelle(s) contrainte(s) est(sont) concerne(s) lors de la suppression d'un enregistrement de la table tblConcerne ?
g) Quelle(s) contrainte(s) est(sont) concerne(s) lors de la modification du numro d'un article dans la table des articles?
h) Quelle(s) contrainte(s) est(sont) concerne(s) lors de la modification du numro client d'une facture ?
Pierre Stockreiser
171
Informatique 13CG
Exercice 2
Soit la BD suivante.
Pour chaque relation, la vrification de la contrainte d'intgrit rfrentielle est active en mode "Interdiction", l'exception de la relation entre les tables tblMembres et tblPrts o la contrainte est active en mode "Cascade" pour la suppression et la modification. Voici les donnes actuelles de la BD.
Pierre Stockreiser
172
Informatique 13CG
Prcisez comment le systme de gestion de bases de donnes ragit aux manipulations suivantes. Indiquez pour chaque cas la contrainte concerne. a) Ajoutez l'auteur suivant 4 Preston Thomas ANG
Pierre Stockreiser
173
Informatique 13CG
i)
Pierre Stockreiser
174
Informatique 13CG
Vous remarquez que ce formulaire affiche un enregistrement la fois. Un formulaire est toujours li une table ou bien une requte. Il ne reprsente donc qu'une interface entre l'utilisateur et les tables. Toutes les donnes saisies sur un formulaire sont donc inscrites dans la (les) table(s) correspondante(s).
Pierre Stockreiser
175
Informatique 13CG
Chaque formulaire est compos de contrles. Voici une liste non exhaustive des contrles les plus rpandus dans les SGBD actuels:
Nom du contrle
Etiquette (angl. Label) Exemple:
Description
Affiche du texte fixe.
Utilisation
Ce type de contrle n'est pas li un champ d'une BD. Il sert uniquement fournir des informations l'utilisateur.
Contient des donnes de la BD. Ce Peut reprsenter des contrle affiche par exemple la valeur champs de tout type. d'un champ pour l'enregistrement actuel.
Utiliss en groupe, ces boutons Bouton d'options (angl. Option Button ou permettent de choisir une seule valeur parmi plusieurs possibles. Un bouton Radio Button) slectionn signifie que la valeur associe ce bouton est slectionne comme Exemple: valeur pour le champ correspondant au groupe de boutons. Les options dans un groupe reprsentent donc les valeurs possibles pour UN champ donn de la table.
Ce contrle reprsente de prfrence des champs de type numrique, texte ou date. On utilise des groupes de boutons d'options pour reprsenter des champs pouvant contenir seulement quelques valeurs Exemple: Le bouton Fminin slectionn prdfinies, qui ne veut dire que le sexe de cet employ est changent pas souvent ou fminin. pas du tout comme par exemple le sexe (masculin/fminin), le rsultat d'un examen (Admin/Ajourn/Ecart) etc. .
Pierre Stockreiser
176
Informatique 13CG
Utilis pour afficher le contenu d'un Reprsente des champs champ de type Oui/Non (Yes/No). La valeurs logiques diffrence par rapport aux boutons (Oui/Non). d'option est qu'il est possible de cocher simultanment plusieurs cases dans un groupe. En plus, les cases cocher apparaissent souvent seules et indpendant d'un groupe. Chaque case concerne UN champ de la table. Exemple: La table contient 3 champs valeurs Oui/Non (fldCaracGras, fldItalique, fldSoulign). Permet d'afficher une liste de valeurs parmi lesquelles l'utilisateur peut en choisir une. On utilise des zones de liste pour reprsenter des champs qui contiennent plusieurs valeurs possibles. Lorsque la nature des donnes fait que des nouvelles options deviennent indispensables, il suffit de les ajouter dans la liste et chaque utilisateur pourra les slectionner.
Ce contrle reprsente de prfrence des champs de type numrique, texte ou date. On utilise des zones de liste pour reprsenter des champs pouvant contenir beaucoup de valeurs qui ne changent pas souvent ou pas du tout comme par exemple les noms des diffrents pays de l'Europe.
Combinaison entre une zone de liste et une zone de texte. L'utilisateur peut slectionner une valeur de la liste ou entrer un texte de son choix.
Ce contrle reprsente de prfrence des champs de type numrique, texte ou date. Utilisation pareille la zone de liste mais avec l'option pour l'utilisateur d'entrer une valeur non prdfinie.
Excuter une ou plusieurs commandes Ce type de contrle n'est systmes respectivement lancer des pas li un champ d'une modules de programmes crs par BD. l'utilisateur. Exemple1: Visualiser toutes les commandes d'un client. Exemple2: Arrter l'action en cours.
Pierre Stockreiser
177
Informatique 13CG
La plupart des SGBD offrent encore des contrles pour amliorer la prsentation des formulaires (contrles graphiques, images, liens OLE ). Convention des noms: Les noms des formulaires sont prcds du prfixe frm (angl.: Form) Quand est-ce qu'on utilise des formulaires ? Lorsqu'on ne veut pas que les utilisateurs travaillent directement dans les tables. Les formulaires offrent gnralement des mcanismes de scurit plus sophistiqus tels que les zones de listes qui empchent les utilisateurs d'entrer n'importe quelle valeur dans un champ etc. Lorsqu'on veut prsenter les donnes sous une forme plus conviviale. On peut par exemple utiliser des cases cocher pour les champs valeur Oui/Non (Yes/No). Lorsqu'on dsire afficher les enregistrements un la fois ( Formulaires Colonne Simple) Le principe de conception d'un bon formulaire est toujours de minimiser le nombre de frappes afin de minimiser les erreurs possibles.
Quelle est la base de cration d'un formulaire ? Tout comme les tables et les requtes, un formulaire est un composant d'une BD, qui doit tre cre et dfini avant de pouvoir tre utilis pour manipuler les donnes. Chaque formulaire se cre partir d'une table ou d'une requte. Les donnes affiches dans un formulaire proviennent donc de tables ou de requtes, tandis que certaines informations spcifiques l'apparence du formulaire (p.ex. couleur de l'arrire plan ) sont stockes dans la dfinition du formulaire.
Pierre Stockreiser
178
Informatique 13CG
Dans un formulaire Colonne Simple, les valeurs des enregistrements sont affiches dans une seule colonne. Chaque valeur d'un enregistrement se trouve dans un champ de formulaire ddi. Un seul enregistrement est donc reprsent chaque fois. 2. Formulaire Tabulaire (angl. Tabular Form)
Dans un formulaire tabulaire, les enregistrements sont reprsents sur des lignes et des colonnes. Ce type de formulaire a une apparence similaire celle de la vue d'un tableau ou d'un rsultat d'une requte.
Pierre Stockreiser
179
Informatique 13CG
La plupart des SGBD offrent une multitude d'options de reprsentations graphiques (Histogrammes 2D, Histogrammes 3D, Diagrammes circulaires ).
Pierre Stockreiser
180
Informatique 13CG
Pour reprsenter un champ, qui ne peut contenir qu'un nombre trs limit (max 5) de valeurs prdfinies du type numrique, texte ou date, qui sont en plus mutuellement exclusives, utilisez un groupe de boutons d'options.
Exemple:
Un champ, qui peut contenir un nombre limit (> 5) de valeurs prdfinies du type numrique, texte ou date, qui sont en plus mutuellement exclusives, devra tre reprsent par une zone de liste.
Exemple:
Lorsque pour un champ, reprsent normalement par une zone de liste, vous voulez donner l'utilisateur la possibilit d'entrer des valeurs outres que celles prdfinies, utilisez une liste modifiable.
Pierre Stockreiser
181
Informatique 13CG
Exemple:
L'employ peut soit slectionner une des marques prdfinies, soit entrer lui-mme un nom de marque.
Pour les champs ou vous ne pouvez pas du tout anticiper les valeurs, et qui ne sont pas du type logique, utilisez une zone de texte. Exemple: L'employ doit entrer le nom du client.
Lors de la conception d'un formulaire, le respect de ces quelques rgles garantit l'utilisateur le principe de la saisie minimale. Partout ou une slection de valeurs prdfinies est possible, l'utilisateur n'a pas besoin d'entrer les donnes au clavier. Avantages: 1. La rapidit de la saisie des donnes augmente 2. Elimination de beaucoup de sources d'erreur. meilleure productivit.
Pierre Stockreiser
182
Informatique 13CG
En gnral, on utilise un rapport pour: Imprimer des listes et statistiques concernant les donnes; Regrouper les donnes et crer des calculs sur les donnes; Crer des factures, bons de livraisons et autres pices de gestion importantes.
Pierre Stockreiser
183
Informatique 13CG
Exemple 1: Le rapport suivant affiche simplement une liste avec tous les livres en stock. Cette liste est trie par ordre alphabtique sur le titre.
Exemple 2: Un SGBD nous offre gnralement la possibilit de regrouper les donnes. Chaque groupe est dfini selon les valeurs d'un ou de plusieurs champs. Un groupe contient normalement 3 parties; une en-tte de groupe, une section dtail et un pied de groupe. Dans notre exemple, nous allons crer des groupes bass sur la valeur du champ fldGenre, donc un groupe par genre. Pour chaque groupe, donc pour chaque genre, nous allons afficher les libells des champs dans l'en-tte du groupe et les livres appartenant au groupe dans la section dtail. A la fin de chaque groupe (dans le pied de groupe) sera affich en plus, le total des exemplaires en stock pour ce groupe.
En-tte
Dtail Pied
Pierre Stockreiser
184
Informatique 13CG
Exemple 3: Dans ce rapport, les livres sont groups par genre et l'intrieur d'un genre par langue. Chaque groupe est donc dfini par le genre et la langue.
Pierre Stockreiser
185
Informatique 13CG
Exemple 4: On pourrait envisager de reprsenter le mme groupement (genre & langue) d'une autre faon.
Quelle est la base de cration d'un rapport ? Tout comme les tables, les requtes et les formulaires, un rapport est un composant d'une BD, qui doit tre cr et dfini avant de pouvoir tre utilis pour afficher les donnes et les calculs sur les donnes. Chaque rapport se cre partir d'une table ou d'une requte. Les donnes affiches dans un rapport proviennent donc de tables ou de requtes, tandis que certaines informations spcifiques l'apparence du rapport (p.ex. Titre dans l'entte ) sont stockes dans la dfinition du rapport.
Pierre Stockreiser
186
Informatique 13CG
Chaque rapport est compos de contrles. Puisque les rapports ne sont pas prvus pour le dialogue interactif avec l'utilisateur, ils contiennent dans la plupart des cas seulement 3 types de contrles: Nom du contrle Zone de texte (angl. Text Box) Description Exemple Affiche les donnes de la BD, ainsi que les rsultats de calculs sur ces donnes. Les zones de textes constituent les contrles les plus importants et les plus utiliss dans les rapports. Affiche du texte fixe.
Ces contrles, dont le seul but est Contrles graphiques (angl. Graphical l'amlioration de la prsentation des rapports peuvent tre de types Controls) diffrents, comme par exemple des lignes , des lments graphiques lmentaires tels que carrs ou rectangles, mais galement des images importes. Nanmoins, beaucoup de SGBD prvoient galement l'utilisation d'autres contrles, comme par exemple les boutons d'options ou les cases cocher. Convention des noms: Les noms des rapports sont prcds du prfixe rpt (angl.: report)
Pierre Stockreiser
187
Informatique 13CG
Structure d'un rapport Chaque rapport est subdivis en diffrentes parties, appels sections. Un rapport peut contenir les sections suivantes: En-tte/Pied de rapport L'en-tte de rapport apparat une seule fois au dbut de la premire page, et le pied de rapport apparat une seule fois la fin de la dernire page. L'en-tte de rapport est souvent utilis pour afficher des logos ou la date actuelle. Le pied de rapport contient souvent des grand totaux. En-tte/Pied de page Contient du texte, qui sera affich/imprim chaque nouvelle page du rapport. L'en-tte de page contient gnralement les noms des champs affichs dans la section dtail. Le pied de page est souvent utilis pour afficher le numro de page. En-tte/Pied de groupe Dans un rapport on peut faire un regroupement d'enregistrements selon les valeurs d'un ou de plusieurs champs spcifis (p.ex. Regrouper une liste de voitures par marque). Chaque groupe dfini peut disposer d'un en-tte et d'un pied de groupe. L'en-tte de groupe affiche par exemple une ou plusieurs zones de texte indiquant le contenu du groupe (p.ex. Nom de la marque), ou les tiquettes de la section dtail. Le pied de groupe contient des calculs (p.ex. sous totaux, moyennes) pour ce groupe. Entre l'en-tte de groupe et le pied de groupe se trouve la section dtail, avec tous les enregistrements faisant partie du groupe. Section Dtail Cette section est la plus importante. Elle contient la plupart des zones de texte et affiche les donnes et les calculs pour chaque enregistrement. Il existe toujours une seule zone dtail, indpendant du fait qu'il y a des groupes ou non.
Pierre Stockreiser
188
Informatique 13CG
Pierre Stockreiser
189
Informatique 13CG
Pierre Stockreiser
190
Informatique 13CG
Exemple: Sachant qu'une BD est implmente par un ou plusieurs fichiers, au niveau du systme d'exploitation, une personne peut effacer une BD complte au niveau de la gestion des fichiers (p.ex. Explorer1) sans mme avoir besoin de dmarrer le SGBD.
Pierre Stockreiser
191
Informatique 13CG
Toutefois, la plupart des SGBD excuts sur un serveur offrent l'administrateur d'une BD la possibilit de stocker toutes les manipulations effectues dans une BD spcialise, appele journal des oprations effectues (angl. auditing). A l'intrieur du journal, l'administrateur peut chaque moment vrifier quel utilisateur a effectu quelle manipulation sur quelle table quel moment. Avantages: Transparence totale concernant les manipulations effectues. Identification des coupables en cas de problmes. Le fait de rendre l'existence d'un tel journal public possde un certain effet psychologique sur les malfaiteurs potentiels.
Dsavantages: Les conclusions tires de la consultation d'un journal, sont considrer avec prcaution puisqu'un utilisateur en possession d'un mot de passe d'une autre personne peut effectuer des manipulations malveillantes sous l'identit de celle-ci. Les performances d'une BD peuvent tre dgrades puisque pour chaque manipulation d'une table, une inscription dans le journal doit tre effectue. Un journal permet le contrle total du travail des utilisateurs d'une BD.
Pierre Stockreiser
192
Informatique 13CG
Pierre Stockreiser
193
Informatique 13CG
Certains utilisateurs autoriss de la base peuvent tre limits, dans leur accs, quelques tables de celle-ci. Exemple: Soit une BD pour la gestion des comptes d'une banque, implmente sur un serveur BD, auquel tous les employs (mme ceux des agences) ont un accs via un rseau informatique.
Un stagiaire auprs de la banque aura un login1 afin d'accder la base de donnes, mais l'administrateur de la base lui accorde uniquement un accs en lecture aux tables tblAgences et tblClients. En plus, l'administrateur cre une vue2, qui contient tous les enregistrements de la table tblComptes, toutefois sans afficher le champ fldValeur. Le stagiaire, avec les connaissances acquises pendant le cours d'informatique en classe de 13CG, peut crer sur son PC des requtes, formulaires et rapports, mais il sera limit l'utilisation des donnes pour lesquelles il est en possession des droits ncessaires.
En ce qui concerne les tables et vues d'une BD sur un serveur, l'administrateur n'a pas uniquement la possibilit de limiter les objets qu'un utilisateur peut accder, mais il peut galement dfinir pour chaque objet, le type d'accs auquel un utilisateur a le droit . Parmi les types d'accs nous distinguons: Autorisation de lecture (angl. select) L'utilisateur peut uniquement lire des donnes. Autorisation d'insertion (angl. insert) L'utilisateur peut lire et insrer des donnes. Il ne peut cependant pas modifier ou effacer des donnes existantes.
1 2
nom utilisateur & mot de passe l'aide duquel un utilisateur peut s'identifier au systme terme gnralis pour une requte de slection stocke et raffichable
Pierre Stockreiser
194
Informatique 13CG
Autorisation de mise jour (angl. update) L'utilisateur peut lire et modifier des donnes. Il ne peut cependant pas insrer ou effacer des donnes. Autorisation d'effacement (angl. delete) L'utilisateur peut lire et effacer des donnes. Il ne peut cependant pas insrer ou modifier des donnes.
Le SGBD sur le serveur garantit que les restrictions dfinies pour un utilisateur ne sont pas violes.
Exemple: L'administrateur d'une BD gre par un SGBD serveur Oracle peut par exemple excuter des commandes comme:
GRANT insert, update ON tblComptes,tblAgences TO JWEBER;
Cette commande donne l'utilisateur identifi au systme par le nom JWEBER, le droit de lire les donnes des tables tblComptes et tblAgences, d'insrer de nouveaux enregistrements dans ces tables et de modifier les enregistrements existants dans les deux tables. La commande suivante enlve le droit d'insertion dans la table tblComptes l'utilisateur.
REVOKE insert ON tblComptes FROM JWEBER;
Exercice En vous rfrant la syntaxe prsente dans cet exemple, et en supposant que le nom utilisateur du stagiaire de l'exemple prcdent est EMULLER, indiquez les commandes ncessaires pour donner les droits d'accs au stagiaire de la banque au dbut de la priode de stage, et celles ncessaires pour lui enlever ces droits la fin de la priode de stage. Nous supposons que la vue cre par l'administrateur s'appelle vComptesSansValeurs.
Avantage de la gestion des droits d'accs: Les droits d'accs sont un outil parfait pour personnaliser l'accs une BD de faon ce que chaque utilisateur puisse uniquement effectuer les oprations en relation avec sa fonction et comptence l'intrieur de l'entreprise. Ceci restreint les possibilits d'effectuer des manipulations malveillantes et limite en plus le nombre des suspects en cas d'une telle manipulation.
Pierre Stockreiser
195
Informatique 13CG
Dsavantage de la gestion des droits d'accs: En fait, il n'existe pas vraiment un dsavantage, mais la gestion des droits d'accs ncessite un effort de gestion supplmentaire considrable, surtout pour les socits o les comptences des employs varient beaucoup.
programme affichant une animation l'cran, qui s'excute automatiquement aprs un nombre prdfini de minutes sans activit de l'utilisateur
Pierre Stockreiser
196
Informatique 13CG
Exemple d'une incohrence accidentelle: Dans les systmes multi-utilisateur, il se peut que deux utilisateurs accdent en mme temps, aux mmes enregistrements d'une BD sur le serveur. On parle d'un accs concurrent.
BD
Nous supposons, que les deux utilisateurs excutent en mme temps, de faon indpendante l'un de l'autre, les deux requtes suivantes: Utilisateur 1
UPDATE Employs SET fldDpartement="CPT" WHERE fldDpartement="Comptabilit";
Utilisateur 2
UPDATE Employs SET fldSalaire=fldSalaire*1.1 WHERE fldDpartement="Comptabilit" AND fldDateNaiss<#1/1/70#;
pour
le
service
de
Tous les employs du service comptabilit ns avant le 1/1/70 , subissent une hausse de salaire de 10%.
Nous supposons en plus que la requte de l'utilisateur numro 2 est excute quelques instants avant l'autre requte. Cependant, la requte de l'utilisateur 1 s'excute un peu plus vite que l'autre, puisque pour chaque enregistrement, il y a uniquement un seul critre de slection vrifier. A un certain moment, l'excution de la requte 1 aura dpasse celle de la requte 2, donc pour certains enregistrements, le code "Comptabilit" est chang en "CPT", avant que la
Pierre Stockreiser
197
Informatique 13CG
requte 2 ne puisse effectuer la modification du salaire. Parmi tous les employs ayant droit une hausse de salaire, certains sont donc "ignors". Le problme des accs concurrents se pose surtout dans les systmes avec beaucoup d'utilisateurs mettant beaucoup de requtes, tels que par exemple la gestion des dpts d'une banque. Ce problme peut tre rsolu par le mcanisme de la srialisation d'excution des requtes1, support automatiquement par tous les SGBD multi-utilisateur excuts sur un serveur de BD. Ce mcanisme garantit une excution en srie de plusieurs requtes, mme lorsque celles-ci sont envoyes par plusieurs utilisateurs en mme temps.
Exercice Donnez un exemple supplmentaire d'une incohrence accidentelle et d'une perte accidentelle.
Les causes des pertes de donnes accidentelles sont rparties en trois groupes: 1. Les pertes provoques par des erreurs humains; 2. Les pertes des donnes en mmoire interne (RAM). 3. Les pertes des donnes stockes sur disque dur.
une requte n'est excute qu'au moment o la requte prcdente a termin son excution
Pierre Stockreiser
198
Informatique 13CG
Ce type de pertes est difficilement matrisable. Toutefois, une bonne formation des utilisateurs d'un systme aide rduire le nombre de telles pannes. Exemple d'une perte provoque par une erreur humaine: Une requte de suppression mal formule en SQL, efface trop d'enregistrements.
Pierre Stockreiser
199
Informatique 13CG
Voici un tableau comparatif des supports de sauvegarde, qui sont actuellement assez rpandus. Support Disquette Caractristiques Stockage magntique en train de disparatre Capacit1: 720KB/1.4MB (trs faible) Lecture & criture rptitive des donnes Vitesse d'accs assez lente
1KB = 1Kilobyte = 1024 Byte / 1MB = 1 Megabyte = 1024KB / 1GB = 1Gigabyte = 1024MB
Pierre Stockreiser
200
Informatique 13CG
Bande magntique Stockage magntique Capacit: p.ex. 120 GB (leve) Lecture & criture rptitive des donnes Vitesse d'accs trs lente
Disque magntique amovible Stockage magntique Capacit: p.ex. 2GB (suffisante pour petits systmes) Lecture & criture rptitive des donnes Vitesse d'accs rapide
CD-R Stockage optique Capacit: 650 MB 800MB (suffisante pour petits systmes) Lecture rptitive & une seule criture Vitesse d'accs moyenne
CD-RW Stockage magnto-optique Capacit: 650MB 700MB (suffisante pour petits systmes) Lecture & criture rptitive des donnes Vitesse d'accs moyenne
Disque dur externe Stockage magntique Capacit: p.ex. 200GB (leve) Lecture & criture rptitive des donnes Vitesse d'accs rapide
Pierre Stockreiser
201
Informatique 13CG
Pierre Stockreiser
202
Informatique 13CG
Annexes
11. Annexes
Pierre Stockreiser
203
Informatique 13CG
Annexes
11.1 Bibliographie
D.Nanci / B.Espinasse "Ingnierie des systmes d'information" 3me Edition Edition: Sybex ISBN: 2-7361-2209-7 P.A.Goupille / J.M.Rousse "Analyse informatique" Edition: Masson ISBN 2-225-84167-5 Christian Soutou "De UML SQL" Edition: Eyrolles ISBN 2-212-11098-7 J.M. Jans "Modlisation conceptuelle des donnes avec le modle des classes UML S.Roman "Bases de donnes MS-Access / Conception et programmation" Edition: O'Reilly ISBN: 2-84177-054-0 H.F.Korth / A.Siberschatz "Systmes de gestion des bases de donnes" Edition: McGraw-Hill ISBN: 2-7042-1170-1 P.Bilke "Start mit Datenbanken und SQL" Edition: KnowWare ISBN: 3-931666-19-4 N.Boudjlida "Bases de donnes et systmes d'information" Support de cours Universit de Nancy 1 / Facult des Sciences / Dpartement informatique
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
Pierre Stockreiser
204
Informatique 13CG
Annexes
[9]
J.L.Viescas "Running Access 2" Edition: Microsoft Press ISBN: 1-55615-592-1 Br / Bauder "Microsoft Access 2" Edition: Micro Application ISBN: 2-7429-0239-2 K.Getz / P.Litwin / G.Reddick "Access 2 Developer's Handbook" Edition: Sybex ISBN: 0-7821-1327-3 CNPI "Dossier de l'enseignant" PC Magazin Spezial 5-98 "Kryptographie und Netzwerksicherheit"
[10]
[11]
[12]
[13]
Pierre Stockreiser
205
Informatique 13CG
Annexes
Pierre Stockreiser
206
Informatique 13CG
Annexes
11.3 Index
A
Agrgation de composition, 48 Association entre classes, 24 Association rflexive, 47 Association ternaire, 36 Attribut calcul, 34 Attribut d'une classe, 21 attributs (MLD), 57 Auto- jointure, 146
G
groupement de donnes, 184
I
Identifiant d'une classe, 23 Index d'une table, 96 information, 9 informations, 10 Instanciation, 20
B
base de donnes, 72, See BD BD. See base de donnes Bouton de commande, 177 Bouton d'options, 176
J
jointure, 140
L C
Case cocher, 177 champ d'une table d'une base de donnes, 90 Classe, 20 Classe-association, 29 Cl trangre, 95 Cl primaire (base de donnes), 92 cl primaire (MLD), 57 Client/Serveur, 86 condition de jointure, 143 contrainte d'intgrit des tables, 168 contrainte d'intgrit gnrale, 169 contrainte d'intgrit rfrentielle, 169 contrles d'un formulaire, 176 contrles d'un rapport, 187 Contrles graphiques, 187 critres de slection, 104 langage de dfinition de donnes, 67 Langage de modlisation UML, 19 Les requtes imbriques, 149 Liste modifiable, 177
M
MCD. See Modle conceptuel des donnes MLD. See Modle logique des donnes modle conceptuel des donnes, 19 Modle logique des donnes, 55 modle physique des donnes, 65 MONTH(<date>), 109 Mot de passe, 193 MPD. See Modle physique des donnes Multiplicit maximale, 26 Multiplicit minimale, 26 Multiplicits d'une association, 25
D
DATE(), 109 DAY(<date>), 109 Diagramme de classes, 19 donnes, 10 Droits d'accs, 193
N
NULL. See Valeur indtermine
O
Objet, 20 outil de modlisation, 69
E
Etiquette, 176, 187
Q F
QBE, 166 Query By Example. See QBE
Format (proprit), 133 formulaire, 175 Formulaire Colonne Simple, 179 Formulaire Tabulaire, 179
R
rapport, 183 Relations entre tables, 95
Pierre Stockreiser
207
Informatique 13CG
Annexes
requte imbrique corrle, 154 requtes, 98 requtes paramtres, 105 rseau. See Rseau informatique rseau informatique, 80 Rle, 47
types de donnes, 90
U
UML. See Langage de modlisation UML
S
Sauvegarde des donnes, 200 sections d'un rapport, 188 scurit des donnes, 191 serveur, 81 SGBD. See systme de gestion de bases de donnes SQL, 100 Structured Query Language. See SQL systme de gestion de bases de donnes, 72 Systmes de Gestion de Bases de Donnes (SGBD), 11 systmes d'information, 8, 9, 10, 11 valeur indtermine, 110
Y
YEAR(<date>), 109
Z
Zone de liste, 177 Zone de texte, 176, 187
T
table (MLD), 57 table d'une base de donnes, 88
Pierre Stockreiser
208