La gestion d'une compagnie touristique
[1h]
Cet exercice est extrait de Conception des systèmes d'information et programmation événementielle : de l'étape conceptuelle à l'étape d'implantation.[1]
Une agence de voyage organise des circuits touristiques dans divers pays. Ses règles de gestion sont celles énoncées ci après.
RG1 - On garde trace de tous les clients connus même s'ils n'ont pas participé a des circuits touristiques depuis longtemps.
RG2 - On répertorie un seul hôtel par ville.
RG3 - Toutes les villes sont désignées par des noms distincts.
RG4 - Il y a un seul accompagnateur par voyage.
RG5 - Toute nuit pendant le circuit est passée dans un hôtel.
RG6 - Toute circuit concerne au moins deux villes.
RG7 - Toutes les villes répertoriés ne sont pas obligatoirement utilisées dans un circuit à chaque période.
RG8 - A une même date, aucun circuit ne part plus d'une fois d'une même ville ni n'arrive plus d'une fois dans une même ville.
RG9 - Les demandes de réservations donnent lieu à des réponses positives dans la mesure de places disponibles.
RG10 - Un client ne peut obtenir une réservation qu'après une réponse positive et le versement d'un acompte.
RG11 - Une réservation ne sera définitive qu'après le règlement du solde dû par un deuxième versement.
RG12 - Après une date limite D1 (p.ex. un mois avant le départ) les réservations qui n'ont pas donné lieu au deuxième versement sont annulées, l'agence pouvant ainsi redisposer des places correspondantes sans que les clients concernés puissent exiger le moindre remboursement.
RG13 - Après une date limite D2 (p.ex. 15 jours avant le départ) :
S'il n'y a pas assez de réservations définitives, le circuit est annulé et les clients dont la réservation est définitive, sont remboursés intégralement
S'il n'y a aucune réservation définitive, le circuit est a fortiori annulé,
S'il y a assez de réservations, le circuit est maintenu.
Question
Établissez une version simplifiée du dictionnaire de données, en présentant dans un tableau : Les entités, les clés, les propriétés avec leur signification.
Question
Lister les associations reliant les entités.
Solution
Type association : Accompagne
Relie les circuits et les accompagnateurs. Un circuit a un et un seul accompagnateur ; un accompagnateur peut accompagner au cours d'une saison plusieurs circuits.
Type association : Arrivée
Relie les déplacements et les villes. Un déplacement a toujours une et une seule ville d'arrivée ; une ville est au moins ville d'arrivée d'un déplacement d'un circuit et peut être ville d'arrivée de plusieurs déplacements de circuits différents.
Type association : Concerne
Relie les paiements et les réservations. Un paiement concerne toujours une et une seule réservation ; une réservation peut avoir fait l'objet au minimum de zéro paiement et au maximum de deux paiements.
Type association : Départ
Relie les déplacements et les villes. Un déplacement a toujours une et une seule ville de départ ; une ville est au moins ville de départ d'un déplacement d'un circuit et peut être ville de départ de plusieurs déplacements de circuits différents.
Type association : Origine
Relie les circuits et les villes. Elle désigne pour un circuit sa ville de départ et sa ville de retour (qui est la même puisqu'il s'agit d'un circuit). Un circuit est donc toujours lié à une et une seule ville par cette association, tandis qu'une ville ne peut être origine d'aucun circuit au minimum, mais peut être, au maximum, départ de plusieurs circuits.
Type association : Pour
Relie les réservations et les circuits. Une réservation est effectuée pour un et un seul circuit ; pour un circuit, il peut y avoir plusieurs réservations.
Type association: Programme
Relie les circuits et les déplacements. Un déplacement concerne un et un seul circuit ; un circuit comporte au moins un déplacement, en général, il en comporte plusieurs.
Type association: Réserve
Relie les réservations et les clients. Une réservation est effectuée par un et un seul client. Un client présent dans la base peut n'avoir aucune réservation en cours, comme il peut en avoir plusieurs.
Type association : Situation
Relie les villes et les pays. Une ville est située dans un pays et un pays présent dans la base comporte au moins une ville de la base et peut-être plusieurs.
Question
Donnez le schéma UML ou E-A correspondant et décrivez les associations figurant dans le schéma.
Question
Définissez le schéma relationnel correspondant.
Solution
La simplicité de cet exemple permet d'utiliser la méthode empirique, permettant le passage d'un schéma E/A à un schéma relationnel.
Tous les types propriétés sont simples et élémentaires.
Tous les types entités ont un type propriété identifiant.
Tous les types associations sont binaires.
Tous les types associations ont au moins une cardinalité maximale égale à un.
Après application des règles, on obtient :
Pays(#nom-pays)
Ville(#nom-ville, hotel, nom-pays=>Pays(nom-pays)) WITH nom-pays NOT NULL
Accompagnateur(#nom-accomp)
Circuit(#nocircuit, nbplaces, prix, nom-ville=>Ville(nom-ville), date-dep, daterep, etatcircuit, nom-accomp=>Accompagnateur(nom-accomp)) WITH nom-accomp, nom-ville NOT NULL
Deplacement(nocircuit=>Circuit(nocircuit), #num-deplacement, date, heure-A, heure-D, villedepart=>Ville(nom-ville), villearrivee=>Ville(nom-ville)) WITH nocircuit, villedepart, villearrivee NOT NULL
Client(#noclient, nomclient)
Reservation(#nores, etatres, datereserv, montantot, nocircuit=>Circuit(nocircuit), noclient=>Client(noclient)) WITH noclient, nocircuit NOT NULL
Paiement(#nopaiement, typevers, montant, nores=>Reservation(nores)) WITH nores NOT NULL
- Constraints :
PROJ(Pays,nom-pays) IN PROJ(Ville,nom-pays)
AND PROJ(Accompagnateur,nom-accomp) IN PROJ(Circuit,nom-accomp)
AND PROJ(Circuit, nocircuit) IN PROJ(Deplacement, nocircuit)
AND PROJ(Ville, nom-ville) IN PROJ(Deplacement, villedepart)
AND PROJ(Ville, nom-ville) IN PROJ(Deplacement, villearrivee)
AND PROJ(Circuit, nocircuit) IN PROJ(Reservation, nocircuit)
Cette transformation comporte une seule petite difficulté qui provient du fait de l'existence de deux types associations entre déplacement et ville qui conduit à introduire dans le schéma de la relation Deplacement deux attributs synonymes de l'identifiant nom-ville que nous avons choisi d'appeler villedepart et villearrivee. D'autre part l'analyse fine des clés nous a conduit à choisir comme clé pour la relation Deplacement la concaténation de nocircuit et num-deplacement qui devient ainsi un numéro d'ordre de déplacement dans un circuit.
Question
Présentez les contraintes d'intégrité que l'on pourrait associer au schéma relationnel.
Solution
Nous présentons ici un extrait des contraintes d'intégrité que l'on pourrait associer à cette collection de relation (sur l'exemple des deux relations Circuit et Deplacement).
Contraintes associées à la relation Circuit
Clé primaire : nocircuit
Clé étrangère : non-accomp en référence à la relation Accompagnateur.
Domaine de etatcircuit : {prévu, annulé, en cours, passé}.
Domaine de prix : en entier supérieur à 1000.
Contrainte spécifique sur n-uplet : date-dep < dateret.
Contrainte existentielle : les attributs : prix, non-accomp peuvent être momentanément non-valorisés
Contraintes associées à la relation Deplacement
Clé primaire : nocircuit, num-deplacement
Clés étrangères : nocircuit en référence à la relation Circuit, villedepart et villearrivee en référence à la relation Ville.
Domaine de heure-A : un chiffre compris entre 12 et 21 suivi de la lettre H.
Domaine de heure-D: Un chiffre compris entre 6 et 11 suivi de la lettre H.
Contrainte spécifique sur le n-uplets de la relation : villedepart est toujours différente de villearrivee.
Contrainte spécifique sur toute la relation : Pour un même circuit, les numéros de déplacement désignent l'ordre des étapes du circuit et il doit y avoir cohérence entre les numéros de déplacement, les dates des déplacements et les villes de départ et d'arrivée.
Cette contrainte peut se spécifier comme suit : "Créer contrainte statique CI1 sur relation Deplacement : Pour tous d1 et d2 appartenant à Deplacement et tels que : d1.nocircuit = d2. nocircuit et d2 nodeplacement = d1. numdeplacement + 1 alors on doit avoir : d1. villearrivee = d2. villedepart et d2. date > d1.date".