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

Langage SQL Discussion :

MCD question de cardinalisation


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut MCD question de cardinalisation
    Bonjour je crée une APP de gestion.

    Cependant je ne vois pas quel cardinalisation mettre,

    actuellement je suis comme cela

    Nom : aaaaaaa.jpg
Affichages : 602
Taille : 103,9 Ko

    le problème c'est que dans la société ont peut avoir plusieurs personnes.

    actuellement j'ai 5 users dans la table utilisateur

    puis 1 raison social.

    lorsque j'essaye de me loguer avec mon première utilisateur portant l'ID 1 cela fonctionne

    et les autre users portant un id différent cela ne marche plus.

    mais sur n'importe quel user ou je met l'id 1 c'est ok.

    Donc je pense que cela est du a la cardinalisation non ?

  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,

    bien sur, votre modèle devrait être

    SOCIETE 0,n ---- recruter --- 1,1 EMPLOYE

    Le nom de vos entités-type n'est pas très judicieux : "RAISON_SOCIALE" est un attribut de l'entité-type que vous pouvez appeler "SOCITE" ou "COMPAGNIE" ou "ENTREPRISE"...
    De même, si "utilisateur" est un employé de l'entreprise, alors ce nom n'est pas adapté, "EMPLOYE" ou "COLLABORATEUR" serait plus judicieux

    L'usage est d'utiliser des verbes pour nommer les associations : "recruter" est préférable à "_appartient_utilisateur"

    Il existe un forum modélisation pour ce genre de questions, c'est ici : http://www.developpez.net/forums/f25...thodes/merise/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Donc j'ai bien suivi tes conseils et modifié la cardinalisation toujours le meme problème pour le login des utilisateurs

  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
    Il faut communiquer le DDL de vos tables (CREATE TABLE)

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Et... il faudrait aussi expliquer le problème en question !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Concretement je souhaiterai que plusieurs utilisateur puisse se connecter a une société.

    Pour se faire j'ai une table utilisateur et raison_social je les renommé compagnie plus clair

    je suis partie du principe que un ou plusieurs utilisateur appartient a une société 1/n

    voici la conception total de la base

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
    #------------------------------------------------------------
    #        Script MySQL.
    #------------------------------------------------------------
     
     
    #------------------------------------------------------------
    # Table: Compagnie
    #------------------------------------------------------------
     
    CREATE TABLE Compagnie(
            id_societe        int (11) Auto_increment  NOT NULL ,
            nom_societe       Varchar (50) ,
            adresse_societe   Text ,
            cp_societe        Int ,
            ville_societe     Varchar (100) ,
            telephone_societe Int ,
            email_societe     Varchar (50) ,
            id_utilisateur    Int ,
            PRIMARY KEY (id_societe )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Utilisateur
    #------------------------------------------------------------
     
    CREATE TABLE Utilisateur(
            id_utilisateur         int (11) Auto_increment  NOT NULL ,
            nom_utilisateur        Varchar (30) ,
            prenom_utilisateur     Varchar (30) ,
            email_utilisateur      Varchar (100) ,
            password_utilisateur   Varchar (100) ,
            date_ajout_utilisateur Date ,
            PRIMARY KEY (id_utilisateur )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Client
    #------------------------------------------------------------
     
    CREATE TABLE Client(
            id_client          int (11) Auto_increment  NOT NULL ,
            civilite_client    Varchar (25) ,
            date_fiche_client  Date ,
            nom_client         Varchar (50) ,
            prenom_client      Varchar (50) ,
            adresse_client     Text ,
            cp_client          Int ,
            ville_client       Varchar (150) ,
            telephone_client   Int ,
            portable_client    Int ,
            email_client       Varchar (50) ,
            commentaire_client Text ,
            PRIMARY KEY (id_client )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Devis
    #------------------------------------------------------------
     
    CREATE TABLE Devis(
            id_devis       int (11) Auto_increment  NOT NULL ,
            description    Text ,
            date_creation  Date ,
            id_client      Int ,
            quantite       Int ,
            prix_unitaire  Decimal (25) ,
            id_article     Int ,
            id_utilisateur Int ,
            PRIMARY KEY (id_devis )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Facture
    #------------------------------------------------------------
     
    CREATE TABLE Facture(
            id_facture    int (11) Auto_increment  NOT NULL ,
            description   Text ,
            date_creation Date ,
            PRIMARY KEY (id_facture )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Article
    #------------------------------------------------------------
     
    CREATE TABLE Article(
            id_article          int (11) Auto_increment  NOT NULL ,
            code_article        Varchar (10) ,
            famille_article     Varchar (50) ,
            type_article        Varchar (2540) ,
            nom_article         Varchar (50) ,
            description_article Text ,
            prix_achat          Decimal (25) ,
            marge_vente         Decimal ,
            prix_vente          Decimal (25) ,
            unite_article       Varchar (10) ,
            quantite_article    Decimal ,
            quantite_achat      Decimal (25) ,
            fp_article          Decimal ,
            tva_article         Decimal (25) ,
            id_famille          Int ,
            PRIMARY KEY (id_article )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Famille
    #------------------------------------------------------------
     
    CREATE TABLE Famille(
            id_famille           int (11) Auto_increment  NOT NULL ,
            code_famille_article Varchar (50) ,
            nom_famille_article  Varchar (50) ,
            PRIMARY KEY (id_famille )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: transfert_devis_facture
    #------------------------------------------------------------
     
    CREATE TABLE transfert_devis_facture(
            id_devis   Int NOT NULL ,
            id_facture Int NOT NULL ,
            PRIMARY KEY (id_devis ,id_facture )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Enregistre_client
    #------------------------------------------------------------
     
    CREATE TABLE Enregistre_client(
            id_utilisateur Int NOT NULL ,
            id_client      Int NOT NULL ,
            PRIMARY KEY (id_utilisateur ,id_client )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Ajoute_article
    #------------------------------------------------------------
     
    CREATE TABLE Ajoute_article(
            id_utilisateur Int NOT NULL ,
            id_article     Int NOT NULL ,
            PRIMARY KEY (id_utilisateur ,id_article )
    )ENGINE=InnoDB;
     
    ALTER TABLE Compagnie ADD CONSTRAINT FK_Compagnie_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
    ALTER TABLE Devis ADD CONSTRAINT FK_Devis_id_client FOREIGN KEY (id_client) REFERENCES Client(id_client);
    ALTER TABLE Devis ADD CONSTRAINT FK_Devis_id_article FOREIGN KEY (id_article) REFERENCES Article(id_article);
    ALTER TABLE Devis ADD CONSTRAINT FK_Devis_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
    ALTER TABLE Article ADD CONSTRAINT FK_Article_id_famille FOREIGN KEY (id_famille) REFERENCES Famille(id_famille);
    ALTER TABLE transfert_devis_facture ADD CONSTRAINT FK_transfert_devis_facture_id_devis FOREIGN KEY (id_devis) REFERENCES Devis(id_devis);
    ALTER TABLE transfert_devis_facture ADD CONSTRAINT FK_transfert_devis_facture_id_facture FOREIGN KEY (id_facture) REFERENCES Facture(id_facture);
    ALTER TABLE Enregistre_client ADD CONSTRAINT FK_Enregistre_client_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
    ALTER TABLE Enregistre_client ADD CONSTRAINT FK_Enregistre_client_id_client FOREIGN KEY (id_client) REFERENCES Client(id_client);
    ALTER TABLE Ajoute_article ADD CONSTRAINT FK_Ajoute_article_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
    ALTER TABLE Ajoute_article ADD CONSTRAINT FK_Ajoute_article_id_article FOREIGN KEY (id_article) REFERENCES Article(id_article);
    quand j'essaye de me loguer cela fonctionne que pour l'utilisateur ayant l'ID 1.
    pour les autre cela passe pas, l'erreur de ma condition s'affiche.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    D'après tes déclarations de tables, une compagnie est associée à au plus un utilisateur, alors qu'un utilisateur peut être associé à plusieurs compagnies.
    C'est bien ce que tu veux ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    oui c 'est bien cela tu as bien compris

  9. #9
    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 vous aviez appliqué la modification que j'ai mentionnée dans ce post :

    Citation Envoyé par escartefigue Voir le message
    bonjour,
    bien sur, votre modèle devrait être
    SOCIETE 0,n ---- recruter --- 1,1 EMPLOYE
    . . .
    Vous auriez une foreign key dans la table "utilisateur" (que j'ai nommée employé dans mon exemple, ca me semblait plus adequat)
    Or votre table utilisateur n'a pas la FK pointant sur la table société
    Vous avez fait l'inverse, vous avez mis n coté employé, du coup c'est l'ID employé qui se trouve en FK des sociétés
    D'où la remarque de Al1_24 plus haut

    Pour rappel, extrait de votre 1er post :
    Citation Envoyé par micus Voir le message
    le problème c'est que dans la société ont peut avoir plusieurs personnes.
    actuellement j'ai 5 users dans la table utilisateur

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Oui effectivement j'avais ma interprété votre remarque.
    Les modifications étant appliquées j'ai rajouté pour chaque employé l'ID 1 de la société.

    Cependant lorsque je lance une requete avec jointure de table en test cela me ressort que une entré celle de l'id 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT e.email_employe email_employe,  s.nom_societe nom_societe
                                FROM compagnie s
                                LEFT JOIN employe e
                                ON e.ID_employe= s.ID_societe
    et pour revenir a votre remarque
    SOCIETE 0,n ---- recruter --- 1,1 EMPLOYE

    si vous changer votre verbe et que vous mettiez appartient.

    1 ou plusieurs employé appartient a une et une seul société.
    donc EMPLOYE 1,N -- appartient 1,1 SOCIETE
    je dois mal interpréter les chose

  11. #11
    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
    Citation Envoyé par micus Voir le message
    Oui effectivement j'avais ma interprété votre remarque.
    Les modifications étant appliquées j'ai rajouté pour chaque employé l'ID 1 de la société.

    Cependant lorsque je lance une requete avec jointure de table en test cela me ressort que une entré celle de l'id 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT e.email_employe email_employe,  s.nom_societe nom_societe
                                FROM compagnie s
                                LEFT JOIN employe e
                                ON e.ID_employe= s.ID_societe 
    Votre prédicat de jointure

  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
    Citation Envoyé par micus Voir le message
    et pour revenir a votre remarque
    SOCIETE 0,n ---- recruter --- 1,1 EMPLOYE

    si vous changer votre verbe et que vous mettiez appartient.

    1 ou plusieurs employé appartient a une et une seul société.
    donc EMPLOYE 1,N -- appartient 1,1 SOCIETE
    je dois mal interpréter les chose
    En général pour nommer l'association, on privilégie dans la mesure du possible l'utilisation d'un verbe qui permette de lire la relation dans les 2 sens
    La société recrute des employés / les employés sont recrutés par la société

    Avec appartenir, ça ne fonctionne que dans un sens

    Et les cardinalités se lisent
    SOCIETE 0,n ---- recruter --- 1,1 EMPLOYE
    Une société recrute 0 à n fois
    Un employé est recruté 1 et 1 seule fois

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    je me suis creusé la tete mais malheuresement cela m' echappe.
    j 'ai voulu tester cela

    si je souhaite ressortir tous les nom des employés appartenant aux sociétés.

    j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT c.nom_societe, e.nom_employe nom_employe
    FROM employe e 
    INNER JOIN compagnie c 
    ON e.id_societe = c.id_societe
    je selectionne le nom_sociéte de la compagnie, le nom de l'employé qui est dans la table employé.
    depuis la table employe portant l'alias e.
    je lie la table compagnie
    sur id de la societe dans la table employer = id de la societe dans la table compagnie.

    cela me retourne toujours des enregistrements null

    je dois mal mit prendre avec les jointures pourrais je avoir quelques explication sur se que je souhaite faire.

    je vous remercie par avance

  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
    Bonjour,

    Votre requête correspond bien à ce que vous souhaitez obtenir.
    Je suppose que quand vous dites "cela me retourne toujours des enregistrements null", c'est en fait une liste vide que vous obtenez, avec un SQLCODE 100 ?

    Si la liste est vide, c'est qu'il n'existe aucun employé dont la valeur de la FK id_societe correspond à une valeur connue de société dans la table compagnie
    Vous avez donc un problème d'intégrité des données

    Vérifiez le contenu des 2 tables, communiquez le s'il s'agit de toutes petites tables

Discussions similaires

  1. [MCD] question de modélisation
    Par Beltegeuse dans le forum Modélisation
    Réponses: 4
    Dernier message: 09/04/2008, 16h43
  2. Question création MCD
    Par kiki500 dans le forum Schéma
    Réponses: 2
    Dernier message: 11/12/2007, 12h19
  3. [MCD] Question au sujet d'une contrainte
    Par sylsau dans le forum Schéma
    Réponses: 9
    Dernier message: 26/07/2007, 23h06
  4. question de MCD
    Par yoyoo dans le forum Access
    Réponses: 9
    Dernier message: 07/07/2006, 16h10
  5. Question sur une relation ternaire dans un MCD
    Par sylsau dans le forum Schéma
    Réponses: 5
    Dernier message: 05/03/2006, 20h00

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