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

Modélisation Discussion :

Modèle de données le plus correct


Sujet :

Modélisation

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Modèle de données le plus correct
    Bonjour, prière de bien m'aider à concevoir mon modèle de BD :

    j'ai 3 types de clients :

    • client principal
    • client succursale
    • client simple


    tous les clients devront s'authentifier avec un login et mot de passe
    le client principal a plusieurs clients succursales
    chaque client succursale peut avoir plusieurs clients simple

    quel modèle de données est mieux :

    dans une même table :

    iduser nameuser typeuser idclientprincipal idclientsuccursale
    1 clientprincipale CP null null
    2 clientsuccursale CSC 1 null
    3 clientsimple CSM 1 2

    où je dois avoir 3 ou tables
    user / clientprincipale / clientsuccursale / clientsimple

    Dans ce cas quel modèle de données me conseillez-vous svp ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    vous n'expliquez pas ce qu'il en est des clients simples, je suppose que ce sont des clients autonomes, sans lien ni avec un client principal, ni avec des clients succursales ?

    Si c'est bien le cas, une relation réflexive est le modèle adapté, ce qui donne le MCD suivant :

    Nom : MCD.png
Affichages : 158
Taille : 5,7 Ko

    Et voici le script correspondant (ici décliné pour SQL server) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE CL_client(
       CL_ident INT IDENTITY,
       CL_nom VARCHAR(50) NOT NULL,
       CL_ident_principal INT,
       PRIMARY KEY(CL_ident),
       FOREIGN KEY(CL_ident_principal) REFERENCES CL_client(CL_ident)
    );

    Et si on ne veut pas de colonne "nullable", alors il faut générer une table associative, le MCD est inchangé, mais le script DDL devient :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE CL_client(
       CL_ident INT IDENTITY,
       CL_nom VARCHAR(50) NOT NULL,
       PRIMARY KEY(CL_ident)
    );
     
    CREATE TABLE AS_associer(
       CL_ident_succursale INT,
       CL_ident_principal INT NOT NULL,
       PRIMARY KEY(CL_ident_succursale),
       FOREIGN KEY(CL_ident_succursale) REFERENCES CL_client(CL_ident),
       FOREIGN KEY(CL_ident_principal) REFERENCES CL_client(CL_ident)
    );

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    merci pour ta reponse genereuse

    j'ai tout expliqué :

    tout type de clients devra s'authentifier avec un login et mot de passe
    le client principal a plusieurs clients succursales
    chaque client succursale peut avoir plusieurs clients simple

    le client simple vend le produit de la succursale
    et le client principal livre le produit que le client simple vend a ses clients succursales

    c'est une relaton d'appartenance

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Si les trois types de clients ont exactement les mêmes attributs et participent aux mêmes associations, alors le modèle que j'ai proposé est applicable, c'est la profondeur de la hiérarchie qui permet de savoir si on a affaire à un client simple, un client succursale ou un un client principal

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci pour la reponse, je n'arrive pas a voir le client simple dans tout ca

    tous les clients ont les meme donnée

    sauf que
    le client principale n'a pas de client succursale ni de client principale
    le client succursale a 1 seul client principale et plusieurs clients simple mais pas une succursale
    le client simple a un seul client succursale et un seul client principale

    le modele de données est pas clair pour moi et je n'arrive pas mes relations

    l'exemple est comme une franchise il y a la société mere qui fabrique DIOR, il y a une des maison dior partout , et dans chaque maison il y a des vendeurs DIOR
    , GUCCI.....

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    C'est un cas typique de relation parent / enfant
    Le client principal n'a aucun parent et a pour enfant ses succursales
    Le client succursale a pour parent le principal et pour enfants ses clients simples
    Le client simple a pour parent sa succursale et n'a pas d'enfants

    Voici une création de jeu d'essais (ici à la sauce SQL server) :

    Code SQL : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    CREATE TABLE CL_client(
       CL_ident INT IDENTITY,
       CL_nom VARCHAR(50) NOT NULL,
       PRIMARY KEY(CL_ident)
    );
     
    CREATE TABLE AS_associer(
       CL_ident_succursale INT,
       CL_ident_principal INT NOT NULL,
       PRIMARY KEY(CL_ident_succursale),
       FOREIGN KEY(CL_ident_succursale) REFERENCES CL_client(CL_ident),
       FOREIGN KEY(CL_ident_principal) REFERENCES CL_client(CL_ident)
    );
    insert into CL_client(CL_nom)
    values ('principal P1')
         , ('succursale P1-S1')
         , ('simple P1-S1-01')
         , ('simple P1-S1-02')
         , ('succursale P1-S2')
         , ('simple P1-S2-01')
         , ('principal P2')
         , ('succursale P2-S2')
         , ('simple P2-S2-01')
         , ('simple P2-s2-02')
         , ('simple P2-S2-03')
    ;
    select * from CL_client
    ;
    insert into AS_associer (CL_ident_succursale, CL_ident_principal)
    values (2, 1)
         , (3, 2)
         , (4, 2)
         , (5, 1)
         , (6, 5)
         , (8, 7)
         , (9, 8)
         , (10, 8)
         , (11, 8)
    ;     
    select * from AS_associer
    ;

    Et la requête permettant de savoir ce qu'il en est :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    select CL.CL_ident  as IDCLi
         , CL.CL_nom    as NomCli
         , coalesce(SU.CL_nom, 'néant')    as NomEnfant
         , coalesce(PR.CL_Nom, 'néant')    as NomParent
    from CL_client as CL
    left join 
         AS_associer as A1
         inner join CL_client as SU
            on SU.CL_ident=A1.CL_ident_succursale
      on A1.CL_ident_principal=CL.CL_ident
    left join 
         AS_associer as A2
         inner join CL_client as PR
            on PR.CL_ident=A2.CL_ident_principal
      on A2.CL_ident_succursale=CL.CL_ident

    Le résultat obtenu :
    IDCLi NomCli NomEnfant NomParent
    1 principal P1 succursale P1-S1 néant
    1 principal P1 succursale P1-S2 néant
    2 succursale P1-S1 simple P1-S1-01 principal P1
    2 succursale P1-S1 simple P1-S1-02 principal P1
    3 simple P1-S1-01 néant succursale P1-S1
    4 simple P1-S1-02 néant succursale P1-S1
    5 succursale P1-S2 simple P1-S2-01 principal P1
    6 simple P1-S2-01 néant succursale P1-S2
    7 principal P2 succursale P2-S2 néant
    8 succursale P2-S2 simple P2-S2-01 principal P2
    8 succursale P2-S2 simple P2-s2-02 principal P2
    8 succursale P2-S2 simple P2-S2-03 principal P2
    9 simple P2-S2-01 néant succursale P2-S2
    10 simple P2-s2-02 néant succursale P2-S2
    11 simple P2-S2-03 néant succursale P2-S2
    Si pas de parent, il s'agit d'un principal, s'il y a à la fois parent et enfant, c'est une succursale, si pas d'enfant, c'est un client simple

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    merci infiniment pour tout ca , tu as tout compris

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    il faut penser à passer le sujet à "résolu" s'il n'y a plus de questions

  9. #9
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Surement, je le ferai, parce que je n'ai pas tout assimiler j'ai besoin un petit d'un petit moment pour rafraichir mes connaissances sur le modèles de données enfant/parent


    Une question qui tourne dans ma tete a ce moment, si je ne le modélise pas comme tu m'a montré, et je met tous dans une même tables/même entité quel risque peur encourir mon site dans ce cas ?

  10. #10
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    rebonjour escartefigue

    comme je ne suis pas forte en merise, j'ai besoin de comprendre ce que tu m'a suggéré pour que le traduit sur mes vraies entités :

    comment je peut lire ca j'ai une confusion là :

    un clientsimple a 1 succursale
    un clientsimple a 0 clientsimple

    une succursale a 1 parent
    une succursale a 0, n clientsimple

    un principal a 0 ou n succursale


    Pour le idsuccursale est la clé primaire de l'association ???
    Images attachées Images attachées  

  11. #11
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    rebonjour, j'ai pas pu lire toutes mes relations dans le modele enfant/parent, parce qu'il y a trois intervenant, donc j'ai pensé a ca :

    mais je ne sais pas comment relier le user avec les 3 autres entités

    Images attachées Images attachées  

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    C'est une très mauvaise idée, les tables ont exactement les mêmes attributs, il n'y a donc aucune raison de les dupliquer.
    Le user ne doit être lié qu'à une seule entité, la table que j'ai nommée CL_client dans mon exemple.

    Le bon modèle est celui que j'ai communiqué plus haut, il y a le script DDL (ordres CREATE TABLE) et un exemple de requête permettant de déterminer qui est principal, qui est succursale et qui est client simple. Cf. ma réponse n°6.
    Bref, un kit prêt à l'emploi, que demander de plus ?

  13. #13
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    je n'arrive pas a comprendre le modele a 100 %

    en regardant le modele je comprend :
    un client est succursale a 0 ou n client
    un client est principale a 0 ou 1 client

    c'est ce que je lis à partir du modele mais votre explication c'est ce que je veux

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Tout est expliqué dans ma réponse n°6

    Il y a le modèle de données, basé sur seulement deux tables, il n'en faut pas plus : une table client (qui contiendra tous les clients) et une table faisant la liaison entre les différents clients.

    Cans cette même réponse n°6, il y a la requête qui permet de connaître les liens entre les différents clients et en même temps de déterminer si c'est un client principal, succursale ou simple.

    Par exemple,
    • dans le tableau résultat, les deux premières lignes qui concernent le client n°1 ont "néant" dans la colonne "NomParent" ==> c'est donc un client principal
    • les deux lignes suivantes ont à la fois un nom enfant et un nom parent renseigné, le client n°2 est donc une succursale
    • les deux lignes suivantes des clients 3 et 4 ont un nom de parent renseigné, mais pas de nom d'enfant, ce sont donc des clients simples

  15. #15
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    tu m'a fait peur qu'on tu as ecrit en gras

    je sais que le modèle est bon c'est moi qui a des difficultés a le comprendre, je n'arrive pas a lire le MCD correctement le reste c'est parfait pour moi


    Est ce que c'est bon la lecture du MCD ?
    Images attachées Images attachées  

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Oui c'est correct

  17. #17
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    enfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

    merci infiniment escartefigue

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

Discussions similaires

  1. [XML] Lequel est le plus correct ?
    Par Sensei.f dans le forum XML/XSL et SOAP
    Réponses: 17
    Dernier message: 24/10/2006, 15h27
  2. Réponses: 2
    Dernier message: 16/09/2006, 17h40
  3. [MySQL] Compter la donnée la plus présente
    Par picsoun dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/02/2006, 00h47
  4. Requete Selection ne fonctionne plus correctement
    Par isa911 dans le forum Access
    Réponses: 3
    Dernier message: 15/12/2005, 09h08
  5. logiciel de construction de modele de données?
    Par sorlok dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 13/12/2004, 15h25

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