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

Looping Discussion :

Récupération réciproque de clés étrangères


Sujet :

Looping

  1. #1
    Invité de passage
    Inscrit en
    Juin 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 6
    Par défaut Récupération réciproque de clés étrangères
    Bonjour,

    Dans le cadre de la gestion d'un concours d'animaux, je représente l'attribution d'un lot à un animal de la manière suivante:

    Nom : mcd_01.png
Affichages : 69
Taille : 51,8 Ko

    Je voudrais que la table "animaux" possède une clé étrangère vers "decerner" et que la table "decerner" possède une clé étrangère vers "animaux".

    Dans Looping, en cochant la case "récup clé étrangère" sur chaque lien (0,1), il n'y a qu'une seule clé étrangère de mise en place. Est-ce qu'il y a un moyen pour que chaque table dispose d'une clé étrangère vers l'autre table ?

    Merci d'avance pour les solutions qui pourront être proposées.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 720
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    S'il y avait une FK de "animaux" vers "décerner" et de "décerner" vers "animaux", ça signifierait que "animaux" et "décerner" ne font qu'un, il faudrait en ce cas les fusioner.

    Mais, il y a plus probablement une erreur de modélisation, en effet, il est beaucoup plus probable que certains animaux ne se voient décerner aucun prix, d'autres un seul, d'autres plusieurs...
    Et, de toute façon "décerner" n'est pas un objet mais une association entre un animal et un prix, du coup, au stade du MCD "décerner" est un ovale et non pas un rectangle.

    Ce faisant, la bonne modélisation est la suivante :

    Nom : Sans titre.png
Affichages : 54
Taille : 6,1 Ko

    Et à l'arrivée, pas de clef étrangère coté "animaux" bien sûr, puisqu'il peut avoir gagné plusieurs prix, par contre, coté "prix", on a la FK issue de "animaux" puisqu'un prix n'est attribué qu'à un seul animal.

    Nom : Sans titre.png
Affichages : 54
Taille : 8,3 Ko

    Sauf s'il peut y avoir des ex-aequo (un même prix attribué à plusieurs animaux) auquel cas le bon modèle est le suivant :



    Et là, l'association "décerner" devient une table et c'est dans cette table qu'on trouvera les deux FK : celle de "animal" et celle de "prix"

  3. #3
    Invité de passage
    Inscrit en
    Juin 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 6
    Par défaut
    Bonjour,

    Non, les récompenses sont fixées en amont du concours, pour chaque lot d'animaux constitué au fil des inscriptions d'animaux (les récompenses ne sont pas toujours les mêmes, ou en même quantité, pour tous les lots). Lorsqu'un lot d'animaux fait l'objet d'un jugement, il ne sera attribué au maximum qu'une récompense par animal (d'où la cardinalité 0,1 côté "animaux"). Chaque récompense ne concernera qu'un animal (cardinalité 0,1 côté "decerner").

    C'est donc une fois que le jury a fait son travail sur un lot d'animaux que l'on peut faire le lien entre "animaux" et "decerner". La modélisation que j'ai faite m'assure qu'une récompense ne sera attribuée qu'à un seul animal et vice-versa.

    Je suis prêt à revoir ma modélisation, mais je ne vois pas de place pour du (0,n) dans cette modélisation.

  4. #4
    Membre éprouvé Avatar de kick54
    Homme Profil pro
    Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Inscrit en
    Mai 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 116
    Par défaut
    Bonjour,
    Je pense aussi que décerner est une association (probablement ternaire au vue des liens qui figurent dans l'extrait de schéma).
    cdlt

  5. #5
    Invité de passage
    Inscrit en
    Juin 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 6
    Par défaut
    Pour l'instant, je vais utiliser la modélisation suivante:

    Nom : mcd_02.png
Affichages : 45
Taille : 53,5 Ko

    Car Looping me permet de garantir, dans la table "recevoir", qu'un "animal" ne recevra au maximum qu'une "récompense" et vice-versa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    --
    -- Structure de la table mcd_recevoir
    --
    
    DROP TABLE IF EXISTS mcd_recevoir;
    CREATE TABLE mcd_recevoir(
       id_animal BIGINT UNSIGNED,
       commentaire VARCHAR(250) ,
       created_at DATETIME,
       updated_at DATETIME,
       id_recompense BIGINT UNSIGNED NOT NULL,
       PRIMARY KEY(id_animal),
       UNIQUE(id_recompense),
       FOREIGN KEY(id_animal) REFERENCES mcd_animaux(id),
       FOREIGN KEY(id_recompense) REFERENCES mcd_decerner(id)
    )
    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    Mais je reste sur ma faim, car j'aurais préféré une solution sans table supplémentaire.

  6. #6
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 784
    Par défaut
    Bonsoir,

    Si vous voulez une une clé étrangère dans chaque table, un problème surviendra dans le DDL : en effet, une des 2 clés étrangères fera référence à une table qui n'est pas encore déclarée.
    Vous pouvez simuler le problème en créant 2 associations 0,1/0,1 avec une clé étrangère de chaque côté : une référence circulaire vous sera alors signalée par Looping.
    On peut certes trafiquer en effectuant la déclaration de la 2ème clé étrangère en fin de script en rajoutant une règle avec un ALTER, mais bon...
    Je trouve que votre dernière proposition est bien plus propre.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  7. #7
    Invité de passage
    Inscrit en
    Juin 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 6
    Par défaut
    Bonsoir,

    Merci pour votre réponse. J'avais tenté la création des 2 associations, mais effectivement la référence circulaire était détectée.
    J'essaie de ne pas avoir à retoucher le SQL généré par Looping, donc je vais rester sur l'association.

    Je place le sujet comme résolu.

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

Discussions similaires

  1. Structure d'un CLS
    Par medchok dans le forum Distributions
    Réponses: 3
    Dernier message: 20/12/2006, 22h43
  2. [VB.Net] conformité CLS
    Par hucliez dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/10/2006, 18h31
  3. Réponses: 1
    Dernier message: 09/02/2006, 17h59
  4. [.NET] CLS : Abréviation de Common Language S???
    Par the_real_hnk dans le forum Framework .NET
    Réponses: 10
    Dernier message: 25/11/2005, 12h37
  5. CLS sous linux
    Par bobo21 dans le forum C
    Réponses: 5
    Dernier message: 20/11/2005, 14h53

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