|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : mai 2002 Messages : 92 ![]() |
Bonjour,
la requete suivante provoque une erreur à la création de la clé étrangère. La création de la table seule ne pose pas de problème. Code :
Merci d'avance PHPMyAdmin 2.6.1 & MySQL 4.1.9-max |
||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Jota Alves Inscription : janvier 2006 Messages : 263 ![]() |
slt...
Ce que tu essayes de faire, je crois pas que se soit possible.... Une Foreign key, est par difinition, um champ d´une table, qui fait reference a une cle primaire,ou index unique d´une autre table. Une Foreign key, qui pointe sur la propre table |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mai 2002 Messages : 92 ![]() |
Bonjour,
c'est normalement possible avec MySQL d'après ce que j'ai lu, mais je n'ai pas trouvé de détails sur les possibilités ou les restrictions quand à l'utilisation de ce type de contrainte. Ca fonctionne très bien dans d'autres SGBD. L'intérêt est de s'assurer que dans mon cas ID_VER_PREC est un ID_VER present dans la table. Si je ne trouve pas comment ca fonctionne avec MySQL je ferais une autre table pour le gérer, mais ce n'est pas la seule dans ce cas. |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Je viens de faire un essai concluant en 4.1.1:
1/ passage du script de création de la table sans spécifier la FK 2/ Code :
__________________
"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 MPUsus magister est optimus |
||
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Jota Alves Inscription : janvier 2006 Messages : 263 ![]() |
slt....
il me semble que je me suis tromper Juste une question: inserer: ID_ver, ID_ver_pre, indiceversion 1, 1 , "XPTO" et apres essayer de suprimer |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Clair que dans le contexte exposé, ce n'est pas possible du fait des contraintes.
D'un autre coté, c'est le cas extrême que tu signales... charge à l'applicatif de refuser cette configuration (ce dont je ne doute pas compte-tenu du nom des colonnes
__________________
"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 MPUsus magister est optimus |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : mai 2002 Messages : 92 ![]() |
Merci qi130,
effectivement ca fonctionne avec d'autres noms de table, espace ou pas après le nom, mais pas avec VERSION (qui n'est pas un mot clé MySQL) ou il reclame un espace, moralite il vaut mieux toujours le prévoir, mais le code était généré automatiquement par DBDesigner, et sur une autre table ca a tres bien fonctionné donc je ne voyais vraiment pas d'ou venait le problème. jota5450, il y a une petite erreur, ID_VER_PREC peut être null bien sur (relation 1-n,0-n) Effectivement, à l'enregistrement des données je verifierai la condition ID_VER <> ID_VER_PREC. |
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Jota Alves Inscription : janvier 2006 Messages : 263 ![]() |
slt...
je sais que le topic est ferme, mais je suis reste avec des doutes... 1-La foreign key doit accepter des nulls, sinon on arrive pas a effacer toutes les lignes. 2-La foreing key doit accepter des nulls, sinon on est obliger d´avoir la valeur de la foreign key et la valeur de la key de reference pareille, ca pour le premier insert. 3-Les valeurs de la foreign key et de la key de reference ne doivent pas etre pareilles, sinon on arrive pas a supprimer la ligne. 4-Lors de l´insert ou de l´update, on doit verifier que les valeurs de la key et de la foreign key soit diferentes. On m´a dis que l´appli ferait ca... wi, mais... pour la 1; etre obliger d´accepter des nulls pour pouvoir vider une table.. pour la 2; apres la 1... c´est la moin intriguante... pour la 3; a cause des references... d´accord.. mais ne pas arrivée a suprimer une ligne qui ne fais reference nulle par d´autre que a elle même... pour la 4; pour moi la plus -avec une autre table .. dans ce cas, pourquoi le foreign key sur la propre table? -avec un lock sur la table Si quelqun veut bien me donner quelques explications... parce que, je dois mal voir le probleme... |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : mai 2002 Messages : 92 ![]() |
Bonjour,
je ne vois pas quel est le problème, d'ailleurs la partie interface de l'application n'est pas l'objet de ce post. Dans mon post précédent, je te précise que oui, ID_VER_PREC peut être nul, et oui, ID_VER et ID_VER_PREC sont différents. Il n'y a rien de compliqué à cela, la colonne ID_VER_PREC ne sert qu'à enregistrer l'ID de la version précédente, il peut ne pas y en avoir bien sur (ID_VER_PREC = null, ce sera le cas pour tous les nouveaux éléments renseignés), et pour ne pas ecrire n'importe quoi, il suffit de ne proposer en choix pour ID_VER_PREC que les valeurs de ID_VER existantes dans la table évidemment. Je crois que tu te compliques l'esprit, d'ailleurs je ne comprend même pas où tu veux en venir ni ce qui te pose problème. Peu importe d'ailleurs à quoi sert cette table, le problème posé était un problème de syntaxe et a été résolu, et en sois ce type de clé réflexive n'est pas un problème du tout, IDs null ou pas, egaux ou pas. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com