Index Suivant

1   Modèle relationnel (7,5 points)

Le camping ``Le Chassezac'' gère l'occupation de ses places de camping avec un SGBD contenant les trois tables relationnelles Places, Categories et Clients :
Places(noPl, noCat, surface, distance)
Categories(noCat, prixAd, prixEnf)
Clients(noPl, nomCl)
Toutes les places de camping sont stockées dans la table Places. Chaque place est identifiée par un numéro (noPl) et appartient à une catégorie de prix (noCat) qui dépend de la surface de la place (en m2) et de la distance de la plage (en m).

Les différentes catégories de prix sont stockées dans la table Categories. Chaque catégorie est identifiée par un numéro (noCat) et définit le prix journalier par adulte (prixAd) et par enfant (prixEnf) en euros.

La table Clients stocke pour chaque client son nom (nomCl) et la (les) place(s) qu'il occupe. Les places non-occupées n'apparaissent pas dans cette table.

Questions :
  1. (1,5 points) Conception : Dessinez un schéma Entité-Association du schéma relationnel précédent. Indiquez également les cardinalités des associations.



    Solution :



    Figure 1 : Schéma entités-associations


  2. (6 points) Requêtes :
    1. (1 point) Les numéros des places avec une surface supérieure à 20m2 et une distance inférieure à 100 mètres de la plage (algèbre relationnelle).

      Solution :
      pnoPl(s
       
      surface > 20 Ù distance < 100
      Places)

    2. (2 points) Les numéros et la surface des places dont le prix est de 20 euros pour un adulte et qui se trouvent à moins de 100 mètres de la plage (SQL, calcul domaine).

      Solution :

      
        select noPl, surface 
        from Places, Categories 
        where distance < 100 and
              prixAd = 20 and 
              Places.noCat = Categories.noCat
      
      {P,S| $ C,D,E Places(P,C,S,D) Ù Categories(C,20,E) Ù D < 100 }

    3. (1 point) Le numéro de la place qui est la plus près des la plage (SQL).

      Solution :
      
        select noPl 
        from Places A 
        where not exists (select * 
                          from Places B
                          where B.distance < A.distance)
      
      ou
      
        select noPl 
        from Places 
        where distance =  (select min(distance)
                           from Places)
      
    4. (1 point) La surface totale des places non-occupées du camping (SQL).

      Solution :
      
      select sum(surface)
      from Place
      where noPl not in select noPl from Clients
      
    5. (1 point) Le prix moyen par adulte pour une place de 20m2 (SQL).

      Solution :
      
      select avg(prixAd)
      from Place, Categorie
      where Place.noCat = Categorie.noCat
      and surface = 20
      

Index Suivant