Bonjour,
je suis en train de modéliser une système dont je vous donne un extrait dans l'image ci joint.
Dans cet extrait de MCD, 3 entités et 2 associations. J'essaie d'y stocker des informations sur des clients et des agences. L'extrait montre plus particulièrement la façon de stocker l'information d'adresse pour les clients et les agences. Je souhaite stocker toutes les adresses dans la même table (que ce soit des adresses client ou des adresses d'agence)
Les entités ne m'intéresse pas particulièrement toutefois :
- L'entité Adresse permet de stocker des adresses.
- L'entité Client permet de stocker les informations des clients.
- L'entité Agence permet de stocker des renseignements sur des agences ou commerces
Ce qui m'interesse beaucoup plus, ce sont les deux associations.
L'association Habiter (entre Adresse et Client) est classique : un client habite à une et une seule adresse mais à une adresse peux correspondre plusieurs clients (le mari, la femme et pourquoi pas les enfants et les poissons rouges ^^.
C'est la seconde qui me pose problème. L'association Situer entre Agence et Adresse. Une agence est située à une et une seule adresse d'où ma cardinalité 1,1 du côté Agence. Par contre, à une adresse peut correspondre une agence mais bien souvent aucune agence d'où ma cardinalité 0,1.
Jusque là, tout peut paraitre normal. Lorsqu'on passe du MCD au MLD, on obtient ceci pour les tables Agence et Adresse :
Agence (AGE_id, AGE_nom, #ADR_id)
Adresse (ADR_id, ADR_num, ADR_rue, ADR_cp, ADR_ville, #AGE_id)
(le # signifie une clé étrangère)
Mon problème se pose à ce niveau. En effet, la clé étrangère #ADR_id dans la table Agence me semble tout à fait correct. On fait bien référence à une adresse dans la table Agence pour pouvoir la situer. Par contre, la clé étrangère #AGE_id (possiblement NULL) dans la table Adresse me semble inutile voire même dangereuse dans le sens où si elle est renseignée, il faut être bien sûr que l'agence correspondant soit bien située à la bonne adresse.
Bref, ce que j'aurais souhaité :
Agence (AGE_id, AGE_nom, #ADR_id)
Adresse (ADR_id, ADR_num, ADR_rue, ADR_cp, ADR_ville)
(le # signifie une clé étrangère)
Le plus simple pour obtenir ceci est de mettre une cardinalité 1,N à place du 0,1. Dans ce cas, j'obtiens le MLD voulu mais cela ne reflète plus la réalité.
Y-a-t-il une solution à ce problème ?
Cordialement
Partager