Modélisation et boucle fermée
J'ai le même problème avec les tables Personne , établissement ( entreprise) et numéro de téléphone ( ou autre type de contact). Alors j'ai essayé de trouver une solution plus optimal pour éviter ce problème.
J'ai créé une table (Contact_Personne) liée au table Personne et qui contient comme clé étrangère l'identifiant du personne et aussi les champs ( email, adresse, fax numéro de tel...) . Même chose faite pour la table établissement .
Merci de me donner vos remarques ( Si c'est juste ou non )
Tout dépend du contexte et du métier...
Bonjour GR120292,
A priori vous n'avez pas lu ma réponse qui précède ou vous ne l'avez pas comprise, aussi je la complète ici.
Tout d'abord, plutôt que de raisonner en terme de tables, il faut raisonner en termes de règles de gestion !
Faute de connaitre les vôtres, voici un exemple de règles assez fréquent
- R001 une personne peut avoir plusieurs média (téléphone fixe, portable, adresses courriel...) y compris d'un même type
- R002 un média appartient à une et une seule personne
- R003 tout média possède un type et un seul
- R004 les types média possibles sont téléphone fixe perso, tél fixe pro, tél portable perso, tél portable pro, tél portable d'astreinte, fax perso, fax pro, courriel perso, courriel pro
- R005 un type média peut être utilisé par plusieurs média
A partir de ces règles de gestion il faut modéliser le modèle conceptuel de données (MCD), ce qui donne ici (j'ai simplifié ici avec seulement des personnes physiques) :
[PERSONNE (PE_id, PE_nom, PE_prénom, ...)] 0,n --- (posséder) --- (1,1) [MEDIA (ME_id, ME_numéro, ME_favori, ...)] 1,1 --- (typer) --- 0,n [TYPE_MEDIA (TM_id, TM_code, TM_lib, ...)]
De ce MCD, tous les logiciels de modélisation, y compris les gratuits, permettent de générer le MLD et donc les tables qui suivent :
PERSONNE (PE_id PK, PE_nom, PE_prénom, ...)
MEDIA (PE_id PK-FK1 ME_id PK, ME_numéro, ME_favori, ...) <= comme j'ai choisi d'identifier le média relativement à la personne (parenthèses), la PK est composée de PE_id+ME_id
TYPE_MEDIA (TM_id PK, TM_code, TM_lib, ...)
Maintenant si je change ma règle de gestion R002 pour la libeller comme suit (les autres règles étant inchangées) :
R002 un média appartient à au moins une personne
Le MCD qui en découle devient
[PERSONNE (PE_id, PE_nom, PE_prénom, ...)] 0,n --- (posséder (favori)) --- 1,n [MEDIA (ME_id, ME_numéro, ...)] 1,1 --- (typer) --- 0,n [TYPE_MEDIA (TM_id, TM_code, TM_lib, ...)]
Du coup, le MLD qui en découle donne les tables :
PERSONNE (PE_id PK, PE_nom, PE_prénom, ...)
POSSEDER(PE_id PK FK1, ME_id PK FK2, favori) <== une nouvelle table apparait à cause des cardinalité maxi n de part et d'autre de la relation
MEDIA (ME_id PK, ME_numéro, ME_favori, ...)
TYPE_MEDIA (TM_id PK, TM_code, TM_lib, ...)
Les tables sont la résultante directe de vos règles de gestion, quelles sont les vôtres, les avez vous rédigées et faites valider par les référents métier (votre MOA) ?
Si ce n'est pas le cas, faites le avant d'aller plus loin ;)