Vers la gestion progressive du Zoo de la Palmeraie

Vers la gestion progressive du Zoo de la Palmeraie

Université de La Rochelle Département Informatique L. Checroun & M. Eboueya Vers la gestion progressive du Zoo de la Palmeraie On donne ci-dessous le cahier des charges de la Base de Données que vient de réaliser un stagiaire. Ce cahier des charges n’est pas vraiment au niveau actuel des possibilités des SGBD Relationnel – objets et vous souhaiteriez par exemple utiliser l’héritage car c’est plus naturel, des tables imbriquées et autres fonctions membres permettant d’accélérer certains traitements. Une interface utilisant le JDBC permettra aux utilisateurs, où qu’ils soient, d’accéder aux informations disponibles du Zoo.

On vous demande de faire un prototype (MCD (UML), DDL, LMD) quasi opérationnel qui satisfasse au cahier des charges ainsi étendu. TD9 – Mastere IMA UV –Bases de Données Avancées Année Universitaire 2006/2007

Université de La Rochelle Département Informatique - - old cahier des Charges - - -- 1. Création on donne les schémas suivants: table famille (race alphabétique, origine alphabétique, ami booléen); table animal (n_a alphanumérique {numéro de l'animal} , nom alphabétique, âge nombre_entier, date_naissance date, race alphabétique, origine alphabétique, n_asc {numéro de l'ascendant, le père} alphanumérique , n_menu {numéro du menu} alphanumérique ); table menu (n_m {le numéro du menu} alphanumérique, qte_viande décimal, qte_legume décimal ); 1.1. Utiliser un outil de Génie logiciel (DB-Main, OracleDesigner ) pour en donner le schéma conceptuel équivalent; puis implanter de la base de données 2. puis la Création des relations (tables) de la base En tenant compte des contraintes d’intégrités suivantes : Dans la table animal, • les attributs race et origine doivent prendre les valeurs qui existent dans la table famille.

• n_asc doit être le numéro d’un animal de la relation animal • et n_menu doit être le numéro d’un menu de la relation menu. L’attribut origine de la relation famille doit prendre ses valeurs dans la liste suivante : {Afrique, Amérique, Asie, Australie, Europe }. L’âge d’un animal soit supérieur à 0 et inférieur à 29. La date de naissance d'un animal doit être postérieure a celle de son père.

Université de La Rochelle Département Informatique 2. Saisie des données Retrouver, dans la documentatione en expliquer l’usage, les 3 modes de saisies différents 2.1 Utilisation de insert 2.2. Utilisation de SQLForms sous Oracle 2.3 Utilisation de copy sous Oracle 3. Création d'une vue jointure Réaliser la Création d’une vue sur les 2 relations famille et animal contenant les colonnes: Nom de l'animal, race, ami et origine . 4. Création d'une vue avec données agrégées Crée une vue qui donnera à tout instant (sans mise à jour de la vue) pour chaque couple race origine de la table famille : le nombre d’animaux, la quantité totale de viande et de légume consommée à chaque repas par les animaux de cette famille. 5. Modification du schéma de la base 5.1. Montrer comment en SQL il est possible de modifier la taille une colonne. Par exemple agrandissement des colonnes qte_viande et qte_legume de la table menu. La taille initiale est 3,1 c'est à dire 3 chiffres dont un après la virgule. On souhaite avoir maintenant 5,2 . 5.2. Ajouter une colonne 5.3. Changer le type d'une colonne Exemple transformation du type de la colonne âge. 5.4. Supprimer une colonne 6. Contrôles d'intégrités Identifier les contraintes. d'intégrité référentielle , les contraintes de définition en extension et les contraintes définition par intervalle. Que répond le SGBD si on execute la requête suivante insert into famille values ('ours','Arctique','non'); Que va répondre le SGBD lors de l'insertion d’un âge trop élevé ou d’un âge négatif?

