Vers la gestion progressive du Zoo de la Palmeraie

La page est créée Fabrice Lefevre
 
CONTINUER À LIRE
Université de La Rochelle                                                 Département Informatique

                                                              TD9 – Mastere IMA
                                                              UV –Bases de Données Avancées

                                                              Année Universitaire 2006/2007

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