Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2006, 23h34   #1
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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....

__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 08h44   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

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 ?
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 09h39   #3
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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 !!!!
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 09h44   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 10h03   #5
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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 !!!!
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 11h17   #6
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
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.
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 13h24   #7
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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 !!!!
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 15h32   #8
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 16h14   #9
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 16h16   #10
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 16h29   #11
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
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....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h07.


 
 
 
 
Partenaires

Hébergement Web