1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 15
    Points : 8
    Points
    8

    Par défaut Associations qui peuvent exister ou pas entre des tables

    Bonjour à tous,

    Pour faire une modélisation des données d'entrée que j'utiliserais dans mon application, je voudrais demander à l'utilisateur d'importer des tables avec des attributs qui peuvent exister ou pas.
    Je m'explique :
    D'une part j'ai 3 tables : Entité, Client, Produit
    D'autre part j'ai une table "Ecoulement" : (id_ecoulement, valeur) qui va être reliée aux 3 table précédentes

    Mon problème c'est que le nombre d'attributs de la table écoulement peut être égal à 3, 4 ou 5 attributs, c'est comme si les relations entre la table Ecoulement et les 3 autres tables étaient booléennes. par exemple
    - si l'entité est la seule à participer à l'écoulement on aura : Ecoulement(id_ecoulement, entité, valeur)
    - si les 3 participent : Ecoulement(id_ecoulement, entité, client, produit, valeur)
    ...

    Comment je peux modéliser une relation pareille ?

    Merci d'avance de vos réponses.

  2. #2
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 798
    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 : 2 798
    Points : 6 138
    Points
    6 138
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    C'est un peu confus, mais si je comprends bien, votre table "écoulement" est issue de la relation au niveau conceptuel entre les 3 entité-type que sont "Entité", "Client" et "Produit", c'est bien ça ?

    Si tel est le cas, alors dans la table "écoulement" la PK sera composée de chaque PK de chaque entité-type entrant dans la relation, soit id_entité + id_client + id_produit
    il n'y a pas d'identifiant propre à cette table (il n'y en a jamais pour une table issue d'une relation n-aire)

    Si ce n'est pas le cas, alors je n'ai pas compris votre besoin, désolé

    Dans tous les cas, communiquez votre MCD, ce sera plus clair

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 15
    Points : 8
    Points
    8

    Par défaut

    Nom : mcd_developpez.jpg
Affichages : 24
Taille : 50,5 KoMerci pour cette réponse.
    En fait j'arrive pas à modéliser ce besoin pour créer le MCD.
    Je pense que je me suis mal exprimé. Ecoulement est une table et non pas une relation, sa Pk est id_ecoulement et elle a un autre attribut valeur.

    Je vous donne cet MCD à titre d'exemple
    Pièce jointe 289481

    Si je fais le MCD de cette façon, en basculant vers le MLD, j'aurais une table Ecoulement avec les attributs : id_ecoulement, valeur, id_entite, id_client, id_produit
    Mais en entrée c'est pas ce que je veux avoir. Pour moi la table Ecoulement n'a pas toujours ces attributs, je peux avoir une table Ecoulement en entrée avec (id_ecoulement, valeur, client) et pas les autres

    J'espère que j'ai réussi à être un peu plus clair que mon premier message

  4. #4
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 798
    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 : 2 798
    Points : 6 138
    Points
    6 138
    Billets dans le blog
    1

    Par défaut

    D'après votre dessin
    - Ecoulement est une entité-type du MCD, elle deviendra donc naturellement une table dans le MLD (sauf si vous décochez la case "générer")
    - Les 3 relations sont facultatives (cardinalité mini zéro), vous aurez donc dans la table Ecoulement, 3 clefs étrangères toutes nullables : id_produit, id_client et id_entité

    Donc vous avez tout à fait la possibilité de ne renseigner que 3 attributs : id_ecoulement, id_entité, valeur (et non pas id_ecoulement, entité, valeur comme vous le mentionnez)

    Par contre, comme la relation avec entité est elle aussi facultative, il faut savoir qu'avec votre modèle vous pourrez aussi n'avoir que 2 attributs : id_ecoulement + valeur
    et aussi les autres combinaisons : id_ecoulement + valeur + id_client, id_ecoulement + valeur + id produit etc...

    Si vous voulez rendre obligatoire la présence de id_entite dans la table écoulement, alors il faut mettre une cardinalité mini de 1

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 15
    Points : 8
    Points
    8

    Par défaut

    En fait l'objectif est de rendre toutes les relations facultative.
    Mais si on prend par exemple une ligne de la table Ecoulement où seul le client participe on aura:
    id_ecoulement valeur id_entite id_client id_produit
    245426 3% 4444

    Ce que je veux c'est que si le client est le seul à participer, la table Ecoulement est comme ceci
    id_ecoulement valeur id_client
    245426 3% 4444

  6. #6
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 798
    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 : 2 798
    Points : 6 138
    Points
    6 138
    Billets dans le blog
    1

    Par défaut

    Ce que vous voulez c'est une table à géométrie variable, et ça ce n'est pas possible

    Mais pourquoi cela vous gène-t-il d'avoir les colonnes présentes mais avec des marqueurs nul positionnés ?
    Si vous voulez éliminer les lignes dont les marqueurs sont à nul, créez des vues correspondantes à vos besoins, et passez vos requêtes sur les vues plutôt que sur les tables. C'est d'ailleurs ce qui est recommandé même en dehors de votre contexte

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE VIEW ecoulement_client_seul AS
    SELECT id_ecoulement 
         , valeur 
         , id_client 
    FROM ecoulement
    WHERE id_produit is null
      and id_entite  is null
      and id_client  is not null
    ;
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from ecoulement_client_seul

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/07/2011, 14h54
  2. Réponses: 1
    Dernier message: 24/07/2009, 17h36
  3. Recherche de données qui ne sont pas entre des balises
    Par Space Cowboy dans le forum Regex
    Réponses: 6
    Dernier message: 12/07/2007, 18h03
  4. Réponses: 9
    Dernier message: 24/04/2006, 09h13
  5. Un Gif animé qui ne se fige pas lors des traitements ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 11
    Dernier message: 18/03/2006, 10h31

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