Université de La Rochelle Département Informatique 7. Manipulation des données Consultation 7.1.Projection Origine pour toutes les familles 7.1.a. Avec suppression des doubles 7.1.b. Sans suppression des doubles. 7.2. Affichage trié du résultat Race et origine de toutes les familles. par ordre alphabétique croissant des origines, et pour chaque origine , par ordre croissant des races. 7.3. Sélection 7.3.a Sélection Type Nom des lions de plus de 4 ans. 7.3.b. Sélection avec une disjonction de condition (usage de or) Nom des animaux qui sont des lions ou qui ont plus de 4 ans. 7.3.c. Sélection avec une conjonction de condition (usage de and) Nom des animaux qui ont un age compris entre 4 et 10 ans. 7.3.d. Sélection avec comparaison des valeurs de 2 attributs. Numéro des menus pour lesquels la quantité de viande est supérieure à la quantité de légume.

Université de La Rochelle Département Informatique 7.4. Jointures 7.4.a. Jointure de 2 relations. Nom des animaux amis de l’homme. 7.4.b. Jointure de 3 relations. Donner les différentes rations de viandes consommées par les amis de l’homme. 7.4.c. Jointure sur une même relation Donner les numéros des menus pour lesquels la quantité de viande consommée est la même que celle du menu 4M. 7.4.d. Jointure sur une même relation Races pour lesquelles on a plusieurs animaux. 7.5. Affichage d’attributs provenant de plusieurs relations. Pour chaque animal, on veut obtenir son nom et les quantités de viande et de légumes qu’il consomme chaque jour.

7.6. Agregats et dénombrements 7.6.a. Dénombrement simple Nombre de gazelle... 7.6.b. Dénombrement avec suppression des répétitions Nombre d’origines différentes 7.6.c Somme Total des quantités de viandes pour tous les menus 7.6.d Fonction appliquée par groupe n-uplet. Pour toutes les familles dont on a des spécimens, donner la race et l’effectif. 7.6.e. Moyenne et comparaison par rapport à la moyenne Numéro des menus comportant une quantité de viande supérieure à la moyenne des quantités de viande de tous les menus.

7.6.f. Condition de sélection portant sur le résultat d’une fonction.

Université de La Rochelle Département Informatique Race et nombre d'animaux pour les races comportant plus d'un animal. 7.6.g Quantificateurs universels. Existe-t-il un menu consommé par des animaux de toutes les races ?. Mises à Jour. 7.7. Modification d’un n-uplet 7.7.a. Modification d'un n-uplet connaissant la valeur de sa clef. L'âge de l’animal 3A est remplacé par la valeur 31. 7.7.b Nouvelle valeur d'un champ est calculée par rapport à l’ancienne On ajoute 1 à l’âge de l’animal 3A.

7.7.c. Modification de plusieurs n-uplets. On ajoute 1 à l’âge de tous les lions. 7.7.d. Modification portant sur plusieurs relations dans la même requête. Mettre à zéro l'âge de tous les animaux venant de Chine, et remplacer Chine par Asie dans les origines. 7.8. Ajout 7.8.a . d’un n-uplet Ajouter un animal dont les valeurs sont : n_a = ‘17A’, nom = ‘Léo’, age=2, race = ’Tigre’, origine = ‘Asie’.

7.8.b. Ajout de plusieurs n-uplets. Ajouter dans une relation temporaire TEMP (numéro),les numéros des animaux qui sont des lions. 7.9. Suppression 7.9.a Suppression d’un n-uplet connaissant la valeur de sa clef. Supprimer l’animal n° ‘7A’. 7.9.b. Suppression de plusieurs n-uplets dans plusieurs relations. Supprimer tous les lions et tous les menus qui ne sont consommés que par des lions.

