# Gnral Dveloppement > ALM > Modlisation > Schma >  Problme lors de la gnration du script SQL de la base de donnes  partir du MPD avec PowerDesigner

## nadia85

Bonjour tout le monde,
j'ai construit le modle MCD suivant  partir duquel j'ai construit un MPD 


Le MPD est gnr sans erreur. Cependant quand je gnre le script sql pour la construction de la base, ette erreur se produit:




Pourriez vous m'aider  corriger le problme?

Merci d'avance

----------


## escartefigue

C'est une erreur non bloquante.
Power AMC gnre un index pour chaque FK, mais, pour la table concerne, comme la PK est compose de 2 FK (table associative oblige), l'index sur la FK "numcl" est redondant avec l'index PK compos de numcl+numch.
il suffit de supprimer cet index redondant

Par ailleurs, avec ce modle, si une mme personne fait plusieurs rservations avec le mme identifiant de client, elle devra systmatiquement changer de chambre  chaque fois.
Contournement possible : crer autant de fois la personne avec un identifiant diffrent qu'il y a de rservations... Pas terrible.
Meilleure solution : ajouter une entit-type "calendrier" dans le MCD avec un seul attribut "date" qui sera l'identifiant, et faire participer cette entit-type  l'association (reservation)
Ce faisant, la date participera  la PK de la table issue de cette association.
Mais, comme il ne faut pas que plusieurs personnes puissent rserver la mme chambre  la mme date (ce qui serait du coup possible aprs cette modif), il faut ensuite vacuer l'identifiant de la personne "numcl" de la PK de la table associative "reservation". 
Il faut donc que "numcl" devienne un simple attribut de cette table.
Modification  faire dans le MLD (dans mes souvenirs, contrairement  Looping, power AMC ne permet pas de le faire dans le MCD)

----------


## nadia85

Bonsoir  tous,

J'ai rgl le problme de gnration de la base. Je vous remercie beaucoup pour les remarques. Comme vous l'avez dit, si une mme personne fait plusieurs rservations avec le mme identifiant de client, elle devra systmatiquement changer de chambre  chaque fois.
Pour cel j'ai pens  refaire le modle:

Voici le nouveau MCD: 



Dans le modle physique de donnes, on voie bien que les cls primaires des tables client, chambre et facture ont migr vers la table rservation. Du coup, un mme client peut effectuer plusieurs rservations dans la mme chambre mais pendant des priodes diffrentes ( condition qu'elle ne soit pas occupe par d'autres clients).




Merci

----------


## escartefigue

Bonsoir,

Cette nouvelle version corrige le problme des rservations multiples d'un mme client, mais elle en prsente un nouveau : une mme chambre peut tre rserve plusieurs fois  la mme date !

Pour viter cette cueil, je propose le modle ci-dessous



J'ai identifi la rservation relativement au client : sans client pas de rservation, c'est donc une entit-type faible. D'o la prsence du (R) prs des cardinalits (c'est la symbolique utilise par Looping, Power-AMC de son ct met les cardinalits entre parenthses dans ce cas)
J'ai fait de mme pour les chambres identifies relativement  l'hotel.
J'ai cr une entit-type fictive (d'o son nom entre parenthses) [CA_calendrier] qui est l uniquement pour participer  l'association (CO_concerner) et ainsi ajouter la date "CA_date" comme composante de la PK de la table issue de cette association.
Entit type "fictive" car elle ne deviendra pas une table (grce  une case  cocher de Looping) ce serait inutile.
J'ai aussi ajout une contrainte, symbolise par une flche en direction de [RS_rservation] qui marque l'unicit d'une rservation pour un coupe chambre+date
C'est cette association ternaire affuble de cette contrainte qui permet d'viter les rservations multiples d'une chambre  la mme date  ::): 

J'ai prfr une cardinalit 0,1 plutt que 1,1 de [RS_reservation] vers (referencer) car en gnral, lhtel ne facture pas ds la rservation, celle-ci pouvant tre annule.

----------


## nadia85

Bonjour,

Je vous remercie normment pour vos remarques. Elles m'ont clarifi le problme.
Juste une petite question: je n'ai pas compris la signification du symbole (R). Est-il ncessaire de le mentionner avec une relation type faible lorsqu'on utilise PowerAMC?

Merci d'avance

----------


## escartefigue

Le symbole (R) de looping sert  mettre en vidence l'identification relative.

L'identification relative est utilise pour les entit-type dites "faibles".

La chambre d'htel en est un cas typique : la chambre n27 n'a de sens que si on connait galement le n d'htel. 
Le n de chambre 27 seul ne suffit pas, il n'est pas unique, il peut y avoir plusieurs chambres n 27 rparties dans diffrents htels.
L'identifiant complet de la chambre est donc n d'htel + n de chambre.

Avec Power AMC, ce n'est pas un (R) qui est affich sur le MCD mais les cardinalits qui sont entre parenthses, par exemple *(*1,1*)*

Il y a une case  cocher "identifiant" dans PowerAMC pour dclarer une identification relative.

----------


## Paprick

En complment de l'exellente explication de escartefigue (grand spcialiste _Looping_  ::hola:: ), sachez que vous pouvez choisir, dans les proprits, le format de l'identification relative : *1,1(R)*, *(1,1)* ou *1,1

*Bonne continuation !

----------


## escartefigue

J'ai encore bien des choses  dcouvrir, par exemple, je n'avais pas repr cette possibilit de choix du type d'affichage de l'identification relative
Merci Paprick  ::ccool::   ::):

----------


## nadia85

Bonjour,

Je vous remercie normment pour vos conseils et vos remarques qui m'ont clarifi beaucoup de choses.


Bonne journe

----------

