IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

MCD->MPD : deux clés étrangères pour le même champ


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut MCD->MPD : deux clés étrangères pour le même champ
    Bonjour,

    malgré mes recherches sur le forum, je n'ai pas pû résoudre le problème suivant : dans mon MCD, j'ai une entité A reliée à deux entités B et C par deux relations binaires :
    B -0,n------1,1- A -1,1------0,n- C

    Lorsque je génère le MLD, la table A se voit attribuer deux champs, issus des identifiants de B et C, avec chacun une clé étrangère vers les identifiants respectifs de B et C.

    Mais dans ma problématique, la table A ne doit avoir qu'un seul champ avec deux clés étrangères vers les identifiants respectifs de B et C. Comment modéliser cela côté MCD. (j'ai essayé avec une relation ternaire et un CIF, mais je n'ai pas réussi).

    Merci

  2. #2
    Membre actif Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Points : 228
    Points
    228
    Par défaut
    Peux-tu exposer ton cas ,

    parceque je pense qu'il y a problème d'analyse, un seul champ issue de deux tables différente est pour moi reste illogique .

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse rapide.

    Ok, un peu plus de concret permettra de voir où est la logique.

    Pour les schémas parlants, cf. les pièces jointes.

    Je modélise le fait de définir et d'instancier des opérations arithmétiques n-aires. Pour cela j'ai quatre entités :

    *Deux entités pour définir les opérations n-aires
    - TypeOperation : cette entité "déclare" un opération
    - TermeOperation : cette entité définit une opération déclarée : la liste de ses termes. Elle est relié à TypeOperation par la relation "Est un terme de"

    *Deux entités pour "instancier" les opérations définies :
    - OperationReelle : cette entité représente l' "instanciation" d'un opération définie. Elle est reliée à TypeOperation par la relation "Est du type"
    - TermeOperationReelle : cette entite représente les termes d'une opération réelle. Elle est relié à OperationReelle par la relation "Est un terme réel de" et à TermeOperation par la relation "Représente réelle"

    Pour résumer : toute valeur de TermeOperationReelle doit à la fois correspondre à un opération réelle et à un terme associé au type d'opération sous jacente.

    Dans le modèle physique généré, la table TermeOperationReelle a une clé étrangère vers OperationReelle et une vers TermeOperation, c'est normal ; cependant chacune de ces clés comporte son propre champ OperationId issu de TypeOperation, l'un propagé via TermeOperationReelle et l'autre via TermeOperation. Cela est normal aussi vu la forme actuelle du MCD.

    Or dans ce MPD, un opération réelle peut se voir associé un terme réel qui correspond à une opération d'un autre type, ce que je veux éviter. Pour cela, dans le MPD il ne devrait y avoir qu'un seul champ "TypeOperation", utilisé dans les deux clés étrangères faisant référence à TermeOperation et OperationReelle.

    Mais je ne sais pas comment modéliser cela au niveau conceptuel.

    Note : si je (rétro) génère le MCD à partir du MPD attendu (en ayant fait un seul champ avec les deux champs IDOPERATION de la table TERMEREELOPERATION), j'obtiens le même MCD que celui d'origine (au détail près que mon entité TermeReelOperation est devenue un relation 0,n-0,n avec les entités TermeOperation et Opération réelle). En regénérant le MPD à partir du MCD rétro-généré, j'ai toujours le même problème à l'arrivée.
    Images attachées Images attachées   

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 104
    Points : 31 548
    Points
    31 548
    Billets dans le blog
    16
    Par défaut
    J’arrive un peu tard, mais sait-on jamais.

    A mon avis, vous abusez de l’identification relative. Quand vous procédez ainsi, vous signifiez que TermeOperation est une propriété multivaluée de TypeOperation, ce qui en principe n'est pas le cas. TermeOperation est une entité-type assez forte par elle-même pour ne pas mériter d’être ainsi affaiblie. Même chose pour OperationReelle. Quant à TermeOperationReelle, il s’agit manifestement d’une association-type entre TermeOperation et OperationReelle.

    Pourquoi l’outil n’a-t-il pas éliminé l’un des 2 attributs prétendument en double ? Tout simplement parce qu’une valeur de TermeOperation peut faire référence à une valeur de TypeOperation et TermeOperation à une valeur différente. Ça c’est le cas général. Votre souhait représente un cas particulier qui doit être traité comme tel.

    La génération faite par l’outil au niveau logique est bien conforme à ce que vous avez modélisé au niveau MCD. Maintenant, si pour une raison ou une autre, vous souhaitez propager IdOperation jusqu’à TermeOperationReelle en un seul exemplaire, alors identifiez soit TermeOperation soit OperationReelle relativement à TypeOperation, mais pas les deux en même temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] relation entre deux clés étrangéres
    Par tempsdescerises dans le forum Modélisation
    Réponses: 4
    Dernier message: 21/04/2009, 10h02
  2. Renommer ses clés étrangères pour JPA
    Par nicorama dans le forum JPA
    Réponses: 2
    Dernier message: 09/11/2008, 09h48
  3. 2 clés étrangères sur le même champs
    Par titouille dans le forum MySQL
    Réponses: 1
    Dernier message: 29/10/2008, 12h51
  4. jointure avec deux clés étrangères
    Par el_butcho dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/03/2008, 07h15
  5. Réponses: 1
    Dernier message: 30/12/2005, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo