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

Outils MySQL Discussion :

Conception INNODB et cardinalités 0,n


Sujet :

Outils MySQL

  1. #1
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut Conception INNODB et cardinalités 0,n
    Bonjours,

    Je suis habitué à MYISAM, et finalement, refaire à la main les dépendances fonctionnelles ne me dérange pas trop. Quand même curieux, j'ai voulu tester innoDB pour l'un de mes projets, mais je me retrouve bloqué :

    Ces fichus contraintes m'empêches d'insérer mes données, ce qui me fait douter de ma conception....Quelqu'un aurait-il une idée de savoir comment on fait une cardinalité 0,n avec innoDB et PHPmyAdmin ?!!!

    J'ai 3 tables : une table collaborateur, une table prospect et une table fournisseur.

    La table prospect recoit 2 clés étrangères (id_collaborateur et id_fournisseur).
    Un collaborateur a n propects, et peut être fournisseur de prospect,
    un fournisseur peut fournir 0 ou plusieurs prospect.

    Ainsi, quand j'insère un prospect qui est fournit par un collaborateur, (donc qui n'a pas de référence avec un fournisseur), il me met une erreur comme quoi je ne respect pas la dépendance !!!! (cela veut donc dire que je suis OBLIGE d'avoir un collaborateur ET un fournisseur pour traiter un prospect !!!)

    Je sens que je vais revenir à myISAM....
    PS : j'ai créé tout ma base via PHPMyAdmin, ainsi que la gestion des liaisons....


  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    si tu as du 0,n de prospect à tes 2 autres tables : Entre la table prospect et les tables fournisseurs et collaborateurs tu dois avoir 2 tables de jointures.

    Tu n'aurais pas mis entre collaborateur et fournissur, 1,1 ?

  3. #3
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    C'était ce à quoi j'étais en train de penser ce matin, devant mon café avec le regard hagard.....

    En fait, à chaque fois que j'ai besoin d'une cardinalité 0,n ill faudrait que je mette une table d'association, comme ca la clé étrangère n'apparait que dans celle-ci....

    Je vais essayer ce matin, j'aimerai bien que ca marche car j'aimemrai utiliser les transactions !!!!

    Merci Trotter de confirmer mes soupçcons !!!!

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Citation Envoyé par viviboss
    La table prospect recoit 2 clés étrangères (id_collaborateur et id_fournisseur).
    Citation Envoyé par viviboss
    cela veut donc dire que je suis OBLIGE d'avoir un collaborateur ET un fournisseur pour traiter un prospect
    Tel que tu l'énonces, ça me parait cohérent (l'erreur est juste )

    Maintenant, si ce n'est pas le fonctionnement que tu souhaites, il me parait incontournable de revenir à la case modélisation.

  5. #5
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Hummmmm.....

    Sous myISAM, je mettais les "clés etrangères" que je voulais, et si je voulais pas d'une certaine "relation" avec une autre table, je mettais la valeur de la "clé" à NULL.....

    Mais tu as raison : je rtourne à la case conception, pour mettre mes fameuses tables d'associations !!!!

  6. #6
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par viviboss
    je mettais la valeur de la "clé" à NULL.....
    Ca devrait toujours être possible pour peu que le champ soit déclaré comme pouvant être NULL.

  7. #7
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Citation Envoyé par Sivrît
    Ca devrait toujours être possible pour peu que le champ soit déclaré comme pouvant être NULL.
    Merci pour ta réponse, elle vient de me sortir de la panade !!!!! (en myISAM, je ne mettais pas NULL, donc le champs à not_null, mais valeur vide ou 0....Pas très cool pour la conception, mais bon ca marchait..)

    Donc du coup, j'évite les tables d'associations (j'aurais du en mettre entre 5 et 6....Un peu lourd !!!!) et ca marche très bien !!!!

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    J'ai eu le même problème finalement j'ai fais sauter la contrainte.
    J'ai une table avec de dépendance parent enfant.
    id , idparent. idem j'ai une relation 0,n. Que faire dans ces moments là
    en sachat que j'ai pas d'enregistrement racine. Ceux du premier niveau ont le champs idparent = 0 = valeur par défaut définit dans mysql.

  9. #9
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Et bien, à priori 2 solutions : une table d'association (la table prend en clé étrangère les 2 tables sur lesquels tu veux du 0,n) ou bien (ce que j'ai fait) tu met la clé étrangère de ta table issue de la cardinalité 0 avec une valeur "null" (et pas not_null)....

    Je sais ps si tu as suivi....

  10. #10
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    Citation Envoyé par viviboss
    Et bien, à priori 2 solutions : une table d'association (la table prend en clé étrangère les 2 tables sur lesquels tu veux du 0,n) ou bien (ce que j'ai fait) tu met la clé étrangère de ta table issue de la cardinalité 0 avec une valeur "null" (et pas not_null)....

    Je sais ps si tu as suivi....
    Oui, je vais utiliser la deuxième solution.

  11. #11
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Je viens d'essayer, ca marche terrible !!!! Tu garde les cardinalités 'MAJ en cascade) mias tu n'as plus les contraintes, ce qui rend la base beaucoup plus souple !!!

    Au lieu de faire comme je faisais avant (valeur vide ou 0) il faudra juste que je mette un NULL....

    Terrible !!!!

    Donc principe à retenir avec InnoDB : quand on veut une cardinalité 0,n on doit faire en sorte que la "clé étrangère arbitraire" doit avoir la propriété NULL....

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

Discussions similaires

  1. [MCD] problème de conception MCD/cardinalité
    Par Laure94 dans le forum Schéma
    Réponses: 3
    Dernier message: 02/11/2011, 03h42
  2. [MCD] Conception Modélisation MCD Cardinalité
    Par alicc dans le forum Schéma
    Réponses: 3
    Dernier message: 05/10/2011, 16h29
  3. Réponses: 9
    Dernier message: 05/02/2008, 14h53
  4. [conception] cardinalités multiples
    Par shinrei dans le forum Modélisation
    Réponses: 9
    Dernier message: 13/02/2006, 11h05
  5. conception - clef etrangère -cardinalité forte/faible
    Par sundjata dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/11/2005, 14h57

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