Séance de révision et manipulation de l utilitaire SQLLOADER 1. Enoncé La base de données considérée représente les informations relatives à une bibliothèque qui gère le stockage, l indexation et l emprunt d un ensemble de livres. Chaque livre est un exemplaire d ouvrage, et il peut exister plusieurs exemplaires d un même ouvrage. Les ouvrages sont identifiés par leur Numéro ISBN, ont un titre, un éditeur, une année de parution et sont caractérisés par une catégorie (roman, nouvelle, poésie,...). Les livres sont caractérisés par un numéro d exemplaire, un prix, une date d achat et une durée d emprunt. Les lecteurs sont identifiés par un numéro et ont un nom, un prénom, un âge et une adresse. Ils sont de plus caractérisés par un type de lecteur (homme, femme, enfant) et une catégorie de lecteur (occasionnel,regulier,excluspret). La base de données est décrite par le schéma relationnel suivant : Lecteur(NumL,NomL,PrenomL,AdresseL,Age,TypeL,CatL) Ouvrage(NumISBN,Titre,Editeur,Annee,prixAchat,Categorie) Livre(NumE,valeurEstimee,DateAchat,Etat,DureeEmprunt, NumISBN) AEmprunte(NumL,NumE,DateDebutEmprunt,DateFinEmprunt,NbreRelance) Les attributs en gras représentent les clés primaires et les attributs en italique portent des contraintes de clé étrangère. Vous devez, en guise d exercice de rétroconception, en définir le modèle conceptuel de données (modèle E-A ou diagramme de classes UML) 2. Création, alimentation et modification de la structure de la base de données Pour vous aider lors de la création et de l alimentation de la base de données, un script de création de tables (les évolutions de schéma exceptées) et des fichiers de données au format CVS (Comma Separated Value) vous sont fournis sur le site habituel. Vous allez utiliser le module SQL*Loader (un des modules fonctionnels d Oracle au même titre que SQL*Plus ou que SQL*Dba) pour charger des données dans les tables d une base de données via des fichiers de données. Une figure vous montre les principes de base. Le format des entrées comme des sorties est précisé dans un fichier de paramétrage, appelé fichier de contrôle (.ctl). En sortie, Un fichier log donnant les résultats du chargement est généré. En cas d erreur, les enregistrement rejetés sont stockés dans un fichier portant l extension bad, pour être éventuellement retraités. Enfin un fichier discard (dsc) peut 1
M2 GMIN308 2013-2014 2 être généré et contenir ls données non chargées car ne respectant pas la clause WHEN du fichier de contrôle. Parfois, le fichier de contrôle contient non seulement les instructions de paramétrage mais aussi les données. Il vous faut définir les fichiers de contrôle appropriés pour alimenter les tables Fichiers données (.dat) Fichiers Entrée Fichier Controle (.ctl) Chargement SQL*Loader Fichier Erreur (.log) Fichier Rejets (.bad) Fichier Discard (.dsc) Fichiers Sortie BD La commande minimale est de la forme Figure 1 Stockage via des fichiers sqlldr nom_user/mot_de_passe@base control=nom_fic.ctl Vous avez des comptes Oracle qui sont définis soit en externe (prise en charge de l identification par le système d exploitation), soit en interne (identification au niveau du serveur de données). Dans le contexte d un compte externe, vous pouvez vous éviter de passer votre nom utilisateur et votre mot de passe en clair. D autres options sont toutefois permises comme par exemple : data nom du fichier de données d entrée log nom du fichier de trace bad nom du fichier des enregistrements rejetés Il vous faut créer les fichiers de contrôle pertinents par rapport à la fois aux fichiers de données et aux tables de la base de données.
M2 GMIN308 2013-2014 3 Paramètres et données dans le fichier de contrôle Créer au préalable avec sqlplus la table joueur Create table joueur (nom varchar(15), sport varchar(15), constraint joueur_pk primary key (nom,sport)); puis dans une session terminal, exécuter sql*loader par sqlldr /@master control=joueur.ctl (compte externe) sqlldr identuser/passwduser@master control=joueur.ctl (compte interne) joueur.ctl est donné ci-dessous Load data infile * replace Into table joueur Fields terminated by "," optionally enclosed by " Trailing nullcols ( nom, sport ) begindata Pierce, Federer, Mauresmo, Nalbandian, Michalak, Rugby Betsen, Rugby Maier, Ski Rajout de tuples avec une syntaxe appropriée Pour rajouter des tuples dans joueur à l aide d un fichier de données (AjoutJoueur.dat), il suffit de définir un nouveau fichier de contrôle joueur2.ctl donné ci-dessous (les données sont chargées depuis AjoutJoueur.dat et ajoutées aux données existantes (append). Dans cet exemple, il faut gérer les blancs. load data infile AjoutJoueur.dat append into table Joueur Fields terminated by "," optionally enclosed by " Trailing nullcols (nom position(1:15) nullif nom=blanks, sport position(16:30) nullif sport=blanks) AjoutJoueur.dat
M2 GMIN308 2013-2014 4 Montillet Clément Dechy Gaudio Ski Un autre exemple nommé joueur3.ctl moins contraignant, truncate vide au préalable la table. Load data infile AjoutSuite.dat truncate Into table joueur Fields terminated by ; ( nom, sport ) AjoutSuite.dat Llodra; Santoro; Grosjean; 3. Evolution de schéma Vous utiliserez la syntaxe ALTER TABLE pour répondre aux questions suivantes Rien n est mentionné à propos des auteurs des livres. Sachant qu un ouvrage peut être une oeuvre collective et qu un auteur écrit de manière générale plusieurs ouvrages au cours de sa vie, ajouter la ou les tables nécessaires pour prendre en compte toutes ces nouvelles considérations. Aidez vous en représentant l ensemble de l application sous le modèle E-A. Ajout de l attribut CodePret dans la relation Livre, les valeurs de CodePret seront à prendre parmi Exclus, Emprunt Longue Durée et Emprunt Courte Durée. Les mots clés sont rentrés dans la table MotClef indépendamment les uns des autres. Dans la réalité, ces mots clés peuvent être représentés sous forme d arborescence (thesaurus) avec une racine (index) et des mots clés dit pères (par exemple littérature, science,...) qui peuvent être spécialisés par des mots clés plus précis nommés fils (par exemple pour sciences : informatique, biologie, géographie, physique, chimie... et ensuite pour informatique programmation, bases de données, multimedia...). Modifier la structure de la base de manière prendre en compte cette spécialisation/généralisation des mots-clés. Nous voudrions maintenant lier des auteurs à des maisons d édition via des contrats de travail. Une maison d édition a un nom, une adresse, un chiffres d affaire et un directeur. Un auteur est lié à une maison d édition par un contrat caractérisé par une date de début, une date de fin, un montant global et une clause d exclusivité ou de non exclusivité. Comme pour Auteur, aidez vous du modèle E-A ou UML et ajoutez les tables nécessaires pour prendre en compte ces nouvelles considérations. 4. Requêtes SQL Les tables Auteur, AEcrit, Indexe et MotClef n ont pas été créées, créez les et alimentez les au travers de fichiers de données (à créer au préalable) et de l utilitaire SQL*Loader. Pour finir, une série de requêtes SQL vous sont proposées en guise de révision.
M2 GMIN308 2013-2014 5 4.1 Selections et projections 1. Donner les noms et prénoms des lecteurs de plus de 25 ans. 2. Donner la liste des lecteurs dont le nom commence par D, triés par ordre décroissant de numéro de lecteur. 3. Donner par ordre alphabétique la liste des ouvrages (numéro ISBN, titre et catégorie) de toutes les catégories sauf Médecine, Sciences et Loisirs. 4. Donner les informations sur les emprunts en cours (date de retour non renseignée) 4.2 Expression des jointures 1. Donnez pour le lecteur Pierre Dubois, la liste des livres empruntés (numéro, et date d emprunt) par ordre croissant de date d emprunt. 2. Donner la liste des livres (numéro, code prêt et titre) des ouvrages caractérisés par le mot clef bases de donnees 3. Quels sont les livres du même ouvrage que le livre numéro 4 et dont l état est bon? 4. Quels sont les lecteurs ayant emprunté un livre de l ouvrage Programmer object avec Oracle? 5. Existe t il une catégorie pour laquelle aucun livre n a été emprunté? 4.3 Formulation de calculs 1. Combien y a t il d auteurs saisis dans la base de données? 2. Donner le prix d achat moyen des exemplaires de bases de donnees 3. Quel est le tarif d abonnement le plus faible? 4. Quelle est la catégorie de livre pour laquelle l exemplaire le plus cher a été acheté 4.4 Partitionnements 1. Donner pour la catégorie bases de donnees le nombre de livres par ouvrage? 2. Donner le nombre d emprunts effectués par chacun des lecteurs (numéro, nom) pour chacune des catégories de livres proposés? 3. Quel est l abonné ayant effectué le plus d emprunts? 4.5 Requêtes complexes 1. Quels sont les ouvrages dont tous les livres valent plus de 20 Euros? 2. Quels sont les abonnés qui ont emprunté toutes les catégories de livres?