Université de La Rochelle Département Informatique 8. Divers. 8.1 Que réalise la requete SQL suivante : create view anima2 as select * from animal where ((race in (select race from famille where animal.origine=famille.origine)) {car conditions cumulatives} and ((n_asc is null) or (n_asc " car PB gestion du null} or (n_asc in (select n_a from animal))) {dans cette version } and (n_menu in (select n_m from menu)) and ((date_naissance> = "01/01/1960") and (date_naissance (select animalbis.date_naissance from animal animalbis {pour auto-jointure} where animalbis.n_a=animal.n_asc)))) with check option; Contenu de Famille(Ami,Origine,Race), où 0 signifie faux et 1 signifie vrai. 0|Afrique|lion| 0|Chine|panda| 1|Amerique|lama| 1|Europe|singe| 1|Afrique|elephant| 1|Australie|kangourou| 0|Asie|tigre| 0|Afrique|panthere| 0|Europe|ours| 1|Europe|coq| 0|Europe|renard| 0|Afrique|serpent| 0|Asie|serpent| 0|Asie|araignee| 1|Europe|araignee|

Université de La Rochelle Département Informatique 8.2 Exécuter le fichier suivant en vous servant du générateur d'états et commentez le  ceci est la version Informix ; la version Oracle vous sera donnée en Janvier.  database zoo end * * debut de genealo * } define variable fils_precedent char(4) variable pere_precedent char(4) variable gp_precedent char(4) variable fils_courant char(4) variable pere_courant char(4) variable gp_courant char(4) variable race_precedente char(15) variable race_courante char(15) variable compteur_race smallint end * } output top margin 1 bottom margin 5 page length 66 left margin 1 right margin 1 end * } select animal.race racetri, animal.nom animalnom, animalter.date_naissance naissancetri, animalbis.nom nomtri, animalter.nom ternom, animal.n_a animaln_a, animalbis.n_a animalbisn_a, animalter.n_a animaltern_a from animal, animal animalbis, animal animalter where ((animal.n_asc=animalbis.n_a) and (animalbis.n_asc=animalter.n_a)) or ((animal.n_asc=animalbis.n_a) and (animalbis.nom=animalter.nom))

Université de La Rochelle Département Informatique order by racetri, nomtri, naissancetri end * } format first page header let fils_precedent=" " let pere_precedent=" " let gp_precedent=" " let fils_courant=" " let pere_courant=" " let gp_courant=" " let race_precedente=" " let race_courante=" " let compteur_race=0 print date(today) using "ddd dd/mm/yy", column 70, pageno using "page ###" print print print column 25,"GENEALOGIE DES ANIMAUX PAR RACE" print print on every row need 4 lines let fils_courant=animaln_a let pere_courant=animalbisn_a let gp_courant=animaltern_a let race_courante=racetri if ((race_couranterace_precedente) or (race_precedente ) then let compteur_race=compteur_race+1 if ((race_couranterace_precedente) or (race_precedente ) then print if ((race_couranterace_precedente) or (race_precedente ) then

Université de La Rochelle Département Informatique print compteur_race using ) CATEGORIE ",race_courante,":" if ((race_couranterace_precedente) or (race_precedente ) then print - " if ((fils_courantfils_precedent) or (pere_courantpere_precedent)) then print animalnom,"a pour pere ",nomtri; if (((fils_courantfils_precedent) or (pere_courantpere_precedent)) and (pere_courantgp_courant)) then print "pour grand-pere ",ternom if (((fils_courantfils_precedent) or (pere_courantpere_precedent)) and (pere_courant=gp_courant)) then print let fils_precedent=fils_courant let pere_precedent=pere_courant let gp_precedent=gp_courant let race_precedente=race_courante end * * fin de genealo * }

Université de La Rochelle Département Informatique 8.3 Exécuter le fichier suivant en vous servant du générateur d'états et commentez le  ceci est la version Informix ; la version Oracle vous sera donnée en Janvier. * * debut de resultats * } database zoo end output report to printer end select race , nom ,qte_viande , qte_legume from animal, menu where animal.n_menu=menu.n_menu end format first page header print 6 spaces, "previsions pour les repas du 25/05/86" skip 1 lines print 6 spaces - " skip 1 lines print "race de : nom de : viande : legumes" skip 1 lines print "l'animal : l'animal : (en kg) : (en kg)" skip 1 lines print - " skip 1 lines on every row print race, 4 spaces,nom ,qte_viande using " , 2 spaces, qte_legume using # " end * * fin de de résultats * }

Université de La Rochelle Département Informatique

Université de La Rochelle Département Informatique 8.4 Exécuter le fichier suivant en vous servant du générateur de formulaires Perform et commentez le  ceci est la version Informix ; la version Oracle vous sera donnée en Janvier. * * debut de cibis * } database zoo screen { Table des familles - - Race [f000 ] Origine [f001 ] Ami [a] } screen { Table des menus - - Numero du menu [a3] Qantite de viande [f007 ] Qantite de legume [f008 ] } screen { Table des animaux - - Numero de l'animal [a0 ] Nom [f002 ] Age [f003 ] date de naissance [f004 ] Race [f005 ] Origine [f006 ] Numero ascendant [a1 ] Numero du menu [a2] } end

Université de La Rochelle Département Informatique tables famille menu animal attributes f000 = famille.race,autonext,required,upshift; f001 = famille.origine,autonext,required,upshift, comments="AFRIQUE,AMERIQUE,ASIE,AUSTRALIE ou EUROPE", include=(AFRIQUE,AMERIQUE,ASIE,AUSTRALIE,EUROPE); a = famille.ami,autonext,required,upshift, comments="O(ui) ou N(on)", include=(O,N); a3 = menu.n_menu,autonext,required,upshift; f007 = menu.qte_viande,autonext,required; f008 = menu.qte_legume,autonext,required; a0 = animal.n_a,autonext,required,upshift; f002 = animal.nom,autonext,required,upshift; f003 = animal.age,autonext,required; f004 = animal.date_naiss,autonext,required; f005 = animal.race,,autonext,required,upshift, lookup joining * famille.race; f006 = animal.origine,autonext,required,upshift, lookup joining * famille.origine; a1 = animal.n_asc,autonext,upshift; a2 = animal.n_menu,autonext,upshift, lookup joining * menu.n_menu; end * * fin de cibis * } 9. Déclencheurs Quel est le rôle d’un déclencheur ? Implantez en quelques uns pour la BD Zoo.

Université de La Rochelle Département Informatique AFFICHAGE DES DONNEES DES TROIS TABLES : SELECT* FROM animal; N_A NOM AGE DATE_NAI RACE ORIGINE N_M N_ASC - - 1A Hector 10 20/12/92 lion Afrique 5M 3A 2A Jacko 20 12/05/82 singe Europe 7M 3A Noble 30 05/09/72 lion Afrique 4M 4A Marsupiani 5 02/02/97 kangourou Australie 7M 5A Bagheera 15 21/08/87 panthère Afrique 4M 6A Baloo 5 03/03/97 ours Europe 1M 13A 7A Kaa 2 05/05/00 serpent Afrique 6M 8A Isengrin 4 06/06/98 renard Europe 6M 9A Chanteclerc 2 05/12/00 coq Europe 8M 10A Mignon 3 08/11/99 panda Chine 7M 11A Bongros 8 04/01/94 éléphant Afrique 2M 12A Mignon 1 01/02/01 ours Europe 1M 6A 13A Mignon 10 01/05/91 ours Europe 1M 14A Terrible 2 12/10/00 tigre Asie 4M 15A Pincette ,2 30/11/01 araignée Asie 9M 16A dentelle ,2 30/11/01 araignée Europe 9M SELECT * FROM famille; RACE ORIGINE AMI - - lion Afrique faux panda Chine faux lama Amérique vrai singe Europe vrai éléphant Afrique vrai kangourou Australie vrai tigre Asie faux panthère Afrique faux ours Europe faux coq Europe vrai renard Europe faux serpent Afrique faux serpent Asie faux araignée Asie faux araignée Europe vrai SELECT * FROM menu; N_M QTE_VIANDE QTE_LEGUME - - 1M 10 20 2M 0 100 3M 0 50 4M 20 0 5M 100 0 6M 20 0 7M 0 10 8M 0 5 9M ,1 0

Université de La Rochelle Département Informatique

Vous pouvez aussi lire